[ApiModel] Return min api only if holder is supported by type rewriting

Bug: b/237701688
Change-Id: I540aa92197aae9795614a23d4a9f4d6a0c2f9811
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
index b1b581b..50855bb 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
@@ -76,7 +76,10 @@
     if (reference.getContextType() == factory.objectType) {
       return appView.computedMinApiLevel();
     }
-    if (appView.options().machineDesugaredLibrarySpecification.isSupported(reference)) {
+    if (appView
+        .options()
+        .machineDesugaredLibrarySpecification
+        .isContextTypeMaintainedOrRewritten(reference)) {
       // If we end up desugaring the reference, the library classes is bridged by j$ which is part
       // of the program.
       return appView.computedMinApiLevel();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
index dad5fd5..1b83bf8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineDesugaredLibrarySpecification.java
@@ -197,11 +197,7 @@
   }
 
   public boolean isSupported(DexReference reference) {
-    // Support through type rewriting.
-    if (getRewriteType().containsKey(reference.getContextType())) {
-      return true;
-    }
-    if (getMaintainType().contains(reference.getContextType())) {
+    if (isContextTypeMaintainedOrRewritten(reference)) {
       return true;
     }
     if (!reference.isDexMethod()) {
@@ -223,6 +219,12 @@
     return false;
   }
 
+  public boolean isContextTypeMaintainedOrRewritten(DexReference reference) {
+    // Support through type rewriting.
+    return getRewriteType().containsKey(reference.getContextType())
+        || getMaintainType().contains(reference.getContextType());
+  }
+
   @Override
   public MachineDesugaredLibrarySpecification toMachineSpecification(
       DexApplication app, Timing timing) throws IOException {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java
index c535df2..102902a 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java
@@ -75,8 +75,7 @@
               }
             })
         .run(parameters.getRuntime(), Executor.class)
-        .assertFailureWithErrorThatThrowsIf(!isDefinedOnBootClasspath(), NoSuchMethodError.class)
-        .assertSuccessWithOutputIf(isDefinedOnBootClasspath(), EXPECTED_RESULT);
+        .assertSuccessWithOutput(EXPECTED_RESULT);
   }
 
   static class Executor {