Rewrite StringConcatInstructionDesugaring to use DesugarDescription

Fixes: b/270144951
Change-Id: I24372e2bc66e618d7e58adf3250ace373be777ed
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
index 065fc4c..b95fd85 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.cf.code.CfStackInstruction;
 import com.android.tools.r8.cf.code.CfStackInstruction.Opcode;
 import com.android.tools.r8.cf.code.CfStore;
-import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexCallSite;
@@ -29,8 +28,7 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.desugar.CfInstructionDesugaring;
-import com.android.tools.r8.ir.desugar.CfInstructionDesugaringCollection;
-import com.android.tools.r8.ir.desugar.CfInstructionDesugaringEventConsumer;
+import com.android.tools.r8.ir.desugar.DesugarDescription;
 import com.android.tools.r8.ir.desugar.FreshLocalProvider;
 import com.android.tools.r8.ir.desugar.LocalStackAllocator;
 import com.android.tools.r8.utils.BooleanUtils;
@@ -70,15 +68,7 @@
   }
 
   @Override
-  public Collection<CfInstruction> desugarInstruction(
-      CfInstruction instruction,
-      FreshLocalProvider freshLocalProvider,
-      LocalStackAllocator localStackAllocator,
-      CfInstructionDesugaringEventConsumer eventConsumer,
-      ProgramMethod context,
-      MethodProcessingContext methodProcessingContext,
-      CfInstructionDesugaringCollection desugaringCollection,
-      DexItemFactory dexItemFactory) {
+  public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
     if (instruction.isInvokeDynamic()) {
       // We are interested in bootstrap methods StringConcatFactory::makeConcat
       // and StringConcatFactory::makeConcatWthConstants, both are static.
@@ -87,18 +77,30 @@
       if (callSite.bootstrapMethod.type.isInvokeStatic()) {
         DexMethod bootstrapMethod = callSite.bootstrapMethod.asMethod();
         if (bootstrapMethod == factory.stringConcatFactoryMembers.makeConcat) {
-          return desugarMakeConcat(invoke, freshLocalProvider, localStackAllocator);
+          return desugarMakeConcat(invoke);
         }
         if (bootstrapMethod == factory.stringConcatFactoryMembers.makeConcatWithConstants) {
-          return desugarMakeConcatWithConstants(
-              invoke, freshLocalProvider, localStackAllocator, context);
+          return desugarMakeConcatWithConstants(invoke, context);
         }
       }
     }
-    return null;
+    return DesugarDescription.nothing();
   }
 
-  private Collection<CfInstruction> desugarMakeConcat(
+  private DesugarDescription desugarMakeConcat(CfInvokeDynamic invoke) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                context,
+                methodProcessingContext,
+                dexItemFactory) ->
+                desugarMakeConcatInstructions(invoke, freshLocalProvider, localStackAllocator))
+        .build();
+  }
+
+  private Collection<CfInstruction> desugarMakeConcatInstructions(
       CfInvokeDynamic invoke,
       FreshLocalProvider freshLocalProvider,
       LocalStackAllocator localStackAllocator) {
@@ -119,7 +121,22 @@
     return builder.desugar(localStackAllocator);
   }
 
-  private Collection<CfInstruction> desugarMakeConcatWithConstants(
+  private DesugarDescription desugarMakeConcatWithConstants(
+      CfInvokeDynamic invoke, ProgramMethod context) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                ignore, // context
+                methodProcessingContext,
+                dexItemFactory) ->
+                desugarMakeConcatWithConstantsInstructions(
+                    invoke, freshLocalProvider, localStackAllocator, context))
+        .build();
+  }
+
+  private Collection<CfInstruction> desugarMakeConcatWithConstantsInstructions(
       CfInvokeDynamic invoke,
       FreshLocalProvider freshLocalProvider,
       LocalStackAllocator localStackAllocator,