Update error message for desugared library version
Also include a link to the developer.android.com section
with the overall documentation on desugared library.
Bug: b/235325369
Change-Id: I697a0e48204aa33080f122b9651fab9de923565b
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java
new file mode 100644
index 0000000..7e2455a
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java
@@ -0,0 +1,46 @@
+// Copyright (c) 2022, 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.errors;
+
+import com.android.tools.r8.Diagnostic;
+import com.android.tools.r8.Keep;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.position.Position;
+
+@Keep
+public class UnsupportedDesugaredLibraryConfigurationVersionDiagnostic implements Diagnostic {
+
+ private static final String dagRoot = "https://developer.android.com";
+ private static final String versionMatrixUrl =
+ dagRoot + "/studio/build/library-desugaring-versions";
+ private static final String desugaredLibraryUrl = dagRoot + "/studio/build/library-desugaring";
+
+ private final Origin origin;
+
+ public UnsupportedDesugaredLibraryConfigurationVersionDiagnostic(Origin origin) {
+ this.origin = origin;
+ }
+
+ @Override
+ public Origin getOrigin() {
+ return origin;
+ }
+
+ @Override
+ public Position getPosition() {
+ return Position.UNKNOWN;
+ }
+
+ @Override
+ public String getDiagnosticMessage() {
+ return "Unsupported desugared library configuration version, please upgrade the D8/R8"
+ + " compiler."
+ + " See "
+ + versionMatrixUrl
+ + "."
+ + " To learn more about library desugaring read "
+ + desugaredLibraryUrl
+ + ".";
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java
index e17494f..1779022 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java
@@ -8,6 +8,7 @@
import static com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser.isHumanSpecification;
import com.android.tools.r8.StringResource;
+import com.android.tools.r8.errors.UnsupportedDesugaredLibraryConfigurationVersionDiagnostic;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.ir.desugar.desugaredlibrary.TopLevelFlagsBuilder;
import com.android.tools.r8.origin.Origin;
@@ -172,11 +173,7 @@
int formatVersion = formatVersionElement.getAsInt();
if (formatVersion > MAX_SUPPORTED_VERSION) {
throw reporter.fatalError(
- new StringDiagnostic(
- "Unsupported desugared library configuration version, please upgrade the D8/R8"
- + " compiler."
- + " See https://developer.android.com/studio/build/library-desugaring-versions.",
- origin));
+ new UnsupportedDesugaredLibraryConfigurationVersionDiagnostic(origin));
}
String version = required(jsonConfig, VERSION_KEY).getAsString();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java
index 8d06a2f..c08abd3 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java
@@ -5,6 +5,7 @@
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticOrigin;
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticType;
import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.RELEASED_1_1_5;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.containsString;
@@ -17,6 +18,7 @@
import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
+import com.android.tools.r8.errors.UnsupportedDesugaredLibraryConfigurationVersionDiagnostic;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
@@ -190,7 +192,14 @@
diagnostics ->
diagnostics.assertErrorsMatch(
allOf(
+ diagnosticType(UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.class),
diagnosticMessage(containsString("upgrade the D8/R8 compiler")),
+ diagnosticMessage(
+ containsString(
+ "https://developer.android.com/studio/build/library-desugaring-versions")),
+ diagnosticMessage(
+ containsString(
+ "https://developer.android.com/studio/build/library-desugaring")),
diagnosticOrigin(origin))));
}