Add an explicit Cf to Cf desugaring flag

Bug: 147485959
Change-Id: Ie15894b866127f031ddd74d8f96bbaa7e9049c55
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 164c572..5c815bc 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -375,7 +375,7 @@
     internal.debug = getMode() == CompilationMode.DEBUG;
     internal.programConsumer = getProgramConsumer();
     if (internal.programConsumer instanceof ClassFileConsumer) {
-      internal.enableCfInterfaceMethodDesugaring = true;
+      internal.cfToCfDesugar = true;
     }
     internal.mainDexListConsumer = getMainDexListConsumer();
     internal.minimalMainDex = internal.debug || minimalMainDex;
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index cf9684c..dea3bb8 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -87,11 +87,15 @@
       ExecutorService executorService)
       throws CompilationFailedException {
     try {
+      assert !options.cfToCfDesugar;
       ExceptionUtils.withD8CompilationHandler(
           options.reporter,
           () -> {
+            options.cfToCfDesugar = true;
             desugar(app, options, executorService);
+            options.cfToCfDesugar = false;
           });
+      assert !options.cfToCfDesugar;
       if (shrink) {
         R8.run(r8Command);
       } else {
@@ -105,6 +109,7 @@
   private static void desugar(
       AndroidApp inputApp, InternalOptions options, ExecutorService executor) throws IOException {
     Timing timing = Timing.create("L8 desugaring", options);
+    assert options.cfToCfDesugar;
     try {
       // Disable global optimizations.
       options.disableGlobalOptimizations();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 1d945d2..05c9c66 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -552,7 +552,7 @@
       // The only case where we do Lambda desugaring with Cf to Cf is in L8.
       // If the compilation is not coreLibraryCompilation, then the assertion
       // implMethodHolder != null may fail, hence the assertion.
-      assert options.isDesugaredLibraryCompilation() || options.enableCfInterfaceMethodDesugaring;
+      assert options.cfToCfDesugar;
       DexMethod implMethod = descriptor.implHandle.asMethod();
       DexClass implMethodHolder = definitionFor(implMethod.holder);
       if (implMethodHolder == null) {
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 9f51daa..c92c762 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -106,7 +106,7 @@
     for (DexProgramClass clazz : application.classes()) {
       if (clazz.getSynthesizedFrom().isEmpty()
           || options.isDesugaredLibraryCompilation()
-          || options.enableCfInterfaceMethodDesugaring) {
+          || options.cfToCfDesugar) {
         writeClass(clazz, consumer, markerString);
       } else {
         throw new Unimplemented("No support for synthetics in the Java bytecode backend.");
@@ -194,10 +194,10 @@
       // which do not have class file version.
       assert options.testing.enableForceNestBasedAccessDesugaringForTest
           || options.isDesugaredLibraryCompilation()
-          || options.enableCfInterfaceMethodDesugaring;
+          || options.cfToCfDesugar;
       // TODO(b/146424042): We may call static methods on interface classes so we have to go for
       //  version 52.
-      return options.enableCfInterfaceMethodDesugaring ? 52 : 0;
+      return options.cfToCfDesugar ? 52 : 0;
     }
     return method.getClassFileVersion();
   }
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 f83a673..266c4fe 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -255,7 +255,7 @@
   public boolean enableKotlinMetadataRewritingForRenamedClasses = true;
   public boolean encodeChecksums = false;
   public BiPredicate<String, Long> dexClassChecksumFilter = (name, checksum) -> true;
-  public boolean enableCfInterfaceMethodDesugaring = false;
+  public boolean cfToCfDesugar = false;
 
   public int callGraphLikelySpuriousCallEdgeThreshold = 50;
 
@@ -1277,7 +1277,7 @@
     }
     return desugarState == DesugarState.ON
         && interfaceMethodDesugaring == OffOrAuto.Auto
-        && (!canUseDefaultAndStaticInterfaceMethods() || enableCfInterfaceMethodDesugaring);
+        && (!canUseDefaultAndStaticInterfaceMethods() || cfToCfDesugar);
   }
 
   public boolean isStringSwitchConversionEnabled() {
diff --git a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
index 8769dc2..7cde792 100644
--- a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
+++ b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithUnderscoreThisTestRunner.java
@@ -120,7 +120,7 @@
                 internalOptions -> {
                   if (parameters.isCfRuntime()) {
                     internalOptions.desugarState = DesugarState.ON;
-                    internalOptions.enableCfInterfaceMethodDesugaring = true;
+                    internalOptions.cfToCfDesugar = true;
                   }
                 });
     if (parameters.isDexRuntime()) {