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