APIConverter: Use CfInvoke is isAlreadyDesugared

Change-Id: Ic4cf106838407417cea18f1603adb072f2a906dd
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 197ab34..64c4cd2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -88,11 +88,8 @@
 
   @Override
   public boolean needsDesugaring(CfInstruction instruction, ProgramMethod context) {
-    return instruction.isInvoke() && methodIsBackport(instruction.asInvoke().getMethod());
-  }
-
-  public boolean methodIsBackport(DexMethod method) {
-    return getMethodProviderOrNull(method) != null;
+    return instruction.isInvoke()
+        && getMethodProviderOrNull(instruction.asInvoke().getMethod()) != null;
   }
 
   public static List<DexMethod> generateListOfBackportedMethods(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java
index be8ac84..50aa6b2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java
@@ -26,7 +26,6 @@
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.desugar.BackportedMethodRewriter;
@@ -126,9 +125,7 @@
     if (isAPIConversionSyntheticType(context.getHolderType(), wrapperSynthesizor, appView)) {
       return false;
     }
-    CfInvoke invoke = instruction.asInvoke();
-    return shouldRewriteInvoke(
-        invoke.getMethod(), invoke.getInvokeType(context), invoke.isInterface(), context);
+    return shouldRewriteInvoke(instruction.asInvoke(), context);
   }
 
   static boolean isAPIConversionSyntheticType(
@@ -141,26 +138,20 @@
     return type.descriptor.toString().startsWith(DESCRIPTOR_VIVIFIED_PREFIX);
   }
 
-  private DexClassAndMethod getMethodForDesugaring(
-      DexMethod invokedMethod, boolean isInvokeSuper, boolean isInterface, ProgramMethod context) {
+  private DexClassAndMethod getMethodForDesugaring(CfInvoke invoke, ProgramMethod context) {
+    DexMethod invokedMethod = invoke.getMethod();
     // TODO(b/191656218): Use lookupInvokeSpecial instead when this is all to Cf.
-    return isInvokeSuper
+    return invoke.isInvokeSuper(context.getHolderType())
         ? appView.appInfoForDesugaring().lookupSuperTarget(invokedMethod, context)
         : appView
             .appInfoForDesugaring()
-            .resolveMethod(invokedMethod, isInterface)
+            .resolveMethod(invokedMethod, invoke.isInterface())
             .getResolutionPair();
   }
 
   // TODO(b/191656218): Consider caching the result.
-  private boolean shouldRewriteInvoke(
-      DexMethod unresolvedInvokedMethod,
-      Type invokeType,
-      boolean isInterface,
-      ProgramMethod context) {
-    DexClassAndMethod invokedMethod =
-        getMethodForDesugaring(
-            unresolvedInvokedMethod, invokeType == Type.SUPER, isInterface, context);
+  private boolean shouldRewriteInvoke(CfInvoke invoke, ProgramMethod context) {
+    DexClassAndMethod invokedMethod = getMethodForDesugaring(invoke, context);
     if (invokedMethod == null) {
       // Implies a resolution/look-up failure, we do not convert to keep the runtime error.
       return false;
@@ -176,7 +167,7 @@
     if (isEmulatedInterfaceOverride(invokedMethod)) {
       return false;
     }
-    if (isAlreadyDesugared(unresolvedInvokedMethod, invokeType, isInterface, context)) {
+    if (isAlreadyDesugared(invoke, context)) {
       return false;
     }
     return appView.rewritePrefix.hasRewrittenTypeInSignature(invokedMethod.getProto(), appView);
@@ -203,22 +194,16 @@
             .containsKey(interfaceResult.getHolderType());
   }
 
-  private boolean isAlreadyDesugared(
-      DexMethod unresolvedInvokedMethod,
-      Type invokeType,
-      boolean isInterface,
-      ProgramMethod context) {
+  private boolean isAlreadyDesugared(CfInvoke invoke, ProgramMethod context) {
     if (interfaceMethodRewriter != null
-        && interfaceMethodRewriter.needsRewriting(unresolvedInvokedMethod, invokeType, context)) {
+        && interfaceMethodRewriter.needsDesugaring(invoke, context)) {
       return true;
     }
-    if (retargeter != null
-        && retargeter.hasNewInvokeTarget(
-            unresolvedInvokedMethod, isInterface, invokeType == Type.SUPER, context)) {
+    if (retargeter != null && retargeter.needsDesugaring(invoke, context)) {
       return true;
     }
     if (backportedMethodRewriter != null
-        && backportedMethodRewriter.methodIsBackport(unresolvedInvokedMethod)) {
+        && backportedMethodRewriter.needsDesugaring(invoke, context)) {
       return true;
     }
     return false;
@@ -378,8 +363,7 @@
     if (invoke.getMethod().isInstanceInitializer(appView.dexItemFactory())) {
       return false;
     }
-    DexClassAndMethod methodForDesugaring =
-        getMethodForDesugaring(invoke.getMethod(), false, invoke.isInterface(), context);
+    DexClassAndMethod methodForDesugaring = getMethodForDesugaring(invoke, context);
     assert methodForDesugaring != null;
     return methodForDesugaring.getAccessFlags().isPublic();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java
index 8a59f14..9bc59fc 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java
@@ -154,12 +154,6 @@
     }
   }
 
-  public boolean hasNewInvokeTarget(
-      DexMethod invokedMethod, boolean isInterface, boolean isInvokeSuper, ProgramMethod context) {
-    return computeNewInvokeTarget(invokedMethod, isInterface, isInvokeSuper, context)
-        .hasNewInvokeTarget();
-  }
-
   private InvokeRetargetingResult computeNewInvokeTarget(
       CfInstruction instruction, ProgramMethod context) {
     if (retargetLibraryMember.isEmpty() || !instruction.isInvoke()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
index 63127c6..7dc9de3 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
@@ -243,7 +243,7 @@
                         + InterfaceDesugaringSyntheticHelper.COMPANION_CLASS_NAME_SUFFIX)));
   }
 
-  public boolean needsRewriting(DexMethod method, Type invokeType, ProgramMethod context) {
+  private boolean needsRewriting(DexMethod method, Type invokeType, ProgramMethod context) {
     return !isSyntheticMethodThatShouldNotBeDoubleProcessed(context)
         && invokeNeedsRewriting(method, invokeType);
   }