Allow to test JDK11 desugared library from IntelliJ

Bug: 182463100
Change-Id: Ib2dc658f69600c771d059bcb3c70c618431ff6b9
diff --git a/.gitignore b/.gitignore
index 8534e4c..28f7415 100644
--- a/.gitignore
+++ b/.gitignore
@@ -111,6 +111,8 @@
 third_party/nest/*
 third_party/openjdk/desugar_jdk_libs
 third_party/openjdk/desugar_jdk_libs.tar.gz
+third_party/openjdk/desugar_jdk_libs_11
+third_party/openjdk/desugar_jdk_libs_11.tar.gz
 third_party/openjdk/jdk-15/linux
 third_party/openjdk/jdk-15/linux.tar.gz
 third_party/openjdk/jdk-15/osx
diff --git a/build.gradle b/build.gradle
index 3e3b396..2e908a5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -329,6 +329,7 @@
                 "kotlinx-coroutines-1.3.6",
                 "openjdk/openjdk-rt-1.8",
                 "openjdk/desugar_jdk_libs",
+                "openjdk/desugar_jdk_libs_11",
                 "openjdk/jdk-11-test",
                 "proguard/proguard5.2.1",
                 "proguard/proguard6.0.1",
@@ -999,6 +1000,16 @@
     ])
 }
 
+task buildDesugaredLibrary(type: Exec) {
+    def outputDir = "build/libs"
+    def script = "tools/create_jctf_tests.py"
+    inputs.file script
+    outputs.dir outputDir
+    dependsOn downloadDeps
+    commandLine "python", script
+    workingDir = projectDir
+}
+
 task generateR8LibKeepRules(type: Exec) {
     doFirst {
         // TODO(b/154785341): We should remove this.
diff --git a/src/test/java/com/android/tools/r8/BackportedMethodListTest.java b/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
index bb344d7..4ffaaa7 100644
--- a/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
+++ b/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
@@ -88,7 +88,7 @@
   private void addLibraryDesugaring(BackportedMethodListCommand.Builder builder) {
     builder
         .addDesugaredLibraryConfiguration(
-            StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+            StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
         .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P.getLevel()));
   }
 
@@ -143,7 +143,7 @@
       BackportedMethodList.run(
           BackportedMethodListCommand.builder()
               .addDesugaredLibraryConfiguration(
-                  StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                  StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
               .setConsumer(new ListStringConsumer())
               .build());
       fail("Expected failure");
diff --git a/src/test/java/com/android/tools/r8/L8CommandTest.java b/src/test/java/com/android/tools/r8/L8CommandTest.java
index bb32740..b7e2154 100644
--- a/src/test/java/com/android/tools/r8/L8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/L8CommandTest.java
@@ -58,7 +58,7 @@
         L8Command.builder()
             .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .build());
   }
 
@@ -79,7 +79,7 @@
             .addProgramFiles(ToolHelper.getDesugarJDKLibs())
             .setMinApiLevel(20)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setOutput(output, OutputMode.DexIndexed)
             .build());
     assertMarkersMatch(
@@ -96,7 +96,7 @@
             .addProgramFiles(ToolHelper.getDesugarJDKLibs())
             .setMinApiLevel(20)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setOutput(output, OutputMode.ClassFile)
             .build());
     assertMarkersMatch(ExtractMarker.extractMarkerFromDexFile(output), markerTool(Tool.L8));
@@ -113,7 +113,7 @@
             "--min-api",
             "20",
             "--desugared-lib",
-            ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
+            ToolHelper.getDesugarLibJsonForTesting().toString(),
             "--output",
             output.toString());
     L8.run(l8Command);
@@ -134,7 +134,7 @@
             "--min-api",
             "20",
             "--desugared-lib",
-            ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
+            ToolHelper.getDesugarLibJsonForTesting().toString(),
             "--output",
             output.toString(),
             "--classfile");
@@ -150,7 +150,7 @@
     parse(
         diagnostics,
         "--desugared-lib",
-        ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
+        ToolHelper.getDesugarLibJsonForTesting().toString(),
         "--pg-conf",
         pgconf.toString());
   }
@@ -164,7 +164,7 @@
       parse(
           diagnostics,
           "--desugared-lib",
-          ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
+          ToolHelper.getDesugarLibJsonForTesting().toString(),
           "--pg-conf",
           pgconf.toString(),
           "--classfile");
@@ -182,7 +182,7 @@
       parse(
           diagnostics,
           "--desugared-lib",
-          ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
+          ToolHelper.getDesugarLibJsonForTesting().toString(),
           "--pg-conf");
       fail("Expected parse error");
     } catch (CompilationFailedException e) {
@@ -236,7 +236,7 @@
         prepareBuilder(diagnostics)
             .setProgramConsumer(programConsumer)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .addProguardConfiguration(keepRules, Origin.unknown());
     assertTrue(builder.isShrinking());
     assertNotNull(builder.build().getR8Command());
@@ -270,7 +270,7 @@
         prepareBuilder(diagnostics)
             .setProgramConsumer(programConsumer)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .addProguardConfigurationFiles(keepRuleFile);
     assertTrue(builder1.isShrinking());
     assertNotNull(builder1.build().getR8Command());
@@ -281,7 +281,7 @@
         prepareBuilder(new TestDiagnosticMessagesImpl())
             .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .addProguardConfigurationFiles(keepRuleFiles);
     assertTrue(builder2.isShrinking());
     assertNotNull(builder2.build().getR8Command());
@@ -308,7 +308,7 @@
   @Test
   public void desugaredLibrary() throws CompilationFailedException {
     L8Command l8Command =
-        parse("--desugared-lib", ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString());
+        parse("--desugared-lib", ToolHelper.getDesugarLibJsonForTesting().toString());
     assertFalse(
         l8Command.getInternalOptions().desugaredLibraryConfiguration.getRewritePrefix().isEmpty());
   }
@@ -337,21 +337,21 @@
         parse(
                 "--force-enable-assertions",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getAssertionsConfiguration(),
         AssertionTransformation.ENABLE);
     checkSingleForceAllAssertion(
         parse(
                 "--force-disable-assertions",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getAssertionsConfiguration(),
         AssertionTransformation.DISABLE);
     checkSingleForceAllAssertion(
         parse(
                 "--force-passthrough-assertions",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getAssertionsConfiguration(),
         AssertionTransformation.PASSTHROUGH);
     checkSingleForceClassAndPackageAssertion(
@@ -359,7 +359,7 @@
                 "--force-enable-assertions:ClassName",
                 "--force-enable-assertions:PackageName...",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getAssertionsConfiguration(),
         AssertionTransformation.ENABLE);
     checkSingleForceClassAndPackageAssertion(
@@ -367,7 +367,7 @@
                 "--force-disable-assertions:ClassName",
                 "--force-disable-assertions:PackageName...",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getAssertionsConfiguration(),
         AssertionTransformation.DISABLE);
     checkSingleForceClassAndPackageAssertion(
@@ -375,7 +375,7 @@
                 "--force-passthrough-assertions:ClassName",
                 "--force-passthrough-assertions:PackageName...",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getAssertionsConfiguration(),
         AssertionTransformation.PASSTHROUGH);
   }
@@ -384,7 +384,7 @@
   public void numThreadsOption() throws Exception {
     assertEquals(
         ThreadUtils.NOT_SPECIFIED,
-        parse("--desugared-lib", ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+        parse("--desugared-lib", ToolHelper.getDesugarLibJsonForTesting().toString())
             .getThreadCount());
     assertEquals(
         1,
@@ -392,7 +392,7 @@
                 "--thread-count",
                 "1",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getThreadCount());
     assertEquals(
         2,
@@ -400,7 +400,7 @@
                 "--thread-count",
                 "2",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getThreadCount());
     assertEquals(
         10,
@@ -408,7 +408,7 @@
                 "--thread-count",
                 "10",
                 "--desugared-lib",
-                ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString())
+                ToolHelper.getDesugarLibJsonForTesting().toString())
             .getThreadCount());
   }
 
@@ -423,7 +423,7 @@
                   "--thread-count",
                   value,
                   "--desugared-lib",
-                  ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString()));
+                  ToolHelper.getDesugarLibJsonForTesting().toString()));
       fail("Expected failure");
     } catch (CompilationFailedException e) {
       // Expected.
@@ -439,7 +439,7 @@
 
   @Override
   String[] requiredArgsForTest() {
-    return new String[] {"--desugared-lib", ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString()};
+    return new String[] {"--desugared-lib", ToolHelper.getDesugarLibJsonForTesting().toString()};
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/MarkersTest.java b/src/test/java/com/android/tools/r8/MarkersTest.java
index 1a7c92a..2ab8a16 100644
--- a/src/test/java/com/android/tools/r8/MarkersTest.java
+++ b/src/test/java/com/android/tools/r8/MarkersTest.java
@@ -66,7 +66,7 @@
             .setMinApiLevel(apiLevel.getLevel())
             .setMode(compilationMode)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setOutput(output, OutputMode.DexIndexed);
     if (shrinkDesugaredLibrary) {
       builder.addProguardConfiguration(ImmutableList.of("-keep class * { *; }"), Origin.unknown());
@@ -75,7 +75,7 @@
     Collection<Marker> markers = ExtractMarker.extractMarkerFromDexFile(output);
     String version =
         new JsonParser()
-            .parse(FileUtils.readTextFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING, Charsets.UTF_8))
+            .parse(FileUtils.readTextFile(ToolHelper.getDesugarLibJsonForTesting(), Charsets.UTF_8))
             .getAsJsonObject()
             .get("version")
             .getAsString();
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
index e9cd5ff..a6c4924 100644
--- a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
@@ -429,7 +429,7 @@
       AndroidApiLevel minApiLevel, KeepRuleConsumer keepRuleConsumer) {
     assert minApiLevel.getLevel() < AndroidApiLevel.O.getLevel();
     builder.addDesugaredLibraryConfiguration(
-        StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING));
+        StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()));
     // TODO(b/158543446): This should not be setting an implicit library file. Doing so causes
     //  inconsistent library setup depending on the api level and makes tests hard to read and
     //  reason about.
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 9d0e9b5..18037be 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -133,9 +133,6 @@
   public static final String DEFAULT_PROGUARD_MAP_FILE = "proguard.map";
 
   public static final String JAVA_8_RUNTIME = "third_party/openjdk/openjdk-rt-1.8/rt.jar";
-  public static final String DESUGAR_JDK_LIBS =
-      System.getProperty(
-          "desugar_jdk_libs", "third_party/openjdk/desugar_jdk_libs/desugar_jdk_libs.jar");
   public static final String CORE_LAMBDA_STUBS =
       "third_party/core-lambda-stubs/core-lambda-stubs.jar";
   public static final String JSR223_RI_JAR = "third_party/jsr223-api-1.0/jsr223-api-1.0.jar";
@@ -180,12 +177,24 @@
 
   public static final Path DESUGAR_LIB_CONVERSIONS =
       Paths.get(LIBS_DIR, "library_desugar_conversions.zip");
-  public static final String DESUGAR_LIB_JSON_DIR =
-      System.getProperty("desugar_jdk_json_dir", "src/library_desugar");
-  public static final Path DESUGAR_LIB_JSON_FOR_TESTING =
-      Paths.get(DESUGAR_LIB_JSON_DIR, "desugar_jdk_libs.json");
-  public static final Path DESUGAR_LIB_JSON_FOR_TESTING_ALTERNATIVE_3 =
-      Paths.get(DESUGAR_LIB_JSON_DIR, "desugar_jdk_libs_alternative_3.json");
+
+  public static Path getDesugarJDKLibs() {
+    return Paths.get(
+        System.getProperty(
+            "desugar_jdk_libs", "third_party/openjdk/desugar_jdk_libs/desugar_jdk_libs.jar"));
+  }
+
+  private static String getDesugarLibraryJsonDir() {
+    return System.getProperty("desugar_jdk_json_dir", "src/library_desugar");
+  }
+
+  public static Path getDesugarLibJsonForTesting() {
+    return Paths.get(getDesugarLibraryJsonDir(), "desugar_jdk_libs.json");
+  }
+
+  public static Path getDesugarLibJsonForTestingAlternative3() {
+    return Paths.get(getDesugarLibraryJsonDir(), "desugar_jdk_libs_alternative_3.json");
+  }
 
   public static boolean isLocalDevelopment() {
     return System.getProperty("local_development", "0").equals("1");
@@ -758,10 +767,6 @@
     return Paths.get(JAVA_8_RUNTIME);
   }
 
-  public static Path getDesugarJDKLibs() {
-    return Paths.get(DESUGAR_JDK_LIBS);
-  }
-
   public static Path getCoreLambdaStubs() {
     return Paths.get(CORE_LAMBDA_STUBS);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java b/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
index 93e46d0..5aa2894 100644
--- a/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
@@ -76,7 +76,7 @@
                   // TODO(b/158543446): Remove this once enableCoreLibraryDesugaring is fixed.
                   b.getBuilder()
                       .addDesugaredLibraryConfiguration(
-                          StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING));
+                          StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()));
                 } else {
                   // TODO(b/158543446): Move this out to the shared builder once
                   //  enableCoreLibraryDesugaring is fixed.
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BackwardsCompatibleSpecificationTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BackwardsCompatibleSpecificationTest.java
index 6b46ee4..a922636 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BackwardsCompatibleSpecificationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BackwardsCompatibleSpecificationTest.java
@@ -28,7 +28,7 @@
   }
 
   private final Path desugaredLib = ToolHelper.getDesugarJDKLibs();
-  private final Path desugaredSpec = ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING;
+  private final Path desugaredSpec = ToolHelper.getDesugarLibJsonForTesting();
   private final String release;
 
   public BackwardsCompatibleSpecificationTest(TestParameters parameters, String release) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
index f71c916..5cc22b7 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
@@ -69,7 +69,7 @@
             options.reporter,
             libraryCompilation,
             parameters.getApiLevel().getLevel())
-        .parse(StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING_ALTERNATIVE_3));
+        .parse(StringResource.fromFile(ToolHelper.getDesugarLibJsonForTestingAlternative3()));
   }
 
   private void configurationForProgramCompilation(InternalOptions options) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryChecksumsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryChecksumsTest.java
index 6aff20f..bcefe74 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryChecksumsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryChecksumsTest.java
@@ -43,7 +43,7 @@
             .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
             .setMode(CompilationMode.DEBUG)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(AndroidApiLevel.B.getLevel())
             .setOutput(out, OutputMode.DexIndexed)
             .build());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java
index 12ed820..348351b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java
@@ -115,7 +115,7 @@
   public void testReference() throws Exception {
     // Just test that the reference file parses without issues.
     DesugaredLibraryConfiguration config =
-        runPassing(StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING));
+        runPassing(StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()));
     assertEquals(libraryCompilation, config.isLibraryCompilation());
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java
index d99b31f..02d036c 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java
@@ -70,7 +70,7 @@
             .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
             .addLibraryFiles(ToolHelper.getCoreLambdaStubs())
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(parameters.getApiLevel().getLevel())
             .setOutput(desugaredLib, OutputMode.DexIndexed);
     ToolHelper.runL8(l8Builder.build(), options -> {});
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
index 4de3828..e927918 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
@@ -41,12 +41,26 @@
 import java.util.List;
 import java.util.Map;
 import java.util.function.Consumer;
+import org.junit.BeforeClass;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.MethodVisitor;
 
 public class DesugaredLibraryTestBase extends TestBase {
 
+  private static final boolean FORCE_JDK11_DESUGARED_LIB = false;
+
+  @BeforeClass
+  public static void setUpDesugaredLibrary() {
+    if (!FORCE_JDK11_DESUGARED_LIB) {
+      return;
+    }
+    System.setProperty("desugar_jdk_json_dir", "src/library_desugar/jdk11");
+    System.setProperty(
+        "desugar_jdk_libs", "third_party/openjdk/desugar_jdk_libs_11/desugar_jdk_libs.jar");
+    System.out.println("Forcing the usage of JDK11 desugared library.");
+  }
+
   // For conversions tests, we need DexRuntimes where classes to convert are present (DexRuntimes
   // above N and O depending if Stream or Time APIs are used), but we need to compile the program
   // with a minAPI below to force the use of conversions.
@@ -124,7 +138,7 @@
               .setMode(shrink ? CompilationMode.RELEASE : CompilationMode.DEBUG)
               .addProgramFiles(extraPaths)
               .addDesugaredLibraryConfiguration(
-                  StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                  StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
               .setMinApiLevel(apiLevel.getLevel())
               .setOutput(desugaredLib, OutputMode.DexIndexed);
       Path mapping = null;
@@ -201,7 +215,7 @@
             .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
             .setMode(CompilationMode.DEBUG)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(parameters.getApiLevel().getLevel())
             .setOutput(desugaredLib, OutputMode.ClassFile);
 
@@ -220,7 +234,7 @@
             libraryCompilation,
             parameters.getApiLevel().getLevel())
         .parse(
-            StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING),
+            StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()),
             builder -> builder.setSupportAllCallbacksFromLibrary(supportAllCallbacksFromLibrary));
   }
 
@@ -240,7 +254,7 @@
             .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
             .setMode(CompilationMode.DEBUG)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(apiLevel.getLevel())
             .setOutput(desugaredLib, OutputMode.ClassFile);
     ToolHelper.runL8(l8Builder.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java
index 8dd0d27..04411fb 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java
@@ -58,7 +58,7 @@
             .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
             .setMode(shrinkDesugaredLibrary ? CompilationMode.RELEASE : CompilationMode.DEBUG)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(parameters.getApiLevel().getLevel())
             .setOutput(desugaredLib, OutputMode.DexIndexed);
     if (shrinkDesugaredLibrary) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java
index 5b706e8..fc35e73 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java
@@ -44,7 +44,7 @@
         .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
         .addProgramFiles(ToolHelper.getDesugarJDKLibs())
         .addDesugaredLibraryConfiguration(
-            StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+            StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
         .setMinApiLevel(minApiLevel.getLevel());
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
index cae7a4a..9cb9cea 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
@@ -195,7 +195,7 @@
     DesugaredLibraryConfigurationParser parser =
         new DesugaredLibraryConfigurationParser(
             new DexItemFactory(), null, true, minApi.getLevel());
-    return parser.parse(StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING));
+    return parser.parse(StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()));
   }
 
   private Map<ClassReference, Set<MethodReference>> getDirectlyReferencedWrapperTypes(
@@ -275,8 +275,8 @@
     Path out = temp.newFolder().toPath();
     GenerateLintFiles desugaredApi =
         new GenerateLintFiles(
-            ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
-            ToolHelper.DESUGAR_JDK_LIBS,
+            ToolHelper.getDesugarLibJsonForTesting().toString(),
+            ToolHelper.getDesugarJDKLibs().toString(),
             out.toString());
     desugaredApi.run(targetApi.getLevel());
     return new CodeInspector(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
index 624e8a0..f5f2275 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LintFilesTest.java
@@ -120,15 +120,15 @@
     Path directory = temp.newFolder().toPath();
     GenerateLintFiles.main(
         new String[] {
-          ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING.toString(),
-          ToolHelper.DESUGAR_JDK_LIBS,
+          ToolHelper.getDesugarLibJsonForTesting().toString(),
+          ToolHelper.getDesugarJDKLibs().toString(),
           directory.toString()
         });
     InternalOptions options = new InternalOptions(new DexItemFactory(), new Reporter());
     DesugaredLibraryConfiguration desugaredLibraryConfiguration =
         new DesugaredLibraryConfigurationParser(
                 options.itemFactory, options.reporter, false, AndroidApiLevel.B.getLevel())
-            .parse(StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING));
+            .parse(StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()));
 
     for (AndroidApiLevel apiLevel : AndroidApiLevel.values()) {
       Path compileApiLevelDirectory = directory.resolve("compile_api_level_" + apiLevel.getLevel());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingJ$Test.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingJ$Test.java
index 0245f6e..a8462e1 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingJ$Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingJ$Test.java
@@ -106,7 +106,7 @@
             .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
             .addProgramFiles(ToolHelper.getDesugarJDKLibs())
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(AndroidApiLevel.B.getLevel())
             .setOutput(outputDex, OutputMode.DexIndexed)
             .build());
@@ -121,7 +121,7 @@
             .addProgramFiles(JDK_11_JAVA_BASE_EXTENSION_COMPILED_FILES)
             .addClasspathFiles(ToolHelper.getDesugarJDKLibs())
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(AndroidApiLevel.B.getLevel())
             .setOutput(outputDex, OutputMode.DexIndexed)
             .build());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
index f62067c..efddc67 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
@@ -75,8 +75,8 @@
         .parse(
             StringResource.fromFile(
                 libraryDesugarJavaUtilObjects
-                    ? ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING_ALTERNATIVE_3
-                    : ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING));
+                    ? ToolHelper.getDesugarLibJsonForTestingAlternative3()
+                    : ToolHelper.getDesugarLibJsonForTesting()));
   }
 
   private void configurationForProgramCompilation(InternalOptions options) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionsPresentTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionsPresentTest.java
index 43d5b9a..3fe90f3 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionsPresentTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionsPresentTest.java
@@ -48,7 +48,7 @@
             .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
             .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
             .addDesugaredLibraryConfiguration(
-                StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
+                StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
             .setMinApiLevel(parameters.getApiLevel().getLevel())
             .setOutput(desugaredLib, OutputMode.DexIndexed);
     ToolHelper.runL8(l8Builder.build(), x -> {});
diff --git a/third_party/openjdk/desugar_jdk_libs_11.tar.gz.sha1 b/third_party/openjdk/desugar_jdk_libs_11.tar.gz.sha1
new file mode 100644
index 0000000..cb35cd0
--- /dev/null
+++ b/third_party/openjdk/desugar_jdk_libs_11.tar.gz.sha1
@@ -0,0 +1 @@
+5696c90f0675746b4e996c80de461dd2cfd80076
\ No newline at end of file