Revert "Desugared library: L8 desugaring only cf to cf"

This reverts commit 19cd5aea33891bce7f76add206b641cbdb856a5d.

Reason for revert: Breaks L8CommandTest and MarkersTest

Change-Id: I455d1d6e6602685ef20bbbfc552eedbc681d6ec5
diff --git a/src/main/java/com/android/tools/r8/L8Command.java b/src/main/java/com/android/tools/r8/L8Command.java
index 1141688..221df4c 100644
--- a/src/main/java/com/android/tools/r8/L8Command.java
+++ b/src/main/java/com/android/tools/r8/L8Command.java
@@ -316,7 +316,6 @@
         r8Builder.addProguardConfiguration(
             libraryConfiguration.getExtraKeepRules(), Origin.unknown());
         r8Builder.addProguardConfigurationFiles(proguardConfigFiles);
-        r8Builder.setDisableDesugaring(true);
         r8Command = r8Builder.makeCommand();
       } else if (!(getProgramConsumer() instanceof ClassFileConsumer)) {
         l8CfConsumer = new InMemoryJarContent();
@@ -334,7 +333,6 @@
             inputs.getLibraryResourceProviders()) {
           d8Builder.addLibraryResourceProvider(libraryResourceProvider);
         }
-        d8Builder.setDisableDesugaring(true);
         d8Command = d8Builder.makeCommand();
       } else {
         assert getProgramConsumer() instanceof ClassFileConsumer;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 7303dd1..c271af1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -214,18 +214,13 @@
             .map(options.itemFactory::createString)
             .collect(Collectors.toList());
     if (options.isDesugaredLibraryCompilation()) {
-      // Specific L8 Settings, performs all desugaring including L8 specific desugaring.
-      // The following desugaring are required for L8 specific desugaring:
-      // - DesugaredLibraryRetargeter for retarget core library members.
-      // - InterfaceMethodRewriter for emulated interfaces,
-      // - LambdaRewriter since InterfaceMethodDesugaring does not support invokeCustom rewriting,
-      // - DesugaredLibraryAPIConverter to duplicate APIs.
-      // The following desugaring are present so all desugaring is performed cf to cf in L8, and
-      // the second L8 phase can just run with Desugar turned off:
-      // - InterfaceMethodRewriter for non L8 specific interface method desugaring,
-      // - TwrCloseResourceRewriter,
-      // - NestBaseAccessDesugaring.
-      assert options.desugarState == DesugarState.ON;
+      // Specific L8 Settings.
+      // DesugaredLibraryRetargeter is needed for retarget core library members and backports.
+      // InterfaceMethodRewriter is needed for emulated interfaces.
+      // LambdaRewriter is needed because if it is missing there are invoke custom on
+      // default/static interface methods, and this is not supported by the compiler.
+      // DesugaredLibraryAPIConverter is here to duplicate APIs.
+      // The rest is nulled out. In addition the rewriting logic fails without lambda rewriting.
       this.desugaredLibraryRetargeter =
           options.desugaredLibraryConfiguration.getRetargetCoreLibMember().isEmpty()
               ? null
@@ -237,11 +232,11 @@
       this.lambdaRewriter = new LambdaRewriter(appView);
       this.desugaredLibraryAPIConverter =
           new DesugaredLibraryAPIConverter(appView, Mode.GENERATE_CALLBACKS_AND_WRAPPERS);
-      this.backportedMethodRewriter = new BackportedMethodRewriter(appView);
-      this.twrCloseResourceRewriter =
-          enableTwrCloseResourceDesugaring() ? new TwrCloseResourceRewriter(appView, this) : null;
-      this.d8NestBasedAccessDesugaring =
-          options.shouldDesugarNests() ? new D8NestBasedAccessDesugaring(appView) : null;
+      this.backportedMethodRewriter =
+          options.cfToCfDesugar || options.testing.forceLibBackportsInL8CfToCf
+              ? new BackportedMethodRewriter(appView)
+              : null;
+      this.twrCloseResourceRewriter = null;
       this.lambdaMerger = null;
       this.covariantReturnTypeAnnotationTransformer = null;
       this.dynamicTypeOptimization = null;
@@ -256,6 +251,7 @@
       this.identifierNameStringMarker = null;
       this.devirtualizer = null;
       this.typeChecker = null;
+      this.d8NestBasedAccessDesugaring = null;
       this.stringSwitchRemover = null;
       this.serviceLoaderRewriter = null;
       this.methodOptimizationInfoCollector = null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 11e6e33..04fb914 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -75,7 +75,7 @@
   }
 
   public boolean needsDesugaring(DexMethod method) {
-    return getMethodProviderOrNull(method) != null;
+    return rewritableMethods.getProvider(method) != null;
   }
 
   public static List<DexMethod> generateListOfBackportedMethods(
@@ -165,30 +165,7 @@
   private MethodProvider getMethodProviderOrNull(DexMethod method) {
     DexMethod original = appView.graphLens().getOriginalMethodSignature(method);
     assert original != null;
-    MethodProvider provider = rewritableMethods.getProvider(original);
-    // TODO(b/150693139): Since the DesugarLibraryRetargeter is run during IR processing while the
-    // backported method rewriter is run in cf to cf, we need here to compute if the method is
-    // actually going to be retargeted through desugared library backports, and compute the
-    // corresponding backported method if so. This can be removed once the DesugarLibraryRetargeter
-    // has been moved as a cf to cf transformation.
-    if (provider == null
-        && appView.options().isDesugaredLibraryCompilation()
-        && appView
-            .options()
-            .desugaredLibraryConfiguration
-            .getBackportCoreLibraryMember()
-            .containsKey(method.holder)) {
-      DexType newHolder =
-          appView
-              .options()
-              .desugaredLibraryConfiguration
-              .getBackportCoreLibraryMember()
-              .get(method.holder);
-      DexMethod backportedMethod =
-          appView.dexItemFactory().createMethod(newHolder, method.proto, method.name);
-      provider = rewritableMethods.getProvider(backportedMethod);
-    }
-    return provider;
+    return rewritableMethods.getProvider(original);
   }
 
   private static final class RewritableMethods {
@@ -198,6 +175,15 @@
 
     RewritableMethods(InternalOptions options, AppView<?> appView) {
 
+      if (options.testing.forceLibBackportsInL8CfToCf) {
+        DexItemFactory factory = options.itemFactory;
+        initializeJava9OptionalMethodProviders(factory);
+        initializeJava10OptionalMethodProviders(factory);
+        initializeJava11OptionalMethodProviders(factory);
+        initializeStreamMethodProviders(factory);
+        return;
+      }
+
       if (!options.shouldBackportMethods()) {
         return;
       }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java
index 787915f..bd468b0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java
@@ -146,9 +146,6 @@
   public void desugarNestBasedAccess(
       DexApplication.Builder<?> builder, ExecutorService executorService, IRConverter converter)
       throws ExecutionException {
-    if (metNestHosts.isEmpty()) {
-      return;
-    }
     processNestsConcurrently(executorService);
     addDeferredBridges();
     synthesizeNestConstructor(builder);
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index e19694e..8bc1a55 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1293,6 +1293,7 @@
     public PrintStream whyAreYouNotInliningConsumer = System.out;
     public boolean trackDesugaredAPIConversions =
         System.getProperty("com.android.tools.r8.trackDesugaredAPIConversions") != null;
+    public boolean forceLibBackportsInL8CfToCf = false;
     public boolean enumUnboxingRewriteJavaCGeneratedMethod = false;
     // TODO(b/154793333): Enable assertions always when resolved.
     public boolean assertConsistentRenamingOfSignature = false;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassTest.java
index 9b48952..a01a59a 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassTest.java
@@ -7,6 +7,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.TestParameters;
+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;
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 b02b2e9..e4b3869 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
@@ -119,6 +119,7 @@
           options -> {
             if (extraFiles) {
               options.testing.disableL8AnnotationRemoval = true;
+              options.testing.forceLibBackportsInL8CfToCf = true;
             }
             optionsModifier.accept(options);
           });