Always use context from the closure invocation for desugaring

This is just to avoid renaming the context parameter name for the closure.

Bug: b/270021543
Change-Id: I7fb6e474609a44d119ebf41af660f926770c50d5
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 a241940..508c314 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
@@ -103,12 +103,16 @@
             .isSyntheticOfKind(context.getContextType(), kinds -> kinds.BACKPORT_WITH_FORWARDING)) {
       return DesugarDescription.nothing();
     }
+    return desugarInstruction(invoke, methodProvider);
+  }
+
+  private DesugarDescription desugarInstruction(CfInvoke invoke, MethodProvider methodProvider) {
     return DesugarDescription.builder()
         .setDesugarRewrite(
             (freshLocalProvider,
                 localStackAllocator,
                 eventConsumer,
-                ignore, // context
+                context,
                 methodProcessingContext,
                 desugaringCollection,
                 dexItemFactory) ->
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
index 7cff400b..3f80a47 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
@@ -44,12 +44,16 @@
     CfInvoke newInvoke =
         new CfInvoke(
             cfInvoke.getOpcode(), invokedMethod.withProto(proto, factory), cfInvoke.isInterface());
+    return desugarInstruction(invokedMethod, newInvoke);
+  }
+
+  private DesugarDescription desugarInstruction(DexMethod invokedMethod, CfInvoke newInvoke) {
     return DesugarDescription.builder()
         .setDesugarRewrite(
             (freshLocalProvider,
                 localStackAllocator,
                 eventConsumer,
-                ignore, // context
+                context,
                 methodProcessingContext,
                 desugaringCollection,
                 dexItemFactory) ->
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
index 09e3186..ddc3f35 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
@@ -35,12 +35,16 @@
     if (privateMethod == null) {
       return DesugarDescription.nothing();
     }
+    return desugarInstruction(invoke, method);
+  }
+
+  private DesugarDescription desugarInstruction(CfInvoke invoke, DexMethod method) {
     return DesugarDescription.builder()
         .setDesugarRewrite(
             (freshLocalProvider,
                 localStackAllocator,
                 eventConsumer,
-                ignore, // context
+                context,
                 methodProcessingContext,
                 desugaringCollection,
                 dexItemFactory) ->
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
index 301802b..9a8ba77 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
@@ -56,29 +56,36 @@
 
     if (method.getAccessFlags().isFinal()) {
       // This method is final thus we can use invoke-virtual.
-      return DesugarDescription.builder()
-          .setDesugarRewrite(
-              (freshLocalProvider,
-                  localStackAllocator,
-                  eventConsumer,
-                  ignore, // context
-                  methodProcessingContext,
-                  desugaringCollection,
-                  dexItemFactory) ->
-                  ImmutableList.of(
-                      new CfInvoke(
-                          Opcodes.INVOKEVIRTUAL, invoke.getMethod(), invoke.isInterface())))
-          .build();
+      return desugarToInvokeVirtual(invoke);
     }
 
     // This is an invoke-special to a virtual method on invoke-special method holder.
     // The invoke should be rewritten with a bridge.
+    return desugarWithBridge(invoke, method);
+  }
+
+  private DesugarDescription desugarToInvokeVirtual(CfInvoke invoke) {
     return DesugarDescription.builder()
         .setDesugarRewrite(
             (freshLocalProvider,
                 localStackAllocator,
                 eventConsumer,
-                ignore, // context
+                context,
+                methodProcessingContext,
+                desugaringCollection,
+                dexItemFactory) ->
+                ImmutableList.of(
+                    new CfInvoke(Opcodes.INVOKEVIRTUAL, invoke.getMethod(), invoke.isInterface())))
+        .build();
+  }
+
+  private DesugarDescription desugarWithBridge(CfInvoke invoke, ProgramMethod method) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                context,
                 methodProcessingContext,
                 desugaringCollection,
                 dexItemFactory) ->
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
index 8c625a7..c33361a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
@@ -71,13 +71,16 @@
     if (!isLambdaInvoke(instruction, context, appView)) {
       return DesugarDescription.nothing();
     }
+    return desugarInstruction(instruction);
+  }
 
+  private DesugarDescription desugarInstruction(CfInstruction instruction) {
     return DesugarDescription.builder()
         .setDesugarRewrite(
             (freshLocalProvider,
                 localStackAllocator,
                 eventConsumer,
-                ignore, // context
+                context,
                 methodProcessingContext,
                 desugaringCollection,
                 dexItemFactory) ->
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
index 27d7c36..e5cb38c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
@@ -33,13 +33,11 @@
 import com.android.tools.r8.ir.desugar.CfInstructionDesugaringEventConsumer;
 import com.android.tools.r8.ir.desugar.DesugarDescription;
 import com.android.tools.r8.ir.desugar.LambdaDescriptor;
-import com.android.tools.r8.ir.desugar.LocalStackAllocator;
 import com.android.tools.r8.ir.desugar.ProgramAdditions;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -313,34 +311,14 @@
   public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
     if (instruction.isFieldInstruction()) {
       if (needsDesugaring(instruction.asFieldInstruction().getField(), context)) {
-        return DesugarDescription.builder()
-            .setDesugarRewrite(
-                (freshLocalProvider,
-                    localStackAllocator,
-                    eventConsumer,
-                    ignore, // context
-                    methodProcessingContext,
-                    desugaringCollection,
-                    dexItemFactory) ->
-                    desugarFieldInstruction(instruction.asFieldInstruction(), context))
-            .build();
+        return desugarFieldInstruction(instruction.asFieldInstruction());
       } else {
         return DesugarDescription.nothing();
       }
     }
     if (instruction.isInvoke()) {
       if (needsDesugaring(instruction.asInvoke().getMethod(), context)) {
-        return DesugarDescription.builder()
-            .setDesugarRewrite(
-                (freshLocalProvider,
-                    localStackAllocator,
-                    eventConsumer,
-                    ignore, // context
-                    methodProcessingContext,
-                    desugaringCollection,
-                    dexItemFactory) ->
-                    desugarInvokeInstruction(instruction.asInvoke(), localStackAllocator, context))
-            .build();
+        return desugarInvokeInstruction(instruction.asInvoke());
       } else {
         return DesugarDescription.nothing();
       }
@@ -348,47 +326,72 @@
     return DesugarDescription.nothing();
   }
 
-  private List<CfInstruction> desugarFieldInstruction(
-      CfFieldInstruction instruction, ProgramMethod context) {
-    BridgeAndTarget<DexClassAndField> bridgeAndTarget =
-        bridgeAndTargetForDesugaring(instruction.getField(), instruction.isFieldGet(), context);
-    if (bridgeAndTarget == null) {
-      return null;
-    }
-    // All bridges for program fields must have been added through the prepare step.
-    assert !bridgeAndTarget.getTarget().isProgramField()
-        || bridgeAndTarget.getTarget().getHolder().lookupDirectMethod(bridgeAndTarget.getBridge())
-            != null;
-    return ImmutableList.of(
-        new CfInvoke(
-            Opcodes.INVOKESTATIC,
-            bridgeAndTarget.getBridge(),
-            bridgeAndTarget.getTarget().getHolder().isInterface()));
+  private DesugarDescription desugarFieldInstruction(CfFieldInstruction instruction) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                context,
+                methodProcessingContext,
+                desugaringCollection,
+                dexItemFactory) -> {
+              BridgeAndTarget<DexClassAndField> bridgeAndTarget =
+                  bridgeAndTargetForDesugaring(
+                      instruction.getField(), instruction.isFieldGet(), context);
+              assert bridgeAndTarget != null;
+              // All bridges for program fields must have been added through the prepare step.
+              assert !bridgeAndTarget.getTarget().isProgramField()
+                  || bridgeAndTarget
+                          .getTarget()
+                          .getHolder()
+                          .lookupDirectMethod(bridgeAndTarget.getBridge())
+                      != null;
+              return ImmutableList.of(
+                  new CfInvoke(
+                      Opcodes.INVOKESTATIC,
+                      bridgeAndTarget.getBridge(),
+                      bridgeAndTarget.getTarget().getHolder().isInterface()));
+            })
+        .build();
   }
 
-  private List<CfInstruction> desugarInvokeInstruction(
-      CfInvoke invoke, LocalStackAllocator localStackAllocator, ProgramMethod context) {
-    DexMethod invokedMethod = invoke.getMethod();
-    BridgeAndTarget<DexClassAndMethod> bridgeAndTarget =
-        bridgeAndTargetForDesugaring(invokedMethod, context, this::getConstructorArgumentClass);
-    if (bridgeAndTarget == null) {
-      return null;
-    }
-    // All bridges for program methods must have been added through the prepare step.
-    assert !bridgeAndTarget.getTarget().isProgramMethod()
-        || bridgeAndTarget.getTarget().getHolder().lookupDirectMethod(bridgeAndTarget.getBridge())
-            != null;
-    if (bridgeAndTarget.getTarget().getDefinition().isInstanceInitializer()) {
-      assert !invoke.isInterface();
-      // Ensure room on the stack for the extra null argument.
-      localStackAllocator.allocateLocalStack(1);
-      return ImmutableList.of(
-          new CfConstNull(),
-          new CfInvoke(Opcodes.INVOKESPECIAL, bridgeAndTarget.getBridge(), false));
-    }
+  private DesugarDescription desugarInvokeInstruction(CfInvoke invoke) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                context,
+                methodProcessingContext,
+                desugaringCollection,
+                dexItemFactory) -> {
+              DexMethod invokedMethod = invoke.getMethod();
+              BridgeAndTarget<DexClassAndMethod> bridgeAndTarget =
+                  bridgeAndTargetForDesugaring(
+                      invokedMethod, context, this::getConstructorArgumentClass);
+              assert bridgeAndTarget != null;
+              // All bridges for program methods must have been added through the prepare step.
+              assert !bridgeAndTarget.getTarget().isProgramMethod()
+                  || bridgeAndTarget
+                          .getTarget()
+                          .getHolder()
+                          .lookupDirectMethod(bridgeAndTarget.getBridge())
+                      != null;
+              if (bridgeAndTarget.getTarget().getDefinition().isInstanceInitializer()) {
+                assert !invoke.isInterface();
+                // Ensure room on the stack for the extra null argument.
+                localStackAllocator.allocateLocalStack(1);
+                return ImmutableList.of(
+                    new CfConstNull(),
+                    new CfInvoke(Opcodes.INVOKESPECIAL, bridgeAndTarget.getBridge(), false));
+              }
 
-    return ImmutableList.of(
-        new CfInvoke(Opcodes.INVOKESTATIC, bridgeAndTarget.getBridge(), invoke.isInterface()));
+              return ImmutableList.of(
+                  new CfInvoke(
+                      Opcodes.INVOKESTATIC, bridgeAndTarget.getBridge(), invoke.isInterface()));
+            })
+        .build();
   }
 
   RuntimeException reportIncompleteNest(LibraryMember<?, ?> member) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java
index ffbea66..cc5e605 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java
@@ -173,22 +173,7 @@
   public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
     if (instruction.isInvokeDynamic()) {
       if (needsDesugaring(instruction.asInvokeDynamic(), context)) {
-        return DesugarDescription.builder()
-            .setDesugarRewrite(
-                (freshLocalProvider,
-                    localStackAllocator,
-                    eventConsumer,
-                    ignore, // context
-                    methodProcessingContext,
-                    desugaringCollection,
-                    dexItemFactory) ->
-                    desugarInvokeDynamicOnRecord(
-                        instruction.asInvokeDynamic(),
-                        localStackAllocator,
-                        eventConsumer,
-                        context,
-                        methodProcessingContext))
-            .build();
+        return desugarInvokeDynamic(instruction);
       } else {
         return DesugarDescription.nothing();
       }
@@ -199,18 +184,7 @@
         DexMethod newMethod =
             rewriteMethod(cfInvoke.getMethod(), cfInvoke.isInvokeSuper(context.getHolderType()));
         assert newMethod != cfInvoke.getMethod();
-        return DesugarDescription.builder()
-            .setDesugarRewrite(
-                (freshLocalProvider,
-                    localStackAllocator,
-                    eventConsumer,
-                    ignore, // context
-                    methodProcessingContext,
-                    desugaringCollection,
-                    dexItemFactory) ->
-                    Collections.singletonList(
-                        new CfInvoke(cfInvoke.getOpcode(), newMethod, cfInvoke.isInterface())))
-            .build();
+        return desugarInvoke(cfInvoke, newMethod);
       } else {
         return DesugarDescription.nothing();
       }
@@ -218,6 +192,40 @@
     return DesugarDescription.nothing();
   }
 
+  private DesugarDescription desugarInvokeDynamic(CfInstruction instruction) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                context,
+                methodProcessingContext,
+                desugaringCollection,
+                dexItemFactory) ->
+                desugarInvokeDynamicOnRecord(
+                    instruction.asInvokeDynamic(),
+                    localStackAllocator,
+                    eventConsumer,
+                    context,
+                    methodProcessingContext))
+        .build();
+  }
+
+  private DesugarDescription desugarInvoke(CfInvoke invoke, DexMethod newMethod) {
+    return DesugarDescription.builder()
+        .setDesugarRewrite(
+            (freshLocalProvider,
+                localStackAllocator,
+                eventConsumer,
+                context,
+                methodProcessingContext,
+                desugaringCollection,
+                dexItemFactory) ->
+                Collections.singletonList(
+                    new CfInvoke(invoke.getOpcode(), newMethod, invoke.isInterface())))
+        .build();
+  }
+
   private List<CfInstruction> desugarInvokeDynamicOnRecord(
       CfInvokeDynamic invokeDynamic,
       LocalStackAllocator localStackAllocator,
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 726ce09..994d47f 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
@@ -80,7 +80,7 @@
           return desugarMakeConcat(invoke);
         }
         if (bootstrapMethod == factory.stringConcatFactoryMembers.makeConcatWithConstants) {
-          return desugarMakeConcatWithConstants(invoke, context);
+          return desugarMakeConcatWithConstants(invoke);
         }
       }
     }
@@ -122,14 +122,13 @@
     return builder.desugar(localStackAllocator);
   }
 
-  private DesugarDescription desugarMakeConcatWithConstants(
-      CfInvokeDynamic invoke, ProgramMethod context) {
+  private DesugarDescription desugarMakeConcatWithConstants(CfInvokeDynamic invoke) {
     return DesugarDescription.builder()
         .setDesugarRewrite(
             (freshLocalProvider,
                 localStackAllocator,
                 eventConsumer,
-                ignore, // context
+                context,
                 methodProcessingContext,
                 desugaringCollection,
                 dexItemFactory) ->