Fix diagnostics modification in R8 partial

In R8 partial we create a wrapper of the Reporter using ForwardingDiagnosticsHandler. ForwardingDiagnosticsHandler#modifyDiagnosticsLevel is implemented by calling the modifyDiagnosticsLevel() on the given diagnostics handler, but Reporter did not implement modifyDiagnosticsLevel().

Bug: b/392828287
Change-Id: Icf6d3d05cc738a7573bb1ee4d7cf69dc4c90cc2b
diff --git a/src/main/java/com/android/tools/r8/utils/Reporter.java b/src/main/java/com/android/tools/r8/utils/Reporter.java
index d2aa075..947ec7d 100644
--- a/src/main/java/com/android/tools/r8/utils/Reporter.java
+++ b/src/main/java/com/android/tools/r8/utils/Reporter.java
@@ -64,7 +64,7 @@
     // To avoid having an entry for fatal error in the public  API enum use null to signal
     // fatal error internally.
     if (level != null) {
-      DiagnosticsLevel modifiedLevel = clientHandler.modifyDiagnosticsLevel(level, diagnostic);
+      DiagnosticsLevel modifiedLevel = modifyDiagnosticsLevel(level, diagnostic);
       level = modifiedLevel != null ? modifiedLevel : level;
       level = mapDiagnosticsLevel(level, diagnostic);
     } else {
@@ -89,6 +89,11 @@
   }
 
   @Override
+  public DiagnosticsLevel modifyDiagnosticsLevel(DiagnosticsLevel level, Diagnostic diagnostic) {
+    return clientHandler.modifyDiagnosticsLevel(level, diagnostic);
+  }
+
+  @Override
   public synchronized void info(Diagnostic info) {
     handleDiagnostic(INFO, info);
   }
diff --git a/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java b/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
index 8382ce5..09b5f3a 100644
--- a/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/CheckOptimizedOutAnnotationTest.java
@@ -4,7 +4,6 @@
 package com.android.tools.r8.keepanno;
 
 import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static com.android.tools.r8.utils.codeinspector.AssertUtils.assertThrowsIf;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.CoreMatchers.allOf;
@@ -18,6 +17,7 @@
 
 import com.android.tools.r8.DiagnosticsLevel;
 import com.android.tools.r8.DiagnosticsMatcher;
+import com.android.tools.r8.TestDiagnosticMessages;
 import com.android.tools.r8.errors.CheckDiscardDiagnostic;
 import com.android.tools.r8.keepanno.annotations.CheckOptimizedOut;
 import com.android.tools.r8.utils.StringUtils;
@@ -58,45 +58,30 @@
   @Test
   public void testCurrentR8() throws Throwable {
     assumeTrue(parameters.isR8() && parameters.isCurrentR8());
-    // TODO(b/392828287): Investigate R8 partial.
-    assertThrowsIf(
-        parameters.isR8Partial(),
-        RuntimeException.class,
-        () ->
-            testForKeepAnno(parameters)
-                .enableNativeInterpretation()
-                .addProgramClasses(getInputClasses())
-                .addKeepMainRule(TestClass.class)
-                .applyIfR8Current(
-                    b ->
-                        b.allowDiagnosticWarningMessages()
-                            .setDiagnosticsLevelModifier(
-                                (level, diagnostic) ->
-                                    level == DiagnosticsLevel.ERROR
-                                        ? DiagnosticsLevel.WARNING
-                                        : level)
-                            .compileWithExpectedDiagnostics(
-                                diagnostics -> {
-                                  diagnostics
-                                      .assertOnlyWarnings()
-                                      .assertWarningsMatch(
-                                          DiagnosticsMatcher.diagnosticType(
-                                              CheckDiscardDiagnostic.class));
-                                  CheckDiscardDiagnostic discard =
-                                      (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
-                                  // The discard error should report one error for A.toString.
-                                  assertEquals(
-                                      discard.getDiagnosticMessage(),
-                                      1,
-                                      discard.getNumberOfFailures());
-                                  assertThat(
-                                      discard,
-                                      diagnosticMessage(
-                                          containsString("A.toString() was not discarded")));
-                                })
-                            .run(parameters.getRuntime(), TestClass.class)
-                            .assertSuccessWithOutput(EXPECTED)
-                            .inspect(this::checkOutput)));
+    testForKeepAnno(parameters)
+        .enableNativeInterpretation()
+        .addProgramClasses(getInputClasses())
+        .addKeepMainRule(TestClass.class)
+        .applyIfR8Current(
+            b ->
+                b.allowDiagnosticWarningMessages()
+                    .setDiagnosticsLevelModifier(
+                        (level, diagnostic) ->
+                            level == DiagnosticsLevel.ERROR ? DiagnosticsLevel.WARNING : level)
+                    .compileWithExpectedDiagnostics(this::inspectDiagnostics)
+                    .run(parameters.getRuntime(), TestClass.class)
+                    .assertSuccessWithOutput(EXPECTED)
+                    .inspect(this::checkOutput));
+  }
+
+  private void inspectDiagnostics(TestDiagnosticMessages diagnostics) {
+    diagnostics
+        .assertOnlyWarnings()
+        .assertWarningsMatch(DiagnosticsMatcher.diagnosticType(CheckDiscardDiagnostic.class));
+    CheckDiscardDiagnostic discard = (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
+    // The discard error should report one error for A.toString.
+    assertEquals(discard.getDiagnosticMessage(), 1, discard.getNumberOfFailures());
+    assertThat(discard, diagnosticMessage(containsString("A.toString() was not discarded")));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java b/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
index c3ad87d..f330234 100644
--- a/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/CheckRemovedAnnotationTest.java
@@ -4,7 +4,6 @@
 package com.android.tools.r8.keepanno;
 
 import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static com.android.tools.r8.utils.codeinspector.AssertUtils.assertThrowsIf;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.CoreMatchers.allOf;
@@ -18,6 +17,7 @@
 
 import com.android.tools.r8.DiagnosticsLevel;
 import com.android.tools.r8.DiagnosticsMatcher;
+import com.android.tools.r8.TestDiagnosticMessages;
 import com.android.tools.r8.errors.CheckDiscardDiagnostic;
 import com.android.tools.r8.keepanno.annotations.CheckRemoved;
 import com.android.tools.r8.utils.StringUtils;
@@ -57,49 +57,35 @@
   @Test
   public void testCurrentR8() throws Exception {
     assumeTrue(parameters.isR8() && parameters.isCurrentR8());
-    // TODO(b/392828287): Investigate R8 partial.
-    assertThrowsIf(
-        parameters.isR8Partial(),
-        RuntimeException.class,
-        () ->
-            testForKeepAnno(parameters)
-                .enableNativeInterpretation()
-                .addProgramClasses(getInputClasses())
-                .addKeepMainRule(TestClass.class)
-                .applyIfR8Current(
-                    b ->
-                        b.allowDiagnosticWarningMessages()
-                            .setDiagnosticsLevelModifier(
-                                (level, diagnostic) ->
-                                    level == DiagnosticsLevel.ERROR
-                                        ? DiagnosticsLevel.WARNING
-                                        : level)
-                            .compileWithExpectedDiagnostics(
-                                diagnostics -> {
-                                  diagnostics
-                                      .assertOnlyWarnings()
-                                      .assertWarningsMatch(
-                                          DiagnosticsMatcher.diagnosticType(
-                                              CheckDiscardDiagnostic.class));
-                                  CheckDiscardDiagnostic discard =
-                                      (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
-                                  // The discard error should report for both the method A.foo and
-                                  // the class
-                                  // B.
-                                  assertEquals(
-                                      discard.getDiagnosticMessage(),
-                                      2,
-                                      discard.getNumberOfFailures());
-                                  assertThat(
-                                      discard,
-                                      diagnosticMessage(
-                                          allOf(
-                                              containsString("A.foo() was not discarded"),
-                                              containsString("B was not discarded"))));
-                                })
-                            .run(parameters.getRuntime(), TestClass.class)
-                            .assertSuccessWithOutput(EXPECTED)
-                            .inspect(this::checkOutput)));
+    testForKeepAnno(parameters)
+        .enableNativeInterpretation()
+        .addProgramClasses(getInputClasses())
+        .addKeepMainRule(TestClass.class)
+        .applyIfR8Current(
+            b ->
+                b.allowDiagnosticWarningMessages()
+                    .setDiagnosticsLevelModifier(
+                        (level, diagnostic) ->
+                            level == DiagnosticsLevel.ERROR ? DiagnosticsLevel.WARNING : level)
+                    .compileWithExpectedDiagnostics(this::inspectDiagnostics)
+                    .run(parameters.getRuntime(), TestClass.class)
+                    .assertSuccessWithOutput(EXPECTED)
+                    .inspect(this::checkOutput));
+  }
+
+  private void inspectDiagnostics(TestDiagnosticMessages diagnostics) {
+    diagnostics
+        .assertOnlyWarnings()
+        .assertWarningsMatch(DiagnosticsMatcher.diagnosticType(CheckDiscardDiagnostic.class));
+    CheckDiscardDiagnostic discard = (CheckDiscardDiagnostic) diagnostics.getWarnings().get(0);
+    // The discard error should report for both the method A.foo and the class B.
+    assertEquals(discard.getDiagnosticMessage(), 2, discard.getNumberOfFailures());
+    assertThat(
+        discard,
+        diagnosticMessage(
+            allOf(
+                containsString("A.foo() was not discarded"),
+                containsString("B was not discarded"))));
   }
 
   @Test