Process outer classpath classes in GenericSignatureContextBuilder

Fixes: b/415703756
Change-Id: I22d8a30e47bba57d9a01522ce66856c93f90b9c9
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java
index 84bd5a1..0b901df 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java
@@ -142,7 +142,8 @@
     }
     Map<DexReference, TypeParameterSubstitutions> formalsInfo = new IdentityHashMap<>();
     Map<DexReference, DexReference> enclosingInfo = new IdentityHashMap<>();
-    programClasses.forEach(
+    WorkList<DexClass> worklist = WorkList.newIdentityWorkList(programClasses);
+    worklist.process(
         clazz -> {
           // Build up a map of type variables to bounds for every reference such that we can
           // lookup the information even after we prune the generic signatures.
@@ -150,7 +151,7 @@
             formalsInfo.put(
                 clazz.getReference(),
                 TypeParameterSubstitutions.create(clazz.classSignature.getFormalTypeParameters()));
-            clazz.forEachProgramMethod(
+            clazz.forEachClassMethod(
                 method -> {
                   MethodTypeSignature methodSignature =
                       method.getDefinition().getGenericSignature();
@@ -165,8 +166,15 @@
           // Build up an enclosing class context such that the enclosing class can be looked up
           // even after inner class and enclosing method attribute attributes are removed.
           InnerClassAttribute innerClassAttribute = clazz.getInnerClassAttributeForThisClass();
-          if (innerClassAttribute != null) {
+          if (innerClassAttribute != null && innerClassAttribute.getOuter() != null) {
             enclosingInfo.put(clazz.getType(), innerClassAttribute.getOuter());
+            DexClass outerClass =
+                appView
+                    .appInfo()
+                    .definitionForWithoutExistenceAssert(innerClassAttribute.getOuter());
+            if (outerClass != null) {
+              worklist.addIfNotSeen(outerClass);
+            }
           }
           EnclosingMethodAttribute enclosingMethodAttribute = clazz.getEnclosingMethodAttribute();
           if (enclosingMethodAttribute != null) {
diff --git a/src/test/java/com/android/tools/r8/partial/PartialCompilationSignatureContextTest.java b/src/test/java/com/android/tools/r8/partial/PartialCompilationSignatureContextTest.java
index f0af1b9..ffa0f55 100644
--- a/src/test/java/com/android/tools/r8/partial/PartialCompilationSignatureContextTest.java
+++ b/src/test/java/com/android/tools/r8/partial/PartialCompilationSignatureContextTest.java
@@ -3,10 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.partial;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
-
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDiagnosticMessages;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
@@ -38,13 +36,8 @@
         .addLibraryFiles(ToolHelper.getMostRecentAndroidJar())
         .addKeepAllClassesRule()
         .addKeepAttributeSignature()
-        .allowDiagnosticInfoMessages()
         .setMinApi(apiLevelWithNativeMultiDexSupport())
-        // TODO(b/415703756): Should not report invalid signature.
-        .compileWithExpectedDiagnostics(
-            diagnostics ->
-                diagnostics.assertInfosMatch(
-                    diagnosticMessage(containsString("Invalid signature"))));
+        .compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages);
   }
 
   @Test
@@ -55,13 +48,8 @@
         .addLibraryFiles(ToolHelper.getMostRecentAndroidJar())
         .addKeepAllClassesRule()
         .addKeepAttributeSignature()
-        .allowDiagnosticInfoMessages()
         .setMinApi(apiLevelWithNativeMultiDexSupport())
-        // TODO(b/415703756): Should not report invalid signature.
-        .compileWithExpectedDiagnostics(
-            diagnostics ->
-                diagnostics.assertInfosMatch(
-                    diagnosticMessage(containsString("Invalid signature"))));
+        .compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages);
   }
 
   static class ExcludedClass<T> {