Also consider interface types in the refined type computation

Change-Id: Ief2db6711ff07c2f591131c57210b8cbcaf29d4a
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
index f69fadf..dd4265c 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
@@ -22,6 +22,7 @@
 import java.util.Comparator;
 import java.util.Deque;
 import java.util.List;
+import java.util.Set;
 
 public class TypeAnalysis {
 
@@ -192,7 +193,14 @@
 
     DexType staticReceiverType = invoke.getInvokedMethod().holder;
     if (lattice.isClassType()) {
-      DexType refinedType = lattice.asClassTypeLatticeElement().getClassType();
+      ClassTypeLatticeElement classType = lattice.asClassTypeLatticeElement();
+      DexType refinedType = classType.getClassType();
+      if (refinedType == appView.dexItemFactory().objectType) {
+        Set<DexType> interfaces = classType.getInterfaces();
+        if (interfaces.size() == 1) {
+          refinedType = interfaces.iterator().next();
+        }
+      }
       if (appView.appInfo().isSubtype(refinedType, staticReceiverType)) {
         return refinedType;
       }