Annotate synthetics in L8 cf-to-cf desugar build

Bug: 181846319
Change-Id: I0af2fba5f3f5426a137ea07c8b0b9616a84cd8d8
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index f12d33c..8470275 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -97,6 +97,8 @@
             // Desugar to class file format and turn off switch optimizations, as the final
             // compilation with D8 or R8 will do that.
             options.cfToCfDesugar = true;
+            assert !options.forceAnnotateSynthetics;
+            options.forceAnnotateSynthetics = true;
             assert options.enableSwitchRewriting;
             options.enableSwitchRewriting = false;
             assert options.enableStringSwitchConversion;
@@ -105,6 +107,7 @@
             desugar(app, options, executorService);
 
             options.cfToCfDesugar = false;
+            options.forceAnnotateSynthetics = false;
             options.enableSwitchRewriting = true;
             options.enableStringSwitchConversion = true;
           });
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
index ed9d843..8f883ea 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -453,10 +453,10 @@
 
   private static boolean shouldAnnotateSynthetics(InternalOptions options) {
     // Only intermediate builds have annotated synthetics to allow later sharing.
-    // This is currently also disabled on CF to CF desugaring to avoid missing class references to
-    // the annotated classes.
+    // This is currently also disabled on non-L8 CF to CF desugaring to avoid missing class
+    // references to the annotated classes.
     // TODO(b/147485959): Find an alternative encoding for synthetics to avoid missing-class refs.
-    return options.intermediate && !options.cfToCfDesugar;
+    return options.intermediate && (!options.cfToCfDesugar || options.forceAnnotateSynthetics);
   }
 
   private <T extends SyntheticDefinition<?, T, ?>>
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 961dd52..210ae9b 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -270,6 +270,7 @@
   public boolean encodeChecksums = false;
   public BiPredicate<String, Long> dexClassChecksumFilter = (name, checksum) -> true;
   public boolean cfToCfDesugar = false;
+  public boolean forceAnnotateSynthetics = false;
 
   public int callGraphLikelySpuriousCallEdgeThreshold = 50;