Map level of R8 version diagnostic to NONE in R8 partial
This also removes quiet from InternalOptions which is no longer used.
Fixes: b/389618550
Change-Id: Icfaad0abd5d9ac298860539a4f961678fb72e029
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 6f99720..bea277e 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -15,6 +15,7 @@
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.dex.ApplicationWriter;
import com.android.tools.r8.dex.Marker;
+import com.android.tools.r8.diagnostic.R8VersionDiagnostic;
import com.android.tools.r8.errors.CheckDiscardDiagnostic;
import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
@@ -115,7 +116,6 @@
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.ResourceShrinkerUtils;
import com.android.tools.r8.utils.SelfRetraceTest;
-import com.android.tools.r8.utils.StringDiagnostic;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
@@ -268,13 +268,8 @@
void runInternal(AndroidApp inputApp, ExecutorService executorService) throws IOException {
timing.begin("Run prelude");
assert options.programConsumer != null;
- if (options.quiet) {
- System.setOut(new PrintStream(ByteStreams.nullOutputStream()));
- }
- if (this.getClass().desiredAssertionStatus() && !options.quiet) {
- options.reporter.info(
- new StringDiagnostic(
- "Running R8 version " + Version.LABEL + " with assertions enabled."));
+ if (getClass().desiredAssertionStatus()) {
+ options.reporter.info(new R8VersionDiagnostic());
}
// Synthetic assertion to check that testing assertions works and can be enabled.
assert forTesting(options, () -> !options.testing.testEnableTestAssertions);
diff --git a/src/main/java/com/android/tools/r8/R8Partial.java b/src/main/java/com/android/tools/r8/R8Partial.java
index ded44df..3d52ede 100644
--- a/src/main/java/com/android/tools/r8/R8Partial.java
+++ b/src/main/java/com/android/tools/r8/R8Partial.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.DexIndexedConsumer.ForwardingConsumer;
import com.android.tools.r8.StringConsumer.FileConsumer;
import com.android.tools.r8.dex.ApplicationReader;
+import com.android.tools.r8.diagnostic.R8VersionDiagnostic;
import com.android.tools.r8.dump.CompilerDump;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
@@ -28,6 +29,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
import com.android.tools.r8.utils.ExceptionUtils;
+import com.android.tools.r8.utils.ForwardingDiagnosticsHandler;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
@@ -204,8 +206,20 @@
// Compile R8 input with R8 using the keep rules from trace references.
Path r8Output = resolveTmp("r8-output.zip");
R8PartialDataResourceConsumer r8DataResourcesConsumer = new R8PartialDataResourceConsumer();
+ DiagnosticsHandler r8DiagnosticsHandler =
+ new ForwardingDiagnosticsHandler(options.reporter) {
+
+ @Override
+ public DiagnosticsLevel modifyDiagnosticsLevel(
+ DiagnosticsLevel level, Diagnostic diagnostic) {
+ if (diagnostic instanceof R8VersionDiagnostic) {
+ return DiagnosticsLevel.NONE;
+ }
+ return super.modifyDiagnosticsLevel(level, diagnostic);
+ }
+ };
R8Command.Builder r8Builder =
- R8Command.builder(options.reporter)
+ R8Command.builder(r8DiagnosticsHandler)
.addProguardConfigurationFiles(traceReferencesResult.getOutputPath())
.enableLegacyFullModeForKeepRules(true)
.setProgramConsumer(
@@ -229,7 +243,6 @@
InternalOptions r8Options = r8Command.getInternalOptions();
options.partialCompilationConfiguration.r8OptionsConsumer.accept(r8Options);
r8Options.mapConsumer = options.mapConsumer;
- r8Options.quiet = true; // Don't write the R8 version.
if (options.androidResourceProvider != null) {
r8Options.androidResourceProvider = options.androidResourceProvider;
r8Options.androidResourceConsumer = options.androidResourceConsumer;
diff --git a/src/main/java/com/android/tools/r8/diagnostic/R8VersionDiagnostic.java b/src/main/java/com/android/tools/r8/diagnostic/R8VersionDiagnostic.java
new file mode 100644
index 0000000..1f7d3f3
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/diagnostic/R8VersionDiagnostic.java
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.diagnostic;
+
+import com.android.tools.r8.Diagnostic;
+import com.android.tools.r8.Version;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.position.Position;
+
+@KeepForApi
+public class R8VersionDiagnostic implements Diagnostic {
+
+ @Override
+ public Origin getOrigin() {
+ return Origin.unknown();
+ }
+
+ @Override
+ public Position getPosition() {
+ return Position.UNKNOWN;
+ }
+
+ @Override
+ public String getDiagnosticMessage() {
+ return "Running R8 version " + Version.LABEL + " with assertions enabled.";
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/utils/ForwardingDiagnosticsHandler.java b/src/main/java/com/android/tools/r8/utils/ForwardingDiagnosticsHandler.java
new file mode 100644
index 0000000..04658a5
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/ForwardingDiagnosticsHandler.java
@@ -0,0 +1,37 @@
+// Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.utils;
+
+import com.android.tools.r8.Diagnostic;
+import com.android.tools.r8.DiagnosticsHandler;
+import com.android.tools.r8.DiagnosticsLevel;
+
+public class ForwardingDiagnosticsHandler implements DiagnosticsHandler {
+
+ private final DiagnosticsHandler diagnosticsHandler;
+
+ public ForwardingDiagnosticsHandler(DiagnosticsHandler diagnosticsHandler) {
+ this.diagnosticsHandler = diagnosticsHandler;
+ }
+
+ @Override
+ public void error(Diagnostic error) {
+ diagnosticsHandler.error(error);
+ }
+
+ @Override
+ public void warning(Diagnostic warning) {
+ diagnosticsHandler.warning(warning);
+ }
+
+ @Override
+ public void info(Diagnostic info) {
+ diagnosticsHandler.info(info);
+ }
+
+ @Override
+ public DiagnosticsLevel modifyDiagnosticsLevel(DiagnosticsLevel level, Diagnostic diagnostic) {
+ return diagnosticsHandler.modifyDiagnosticsLevel(level, diagnostic);
+ }
+}