Update MissingClassThrowingTest to use new missing class reporting

Bug: 128885552
Change-Id: I66ed872daa2173d43ce426ee8b2f76777b024899
diff --git a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
index ea52668..d3cd164 100644
--- a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
+++ b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
@@ -4,9 +4,11 @@
 
 package com.android.tools.r8.shaking;
 
+import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.synthesis.CommittedItems;
 import com.android.tools.r8.utils.InternalOptions;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import java.util.Collection;
 import java.util.Set;
@@ -91,6 +93,8 @@
     public MissingClasses reportMissingClasses(InternalOptions options) {
       Set<DexType> newMissingClassesWithoutDontWarn =
           options.getProguardConfiguration().getDontWarnPatterns().getNonMatches(newMissingClasses);
+      newMissingClassesWithoutDontWarn.removeAll(
+          getAllowedMissingClasses(options.dexItemFactory()));
       if (!newMissingClassesWithoutDontWarn.isEmpty()) {
         MissingClassesDiagnostic diagnostic =
             new MissingClassesDiagnostic.Builder()
@@ -106,6 +110,10 @@
       return build();
     }
 
+    private static Collection<DexType> getAllowedMissingClasses(DexItemFactory dexItemFactory) {
+      return ImmutableList.of(dexItemFactory.annotationThrows);
+    }
+
     /** Intentionally private, use {@link Builder#reportMissingClasses(InternalOptions)}. */
     private MissingClasses build() {
       // Extend the newMissingClasses set with all other missing classes.
diff --git a/src/test/java/com/android/tools/r8/graph/MissingClassThrowingTest.java b/src/test/java/com/android/tools/r8/graph/MissingClassThrowingTest.java
index 41de6d3..213db97 100644
--- a/src/test/java/com/android/tools/r8/graph/MissingClassThrowingTest.java
+++ b/src/test/java/com/android/tools/r8/graph/MissingClassThrowingTest.java
@@ -4,7 +4,8 @@
 
 package com.android.tools.r8.graph;
 
-import static org.hamcrest.core.StringContains.containsString;
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticType;
+import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoStaticClassMerging;
@@ -12,8 +13,10 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.shaking.MissingClassesDiagnostic;
+import com.android.tools.r8.utils.InternalOptions.TestingOptions;
+import com.android.tools.r8.utils.codeinspector.AssertUtils;
 import java.io.IOException;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -61,21 +64,32 @@
     this.parameters = parameters;
   }
 
-  @Ignore("b/128885552")
   @Test
   public void testSuperTypeOfExceptions() throws Exception {
-    testForR8(parameters.getBackend())
-        .addProgramClasses(Program.class)
-        .noMinification()
-        .noTreeShaking()
-        .enableInliningAnnotations()
-        .enableNoStaticClassMergingAnnotations()
-        .debug()
-        .addKeepRules("-keep class ** { *; }", "-keepattributes *")
-        .compile()
-        .addRunClasspathClasses(MissingException.class)
-        .run(parameters.getRuntime(), Program.class)
-        .assertFailureWithErrorThatMatches(
-            containsString("Missing class " + MissingException.class.getTypeName()));
+    AssertUtils.assertFailsCompilation(
+        () ->
+            testForR8(parameters.getBackend())
+                .addProgramClasses(Program.class)
+                .addKeepAllClassesRule()
+                .addKeepAllAttributes()
+                .addOptionsModification(TestingOptions::enableExperimentalMissingClassesReporting)
+                .noMinification()
+                .noTreeShaking()
+                .enableInliningAnnotations()
+                .enableNoStaticClassMergingAnnotations()
+                .debug()
+                .compileWithExpectedDiagnostics(
+                    diagnostics -> {
+                      diagnostics
+                          .assertOnlyErrors()
+                          .assertErrorsMatch(diagnosticType(MissingClassesDiagnostic.class));
+
+                      MissingClassesDiagnostic diagnostic =
+                          (MissingClassesDiagnostic) diagnostics.getErrors().get(0);
+                      assertEquals(1, diagnostic.getMissingClasses().size());
+                      assertEquals(
+                          MissingException.class.getTypeName(),
+                          diagnostic.getMissingClasses().iterator().next().getTypeName());
+                    }));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
index 167c17b..8cc815b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
@@ -54,8 +54,8 @@
             .addKeepMainRule(TestClass.class)
             .enableInliningAnnotations()
             .enableNoStaticClassMergingAnnotations()
-            .addKeepRules("-dontobfuscate")
             .addOptionsModification(options -> options.enableClassInlining = false)
+            .noMinification()
             .run(TestClass.class)
             .assertSuccessWithOutput(expected)
             .inspector();