Partial fix for AutoCloseable desugaring

R=clementbera@google.com

Bug: b/418143856
Change-Id: I6b1b9df118f8b02ffec20bac2c0960125414bea5
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 99ace92..88a2360 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
@@ -70,11 +70,14 @@
     AppInfoWithClassHierarchy appInfo = appView.appInfoForDesugaring();
     MethodResolutionResult resolutionResult =
         appInfo.resolveMethodLegacy(invokedMethod, cfInvoke.isInterface());
-    if (!resolutionResult.isSingleResolution()) {
-      return DesugarDescription.nothing();
+    DexMethod reference;
+    if (resolutionResult.isSingleResolution()) {
+      reference = resolutionResult.asSingleResolution().getResolvedMethod().getReference();
+    } else {
+      // If resolution fails, we use the invokedMethod as the result to desugar most cases if the
+      // library is not present to be backward compatible to what the BakportedMethodRewriter does.
+      reference = invokedMethod;
     }
-    assert resolutionResult.getSingleTarget() != null;
-    DexMethod reference = resolutionResult.getSingleTarget().getReference();
     if (data.shouldEmulateMethod(reference)) {
       return computeNewTarget(reference, cfInvoke.isInvokeSuper(context.getHolderType()), context);
     }
diff --git a/src/test/java21/com/android/tools/r8/jdk21/autocloseable/AutoCloseableRetargeterAndroidTest.java b/src/test/java21/com/android/tools/r8/jdk21/autocloseable/AutoCloseableRetargeterAndroidTest.java
index 7d8aac2..db85406 100644
--- a/src/test/java21/com/android/tools/r8/jdk21/autocloseable/AutoCloseableRetargeterAndroidTest.java
+++ b/src/test/java21/com/android/tools/r8/jdk21/autocloseable/AutoCloseableRetargeterAndroidTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.D8TestCompileResult;
 import com.android.tools.r8.TestBuilder;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.desugar.AutoCloseableAndroidLibraryFileData.ContentProviderClient;
@@ -24,6 +23,8 @@
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.google.common.collect.ImmutableList;
 import java.io.IOException;
+import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -32,19 +33,30 @@
 @RunWith(Parameterized.class)
 public class AutoCloseableRetargeterAndroidTest extends AbstractBackportTest {
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters()
-        .withDexRuntimes()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK21)
-        .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
-        .enableApiLevelsForCf()
-        .build();
+  enum CompileTimeLib {
+    NONE,
+    DEFAULT,
+    FULL
   }
 
-  public AutoCloseableRetargeterAndroidTest(TestParameters parameters) throws IOException {
-    super(parameters, getTestRunner(), ImmutableList.of(getTestRunner()));
+  private final CompileTimeLib compileTimeLib;
 
+  @Parameters(name = "{0}, lib: {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters()
+            .withDexRuntimes()
+            .withCfRuntimesStartingFromIncluding(CfVm.JDK21)
+            .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+            .enableApiLevelsForCf()
+            .build(),
+        CompileTimeLib.values());
+  }
+
+  public AutoCloseableRetargeterAndroidTest(
+      TestParameters parameters, CompileTimeLib compileTimeLib) throws IOException {
+    super(parameters, getTestRunner(), ImmutableList.of(getTestRunner()));
+    this.compileTimeLib = compileTimeLib;
     // The constructor is used by the test and release has been available since API 5 and is the
     // method close is rewritten to.
     ignoreInvokes("<init>");
@@ -58,9 +70,19 @@
     if (builder.isJvmTestBuilder()) {
       builder.addProgramClassFileData(getAutoCloseableAndroidClassData(parameters));
     } else {
-      builder
-          .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.BAKLAVA))
-          .addLibraryClassFileData(getAutoCloseableAndroidClassData(parameters));
+      if (compileTimeLib == CompileTimeLib.FULL) {
+        builder
+            .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.BAKLAVA))
+            .addLibraryClassFileData(getAutoCloseableAndroidClassData(parameters));
+      } else if (compileTimeLib == CompileTimeLib.NONE) {
+        if (builder.isD8TestBuilder()) {
+          builder.asD8TestBuilder().setUseDefaultRuntimeLibrary(false);
+        } else {
+          assert builder.isJvmTestBuilder();
+          // No need to run without default runtime library on the JVM.
+          Assume.assumeFalse(builder.isJvmTestBuilder());
+        }
+      }
     }
   }