Remove lookupVirtualTarget

Bug: 147578480
Bug: 140204899
Change-Id: If91e2e9bbdb6d5dc6bee2986c6d9edd298fd1b3a
diff --git a/src/main/java/com/android/tools/r8/PrintUses.java b/src/main/java/com/android/tools/r8/PrintUses.java
index a384ebc..ab5707a 100644
--- a/src/main/java/com/android/tools/r8/PrintUses.java
+++ b/src/main/java/com/android/tools/r8/PrintUses.java
@@ -91,7 +91,9 @@
 
     @Override
     public boolean registerInvokeVirtual(DexMethod method) {
-      DexEncodedMethod target = appInfo.lookupVirtualTarget(method.holder, method);
+      ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
+      DexEncodedMethod target =
+          resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
       if (target != null && target.method != method) {
         addType(method.holder);
         addMethod(target.method);
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfo.java b/src/main/java/com/android/tools/r8/graph/AppInfo.java
index 666bc88..4e3df21 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfo.java
@@ -257,21 +257,6 @@
   }
 
   /**
-   * Lookup virtual method starting in type and following the super chain.
-   *
-   * <p>This method will resolve the method on the holder of {@code method} and only return a
-   * non-null value if the result of resolution was a virtual target.
-   *
-   * <p>TODO(b/140204899): Delete this method as it does resolution and not a "lookup of targets".
-   */
-  public DexEncodedMethod lookupVirtualTarget(DexType type, DexMethod method) {
-    assert checkIfObsolete();
-    assert type.isClassType() || type.isArrayType();
-    ResolutionResult resolutionResult = resolveMethod(type, method);
-    return resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
-  }
-
-  /**
    * Implements resolution of a method descriptor against a target type.
    *
    * <p>This method will query the definition of the holder to decide on which resolution to use. If
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index dc425e4..b65b164 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -29,6 +29,7 @@
 import com.android.tools.r8.graph.GraphLense.GraphLenseLookupResult;
 import com.android.tools.r8.graph.GraphLense.RewrittenPrototypeDescription;
 import com.android.tools.r8.graph.GraphLense.RewrittenPrototypeDescription.RemovedArgumentsInfo;
+import com.android.tools.r8.graph.ResolutionResult;
 import com.android.tools.r8.graph.UseRegistry.MethodHandleUse;
 import com.android.tools.r8.graph.classmerging.VerticallyMergedClasses;
 import com.android.tools.r8.ir.analysis.type.DestructivePhiTypeUpdater;
@@ -626,7 +627,9 @@
       // Virtual invoke is already as specific as it can get.
       return target;
     }
-    DexEncodedMethod newTarget = appView.appInfo().lookupVirtualTarget(receiverType, target);
+    ResolutionResult resolutionResult = appView.appInfo().resolveMethod(receiverType, target);
+    DexEncodedMethod newTarget =
+        resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
     if (newTarget == null || newTarget.method == target) {
       // Most likely due to a missing class, or invoke is already as specific as it gets.
       return target;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
index c2fe04f..5af6c6f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.ResolutionResult;
 import com.android.tools.r8.graph.UseRegistry;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.Instruction;
@@ -599,10 +600,12 @@
             return candidateInfo.invalidate();
           }
           AppInfoWithLiveness appInfo = appView.appInfo();
+          ResolutionResult resolutionResult =
+              appInfo.resolveMethod(methodReferenced.holder, methodReferenced);
           DexEncodedMethod methodInvoked =
               user.isInvokeDirect()
-                  ? appInfo.lookupDirectTarget(methodReferenced, candidateInfo.candidate)
-                  : appInfo.lookupVirtualTarget(methodReferenced.holder, methodReferenced);
+                  ? resolutionResult.lookupInvokeDirectTarget(candidateInfo.candidate, appInfo)
+                  : resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
           if (ListUtils.lastIndexMatching(invoke.inValues(), isAliasedValue) == 0
               && methodInvoked != null
               && methodInvoked.method.holder == candidateInfo.candidate.type) {
diff --git a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
index 03c8d70..07db6bd 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.graph;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
@@ -81,7 +82,11 @@
     CodeInspector inspector = new CodeInspector(appInfo.app());
     DexEncodedMethod method = getMethod(inspector, DEFAULT_CLASS_NAME, "int", "x",
         ImmutableList.of());
-    assertNull(appInfo.lookupVirtualTarget(method.method.holder, method.method));
+    assertFalse(
+        appInfo
+            .resolveMethod(method.method.holder, method.method)
+            .getSingleTarget()
+            .isVirtualMethod());
     assertNull(appInfo.lookupDirectTarget(method.method, method.method.holder));
     assertNotNull(appInfo.lookupStaticTarget(method.method, method.method.holder));
 
@@ -162,9 +167,13 @@
     DexMethod methodXOnTest =
         appInfo.dexItemFactory().createMethod(classTest, methodXProto, methodXName);
 
-    assertNull(appInfo.lookupVirtualTarget(classTestSuper, methodXOnTestSuper));
-    assertNull(appInfo.lookupVirtualTarget(classTest, methodXOnTestSuper));
-    assertNull(appInfo.lookupVirtualTarget(classTest, methodXOnTest));
+    assertFalse(
+        appInfo
+            .resolveMethod(classTestSuper, methodXOnTestSuper)
+            .getSingleTarget()
+            .isVirtualMethod());
+    assertNull(appInfo.resolveMethod(classTest, methodXOnTestSuper).getSingleTarget());
+    assertNull(appInfo.resolveMethod(classTest, methodXOnTest).getSingleTarget());
 
     assertNull(appInfo.lookupDirectTarget(methodXOnTestSuper, methodXOnTestSuper.holder));
     assertNull(appInfo.lookupDirectTarget(methodXOnTest, methodXOnTest.holder));
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
index c2a5c6a..cffd09c 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
@@ -56,7 +56,7 @@
   private void testVirtualLookup(DexProgramClass clazz, DexEncodedMethod method) {
     // Check lookup will produce the same result.
     DexMethod id = method.method;
-    assertEquals(appInfo.lookupVirtualTarget(id.holder, method.method), method);
+    assertEquals(appInfo.resolveMethod(id.holder, method.method).getSingleTarget(), method);
 
     // Check lookup targets with include method.
     Set<DexEncodedMethod> targets =
diff --git a/src/test/java/com/android/tools/r8/resolution/ArrayTargetLookupTest.java b/src/test/java/com/android/tools/r8/resolution/ArrayTargetLookupTest.java
index d8944f1..6162b15 100644
--- a/src/test/java/com/android/tools/r8/resolution/ArrayTargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/ArrayTargetLookupTest.java
@@ -49,17 +49,23 @@
           factory.createArrayType(2, fooType)
         };
     DexEncodedMethod langObjectNotifyMethod =
-        appInfo.lookupVirtualTarget(
-            fooType,
-            factory.createMethod(fooType, factory.createProto(factory.voidType), "notify"));
+        appInfo
+            .resolveMethod(
+                fooType,
+                factory.createMethod(fooType, factory.createProto(factory.voidType), "notify"))
+            .getSingleTarget();
     for (DexType arrType : arrayTypes) {
       assertNull(
-          appInfo.lookupVirtualTarget(
-              arrType, factory.createMethod(arrType, factory.createProto(arrType), "clone")));
+          appInfo
+              .resolveMethod(
+                  arrType, factory.createMethod(arrType, factory.createProto(arrType), "clone"))
+              .getSingleTarget());
       DexEncodedMethod target =
-          appInfo.lookupVirtualTarget(
-              arrType,
-              factory.createMethod(arrType, factory.createProto(factory.voidType), "notify"));
+          appInfo
+              .resolveMethod(
+                  arrType,
+                  factory.createMethod(arrType, factory.createProto(factory.voidType), "notify"))
+              .getSingleTarget();
       assertEquals(langObjectNotifyMethod, target);
     }
   }