Fix library overrides in the enqueuer with multi results

- When having both a program and a librayr class,
  then overrides are library overrides

  Bug: b/242948951
Change-Id: Ia5cf24c155d360ba96aabccaea2093008aa311fe
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 1008d80..bb56ca2 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -2820,19 +2820,20 @@
     WorkList<DexType> worklist = WorkList.newIdentityWorkList(type);
     worklist.addIfNotSeen(interfaces);
     while (worklist.hasNext()) {
-      DexClass clazz = appInfo().definitionFor(worklist.next());
-      if (clazz == null) {
-        continue;
-      }
-      if (clazz.isProgramClass()) {
-        markProgramMethodOverridesAsLive(instantiation, clazz.asProgramClass());
-      } else {
-        markLibraryAndClasspathMethodOverridesAsLive(instantiation, clazz);
-      }
-      if (clazz.superType != null) {
-        worklist.addIfNotSeen(clazz.superType);
-      }
-      worklist.addIfNotSeen(clazz.interfaces);
+      ClassResolutionResult classResolutionResult =
+          appInfo().contextIndependentDefinitionForWithResolutionResult(worklist.next());
+      classResolutionResult.forEachClassResolutionResult(
+          clazz -> {
+            if (clazz.isProgramClass()) {
+              markProgramMethodOverridesAsLive(instantiation, clazz.asProgramClass());
+            } else {
+              markLibraryAndClasspathMethodOverridesAsLive(instantiation, clazz);
+            }
+            if (clazz.superType != null) {
+              worklist.addIfNotSeen(clazz.superType);
+            }
+            worklist.addIfNotSeen(clazz.interfaces);
+          });
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/StackWalkerTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/StackWalkerTest.java
index 0b8c8d4..8a0cd60 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/StackWalkerTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/StackWalkerTest.java
@@ -40,6 +40,8 @@
       Paths.get(ToolHelper.EXAMPLES_JAVA9_BUILD_DIR + "stackwalker.jar");
   private static final String EXPECTED_OUTPUT =
       StringUtils.lines("[main]", "[frame2, frame1, main]");
+  private static final String EXPECTED_OUTPUT_R8_MINIMAL = StringUtils.lines("[main]", "[main]");
+  private static final String EXPECTED_OUTPUT_R8 = StringUtils.lines("[main]", "[a, main]");
   private static final String MAIN_CLASS = "stackwalker.Example";
 
   @Parameters(name = "{0}, spec: {1}, {2}")
@@ -74,19 +76,25 @@
 
   @Test
   public void testDesugaredLibrary() throws Throwable {
-    Assume.assumeTrue(
-        "TODO(b/242948951): Issue with maintain type on function",
-        !compilationSpecification.isL8Shrink());
     testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
         .addProgramFiles(INPUT_JAR)
         .addKeepMainRule(MAIN_CLASS)
+        // TODO(b/242948951): Should not need dontobfuscate.
+        .applyIf(compilationSpecification.isL8Shrink(), b -> b.addL8KeepRules("-dontobfuscate"))
         .overrideLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.MASTER))
         // Missing class java.lang.StackWalker$StackFrame.
         .addOptionsModification(opt -> opt.ignoreMissingClasses = true)
         .applyIf(
-            libraryDesugaringSpecification != JDK11_MINIMAL,
+            libraryDesugaringSpecification != JDK11_MINIMAL
+                || parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.MASTER),
             DesugaredLibraryTestBuilder::allowDiagnosticWarningMessages)
         .run(parameters.getRuntime(), MAIN_CLASS)
-        .assertSuccessWithOutput(EXPECTED_OUTPUT);
+        .assertSuccessWithOutput(
+            compilationSpecification.isProgramShrink()
+                ? ((libraryDesugaringSpecification == JDK11_MINIMAL
+                        || parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.MASTER))
+                    ? EXPECTED_OUTPUT_R8_MINIMAL
+                    : EXPECTED_OUTPUT_R8)
+                : EXPECTED_OUTPUT);
   }
 }