Refactor AutoCloseable desugaring

Bug: b/369520931
Change-Id: Ieab734c0bc34e8bab5c702887e56de83e7901921
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
index 43e9841..0728314 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
@@ -74,7 +74,6 @@
     for (SyntheticKind kind : naming.kinds()) {
       assert !kind.isGlobal()
           || !kind.isMayOverridesNonProgramType()
-          || kind.equals(naming.AUTOCLOSEABLE_TAG)
           || kind.equals(naming.RECORD_TAG)
           || kind.equals(naming.API_MODEL_STUB)
           || kind.equals(naming.METHOD_HANDLES_LOOKUP)
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeter.java
index e845692..703067b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeter.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.ir.desugar.desugaredlibrary.retargeter;
 
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.retargeter.AutoCloseableRetargeterHelper.createCloseMethod;
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.retargeter.AutoCloseableRetargeterHelper.lookupSuperIncludingInterfaces;
 
 import com.android.tools.r8.cf.code.CfInstruction;
 import com.android.tools.r8.cf.code.CfInvoke;
@@ -125,12 +126,10 @@
   private DesugarDescription computeNewTarget(
       DexMethod singleTarget, boolean superInvoke, ProgramMethod context) {
     if (superInvoke) {
-      DexClassAndMethod dexClassAndMethod =
-          appView
-              .appInfoForDesugaring()
-              .lookupSuperTarget(singleTarget, context, appView, appView.appInfoForDesugaring());
-      if (dexClassAndMethod != null && dexClassAndMethod.isLibraryMethod()) {
-        DexType holderType = dexClassAndMethod.getHolderType();
+      DexClassAndMethod superMethod =
+          lookupSuperIncludingInterfaces(appView, singleTarget, context.getContextClass());
+      if (superMethod != null && superMethod.isLibraryMethod()) {
+        DexType holderType = superMethod.getHolderType();
         if (data.superTargetsToRewrite().contains(holderType)) {
           return createWithTarget(
               singleTarget,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterHelper.java
index 4b40058..3597e57 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterHelper.java
@@ -7,8 +7,10 @@
 import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
 import com.android.tools.r8.contexts.CompilationContext.UniqueContext;
 import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexClassAndMethod;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.MethodAccessFlags;
@@ -171,7 +173,7 @@
         appView
             .getSyntheticItems()
             .createMethod(
-                kinds -> kinds.AUTOCLOSEABLE_DISPATCHER,
+                kinds -> kinds.AUTOCLOSEABLE_FORWARDER,
                 contextSupplier.get(),
                 appView,
                 methodBuilder ->
@@ -197,7 +199,7 @@
         appView
             .getSyntheticItems()
             .createMethod(
-                kinds -> kinds.AUTOCLOSEABLE_DISPATCHER,
+                kinds -> kinds.THROW_IAE,
                 contextSupplier.get(),
                 appView,
                 methodBuilder ->
@@ -215,4 +217,18 @@
     eventConsumer.acceptAutoCloseableDispatchMethod(method, context);
     return method;
   }
+
+  static DexClassAndMethod lookupSuperIncludingInterfaces(
+      AppView<?> appView, DexMethod target, DexProgramClass context) {
+    DexClassAndMethod superMethod =
+        appView
+            .appInfoForDesugaring()
+            .lookupSuperTarget(target, context, appView, appView.appInfoForDesugaring());
+    if (superMethod != null) {
+      return superMethod;
+    }
+    return appView
+        .appInfoForDesugaring()
+        .lookupMaximallySpecificMethod(context.getContextClass(), target);
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterPostProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterPostProcessor.java
index df4c60f..b45317b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterPostProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/AutoCloseableRetargeterPostProcessor.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.ir.desugar.desugaredlibrary.retargeter;
 
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.retargeter.AutoCloseableRetargeterHelper.lookupSuperIncludingInterfaces;
+
 import com.android.tools.r8.contexts.CompilationContext.MainThreadContext;
 import com.android.tools.r8.contexts.CompilationContext.ProcessorContext;
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
@@ -169,11 +171,7 @@
     // In desugared library, emulated interface methods can be overridden by retarget lib members.
     AppInfoWithClassHierarchy appInfoForDesugaring = appView.appInfoForDesugaring();
     assert clazz.lookupVirtualMethod(target) == null;
-    DexClassAndMethod superMethod =
-        appInfoForDesugaring.lookupSuperTarget(target, clazz, appView, appInfoForDesugaring);
-    if (superMethod == null) {
-      superMethod = appInfoForDesugaring.lookupMaximallySpecificMethod(clazz, target);
-    }
+    DexClassAndMethod superMethod = lookupSuperIncludingInterfaces(appView, target, clazz);
     if (superMethod == null
         || !data.superTargetsToRewrite().contains(superMethod.getHolderType())) {
       return null;
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
index 1cf3883..1ef8edc 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
@@ -26,7 +26,6 @@
   private KindGenerator generator = new KindGenerator();
 
   // Global synthetics.
-  public final SyntheticKind AUTOCLOSEABLE_TAG = generator.forGlobalClass();
   public final SyntheticKind RECORD_TAG = generator.forGlobalClass();
   public final SyntheticKind API_MODEL_STUB = generator.forGlobalClass();
   public final SyntheticKind METHOD_HANDLES_LOOKUP = generator.forGlobalClass();
@@ -69,6 +68,8 @@
   // Method synthetics.
   public final SyntheticKind AUTOCLOSEABLE_DISPATCHER =
       generator.forSingleMethodWithGlobalMerging("AutoCloseableDispatcher");
+  public final SyntheticKind AUTOCLOSEABLE_FORWARDER =
+      generator.forSingleMethodWithGlobalMerging("AutoCloseableForwarder");
   public final SyntheticKind TYPE_SWITCH_HELPER =
       generator.forSingleMethodWithGlobalMerging("TypeSwitch");
   public final SyntheticKind ENUM_UNBOXING_CHECK_NOT_ZERO_METHOD =