Reuse references from DexItemFactory in lambda desugaring
Change-Id: I470c67165d4801015377168af5090554dbbb50e3
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 0dcaf2a..6bb06d5 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
@@ -86,14 +86,17 @@
DexItemFactory factory = rewriter.getFactory();
DexProto constructorProto = factory.createProto(
factory.voidType, descriptor.captures.values);
- this.constructor = factory.createMethod(
- lambdaClassType, constructorProto, rewriter.constructorName);
+ this.constructor =
+ factory.createMethod(lambdaClassType, constructorProto, factory.constructorMethodName);
this.target = createTarget(accessedFrom);
boolean stateless = isStateless();
- this.classConstructor = !stateless ? null
- : factory.createMethod(lambdaClassType, constructorProto, rewriter.classConstructorName);
+ this.classConstructor =
+ !stateless
+ ? null
+ : factory.createMethod(
+ lambdaClassType, constructorProto, factory.classConstructorMethodName);
this.lambdaField =
!stateless
? null
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
index 4a12b2b..2900761 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
@@ -22,7 +22,7 @@
@Override
protected void prepareInstructions() {
// Super constructor call (always java.lang.Object.<init>()).
- DexMethod objectInitMethod = lambda.rewriter.objectInitMethod;
+ DexMethod objectInitMethod = factory().objectMethods.constructor;
add(
builder -> {
assert builder.getReceiverValue() != null;
@@ -55,7 +55,8 @@
// be treated as equal, since it only has one call to super constructor,
// which is always java.lang.Object.<init>().
return captures().length == 0
- ? System.identityHashCode(lambda.rewriter.objectInitMethod) : super.hashCode();
+ ? System.identityHashCode(factory().objectMethods.constructor)
+ : super.hashCode();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSynthesizedCode.java
index 29fb5c8..906e15f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSynthesizedCode.java
@@ -22,7 +22,7 @@
@Override
public Consumer<UseRegistry> getRegistryCallback() {
return registry -> {
- registry.registerInvokeDirect(lambda.rewriter.objectInitMethod);
+ registry.registerInvokeDirect(dexItemFactory().objectMethods.constructor);
DexType[] capturedTypes = captures();
for (int i = 0; i < capturedTypes.length; i++) {
registry.registerInstanceFieldWrite(lambda.getCaptureField(i));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index f093a78..eb8ba3d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -66,10 +66,6 @@
private final AppView<?> appView;
- final DexMethod objectInitMethod;
-
- final DexString constructorName;
- final DexString classConstructorName;
final DexString instanceFieldName;
private final LambdaRewriterGraphLense graphLens;
@@ -94,14 +90,6 @@
public LambdaRewriter(AppView<?> appView) {
this.appView = appView;
this.graphLens = new LambdaRewriterGraphLense(appView);
- this.constructorName = getFactory().createString(Constants.INSTANCE_INITIALIZER_NAME);
- this.objectInitMethod =
- getFactory()
- .createMethod(
- getFactory().objectType,
- getFactory().createProto(getFactory().voidType),
- constructorName);
- this.classConstructorName = getFactory().createString(Constants.CLASS_INITIALIZER_NAME);
this.instanceFieldName = getFactory().createString(LAMBDA_INSTANCE_FIELD_NAME);
}