Fix DesugaredLibraryRetargeter synthetic method processing in R8

Fix red bots

Change-Id: I76a92b01ebc6c1b53b0c96d692fd932ebfba9345
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 200ebd8..8fd91e3 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
@@ -401,9 +401,9 @@
     }
   }
 
-  private void synthesizeRetargetClass() throws ExecutionException {
+  private void synthesizeRetargetClass(ExecutorService executorService) throws ExecutionException {
     if (desugaredLibraryRetargeter != null) {
-      desugaredLibraryRetargeter.synthesizeRetargetClasses();
+      desugaredLibraryRetargeter.synthesizeRetargetClasses(this, executorService);
     }
   }
 
@@ -781,7 +781,7 @@
     feedback.updateVisibleOptimizationInfo();
 
     printPhase("Utility classes synthesis");
-    synthesizeRetargetClass();
+    synthesizeRetargetClass(executorService);
     synthesizeEnumUnboxingUtilityMethods(executorService);
 
     printPhase("Desugared library API Conversion finalization");
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
index a3f492c..a0153a0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
@@ -45,6 +45,7 @@
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.InvokeStatic;
+import com.android.tools.r8.ir.conversion.IRConverter;
 import com.android.tools.r8.ir.synthetic.EmulateInterfaceSyntheticCfCodeProvider;
 import com.android.tools.r8.origin.SynthesizedOrigin;
 import com.android.tools.r8.synthesis.SyntheticClassBuilder;
@@ -53,6 +54,7 @@
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.WorkList;
 import com.android.tools.r8.utils.collections.DexClassAndMethodSet;
+import com.android.tools.r8.utils.collections.SortedProgramMethodSet;
 import com.google.common.collect.Maps;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -65,6 +67,8 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import org.objectweb.asm.Opcodes;
@@ -80,6 +84,8 @@
   // Non final virtual library methods requiring generation of emulated dispatch.
   private final DexClassAndMethodSet emulatedDispatchMethods = DexClassAndMethodSet.create();
 
+  private final SortedProgramMethodSet forwardingMethods = SortedProgramMethodSet.create();
+
   public DesugaredLibraryRetargeter(AppView<?> appView) {
     this.appView = appView;
     if (appView.options().desugaredLibraryConfiguration.getRetargetCoreLibMember().isEmpty()) {
@@ -663,8 +669,11 @@
   }
 
   @Deprecated // Use Cf to Cf desugaring.
-  public void synthesizeRetargetClasses() {
+  public void synthesizeRetargetClasses(IRConverter converter, ExecutorService executorService)
+      throws ExecutionException {
+    assert appView.enableWholeProgramOptimizations();
     new EmulatedDispatchTreeFixer().fixApp(null);
+    converter.processMethodsConcurrently(forwardingMethods, executorService);
   }
 
   // The rewrite of virtual calls requires to go through emulate dispatch. This class is responsible
@@ -749,6 +758,9 @@
           clazz.addVirtualMethod(newMethod);
           if (eventConsumer != null) {
             eventConsumer.acceptForwardingMethod(new ProgramMethod(clazz, newMethod));
+          } else {
+            assert appView.enableWholeProgramOptimizations();
+            forwardingMethods.add(new ProgramMethod(clazz, newMethod));
           }
         }
       }