Update all desugared lib tests to last APIs

- found that ConcurrentHashMap tests were failing
  when shrinking the library

Bug: 134732760
Change-Id: I49f4b015adc861eabac5e22ccc0bbe80db144605
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
index dc24bc8..7543fc5 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
@@ -26,23 +26,12 @@
 
 public class CoreLibDesugarTestBase extends TestBase {
 
-  @Deprecated
-  protected boolean requiresCoreLibDesugaring(TestParameters parameters) {
-    // TODO(b/134732760): Use the two other APIS instead.
-    return requiresEmulatedInterfaceCoreLibDesugaring(parameters)
-        && requiresRetargetCoreLibMemberDesugaring(parameters);
-  }
-
   protected boolean requiresEmulatedInterfaceCoreLibDesugaring(TestParameters parameters) {
     return parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel();
   }
 
-  protected boolean requiresRetargetCoreLibMemberDesugaring(TestParameters parameters) {
-    return parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel();
-  }
-
   protected boolean requiresAnyCoreLibDesugaring(TestParameters parameters) {
-    return requiresRetargetCoreLibMemberDesugaring(parameters);
+    return parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel();
   }
 
   protected Path buildDesugaredLibrary(AndroidApiLevel apiLevel) throws RuntimeException {
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java
index a60cbd2..c8a05f8 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java
@@ -10,9 +10,7 @@
 import com.android.tools.r8.D8TestRunResult;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject.JumboStringMode;
@@ -37,16 +35,16 @@
 public class CustomCollectionTest extends CoreLibDesugarTestBase {
 
   private final TestParameters parameters;
-  private final boolean shrinkCoreLibrary;
+  private final boolean shrinkDesugaredLibrary;
 
-  @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+  @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
   public static List<Object[]> data() {
     return buildParameters(
         BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
   }
 
   public CustomCollectionTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
-    this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
     this.parameters = parameters;
   }
 
@@ -55,23 +53,19 @@
 
   @Test
   public void testCustomCollectionD8() throws Exception {
-    Box<String> keepRulesHolder = new Box<>("");
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     D8TestRunResult d8TestRunResult =
         testForD8()
             .addInnerClasses(CustomCollectionTest.class)
             .setMinApi(parameters.getApiLevel())
-            .addOptionsModification(
-                options ->
-                    options.desugaredLibraryKeepRuleConsumer =
-                        ToolHelper.consumeString(keepRulesHolder::set))
-            .enableCoreLibraryDesugaring(parameters.getApiLevel())
+            .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .compile()
             .inspect(inspector -> this.assertCustomCollectionCallsCorrect(inspector, false))
             .addDesugaredCoreLibraryRunClassPath(
                 this::buildDesugaredLibrary,
                 parameters.getApiLevel(),
-                keepRulesHolder.get(),
-                shrinkCoreLibrary)
+                keepRuleConsumer.get(),
+                shrinkDesugaredLibrary)
             .run(parameters.getRuntime(), EXECUTOR)
             .assertSuccess();
     if (requiresEmulatedInterfaceCoreLibDesugaring(parameters)) {
@@ -89,7 +83,7 @@
 
   @Test
   public void testCustomCollectionR8() throws Exception {
-    Box<String> keepRulesHolder = new Box<>("");
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     R8TestRunResult r8TestRunResult =
         testForR8(Backend.DEX)
             .addInnerClasses(CustomCollectionTest.class)
@@ -100,18 +94,14 @@
                   // TODO(b/140233505): Allow devirtualization once fixed.
                   options.enableDevirtualization = false;
                 })
-            .addOptionsModification(
-                options ->
-                    options.desugaredLibraryKeepRuleConsumer =
-                        ToolHelper.consumeString(keepRulesHolder::set))
-            .enableCoreLibraryDesugaring(parameters.getApiLevel())
+            .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .compile()
             .inspect(inspector -> this.assertCustomCollectionCallsCorrect(inspector, true))
             .addDesugaredCoreLibraryRunClassPath(
                 this::buildDesugaredLibrary,
                 parameters.getApiLevel(),
-                keepRulesHolder.get(),
-                shrinkCoreLibrary)
+                keepRuleConsumer.get(),
+                shrinkDesugaredLibrary)
             .run(parameters.getRuntime(), EXECUTOR)
             .assertSuccess();
     if (requiresEmulatedInterfaceCoreLibDesugaring(parameters)) {
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
index 1c4f47a..21c2f8f 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
@@ -9,9 +9,7 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -28,17 +26,17 @@
 public class JavaTimeTest extends CoreLibDesugarTestBase {
 
   private final TestParameters parameters;
-  private final boolean shrinkCoreLibrary;
+  private final boolean shrinkDesugaredLibrary;
   private static final String expectedOutput = StringUtils.lines("Hello, world");
 
-  @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+  @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
   public static List<Object[]> data() {
     return buildParameters(
         BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
   }
 
   public JavaTimeTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
-    this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
     this.parameters = parameters;
   }
 
@@ -56,45 +54,37 @@
 
   @Test
   public void testTimeD8() throws Exception {
-    Box<String> keepRulesHolder = new Box<>("");
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     testForD8()
         .addInnerClasses(JavaTimeTest.class)
         .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring(parameters.getApiLevel())
-        .addOptionsModification(
-            options ->
-                options.desugaredLibraryKeepRuleConsumer =
-                    ToolHelper.consumeString(keepRulesHolder::set))
+        .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .inspect(this::checkRewrittenInvokes)
         .addDesugaredCoreLibraryRunClassPath(
             this::buildDesugaredLibrary,
             parameters.getApiLevel(),
-            keepRulesHolder.get(),
-            shrinkCoreLibrary)
+            keepRuleConsumer.get(),
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(expectedOutput);
   }
 
   @Test
   public void testTimeR8() throws Exception {
-    Box<String> keepRulesHolder = new Box<>("");
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     testForR8(parameters.getBackend())
         .addInnerClasses(JavaTimeTest.class)
         .addKeepMainRule(TestClass.class)
         .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring(parameters.getApiLevel())
-        .addOptionsModification(
-            options ->
-                options.desugaredLibraryKeepRuleConsumer =
-                    ToolHelper.consumeString(keepRulesHolder::set))
+        .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .inspect(this::checkRewrittenInvokes)
         .addDesugaredCoreLibraryRunClassPath(
             this::buildDesugaredLibrary,
             parameters.getApiLevel(),
-            keepRulesHolder.get(),
-            shrinkCoreLibrary)
+            keepRuleConsumer.get(),
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(expectedOutput);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
index e574c7c..30fd9d3 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
@@ -26,17 +26,17 @@
 public class JavaUtilFunctionTest extends CoreLibDesugarTestBase {
 
   private final TestParameters parameters;
-  private final boolean shrinkCoreLibrary;
+  private final boolean shrinkDesugaredLibrary;
   private static final String expectedOutput = StringUtils.lines("Hello, world", "Hello, world");
 
-  @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+  @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
   public static List<Object[]> data() {
     return buildParameters(
         BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
   }
 
   public JavaUtilFunctionTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
-    this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
     this.parameters = parameters;
   }
 
@@ -71,7 +71,7 @@
             this::buildDesugaredLibrary,
             parameters.getApiLevel(),
             keepRuleConsumer.get(),
-            shrinkCoreLibrary)
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(expectedOutput);
   }
@@ -95,7 +95,7 @@
             this::buildDesugaredLibrary,
             parameters.getApiLevel(),
             keepRuleConsumer.get(),
-            shrinkCoreLibrary)
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(expectedOutput);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java
index deb0bd4..c954d5f 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java
@@ -13,13 +13,14 @@
 import static org.hamcrest.core.StringContains.containsString;
 import static org.junit.Assert.assertFalse;
 
+import com.android.tools.r8.D8TestCompileResult;
 import com.android.tools.r8.D8TestRunResult;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -41,51 +42,47 @@
   private static final String TEST_CLASS = "stream.ProgramRewritingTestClass";
 
   private final TestParameters parameters;
-  private final boolean shrinkCoreLibrary;
+  private final boolean shrinkDesugaredLibrary;
 
-  @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+  @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
   public static List<Object[]> data() {
     return buildParameters(
         BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
   }
 
   public ProgramRewritingTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
-    this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
     this.parameters = parameters;
   }
 
   @Test
   public void testProgramD8() throws Exception {
-    Assume.assumeTrue("No desugaring for high API levels", requiresCoreLibDesugaring(parameters));
-
     ArrayList<Path> coreLambdaStubs = new ArrayList<>();
     coreLambdaStubs.add(ToolHelper.getCoreLambdaStubs());
-    Box<String> keepRulesHolder = new Box<>("");
     for (Boolean coreLambdaStubsActive : BooleanUtils.values()) {
-      D8TestRunResult d8TestRunResult =
+      KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
+      D8TestCompileResult compileResult =
           testForD8()
               .addProgramFiles(Paths.get(ToolHelper.EXAMPLES_JAVA9_BUILD_DIR + "stream.jar"))
               .setMinApi(parameters.getApiLevel())
-              .enableCoreLibraryDesugaring(parameters.getApiLevel())
-              .addOptionsModification(
-                  options ->
-                      options.desugaredLibraryKeepRuleConsumer =
-                          ToolHelper.consumeString(keepRulesHolder::set))
+              .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
               .compile()
-              .inspect(this::checkRewrittenInvokes)
-              .addRunClasspathFiles(
-                  coreLambdaStubsActive
-                      ? buildDesugaredLibrary(
-                          parameters.getApiLevel(),
-                          keepRulesHolder.get(),
-                          shrinkCoreLibrary,
-                          coreLambdaStubs)
-                      : buildDesugaredLibrary(
-                          parameters.getApiLevel(), keepRulesHolder.get(), shrinkCoreLibrary))
-              .run(parameters.getRuntime(), TEST_CLASS)
-              .assertSuccess();
-      assertLines2By2Correct(d8TestRunResult.getStdOut());
-      assertGeneratedKeepRulesAreCorrect(keepRulesHolder.get());
+              .inspect(this::checkRewrittenInvokes);
+      if (parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel()) {
+        compileResult.addRunClasspathFiles(
+            buildCoreLambdaDesugaredLibrary(
+                parameters.getApiLevel(),
+                keepRuleConsumer.get(),
+                shrinkDesugaredLibrary,
+                coreLambdaStubsActive,
+                coreLambdaStubs));
+      }
+      D8TestRunResult d8TestRunResult =
+          compileResult.run(parameters.getRuntime(), TEST_CLASS).assertSuccess();
+      if (parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel()) {
+        assertLines2By2Correct(d8TestRunResult.getStdOut());
+        assertGeneratedKeepRulesAreCorrect(keepRuleConsumer.get());
+      }
       String stdErr = d8TestRunResult.getStdErr();
       if (parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST)) {
         // Flaky: There might be a missing method on lambda deserialization.
@@ -98,11 +95,24 @@
     }
   }
 
+  private Path buildCoreLambdaDesugaredLibrary(
+      AndroidApiLevel apiLevel,
+      String keepRules,
+      boolean shrink,
+      boolean coreLambdaStubsActive,
+      ArrayList<Path> coreLambdaStubs) {
+    return coreLambdaStubsActive
+        ? buildDesugaredLibrary(apiLevel, keepRules, shrink, coreLambdaStubs)
+        : buildDesugaredLibrary(apiLevel, keepRules, shrink);
+  }
+
   @Test
   public void testProgramR8() throws Exception {
-    Assume.assumeTrue("No desugaring for high API levels", requiresCoreLibDesugaring(parameters));
+    Assume.assumeTrue(
+        "TODO(b/139451198): Make the test run with new SDK.",
+        parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel());
     for (Boolean minifying : BooleanUtils.values()) {
-      Box<String> keepRulesHolder = new Box<>("");
+      KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
       R8TestRunResult r8TestRunResult =
           testForR8(parameters.getBackend())
               .minification(minifying)
@@ -114,20 +124,20 @@
                     // TODO(b/140233505): Allow devirtualization once fixed.
                     options.enableDevirtualization = false;
                   })
-              .addOptionsModification(
-                  options ->
-                      options.desugaredLibraryKeepRuleConsumer =
-                          ToolHelper.consumeString(keepRulesHolder::set))
-              .enableCoreLibraryDesugaring(parameters.getApiLevel())
+              .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
               .compile()
               .inspect(this::checkRewrittenInvokes)
-              .addRunClasspathFiles(
-                  buildDesugaredLibrary(
-                      parameters.getApiLevel(), keepRulesHolder.get(), shrinkCoreLibrary))
+              .addDesugaredCoreLibraryRunClassPath(
+                  this::buildDesugaredLibrary,
+                  parameters.getApiLevel(),
+                  keepRuleConsumer.get(),
+                  shrinkDesugaredLibrary)
               .run(parameters.getRuntime(), TEST_CLASS)
               .assertSuccess();
-      assertLines2By2Correct(r8TestRunResult.getStdOut());
-      assertGeneratedKeepRulesAreCorrect(keepRulesHolder.get());
+      if (parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel()) {
+        assertLines2By2Correct(r8TestRunResult.getStdOut());
+        assertGeneratedKeepRulesAreCorrect(keepRuleConsumer.get());
+      }
       if (parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST)) {
         // Flaky: There might be a missing method on lambda deserialization.
         r8TestRunResult.assertStderrMatches(
@@ -141,7 +151,7 @@
   }
 
   private void checkRewrittenInvokes(CodeInspector inspector) {
-    if (!requiresCoreLibDesugaring(parameters)) {
+    if (parameters.getApiLevel().getLevel() >= AndroidApiLevel.N.getLevel()) {
       return;
     }
     ClassSubject classSubject = inspector.clazz(TEST_CLASS);
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java
index fcd428e..150fbf6 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java
@@ -10,20 +10,20 @@
 import static org.hamcrest.CoreMatchers.endsWith;
 
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Collections;
-import org.junit.Assume;
+import java.util.List;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
 public class Jdk11AtomicTests extends Jdk11CoreLibTestBase {
@@ -39,21 +39,24 @@
         ATOMIC_TESTS_FOLDER.resolve(ATOMIC_REFERENCE_TEST + JAVA_EXTENSION),
         ATOMIC_TESTS_FOLDER.resolve(ATOMIC_UPDATERS + JAVA_EXTENSION)
       };
-  private final TestParameters parameters;
 
-  @Parameterized.Parameters(name = "{0}")
-  public static TestParametersCollection data() {
+  private final TestParameters parameters;
+  private final boolean shrinkDesugaredLibrary;
+
+  @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+  public static List<Object[]> data() {
     // TODO(b/134732760): Skip Android 4.4.4 due to missing libjavacrypto.
-    return getTestParameters()
-        .withDexRuntime(Version.V4_0_4)
-        .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
-        //TODO(b/134732760): Add support for R8 and JDK11.
-        .withCfRuntime(CfVm.JDK11)
-        .withAllApiLevels()
-        .build();
+    return buildParameters(
+        BooleanUtils.values(),
+        getTestParameters()
+            .withDexRuntime(Version.V4_0_4)
+            .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
+            .withAllApiLevels()
+            .build());
   }
 
-  public Jdk11AtomicTests(TestParameters parameters) {
+  public Jdk11AtomicTests(boolean shrinkDesugaredLibrary, TestParameters parameters) {
+    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
     this.parameters = parameters;
   }
 
@@ -68,8 +71,7 @@
 
   @Test
   public void testD8AtomicReference() throws Exception {
-    Assume.assumeTrue(parameters.isDexRuntime());
-    Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     String verbosity = "2";
     testForD8()
         .addProgramFiles(
@@ -77,11 +79,14 @@
         .addProgramFiles(testNGSupportProgramFiles())
         .addProgramFiles(getPathsFiles())
         .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring()
-        .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
+        .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .withArt6Plus64BitsLib()
-        .addRunClasspathFiles(buildDesugaredLibraryWithJavaBaseExtension(parameters.getApiLevel()))
+        .addDesugaredCoreLibraryRunClassPath(
+            this::buildDesugaredLibrary,
+            parameters.getApiLevel(),
+            keepRuleConsumer.get(),
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), "TestNGMainRunner", verbosity, ATOMIC_REFERENCE_TEST)
         .assertSuccessWithOutputThatMatches(
             endsWith(StringUtils.lines(ATOMIC_REFERENCE_TEST + ": SUCCESS")));
@@ -89,8 +94,7 @@
 
   @Test
   public void testD8AtomicUpdaters() throws Exception {
-    Assume.assumeTrue(parameters.isDexRuntime());
-    Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     String verbosity = "2";
     testForD8()
         .addProgramFiles(
@@ -98,11 +102,14 @@
         .addProgramFiles(testNGSupportProgramFiles())
         .addProgramFiles(getPathsFiles())
         .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring()
-        .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
+        .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .withArt6Plus64BitsLib()
-        .addRunClasspathFiles(buildDesugaredLibraryWithJavaBaseExtension(parameters.getApiLevel()))
+        .addDesugaredCoreLibraryRunClassPath(
+            this::buildDesugaredLibrary,
+            parameters.getApiLevel(),
+            keepRuleConsumer.get(),
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), "TestNGMainRunner", verbosity, ATOMIC_UPDATERS)
         .assertSuccessWithOutputThatMatches(
             endsWith(StringUtils.lines(ATOMIC_UPDATERS + ": SUCCESS")));
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java
index e5e993d..d340245 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java
@@ -13,11 +13,11 @@
 
 import com.android.tools.r8.D8TestCompileResult;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -29,6 +29,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
 public class Jdk11ConcurrentMapTests extends Jdk11CoreLibTestBase {
@@ -50,18 +51,22 @@
       };
 
   private final TestParameters parameters;
+  private final boolean shrinkDesugaredLibrary;
 
-  @Parameterized.Parameters(name = "{0}")
-  public static TestParametersCollection data() {
+  @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+  public static List<Object[]> data() {
     // TODO(b/134732760): Skip Android 4.4.4 due to missing libjavacrypto.
-    return getTestParameters()
-        .withDexRuntime(Version.V4_0_4)
-        .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
-        .withAllApiLevels()
-        .build();
+    return buildParameters(
+        BooleanUtils.values(),
+        getTestParameters()
+            .withDexRuntime(Version.V4_0_4)
+            .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
+            .withAllApiLevels()
+            .build());
   }
 
-  public Jdk11ConcurrentMapTests(TestParameters parameters) {
+  public Jdk11ConcurrentMapTests(boolean shrinkDesugaredLibrary, TestParameters parameters) {
+    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
     this.parameters = parameters;
   }
 
@@ -94,27 +99,30 @@
   public void testD8Concurrent() throws Exception {
     // TODO(b/134732760): Support Java 9+ libraries.
     // We skip the ConcurrentRemoveIf test because of the  non desugared class CompletableFuture.
-    Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     String verbosity = "2";
     testForD8()
         .addProgramFiles(CONCURRENT_COMPILED_TESTS_FILES)
         .addProgramFiles(testNGSupportProgramFiles())
         .addProgramFiles(getPathsFiles())
         .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring()
+        .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
         .compile()
         .withArt6Plus64BitsLib()
-        .addRunClasspathFiles(buildDesugaredLibrary(parameters.getApiLevel()))
+        .addDesugaredCoreLibraryRunClassPath(
+            this::buildDesugaredLibrary,
+            parameters.getApiLevel(),
+            keepRuleConsumer.get(),
+            shrinkDesugaredLibrary)
         .run(parameters.getRuntime(), "TestNGMainRunner", verbosity, "ConcurrentModification")
         .assertSuccessWithOutputThatMatches(
             endsWith(StringUtils.lines("ConcurrentModification: SUCCESS")));
   }
 
   private Path[] concurrentHashTestToCompile() {
-    if (parameters.getApiLevel().getLevel() >= AndroidApiLevel.O.getLevel()) {
-      return CONCURRENT_HASH_COMPILED_TESTS_FILES;
-    }
+    // We exclude WhiteBox.class because of Method handles, they are not supported on old devices
+    // and the test uses methods not present even on 28.
     List<Path> toCompile = new ArrayList<>();
     Collections.addAll(toCompile, CONCURRENT_HASH_COMPILED_TESTS_FILES);
     toCompile.removeIf(file -> file.getFileName().toString().equals("WhiteBox.class"));
@@ -122,12 +130,7 @@
   }
 
   private String[] concurrentHashTestNGTestsToRun() {
-    // We exclude WhiteBox.class because of Method handles.
-    // This will likely never be supported in old Android devices.
     List<String> toRun = new ArrayList<>();
-    if (parameters.getApiLevel().getLevel() >= AndroidApiLevel.O.getLevel()) {
-      toRun.add("WhiteBox");
-    }
     // TODO(b/134732760): Support Java 9+ libraries.
     // We exclude ConcurrentAssociateTest and ConcurrentContainsKeyTest due to non
     // desugared class CompletableFuture.
@@ -151,7 +154,9 @@
 
   @Test
   public void testD8ConcurrentHash() throws Exception {
-    Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+    // TODO(b/134732760): Investigate failure when shrinkDesugaredLibrary is on.
+    Assume.assumeFalse(shrinkDesugaredLibrary);
+    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     String verbosity = "2";
     D8TestCompileResult d8TestCompileResult =
         testForD8()
@@ -159,11 +164,15 @@
             .addProgramFiles(testNGSupportProgramFiles())
             .addProgramFiles(getPathsFiles())
             .setMinApi(parameters.getApiLevel())
-            .enableCoreLibraryDesugaring()
-            .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
+            .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .compile()
             .withArt6Plus64BitsLib()
-            .addRunClasspathFiles(buildDesugaredLibrary(parameters.getApiLevel()));
+            .addDesugaredCoreLibraryRunClassPath(
+                this::buildDesugaredLibrary,
+                parameters.getApiLevel(),
+                keepRuleConsumer.get(),
+                shrinkDesugaredLibrary);
+    System.out.println(keepRuleConsumer.get());
     for (String className : concurrentHashTestNGTestsToRun()) {
       d8TestCompileResult
           .run(parameters.getRuntime(), "TestNGMainRunner", verbosity, className)
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java
index 169c7f9..c106bec 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java
@@ -100,8 +100,7 @@
     assert JDK_11_JAVA_BASE_EXTENSION_COMPILED_FILES.length > 0;
   }
 
-  protected Path buildDesugaredLibraryWithJavaBaseExtension(AndroidApiLevel apiLevel)
-      throws Exception {
+  protected Path buildDesugaredLibraryWithJavaBaseExtension(AndroidApiLevel apiLevel) {
     return buildDesugaredLibrary(
         apiLevel, "", false, ImmutableList.copyOf(JDK_11_JAVA_BASE_EXTENSION_COMPILED_FILES));
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java
index 8a36cd6..c773666 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java
@@ -159,11 +159,6 @@
       // Collectors
       "filtering(",
       "flatMapping(",
-      // List
-      "of(",
-      // Optional
-      "or(",
-      "ifPresentOrElse("
     };
   }
 
@@ -190,11 +185,13 @@
 
   @Test
   public void testStream() throws Exception {
+    Assume.assumeTrue(
+        "Requires Java base extensions, should add it when not desugaring",
+        parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel());
     // TODO(b/137876068): It seems to fail on windows because the method.
     // getAllFilesWithSuffixInDirectory() finds different files on Windows (To be confirmed), so
     // compilation is then different and raises an error.
     Assume.assumeFalse(ToolHelper.isWindows());
-    Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
     Map<String, String> runnableTests = getRunnableTests();
     String verbosity = "2";
     List<Path> filesToCompile =
@@ -209,10 +206,10 @@
             .addProgramFiles(testNGSupportProgramFiles())
             .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
             .setMinApi(parameters.getApiLevel())
-            .enableCoreLibraryDesugaring()
+            .enableCoreLibraryDesugaring(parameters.getApiLevel())
             .compile()
-            .addRunClasspathFiles(
-                buildDesugaredLibraryWithJavaBaseExtension(parameters.getApiLevel()))
+            .addDesugaredCoreLibraryRunClassPath(
+                this::buildDesugaredLibraryWithJavaBaseExtension, parameters.getApiLevel())
             .withArtFrameworks()
             .withArt6Plus64BitsLib();
     int numSuccesses = 0;
@@ -247,10 +244,7 @@
           // TODO(b/134732760): Investigate and fix these issues.
           numHardFailures++;
         } else {
-          String errorMessage = "STDOUT:\n"+
-              result.getStdOut()
-              + "STDERR:\n" +
-              result.getStdErr();
+          String errorMessage = "STDOUT:\n" + result.getStdOut() + "STDERR:\n" + result.getStdErr();
           fail(errorMessage);
         }
       }
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java
index 3aefe01..95d53ad 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java
@@ -11,12 +11,9 @@
 import com.android.tools.r8.D8TestRunResult;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import java.nio.file.Paths;
-import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -62,14 +59,15 @@
         "test.java.time.TestTextParser.java",
         "test.java.time.TestTextPrinter.java",
         "test.java.time.TestChronoField.java",
-        "test.java.util.TestFormatter.java"
-      };
-  // TODO(b/134732760): Investigate why these tests fail.
-  private static String[] failuresToTriage =
-      new String[] {
+        "test.java.util.TestFormatter.java",
+        // Following also fails using the default libs on P...
         "test.java.time.chrono.TestEraDisplayName",
         "test.java.time.format.TestDateTimeFormatter",
         "test.java.time.TestLocalDate",
+      };
+  // TODO(b/134732760): Investigate why these tests fail.
+  private static String[] forEachProblem =
+      new String[] {
         // ForEach problem
         "test.java.time.format.TestNarrowMonthNamesAndDayNames",
       };
@@ -130,7 +128,6 @@
 
   @Test
   public void testTime() throws Exception {
-    Assume.assumeTrue("No desugaring on high API level.", requiresCoreLibDesugaring(parameters));
     String verbosity = "2";
     D8TestCompileResult compileResult =
         testForD8()
@@ -138,7 +135,6 @@
             .addProgramFiles(Paths.get(JDK_TESTS_BUILD_DIR + "jdk11TimeTests.jar"))
             .addProgramFiles(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar"))
             .addProgramFiles(Paths.get(JDK_TESTS_BUILD_DIR + "jcommander-1.48.jar"))
-            .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
             .setMinApi(parameters.getApiLevel())
             .enableCoreLibraryDesugaring(parameters.getApiLevel())
             .compile()
@@ -150,15 +146,22 @@
           compileResult.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, success);
       if (result.getStdErr().contains("Couldn't find any tzdata")) {
         // TODO(b/134732760): fix missing time zone data.
+      } else if (result.getStdErr().contains("no microsecond precision")) {
+        // Emulator precision, won't fix.
       } else {
         assertTrue(result.getStdOut().contains(StringUtils.lines(success + ": SUCCESS")));
       }
     }
-    for (String success : failuresToTriage) {
+    for (String success : forEachProblem) {
       D8TestRunResult result =
           compileResult.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, success);
-      assertTrue(
-          result.getStdOut().contains("AssertionError") || result.getStdOut().contains("forEach("));
+      if (requiresAnyCoreLibDesugaring(parameters)) {
+        assertTrue(
+            result.getStdOut().contains("AssertionError")
+                || result.getStdOut().contains("forEach("));
+      } else {
+        assertTrue(result.getStdOut().contains(StringUtils.lines(success + ": SUCCESS")));
+      }
     }
   }
 }