Add a 'none' level for --map-diagnostics.
This allows the command line to silence diagnostics.
Fixes: b/258143347
Change-Id: I00d94ce2c401ce783d4400c4eff64362d6a6edc3
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommandParser.java b/src/main/java/com/android/tools/r8/BaseCompilerCommandParser.java
index 65351f8..1ba0b22 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommandParser.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommandParser.java
@@ -215,11 +215,14 @@
if (arg.equals("info")) {
return DiagnosticsLevel.INFO;
}
+ if (arg.equals("none")) {
+ return DiagnosticsLevel.NONE;
+ }
errorHandler.accept(
new StringDiagnostic(
"Invalid diagnostics level '"
+ arg
- + "'. Valid levels are 'error', 'warning' and 'info'.",
+ + "'. Valid levels are 'error', 'warning', 'info' and 'none'.",
origin));
return null;
diff --git a/src/main/java/com/android/tools/r8/DiagnosticsLevel.java b/src/main/java/com/android/tools/r8/DiagnosticsLevel.java
index 9f9d26a..a022b0d 100644
--- a/src/main/java/com/android/tools/r8/DiagnosticsLevel.java
+++ b/src/main/java/com/android/tools/r8/DiagnosticsLevel.java
@@ -8,5 +8,6 @@
public enum DiagnosticsLevel {
ERROR,
WARNING,
- INFO
+ INFO,
+ NONE
}
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 65103ac..d2aa075 100644
--- a/src/main/java/com/android/tools/r8/utils/Reporter.java
+++ b/src/main/java/com/android/tools/r8/utils/Reporter.java
@@ -81,6 +81,8 @@
abort = new AbortException(diagnostic);
clientHandler.error(diagnostic);
break;
+ case NONE:
+ break;
default:
throw new Unreachable();
}
diff --git a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
index 568c66f..faa47f1 100644
--- a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
+++ b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
@@ -101,7 +101,10 @@
.assertErrorsMatch(errorMatchers())
.assertWarningsMatch(warningMatchers())
.assertInfosMatch(infoMatchers()));
- assertTrue(mappedLevel == DiagnosticsLevel.INFO || mappedLevel == DiagnosticsLevel.WARNING);
+ assertTrue(
+ mappedLevel == DiagnosticsLevel.INFO
+ || mappedLevel == DiagnosticsLevel.WARNING
+ || mappedLevel == DiagnosticsLevel.NONE);
} catch (CompilationFailedException e) {
assertEquals(mappedLevel, DiagnosticsLevel.ERROR);
}
diff --git a/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java b/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
index 9f20b7d..239a0f6 100644
--- a/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
+++ b/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DiagnosticsLevel;
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.diagnostic.internal.MissingDefinitionsDiagnosticImpl;
@@ -84,6 +85,24 @@
}
}
+ @Test
+ public void testWarningToNone() throws CompilationFailedException {
+ testForR8(Backend.DEX)
+ .addProgramClasses(TestClass.class)
+ .addKeepMainRule(TestClass.class)
+ .addKeepRules("-ignorewarnings")
+ .setDiagnosticsLevelModifier(
+ (level, diagnostic) -> {
+ if (level == DiagnosticsLevel.WARNING
+ && diagnostic instanceof MissingDefinitionsDiagnosticImpl
+ && diagnostic.getDiagnosticMessage().startsWith(MISSING_CLASS_MESSAGE_PREFIX)) {
+ return DiagnosticsLevel.NONE;
+ }
+ return level;
+ })
+ .compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages);
+ }
+
static class TestClass implements I {
public static void main(String[] args) {