Update invoke-special desugaring to account for staticized methods

Bug: b/245096779
Change-Id: I1a2a4bf50e354e22eb78c987d836e73951cef38d
diff --git a/src/main/java/com/android/tools/r8/ir/code/Invoke.java b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
index 786a73e..80bb77b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Invoke.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
@@ -116,6 +116,10 @@
 
       MethodLookupResult lookupResult =
           graphLens.lookupMethod(invokedMethod, context.getReference(), Type.DIRECT);
+      if (lookupResult.getType().isStatic()) {
+        // This method has been staticized. The original invoke-type is DIRECT.
+        return Type.DIRECT;
+      }
       if (lookupResult.getType().isVirtual()) {
         // This method has been publicized. The original invoke-type is DIRECT.
         return Type.DIRECT;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index e19e0b6..44eed32 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -125,7 +125,7 @@
         localUtilityClass.getDefinition().setDirectMethods(localUtilityMethods);
         localUtilityClass.getDefinition().setStaticFields(localUtilityFields);
       } else {
-        clazz.getMethodCollection().replaceMethods(method -> fixupEncodedMethod(clazz, method));
+        clazz.getMethodCollection().replaceMethods(this::fixupEncodedMethod);
         fixupFields(clazz.staticFields(), clazz::setStaticField);
         fixupFields(clazz.instanceFields(), clazz::setInstanceField);
       }
@@ -561,7 +561,7 @@
             && !field.getDefinition().getOptimizationInfo().isDead());
   }
 
-  private DexEncodedMethod fixupEncodedMethod(DexProgramClass holder, DexEncodedMethod method) {
+  private DexEncodedMethod fixupEncodedMethod(DexEncodedMethod method) {
     DexProto oldProto = method.getProto();
     DexProto newProto = fixupProto(oldProto);
     if (newProto == method.getProto()) {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/PrivateEnumWithPrivateInvokeSpecialTest.java b/src/test/java/com/android/tools/r8/enumunboxing/PrivateEnumWithPrivateInvokeSpecialTest.java
index 5f8421c..3943993 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/PrivateEnumWithPrivateInvokeSpecialTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/PrivateEnumWithPrivateInvokeSpecialTest.java
@@ -4,11 +4,6 @@
 
 package com.android.tools.r8.enumunboxing;
 
-import static org.junit.Assert.assertThrows;
-
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.DiagnosticsMatcher;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -18,7 +13,7 @@
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
-/** This is a reproducation of b/245096779 */
+/** This is a reproduction of b/245096779 */
 @RunWith(Parameterized.class)
 public class PrivateEnumWithPrivateInvokeSpecialTest extends TestBase {
 
@@ -31,26 +26,12 @@
 
   @Test
   public void testR8() throws Exception {
-    R8FullTestBuilder r8FullTestBuilder =
-        testForR8(parameters.getBackend())
-            .addInnerClasses(getClass())
-            .setMinApi(parameters.getApiLevel())
-            .addKeepMainRule(Main.class);
-    if (parameters.isCfRuntime()) {
-      // TODO(b/245096779): Should not throw an error.
-      assertThrows(
-          CompilationFailedException.class,
-          () -> {
-            r8FullTestBuilder.compileWithExpectedDiagnostics(
-                diagnostics ->
-                    diagnostics.assertErrorThatMatches(
-                        DiagnosticsMatcher.diagnosticException(AssertionError.class)));
-          });
-    } else {
-      r8FullTestBuilder
-          .run(parameters.getRuntime(), Main.class)
-          .assertSuccessWithOutputLines("FOO");
-    }
+    testForR8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .setMinApi(parameters.getApiLevel())
+        .addKeepMainRule(Main.class)
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("FOO");
   }
 
   private static class Main {