Revert "Don't use accessors for lambdas to interface companion methods."
This reverts commit 92e343b297c9d5ce1ed21604c534bf74859050e0.
Reason for revert: failing test
Change-Id: I4940aca525bbcbeb0c0572fe86bf5212ada19d86
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
index 227270d..71bc104 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
@@ -28,7 +28,6 @@
INVOKE_DIRECT((short) 0x07),
INVOKE_INTERFACE((short) 0x08),
// Internal method handle needed by lambda desugaring.
- // TODO(b/200254463): Remove this now that lambda desugaring is CF/CF.
INVOKE_SUPER((short) 0x09);
private final short value;
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 2e9fcab..9b2a145 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
@@ -75,7 +75,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (!instruction.isInvoke()) {
return null;
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 4d9ec0e..ea1cd46 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
@@ -38,7 +38,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (!isInvokeCandidate(instruction)) {
return null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaring.java
index 810812a..513a9d5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaring.java
@@ -40,7 +40,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory);
/**
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringCollection.java
index 5053f86..ada494f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringCollection.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.ir.desugar;
import com.android.tools.r8.androidapi.AndroidApiLevelCompute;
-import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.ProgramMethod;
@@ -16,7 +15,6 @@
import com.android.tools.r8.ir.desugar.itf.InterfaceProcessor;
import com.android.tools.r8.ir.desugar.nest.D8NestBasedAccessDesugaring;
import com.android.tools.r8.utils.ThrowingConsumer;
-import java.util.Collection;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -58,15 +56,6 @@
MethodProcessingContext methodProcessingContext,
CfInstructionDesugaringEventConsumer eventConsumer);
- /** Selective desugaring of a single invoke instruction assuming a given context. */
- public abstract Collection<CfInstruction> desugarInstruction(
- CfInstruction instruction,
- FreshLocalProvider freshLocalProvider,
- LocalStackAllocator localStackAllocator,
- CfInstructionDesugaringEventConsumer eventConsumer,
- ProgramMethod context,
- MethodProcessingContext methodProcessingContext);
-
public boolean isEmpty() {
return false;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/EmptyCfInstructionDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/EmptyCfInstructionDesugaringCollection.java
index ef793c4..027b27c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/EmptyCfInstructionDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/EmptyCfInstructionDesugaringCollection.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.ir.desugar;
-import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryAPIConverter;
@@ -14,7 +13,6 @@
import com.android.tools.r8.ir.desugar.itf.InterfaceProcessor;
import com.android.tools.r8.ir.desugar.nest.D8NestBasedAccessDesugaring;
import com.android.tools.r8.utils.ThrowingConsumer;
-import java.util.Collection;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -49,18 +47,6 @@
}
@Override
- public Collection<CfInstruction> desugarInstruction(
- CfInstruction instruction,
- FreshLocalProvider freshLocalProvider,
- LocalStackAllocator localStackAllocator,
- CfInstructionDesugaringEventConsumer eventConsumer,
- ProgramMethod context,
- MethodProcessingContext methodProcessingContext) {
- // Nothing to desugar.
- return null;
- }
-
- @Override
public boolean isEmpty() {
return true;
}
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 65f23dc..7fd31a8 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,7 +35,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (!instruction.isInvokeVirtual() && !instruction.isInvokeInterface()) {
return null;
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 2c815a1..afedd24 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
@@ -33,7 +33,6 @@
import com.android.tools.r8.ir.code.Invoke.Type;
import com.android.tools.r8.ir.desugar.lambda.ForcefullyMovedLambdaMethodConsumer;
import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring;
-import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring.DesugarInvoke;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
import com.android.tools.r8.synthesis.SyntheticProgramClassBuilder;
@@ -41,7 +40,6 @@
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
-import org.objectweb.asm.Opcodes;
/**
* Represents lambda class generated for a lambda descriptor in context of lambda instantiation
@@ -83,8 +81,7 @@
AppView<?> appView,
LambdaInstructionDesugaring desugaring,
ProgramMethod accessedFrom,
- LambdaDescriptor descriptor,
- DesugarInvoke desugarInvoke) {
+ LambdaDescriptor descriptor) {
assert desugaring != null;
assert descriptor != null;
this.type = builder.getType();
@@ -108,7 +105,7 @@
!stateless ? null : factory.createField(type, type, factory.lambdaInstanceFieldName);
// Synthesize the program class once all fields are set.
- synthesizeLambdaClass(builder, desugarInvoke);
+ synthesizeLambdaClass(builder);
}
public final DexProgramClass getLambdaProgramClass() {
@@ -127,13 +124,12 @@
this.clazz = clazz;
}
- private void synthesizeLambdaClass(
- SyntheticProgramClassBuilder builder, DesugarInvoke desugarInvoke) {
+ private void synthesizeLambdaClass(SyntheticProgramClassBuilder builder) {
builder.setInterfaces(descriptor.interfaces);
synthesizeStaticFields(builder);
synthesizeInstanceFields(builder);
synthesizeDirectMethods(builder);
- synthesizeVirtualMethods(builder, desugarInvoke);
+ synthesizeVirtualMethods(builder);
}
final DexField getCaptureField(int index) {
@@ -150,8 +146,7 @@
}
// Synthesize virtual methods.
- private void synthesizeVirtualMethods(
- SyntheticProgramClassBuilder builder, DesugarInvoke desugarInvoke) {
+ private void synthesizeVirtualMethods(SyntheticProgramClassBuilder builder) {
DexMethod mainMethod =
appView.dexItemFactory().createMethod(type, descriptor.erasedProto, descriptor.name);
@@ -164,7 +159,7 @@
.setAccessFlags(
MethodAccessFlags.fromSharedAccessFlags(
Constants.ACC_PUBLIC | Constants.ACC_FINAL, false))
- .setCode(LambdaMainMethodSourceCode.build(this, mainMethod, desugarInvoke))
+ .setCode(LambdaMainMethodSourceCode.build(this, mainMethod))
// The api level is computed when tracing.
.disableAndroidApiLevelCheck()
.build());
@@ -266,21 +261,6 @@
}
}
- public static int getAsmOpcodeForInvokeType(MethodHandleType type) {
- switch (type) {
- case INVOKE_INTERFACE:
- return Opcodes.INVOKEINTERFACE;
- case INVOKE_STATIC:
- return Opcodes.INVOKESTATIC;
- case INVOKE_DIRECT:
- return Opcodes.INVOKESPECIAL;
- case INVOKE_INSTANCE:
- return Opcodes.INVOKEVIRTUAL;
- default:
- throw new Unreachable("Unexpected method handle type: " + type);
- }
- }
-
// Creates a delegation target for this particular lambda class. Note that we
// should always be able to create targets for the lambdas we support.
private Target createTarget(ProgramMethod accessedFrom) {
@@ -307,22 +287,12 @@
}
private boolean doesNotNeedAccessor(ProgramMethod accessedFrom) {
- return canAccessModifyLambdaImplMethod()
- || isPrivateOrStaticInterfaceMethodInvokeThatWillBeDesugared()
- || !descriptor.needsAccessor(accessedFrom);
- }
-
- private boolean isPrivateOrStaticInterfaceMethodInvokeThatWillBeDesugared() {
- return appView.options().isInterfaceMethodDesugaringEnabled()
- && descriptor.implHandle.isInterface
- && (descriptor.implHandle.type.isInvokeDirect()
- || descriptor.implHandle.type.isInvokeStatic());
+ return canAccessModifyLambdaImplMethod() || !descriptor.needsAccessor(accessedFrom);
}
private boolean canAccessModifyLambdaImplMethod() {
MethodHandleType invokeType = descriptor.implHandle.type;
return appView.options().canAccessModifyLambdaImplementationMethods(appView)
- && !isPrivateOrStaticInterfaceMethodInvokeThatWillBeDesugared()
&& (invokeType.isInvokeDirect() || invokeType.isInvokeStatic())
&& descriptor.delegatesToLambdaImplMethod(appView.dexItemFactory())
&& !desugaring.isDirectTargetedLambdaImplementationMethod(descriptor.implHandle);
@@ -358,7 +328,7 @@
assert implHandle.type.isInvokeDirect();
// If the lambda$ method is an instance-private method on an interface we convert it into a
- // public static method so it is accessible.
+ // public static method as it will be placed on the companion class.
if (appView.definitionFor(implMethod.holder).isInterface()) {
DexProto implProto = implMethod.proto;
DexType[] implParams = implProto.parameters.values;
@@ -397,11 +367,7 @@
if (doesNotNeedAccessor(accessedFrom)) {
return new NoAccessorMethodTarget(
- descriptor.implHandle.asMethod(),
- descriptor.implHandle.type.isInvokeDirect()
- ? Type.DIRECT
- : descriptor.implHandle.type.isInvokeStatic() ? Type.STATIC : Type.VIRTUAL,
- descriptor.implHandle.isInterface);
+ descriptor.implHandle.asMethod(), Type.VIRTUAL, descriptor.implHandle.isInterface);
}
// We need to generate an accessor method in `accessedFrom` class/interface
// for accessing the original instance impl-method. Note that impl-method's
@@ -557,7 +523,7 @@
}
// Used for targeting methods referenced directly without creating accessors.
- public static final class NoAccessorMethodTarget extends Target {
+ private static final class NoAccessorMethodTarget extends Target {
NoAccessorMethodTarget(DexMethod method, Type invokeType, boolean isInterface) {
super(method, invokeType, isInterface);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
index acfee7b..e0a9c07 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
@@ -25,18 +25,13 @@
import com.android.tools.r8.graph.DexProto;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.desugar.LambdaClass.InvalidLambdaImplTarget;
-import com.android.tools.r8.ir.desugar.LambdaClass.NoAccessorMethodTarget;
-import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring.DesugarInvoke;
-import com.android.tools.r8.utils.IntBox;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Lists;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import org.objectweb.asm.Opcodes;
@@ -171,8 +166,7 @@
}
}
- public static CfCode build(
- LambdaClass lambda, DexMethod mainMethod, DesugarInvoke desugarInvoke) {
+ public static CfCode build(LambdaClass lambda, DexMethod mainMethod) {
DexItemFactory factory = lambda.appView.dexItemFactory();
LambdaClass.Target target = lambda.target;
if (target instanceof InvalidLambdaImplTarget) {
@@ -190,13 +184,11 @@
// Only constructor call should use direct invoke type since super
// and private methods require accessor methods.
- boolean constructorTarget = methodToCall.name == factory.constructorMethodName;
- assert !constructorTarget || target.invokeType == Type.DIRECT;
+ boolean constructorTarget = target.invokeType == Invoke.Type.DIRECT;
+ assert !constructorTarget || methodToCall.name == factory.constructorMethodName;
boolean targetWithReceiver =
- target.invokeType == Invoke.Type.VIRTUAL
- || target.invokeType == Invoke.Type.INTERFACE
- || (target.invokeType == Type.DIRECT && !constructorTarget);
+ target.invokeType == Invoke.Type.VIRTUAL || target.invokeType == Invoke.Type.INTERFACE;
List<DexType> implReceiverAndArgs = new ArrayList<>();
if (targetWithReceiver) {
implReceiverAndArgs.add(methodToCall.holder);
@@ -249,24 +241,8 @@
erasedParams[i], enforcedParams[i], expectedParamType, instructions, factory);
}
- CfInvoke invoke =
- new CfInvoke(target.invokeType.getCfOpcode(), methodToCall, target.isInterface());
- if (target instanceof NoAccessorMethodTarget) {
- IntBox locals = new IntBox();
- IntBox stack = new IntBox();
- Collection<CfInstruction> is =
- desugarInvoke.desugarInvoke(invoke, locals::getAndIncrement, stack::getAndIncrement);
- if (is != null) {
- instructions.addAll(is);
- maxLocals += locals.get();
- maxStack += stack.get();
- } else {
- instructions.add(invoke);
- }
- } else {
- instructions.add(invoke);
- }
-
+ instructions.add(
+ new CfInvoke(target.invokeType.getCfOpcode(), methodToCall, target.isInterface()));
DexType methodToCallReturnType = methodToCall.getReturnType();
if (!methodToCallReturnType.isVoidType()) {
maxStack =
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
index 596f4cc..da0a96a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
@@ -254,8 +254,7 @@
return true;
}
- @Override
- public Collection<CfInstruction> desugarInstruction(
+ private Collection<CfInstruction> desugarInstruction(
CfInstruction instruction,
FreshLocalProvider freshLocalProvider,
LocalStackAllocator localStackAllocator,
@@ -274,7 +273,6 @@
eventConsumer,
context,
methodProcessingContext,
- this,
appView.dexItemFactory());
if (replacement != null) {
assert desugaring.needsDesugaring(instruction, context);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
index 1d55e7e..8ef2e18 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
@@ -13,7 +13,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.ProgramMethod;
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -47,7 +46,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (instruction.isConstDynamic()) {
return desugarConstDynamicInstruction(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java
index 2b6c9d4..4634977 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryAPIConverter.java
@@ -30,7 +30,6 @@
import com.android.tools.r8.ir.code.MemberType;
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -98,7 +97,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (needsDesugaring(instruction, context)) {
assert instruction.isInvoke();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java
index 5c6d6c1..73d7f8f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeter.java
@@ -20,7 +20,6 @@
import com.android.tools.r8.graph.MethodResolutionResult;
import com.android.tools.r8.graph.ProgramMethod;
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -70,7 +69,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
InvokeRetargetingResult invokeRetargetingResult = computeNewInvokeTarget(instruction, context);
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 428bdd0..dfb797c 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
@@ -15,7 +15,6 @@
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.ProgramMethod;
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -74,7 +73,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (instruction.isInvokeSpecial()) {
return desugarInvokeInstruction(instruction.asInvoke(), eventConsumer, context);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
index db52706..87e0d65 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
@@ -30,7 +30,6 @@
import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
import com.android.tools.r8.graph.ProgramMethod;
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;
@@ -249,7 +248,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
assert !isSyntheticMethodThatShouldNotBeDoubleProcessed(context);
return computeDescription(instruction, context)
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 206c276..71010c3 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
@@ -24,7 +24,6 @@
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LambdaClass;
@@ -76,7 +75,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (instruction.isInvokeDynamic()) {
return desugarInvokeDynamicInstruction(
@@ -85,36 +83,19 @@
localStackAllocator,
eventConsumer,
context,
- methodProcessingContext,
- (invoke, localProvider, stackAllocator) ->
- desugaringCollection.desugarInstruction(
- invoke,
- localProvider,
- stackAllocator,
- eventConsumer,
- context,
- methodProcessingContext));
+ methodProcessingContext);
}
return null;
}
- public interface DesugarInvoke {
- Collection<CfInstruction> desugarInvoke(
- CfInvoke invoke,
- FreshLocalProvider freshLocalProvider,
- LocalStackAllocator localStackAllocator);
- }
-
private Collection<CfInstruction> desugarInvokeDynamicInstruction(
CfInvokeDynamic invoke,
FreshLocalProvider freshLocalProvider,
LocalStackAllocator localStackAllocator,
LambdaDesugaringEventConsumer eventConsumer,
ProgramMethod context,
- MethodProcessingContext methodProcessingContext,
- DesugarInvoke desugarInvoke) {
- LambdaClass lambdaClass =
- createLambdaClass(invoke, context, methodProcessingContext, desugarInvoke);
+ MethodProcessingContext methodProcessingContext) {
+ LambdaClass lambdaClass = createLambdaClass(invoke, context, methodProcessingContext);
if (lambdaClass == null) {
return null;
}
@@ -153,8 +134,7 @@
private LambdaClass createLambdaClass(
CfInvokeDynamic invoke,
ProgramMethod context,
- MethodProcessingContext methodProcessingContext,
- DesugarInvoke desugarInvoke) {
+ MethodProcessingContext methodProcessingContext) {
LambdaDescriptor descriptor =
LambdaDescriptor.tryInfer(invoke.getCallSite(), appView.appInfoForDesugaring(), context);
if (descriptor == null) {
@@ -169,10 +149,7 @@
SyntheticNaming.SyntheticKind.LAMBDA,
methodProcessingContext.createUniqueContext(),
appView,
- builder ->
- box.set(
- new LambdaClass(
- builder, appView, this, context, descriptor, desugarInvoke)));
+ builder -> box.set(new LambdaClass(builder, appView, this, context, descriptor)));
// Immediately set the actual program class on the lambda.
LambdaClass lambdaClass = box.get();
lambdaClass.setClass(clazz);
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 f9ca2e9..87adb53 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
@@ -31,7 +31,6 @@
import com.android.tools.r8.graph.ProgramField;
import com.android.tools.r8.graph.ProgramMethod;
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -269,7 +268,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (instruction.isFieldInstruction()) {
return desugarFieldInstruction(instruction.asFieldInstruction(), context, eventConsumer);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
index 3f5c1cb..1f16c1b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
@@ -39,7 +39,6 @@
import com.android.tools.r8.ir.desugar.CfClassSynthesizerDesugaring;
import com.android.tools.r8.ir.desugar.CfClassSynthesizerDesugaringEventConsumer;
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.CfPostProcessingDesugaring;
import com.android.tools.r8.ir.desugar.CfPostProcessingDesugaringEventConsumer;
@@ -168,7 +167,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
assert !instruction.isInitClass();
if (!needsDesugaring(instruction, context)) {
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..607b088 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
@@ -29,7 +29,6 @@
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -77,7 +76,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (instruction.isInvokeDynamic()) {
// We are interested in bootstrap methods StringConcatFactory::makeConcat
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
index 716b6e2..ee71bc0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
@@ -21,7 +21,6 @@
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.FreshLocalProvider;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -58,7 +57,6 @@
CfInstructionDesugaringEventConsumer eventConsumer,
ProgramMethod context,
MethodProcessingContext methodProcessingContext,
- CfInstructionDesugaringCollection desugaringCollection,
DexItemFactory dexItemFactory) {
if (!instruction.isInvoke()) {
return null;
diff --git a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaPrivateInstanceInterfaceMethodWithNonLambdaCallSiteTest.java b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaPrivateInstanceInterfaceMethodWithNonLambdaCallSiteTest.java
index 6961fe9..7d0b2fa 100644
--- a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaPrivateInstanceInterfaceMethodWithNonLambdaCallSiteTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaPrivateInstanceInterfaceMethodWithNonLambdaCallSiteTest.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.desugar.lambdas;
-import static org.junit.Assert.assertFalse;
-
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -43,21 +41,7 @@
.addProgramClasses(Main.class, A.class, FunctionalInterface.class)
.addProgramClassFileData(getProgramClassFileData())
.run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutputLines("Hello world!", "Hello world!")
- .inspect(
- inspector -> {
- if (parameters.isDexRuntime()
- && !parameters.canUseDefaultAndStaticInterfaceMethods()) {
- inspector
- .clazz(I.class)
- .toCompanionClass()
- .forAllMethods(
- m ->
- // We don't expect any synthetic accessors to be needed for the private
- // interface method.
- assertFalse("Unexpected synthetic method: " + m, m.isSynthetic()));
- }
- });
+ .assertSuccessWithOutputLines("Hello world!", "Hello world!");
}
@Test
diff --git a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaWithPrivateInterfaceInvokeTest.java b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaWithPrivateInterfaceInvokeTest.java
deleted file mode 100644
index d454273..0000000
--- a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaWithPrivateInterfaceInvokeTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.desugar.lambdas;
-
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.StringUtils;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class LambdaWithPrivateInterfaceInvokeTest extends TestBase {
-
- static final String EXPECTED = StringUtils.lines("Hello world");
-
- private final TestParameters parameters;
-
- @Parameterized.Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
- }
-
- public LambdaWithPrivateInterfaceInvokeTest(TestParameters parameters) {
- this.parameters = parameters;
- }
-
- @Test
- public void testReference() throws Exception {
- testForRuntime(parameters)
- .addProgramClasses(TestClass.class, MyFun.class, A.class)
- .addProgramClassFileData(getTransformForI())
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(EXPECTED);
- }
-
- @Test
- public void testR8() throws Exception {
- testForR8(parameters.getBackend())
- .addProgramClasses(TestClass.class, MyFun.class, A.class)
- .addProgramClassFileData(getTransformForI())
- .addKeepMainRule(TestClass.class)
- .setMinApi(parameters.getApiLevel())
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(EXPECTED);
- }
-
- private byte[] getTransformForI() throws Exception {
- return transformer(I.class).setPrivate(I.class.getDeclaredMethod("bar")).transform();
- }
-
- interface I {
- /* private */ default String bar() {
- return "Hello world";
- }
-
- default void foo() {
- TestClass.run(
- () -> {
- System.out.println(bar());
- });
- }
- }
-
- interface MyFun {
- void run();
- }
-
- static class A implements I {}
-
- static class TestClass {
-
- public static void run(MyFun fn) {
- fn.run();
- }
-
- public static void main(String[] args) {
- new A().foo();
- }
- }
-}