Inline all calls to DexEncodedMethod.create
Change-Id: I02ceffaef4a4354be2bf07619da52b05dc448e7c
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 22b810e..6c9025d 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -33,7 +33,6 @@
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.LazyLoadedDexApplication;
import com.android.tools.r8.graph.MethodAccessFlags;
-import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryConfiguration;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryConfigurationParser;
@@ -153,17 +152,12 @@
code = buildEmptyThrowingCfCode(method.getReference());
}
DexEncodedMethod throwingMethod =
- DexEncodedMethod.create(
- method.getReference(),
- method.accessFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- code,
- CfVersion.V1_6,
- AndroidApiLevel.UNKNOWN,
- AndroidApiLevel.UNKNOWN,
- false)
+ DexEncodedMethod.builder()
+ .setMethod(method.getReference())
+ .setAccessFlags(method.accessFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setCode(code)
+ .setClassFileVersion(CfVersion.V1_6)
.build();
if (method.isStatic() || method.isDirectMethod()) {
directMethods.add(throwingMethod);
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 9a0bba5..68a9a67 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -696,13 +696,14 @@
}
}
methods[i] =
- DexEncodedMethod.create(
- method,
- accessFlags,
- methodTypeSignature,
- methodAnnotations,
- parameterAnnotationsIterator.getNextFor(method),
- code);
+ DexEncodedMethod.builder()
+ .setMethod(method)
+ .setAccessFlags(accessFlags)
+ .setGenericSignature(methodTypeSignature)
+ .setAnnotations(methodAnnotations)
+ .setParameterAnnotations(parameterAnnotationsIterator.getNextFor(method))
+ .setCode(code)
+ .build();
}
return methods;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index f584196..9cc0945 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -1253,17 +1253,19 @@
// Some debuggers (like IntelliJ) automatically skip synthetic methods on single step.
newFlags.setSynthetic();
newFlags.unsetAbstract();
- return DexEncodedMethod.createSynthetic(
- newMethod,
- newFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- ForwardMethodBuilder.builder(factory)
- .setNonStaticSource(newMethod)
- // Holder is companion class, or retarget method, not an interface.
- .setStaticTarget(forwardMethod, false)
- .build());
+ // Holder is companion class, or retarget method, not an interface.
+ return syntheticBuilder()
+ .setMethod(newMethod)
+ .setAccessFlags(newFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setCode(
+ ForwardMethodBuilder.builder(factory)
+ .setNonStaticSource(newMethod)
+ // Holder is companion class, or retarget method, not an interface.
+ .setStaticTarget(forwardMethod, false)
+ .build())
+ .build();
}
public DexEncodedMethod toStaticMethodWithoutThis(AppView<AppInfoWithLiveness> appView) {
@@ -1405,134 +1407,6 @@
this.genericSignature = MethodTypeSignature.noSignature();
}
- public static DexEncodedMethod create(
- DexMethod method,
- MethodAccessFlags accessFlags,
- MethodTypeSignature genericSignature,
- DexAnnotationSet annotations,
- ParameterAnnotationsList parameterAnnotationsList,
- Code code) {
- return builder()
- .setMethod(method)
- .setAccessFlags(accessFlags)
- .setGenericSignature(genericSignature)
- .setAnnotations(annotations)
- .setParameterAnnotations(parameterAnnotationsList)
- .setCode(code)
- .build();
- }
-
- public static DexEncodedMethod createSynthetic(
- DexMethod method,
- MethodAccessFlags accessFlags,
- MethodTypeSignature genericSignature,
- DexAnnotationSet annotations,
- ParameterAnnotationsList parameterAnnotationsList,
- Code code) {
- return syntheticBuilder()
- .setMethod(method)
- .setAccessFlags(accessFlags)
- .setGenericSignature(genericSignature)
- .setAnnotations(annotations)
- .setParameterAnnotations(parameterAnnotationsList)
- .setCode(code)
- .build();
- }
-
- public static DexEncodedMethod create(
- DexMethod method,
- MethodAccessFlags accessFlags,
- MethodTypeSignature genericSignature,
- DexAnnotationSet annotations,
- ParameterAnnotationsList parameterAnnotationsList,
- Code code,
- CfVersion classFileVersion,
- AndroidApiLevel apiLevelForDefinition,
- AndroidApiLevel apiLevelForCode) {
- return builder()
- .setMethod(method)
- .setAccessFlags(accessFlags)
- .setGenericSignature(genericSignature)
- .setAnnotations(annotations)
- .setParameterAnnotations(parameterAnnotationsList)
- .setCode(code)
- .setClassFileVersion(classFileVersion)
- .setApiLevelForDefinition(apiLevelForDefinition)
- .setApiLevelForCode(apiLevelForCode)
- .build();
- }
-
- public static DexEncodedMethod createSynthetic(
- DexMethod method,
- MethodAccessFlags accessFlags,
- MethodTypeSignature genericSignature,
- DexAnnotationSet annotations,
- ParameterAnnotationsList parameterAnnotationsList,
- Code code,
- CfVersion classFileVersion,
- AndroidApiLevel apiLevelForDefinition,
- AndroidApiLevel apiLevelForCode) {
- return syntheticBuilder()
- .setMethod(method)
- .setAccessFlags(accessFlags)
- .setGenericSignature(genericSignature)
- .setAnnotations(annotations)
- .setParameterAnnotations(parameterAnnotationsList)
- .setCode(code)
- .setClassFileVersion(classFileVersion)
- .setApiLevelForDefinition(apiLevelForDefinition)
- .setApiLevelForCode(apiLevelForCode)
- .build();
- }
-
- public static DexEncodedMethod.Builder create(
- DexMethod method,
- MethodAccessFlags accessFlags,
- MethodTypeSignature genericSignature,
- DexAnnotationSet annotations,
- ParameterAnnotationsList parameterAnnotationsList,
- Code code,
- CfVersion classFileVersion,
- AndroidApiLevel apiLevelForDefinition,
- AndroidApiLevel apiLevelForCode,
- boolean deprecated) {
- return builder()
- .setMethod(method)
- .setAccessFlags(accessFlags)
- .setGenericSignature(genericSignature)
- .setAnnotations(annotations)
- .setParameterAnnotations(parameterAnnotationsList)
- .setCode(code)
- .setClassFileVersion(classFileVersion)
- .setApiLevelForDefinition(apiLevelForDefinition)
- .setApiLevelForCode(apiLevelForCode)
- .setDeprecated(deprecated);
- }
-
- public static DexEncodedMethod.Builder createSynthetic(
- DexMethod method,
- MethodAccessFlags accessFlags,
- MethodTypeSignature genericSignature,
- DexAnnotationSet annotations,
- ParameterAnnotationsList parameterAnnotationsList,
- Code code,
- CfVersion classFileVersion,
- AndroidApiLevel apiLevelForDefinition,
- AndroidApiLevel apiLevelForCode,
- boolean deprecated) {
- return syntheticBuilder()
- .setMethod(method)
- .setAccessFlags(accessFlags)
- .setGenericSignature(genericSignature)
- .setAnnotations(annotations)
- .setParameterAnnotations(parameterAnnotationsList)
- .setCode(code)
- .setClassFileVersion(classFileVersion)
- .setApiLevelForDefinition(apiLevelForDefinition)
- .setApiLevelForCode(apiLevelForCode)
- .setDeprecated(deprecated);
- }
-
public static Builder syntheticBuilder() {
return new Builder(true);
}
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 9eaf023..de21f86 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -902,17 +902,17 @@
parent.application.getFactory()));
}
DexEncodedMethod dexMethod =
- DexEncodedMethod.create(
- method,
- flags,
- genericSignature,
- createAnnotationSet(annotations, options),
- parameterAnnotationsList,
- code,
- parent.version,
- AndroidApiLevel.UNKNOWN,
- AndroidApiLevel.UNKNOWN,
- deprecated)
+ DexEncodedMethod.builder()
+ .setMethod(method)
+ .setAccessFlags(flags)
+ .setGenericSignature(genericSignature)
+ .setAnnotations(createAnnotationSet(annotations, options))
+ .setParameterAnnotations(parameterAnnotationsList)
+ .setCode(code)
+ .setClassFileVersion(parent.version)
+ .setApiLevelForDefinition(AndroidApiLevel.UNKNOWN)
+ .setApiLevelForCode(AndroidApiLevel.UNKNOWN)
+ .setDeprecated(deprecated)
.disableParameterAnnotationListCheck()
.build();
Wrapper<DexMethod> signature = MethodSignatureEquivalence.get().wrap(method);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
index f17015a..8854d1d 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
@@ -131,16 +131,17 @@
AndroidApiLevel apiReferenceLevel = classInitializerMerger.getApiReferenceLevel(appView);
DexEncodedMethod definition =
- DexEncodedMethod.createSynthetic(
- newMethodReference,
- MethodAccessFlags.createForClassInitializer(),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- classInitializerMerger.getCode(syntheticMethodReference),
- classInitializerMerger.getCfVersion(),
- apiReferenceLevel,
- apiReferenceLevel);
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(newMethodReference)
+ .setAccessFlags(MethodAccessFlags.createForClassInitializer())
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(classInitializerMerger.getCode(syntheticMethodReference))
+ .setClassFileVersion(classInitializerMerger.getCfVersion())
+ .setApiLevelForDefinition(apiReferenceLevel)
+ .setApiLevelForCode(apiReferenceLevel)
+ .build();
classMethodsBuilder.addDirectMethod(definition);
// In case we didn't synthesize CF code, we register the class initializer for conversion to dex
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
index 0daea92e..e76ef81 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
@@ -362,16 +362,18 @@
DexEncodedMethod representativeMethod = representative.getDefinition();
DexEncodedMethod newInstanceInitializer =
- DexEncodedMethod.createSynthetic(
- newMethodReference,
- getNewAccessFlags(),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- getNewCode(newMethodReference, syntheticMethodReference, needsClassId, extraNulls),
- getNewClassFileVersion(),
- representativeMethod.getApiLevelForDefinition(),
- representativeMethod.getApiLevelForCode());
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(newMethodReference)
+ .setAccessFlags(getNewAccessFlags())
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(
+ getNewCode(newMethodReference, syntheticMethodReference, needsClassId, extraNulls))
+ .setClassFileVersion(getNewClassFileVersion())
+ .setApiLevelForDefinition(representativeMethod.getApiLevelForDefinition())
+ .setApiLevelForCode(representativeMethod.getApiLevelForCode())
+ .build();
classMethodsBuilder.addDirectMethod(newInstanceInitializer);
if (mode.isFinal()) {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
index 73c777e..1e375d6 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
@@ -278,16 +278,17 @@
bridgeMethodReference,
appView.dexItemFactory());
DexEncodedMethod newMethod =
- DexEncodedMethod.createSynthetic(
- newMethodReference,
- getAccessFlags(),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- synthesizedCode,
- classFileVersion,
- representativeMethod.getApiLevelForDefinition(),
- representativeMethod.getApiLevelForCode());
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(newMethodReference)
+ .setAccessFlags(getAccessFlags())
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(synthesizedCode)
+ .setClassFileVersion(classFileVersion)
+ .setApiLevelForDefinition(representativeMethod.getApiLevelForDefinition())
+ .setApiLevelForCode(representativeMethod.getApiLevelForCode())
+ .build();
if (!representative.getDefinition().isLibraryMethodOverride().isUnknown()) {
newMethod.setLibraryMethodOverride(representative.getDefinition().isLibraryMethodOverride());
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
index dcc79bf..a18d9b9 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
@@ -164,15 +164,18 @@
.setVirtualTarget(methodReference, methodHolder.isInterface())
.setCastResult();
DexEncodedMethod newVirtualMethod =
- DexEncodedMethod.createSynthetic(
- newMethod,
- newAccessFlags,
- methodDefinition.getGenericSignature(),
- methodDefinition
- .annotations()
- .keepIf(x -> !isCovariantReturnTypeAnnotation(x.annotation)),
- methodDefinition.parameterAnnotationsList.keepIf(Predicates.alwaysTrue()),
- forwardMethodBuilder.build());
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(newMethod)
+ .setAccessFlags(newAccessFlags)
+ .setGenericSignature(methodDefinition.getGenericSignature())
+ .setAnnotations(
+ methodDefinition
+ .annotations()
+ .keepIf(x -> !isCovariantReturnTypeAnnotation(x.annotation)))
+ .setParameterAnnotations(
+ methodDefinition.parameterAnnotationsList.keepIf(Predicates.alwaysTrue()))
+ .setCode(forwardMethodBuilder.build())
+ .build();
// Optimize to generate DexCode instead of CfCode.
ProgramMethod programMethod = new ProgramMethod(methodHolder, newVirtualMethod);
converter.optimizeSynthesizedMethod(programMethod);
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 50677f6..cf6954a 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
@@ -159,32 +159,36 @@
// Synthesize main method.
methods.add(
- DexEncodedMethod.createSynthetic(
- mainMethod,
- MethodAccessFlags.fromSharedAccessFlags(
- Constants.ACC_PUBLIC | Constants.ACC_FINAL, false),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- LambdaMainMethodSourceCode.build(this, mainMethod)));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(mainMethod)
+ .setAccessFlags(
+ MethodAccessFlags.fromSharedAccessFlags(
+ Constants.ACC_PUBLIC | Constants.ACC_FINAL, false))
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(LambdaMainMethodSourceCode.build(this, mainMethod))
+ .build());
// Synthesize bridge methods.
for (DexProto bridgeProto : descriptor.bridges) {
DexMethod bridgeMethod =
appView.dexItemFactory().createMethod(type, bridgeProto, descriptor.name);
methods.add(
- DexEncodedMethod.createSynthetic(
- bridgeMethod,
- MethodAccessFlags.fromSharedAccessFlags(
- Constants.ACC_PUBLIC
- | Constants.ACC_FINAL
- | Constants.ACC_SYNTHETIC
- | Constants.ACC_BRIDGE,
- false),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- LambdaBridgeMethodSourceCode.build(this, bridgeMethod, mainMethod)));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(bridgeMethod)
+ .setAccessFlags(
+ MethodAccessFlags.fromSharedAccessFlags(
+ Constants.ACC_PUBLIC
+ | Constants.ACC_FINAL
+ | Constants.ACC_SYNTHETIC
+ | Constants.ACC_BRIDGE,
+ false))
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(LambdaBridgeMethodSourceCode.build(this, bridgeMethod, mainMethod))
+ .build());
}
builder.setVirtualMethods(methods);
}
@@ -195,29 +199,33 @@
List<DexEncodedMethod> methods = new ArrayList<>(stateless ? 2 : 1);
// Constructor.
+ MethodAccessFlags accessFlags =
+ MethodAccessFlags.fromSharedAccessFlags(
+ (stateless ? Constants.ACC_PRIVATE : Constants.ACC_PUBLIC) | Constants.ACC_SYNTHETIC,
+ true);
methods.add(
- DexEncodedMethod.createSynthetic(
- constructor,
- MethodAccessFlags.fromSharedAccessFlags(
- (stateless ? Constants.ACC_PRIVATE : Constants.ACC_PUBLIC)
- | Constants.ACC_SYNTHETIC,
- true),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- LambdaConstructorSourceCode.build(this)));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(constructor)
+ .setAccessFlags(accessFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(LambdaConstructorSourceCode.build(this))
+ .build());
// Class constructor for stateless lambda classes.
if (stateless) {
methods.add(
- DexEncodedMethod.createSynthetic(
- classConstructor,
- MethodAccessFlags.fromSharedAccessFlags(
- Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- LambdaClassConstructorSourceCode.build(this)));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(classConstructor)
+ .setAccessFlags(
+ MethodAccessFlags.fromSharedAccessFlags(
+ Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true))
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(LambdaClassConstructorSourceCode.build(this))
+ .build());
feedback.classInitializerMayBePostponed(methods.get(1));
}
builder.setDirectMethods(methods);
@@ -575,13 +583,14 @@
// Always make the method public to provide access.
newAccessFlags.setPublic();
DexEncodedMethod newMethod =
- DexEncodedMethod.createSynthetic(
- callTarget,
- newAccessFlags,
- encodedMethod.getGenericSignature(),
- encodedMethod.annotations(),
- encodedMethod.parameterAnnotationsList,
- encodedMethod.getCode());
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(callTarget)
+ .setAccessFlags(newAccessFlags)
+ .setGenericSignature(encodedMethod.getGenericSignature())
+ .setAnnotations(encodedMethod.annotations())
+ .setParameterAnnotations(encodedMethod.parameterAnnotationsList)
+ .setCode(encodedMethod.getCode())
+ .build();
newMethod.copyMetadata(encodedMethod);
forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
encodedMethod.getReference(), callTarget);
@@ -657,13 +666,14 @@
MethodAccessFlags newAccessFlags = encodedMethod.accessFlags.copy();
newAccessFlags.unsetPrivate();
DexEncodedMethod newMethod =
- DexEncodedMethod.createSynthetic(
- callTarget,
- newAccessFlags,
- encodedMethod.getGenericSignature(),
- encodedMethod.annotations(),
- encodedMethod.parameterAnnotationsList,
- encodedMethod.getCode());
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(callTarget)
+ .setAccessFlags(newAccessFlags)
+ .setGenericSignature(encodedMethod.getGenericSignature())
+ .setAnnotations(encodedMethod.annotations())
+ .setParameterAnnotations(encodedMethod.parameterAnnotationsList)
+ .setCode(encodedMethod.getCode())
+ .build();
newMethod.copyMetadata(encodedMethod);
forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
encodedMethod.getReference(), callTarget);
@@ -720,13 +730,14 @@
ProgramMethod accessorMethod =
new ProgramMethod(
accessorClass,
- DexEncodedMethod.createSynthetic(
- callTarget,
- MethodAccessFlags.createPublicStaticSynthetic(),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- AccessorMethodSourceCode.build(LambdaClass.this, callTarget)));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(callTarget)
+ .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(AccessorMethodSourceCode.build(LambdaClass.this, callTarget))
+ .build());
accessorClass.addDirectMethod(accessorMethod.getDefinition());
if (appView.options().isDesugaredLibraryCompilation()
|| appView.options().isGeneratingDex()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
index 883cc24..3289a18 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
@@ -140,14 +140,16 @@
newClass,
ignore -> new TreeSet<>(Comparator.comparing(DexEncodedMethod::getReference)))
.add(
- DexEncodedMethod.createSynthetic(
- retargetMethod,
- MethodAccessFlags.fromCfAccessFlags(
- Constants.ACC_PUBLIC | Constants.ACC_STATIC, false),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- null));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(retargetMethod)
+ .setAccessFlags(
+ MethodAccessFlags.fromCfAccessFlags(
+ Constants.ACC_PUBLIC | Constants.ACC_STATIC, false))
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(null)
+ .build());
}
});
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
index 053ac7c..fe0f206 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
@@ -561,13 +561,14 @@
// TODO(b/146114533): Fix inlining in synthetic methods and remove unsetBridge.
newFlags.unsetBridge();
newFlags.setSynthetic();
- return DexEncodedMethod.createSynthetic(
- methodToInstall,
- newFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- code);
+ return DexEncodedMethod.syntheticBuilder()
+ .setMethod(methodToInstall)
+ .setAccessFlags(newFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(code)
+ .build();
}
private List<DexEncodedMethod> allImplementedMethods(DexClass clazz) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index 055905d..64c05ee 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -800,13 +800,15 @@
MethodAccessFlags accessFlags = MethodAccessFlags.builder().setPublic().build();
DexMethod newMethod = method.withHolder(clazz.getType(), dexItemFactory);
DexEncodedMethod newEncodedMethod =
- DexEncodedMethod.createSynthetic(
- newMethod,
- accessFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- createExceptionThrowingCfCode(newMethod, accessFlags, errorType, dexItemFactory));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(newMethod)
+ .setAccessFlags(accessFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(
+ createExceptionThrowingCfCode(newMethod, accessFlags, errorType, dexItemFactory))
+ .build();
addSyntheticMethod(clazz.asProgramClass(), newEncodedMethod);
}
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 5d9a60f..cae162d 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
@@ -289,13 +289,14 @@
MethodAccessFlags.fromSharedAccessFlags(
Constants.ACC_SYNTHETIC | Constants.ACC_PRIVATE, false);
DexEncodedMethod encodedMethod =
- DexEncodedMethod.createSynthetic(
- method,
- methodAccessFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- null);
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(method)
+ .setAccessFlags(methodAccessFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(null)
+ .build();
encodedMethod.setCode(provider.generateCfCode(), appView);
return new ProgramMethod(clazz, encodedMethod);
}
@@ -588,13 +589,14 @@
MethodAccessFlags.fromSharedAccessFlags(
Constants.ACC_SYNTHETIC | Constants.ACC_PROTECTED, true);
DexEncodedMethod init =
- DexEncodedMethod.createSynthetic(
- factory.recordMembers.init,
- methodAccessFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- null);
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(factory.recordMembers.init)
+ .setAccessFlags(methodAccessFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(null)
+ .build();
init.setCode(
new CallObjectInitCfCodeProvider(appView, factory.recordTagType).generateCfCode(), appView);
return init;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
index 65055b4..cb48970 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
@@ -248,16 +248,17 @@
private DexEncodedMethod createClassInitializer(
DexType sharedUtilityClassType, DexEncodedField valuesField) {
- return DexEncodedMethod.createSynthetic(
- dexItemFactory.createClassInitializer(sharedUtilityClassType),
- MethodAccessFlags.createForClassInitializer(),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- createClassInitializerCode(sharedUtilityClassType, valuesField),
- CfVersion.V1_6,
- minApiLevelIfEnabledOrUnknown(appView),
- minApiLevelIfEnabledOrUnknown(appView));
+ return DexEncodedMethod.syntheticBuilder()
+ .setMethod(dexItemFactory.createClassInitializer(sharedUtilityClassType))
+ .setAccessFlags(MethodAccessFlags.createForClassInitializer())
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(createClassInitializerCode(sharedUtilityClassType, valuesField))
+ .setClassFileVersion(CfVersion.V1_6)
+ .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+ .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
+ .build();
}
private CfCode createClassInitializerCode(
@@ -291,19 +292,22 @@
private DexEncodedMethod createValuesMethod(
DexType sharedUtilityClassType, DexEncodedField valuesField) {
DexEncodedMethod valuesMethod =
- DexEncodedMethod.createSynthetic(
- dexItemFactory.createMethod(
- sharedUtilityClassType,
- dexItemFactory.createProto(dexItemFactory.intArrayType, dexItemFactory.intType),
- "values"),
- MethodAccessFlags.createPublicStaticSynthetic(),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- createValuesMethodCode(sharedUtilityClassType, valuesField),
- CfVersion.V1_6,
- minApiLevelIfEnabledOrUnknown(appView),
- minApiLevelIfEnabledOrUnknown(appView));
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(
+ dexItemFactory.createMethod(
+ sharedUtilityClassType,
+ dexItemFactory.createProto(
+ dexItemFactory.intArrayType, dexItemFactory.intType),
+ "values"))
+ .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(createValuesMethodCode(sharedUtilityClassType, valuesField))
+ .setClassFileVersion(CfVersion.V1_6)
+ .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+ .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
+ .build();
this.valuesMethod = valuesMethod;
return valuesMethod;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 6930734..ceb661a 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -9,6 +9,7 @@
import static com.android.tools.r8.ir.code.Invoke.Type.STATIC;
import com.android.tools.r8.androidapi.AndroidApiReferenceLevelCache;
+import com.android.tools.r8.cf.CfVersion;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
@@ -1440,17 +1441,20 @@
// be updated by the end of vertical class merging.
synthesizedBridges.add(code);
+ CfVersion classFileVersion =
+ method.hasClassFileVersion() ? method.getClassFileVersion() : null;
DexEncodedMethod bridge =
- DexEncodedMethod.createSynthetic(
- newMethod,
- accessFlags,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- code,
- method.hasClassFileVersion() ? method.getClassFileVersion() : null,
- method.getApiLevelForDefinition(),
- method.getApiLevelForDefinition());
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(newMethod)
+ .setAccessFlags(accessFlags)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(code)
+ .setClassFileVersion(classFileVersion)
+ .setApiLevelForDefinition(method.getApiLevelForDefinition())
+ .setApiLevelForCode(method.getApiLevelForDefinition())
+ .build();
bridge.setLibraryMethodOverride(method.isLibraryMethodOverride());
if (method.accessFlags.isPromotedToPublic()) {
// The bridge is now the public method serving the role of the original method, and should
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
index 064a733..0e45bd8 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
@@ -106,17 +106,19 @@
assert name != null;
DexMethod methodSignature = getMethodSignature();
MethodAccessFlags accessFlags = getAccessFlags();
+ Code code = accessFlags.isAbstract() ? null : getCodeObject(methodSignature);
DexEncodedMethod method =
- DexEncodedMethod.createSynthetic(
- methodSignature,
- accessFlags,
- genericSignature,
- annotations,
- parameterAnnotationsList,
- accessFlags.isAbstract() ? null : getCodeObject(methodSignature),
- classFileVersion,
- AndroidApiLevel.UNKNOWN,
- AndroidApiLevel.UNKNOWN);
+ DexEncodedMethod.syntheticBuilder()
+ .setMethod(methodSignature)
+ .setAccessFlags(accessFlags)
+ .setGenericSignature(genericSignature)
+ .setAnnotations(annotations)
+ .setParameterAnnotations(parameterAnnotationsList)
+ .setCode(code)
+ .setClassFileVersion(classFileVersion)
+ .setApiLevelForDefinition(AndroidApiLevel.UNKNOWN)
+ .setApiLevelForCode(AndroidApiLevel.UNKNOWN)
+ .build();
assert isValidSyntheticMethod(method, syntheticKind);
if (onBuildConsumer != null) {
onBuildConsumer.accept(method);
diff --git a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
index 4b8eef2..11588d7 100644
--- a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
@@ -53,13 +53,14 @@
ProgramMethod method =
new ProgramMethod(
clazz,
- DexEncodedMethod.create(
- signature,
- MethodAccessFlags.fromDexAccessFlags(0),
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- null));
+ DexEncodedMethod.builder()
+ .setMethod(signature)
+ .setAccessFlags(MethodAccessFlags.fromDexAccessFlags(0))
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(null)
+ .build());
return new Node(method);
}
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index 68b1f25..b38b552 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -856,13 +856,14 @@
new SynthesizedCode(
(ignored, callerPosition) -> new ReturnVoidCode(voidReturnMethod, callerPosition));
DexEncodedMethod method =
- DexEncodedMethod.create(
- voidReturnMethod,
- access,
- MethodTypeSignature.noSignature(),
- DexAnnotationSet.empty(),
- ParameterAnnotationsList.empty(),
- code);
+ DexEncodedMethod.builder()
+ .setMethod(voidReturnMethod)
+ .setAccessFlags(access)
+ .setGenericSignature(MethodTypeSignature.noSignature())
+ .setAnnotations(DexAnnotationSet.empty())
+ .setParameterAnnotations(ParameterAnnotationsList.empty())
+ .setCode(code)
+ .build();
ProgramMethod programMethod = new ProgramMethod(programClass, method);
IRCode ir = code.buildIR(programMethod, appView, Origin.unknown());
RegisterAllocator allocator = new LinearScanRegisterAllocator(appView, ir);