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))));
   }