Share DexField.field and DexMethod.method as DexMember.reference
Fixes: 167310581
Change-Id: I427fa117548d82e29b701fca746186c6627ecc9d
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 740984c..a47844f 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -150,11 +150,11 @@
assert method.getHolderType() == clazz.type;
CfCode code = null;
if (!method.accessFlags.isAbstract() /*&& !method.accessFlags.isNative()*/) {
- code = buildEmptyThrowingCfCode(method.method);
+ code = buildEmptyThrowingCfCode(method.getReference());
}
DexEncodedMethod throwingMethod =
new DexEncodedMethod(
- method.method,
+ method.getReference(),
method.accessFlags,
MethodTypeSignature.noSignature(),
DexAnnotationSet.empty(),
@@ -246,7 +246,7 @@
continue;
}
ProgramMethod implementationMethod =
- implementationClass.lookupProgramMethod(method.method);
+ implementationClass.lookupProgramMethod(method.getReference());
// Don't include methods which are not implemented by the desugared library.
if (supported.test(method) && implementationMethod != null) {
supportedMethods.computeIfAbsent(clazz, k -> new ArrayList<>()).add(method);
@@ -265,10 +265,10 @@
if (desugaredLibraryConfiguration
.getRetargetCoreLibMember()
.keySet()
- .contains(method.method.name)) {
+ .contains(method.getReference().name)) {
if (desugaredLibraryConfiguration
.getRetargetCoreLibMember()
- .get(method.method.name)
+ .get(method.getReference().name)
.containsKey(clazz.type)) {
if (supported.test(method)) {
supportedMethods.computeIfAbsent(clazz, k -> new ArrayList<>()).add(method);
@@ -333,8 +333,8 @@
desugaredApisSignatures.add(
classBinaryName
+ '#'
- + method.method.name
- + method.method.proto.toDescriptorString());
+ + method.getReference().name
+ + method.getReference().proto.toDescriptorString());
}
} else {
desugaredApisSignatures.add(classBinaryName);
@@ -405,7 +405,7 @@
return true;
}
assert minApiLevel == AndroidApiLevel.B;
- return !parallelMethods.contains(method.method);
+ return !parallelMethods.contains(method.getReference());
});
}
@@ -585,7 +585,7 @@
}
public String arguments(DexEncodedMethod method) {
- DexProto proto = method.method.proto;
+ DexProto proto = method.getReference().proto;
StringBuilder argsBuilder = new StringBuilder();
boolean firstArg = true;
int argIndex = method.isVirtualMethod() || method.accessFlags.isConstructor() ? 1 : 0;
@@ -685,9 +685,9 @@
builder.appendLiCode(
accessFlags(field.accessFlags)
+ " "
- + typeInPackage(field.field.type)
+ + typeInPackage(field.getReference().type)
+ " "
- + field.field.name);
+ + field.getReference().name);
}
}
if (!constructors.isEmpty()) {
@@ -705,12 +705,12 @@
builder.appendLiCode(
accessFlags(method.accessFlags)
+ " "
- + typeInPackage(method.method.proto.returnType)
+ + typeInPackage(method.getReference().proto.returnType)
+ " "
- + method.method.name
+ + method.getReference().name
+ arguments(method));
- if (parallelMethods.contains(method.method)) {
- parallelM.add(method.method.name.toString());
+ if (parallelMethods.contains(method.getReference())) {
+ parallelM.add(method.getReference().name.toString());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/JarDiff.java b/src/main/java/com/android/tools/r8/JarDiff.java
index a268496..446791f 100644
--- a/src/main/java/com/android/tools/r8/JarDiff.java
+++ b/src/main/java/com/android/tools/r8/JarDiff.java
@@ -145,23 +145,23 @@
private void compareMethods(DexProgramClass class1, DexProgramClass class2) {
class1.forEachMethod(
method1 -> {
- DexEncodedMethod method2 = class2.lookupMethod(method1.method);
+ DexEncodedMethod method2 = class2.lookupMethod(method1.getReference());
compareMethods(method1, method2);
});
class2.forEachMethod(
method2 -> {
- DexEncodedMethod method1 = class1.lookupMethod(method2.method);
+ DexEncodedMethod method1 = class1.lookupMethod(method2.getReference());
compareMethods(method1, method2);
});
}
private void compareMethods(DexEncodedMethod m1, DexEncodedMethod m2) {
if (m1 == null) {
- System.out.println("Only in " + path2 + ": " + m2.method.toSourceString());
+ System.out.println("Only in " + path2 + ": " + m2.getReference().toSourceString());
return;
}
if (m2 == null) {
- System.out.println("Only in " + path1 + ": " + m1.method.toSourceString());
+ System.out.println("Only in " + path1 + ": " + m1.getReference().toSourceString());
return;
}
List<String> code1 = getInstructionStrings(m1);
@@ -176,12 +176,19 @@
int before = Math.min(i, this.before);
int after = Math.min(j, this.after);
int context = before + after;
- System.out.println("--- " + path1 + "/" + m1.method.toSmaliString());
- System.out.println("+++ " + path2 + "/" + m2.method.toSmaliString());
+ System.out.println("--- " + path1 + "/" + m1.getReference().toSmaliString());
+ System.out.println("+++ " + path2 + "/" + m2.getReference().toSmaliString());
System.out.println(
- "@@ -" + (i - before) + "," + (length1 + context)
- + " +" + (i - before) + "," + (length2 + context) + " @@ "
- + m1.method.toSourceString());
+ "@@ -"
+ + (i - before)
+ + ","
+ + (length1 + context)
+ + " +"
+ + (i - before)
+ + ","
+ + (length2 + context)
+ + " @@ "
+ + m1.getReference().toSourceString());
for (int k = 0; k < before; k++) {
System.out.println(" " + code1.get(i - before + k));
}
diff --git a/src/main/java/com/android/tools/r8/JarSizeCompare.java b/src/main/java/com/android/tools/r8/JarSizeCompare.java
index 15e29fa..e520d1b 100644
--- a/src/main/java/com/android/tools/r8/JarSizeCompare.java
+++ b/src/main/java/com/android/tools/r8/JarSizeCompare.java
@@ -332,8 +332,9 @@
MethodSignature originalSignature =
proguardMap == null
? null
- : proguardMap.originalSignatureOf(dexEncodedMethod.method);
- MethodSignature signature = MethodSignature.fromDexMethod(dexEncodedMethod.method);
+ : proguardMap.originalSignatureOf(dexEncodedMethod.getReference());
+ MethodSignature signature =
+ MethodSignature.fromDexMethod(dexEncodedMethod.getReference());
consumer.accept(
originalSignature == null ? signature : originalSignature, dexEncodedMethod);
});
@@ -346,8 +347,10 @@
programClass.forEachField(
dexEncodedField -> {
FieldSignature originalSignature =
- proguardMap == null ? null : proguardMap.originalSignatureOf(dexEncodedField.field);
- FieldSignature signature = FieldSignature.fromDexField(dexEncodedField.field);
+ proguardMap == null
+ ? null
+ : proguardMap.originalSignatureOf(dexEncodedField.getReference());
+ FieldSignature signature = FieldSignature.fromDexField(dexEncodedField.getReference());
consumer.accept(
originalSignature == null ? signature : originalSignature, dexEncodedField);
});
diff --git a/src/main/java/com/android/tools/r8/PrintClassList.java b/src/main/java/com/android/tools/r8/PrintClassList.java
index 73cb04d..1530251 100644
--- a/src/main/java/com/android/tools/r8/PrintClassList.java
+++ b/src/main/java/com/android/tools/r8/PrintClassList.java
@@ -57,7 +57,7 @@
}
private static void printMethod(DexEncodedMethod encodedMethod, ClassNameMapper map) {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
if (map != null) {
System.out.println(map.originalNameOf(method));
} else {
@@ -68,7 +68,7 @@
}
private static void printField(DexEncodedField encodedField, ClassNameMapper map) {
- DexField field = encodedField.field;
+ DexField field = encodedField.getReference();
if (map != null) {
System.out.println(map.originalNameOf(field));
} else {
diff --git a/src/main/java/com/android/tools/r8/PrintUses.java b/src/main/java/com/android/tools/r8/PrintUses.java
index d7310e5..926577f 100644
--- a/src/main/java/com/android/tools/r8/PrintUses.java
+++ b/src/main/java/com/android/tools/r8/PrintUses.java
@@ -108,9 +108,9 @@
ResolutionResult resolutionResult = appInfo.unsafeResolveMethodDueToDexFormat(method);
DexEncodedMethod target =
resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
- if (target != null && target.method != method) {
+ if (target != null && target.getReference() != method) {
addType(method.holder);
- addMethod(target.method);
+ addMethod(target.getReference());
} else {
addMethod(method);
}
@@ -124,9 +124,9 @@
@Override
public void registerInvokeStatic(DexMethod method) {
DexEncodedMethod target = appInfo.unsafeResolveMethodDueToDexFormat(method).getSingleTarget();
- if (target != null && target.method != method) {
+ if (target != null && target.getReference() != method) {
addType(method.holder);
- addMethod(target.method);
+ addMethod(target.getReference());
} else {
addMethod(method);
}
@@ -204,7 +204,7 @@
addType(field.type);
DexEncodedField baseField = appInfo.resolveField(field).getResolvedField();
if (baseField != null && baseField.getHolderType() != field.holder) {
- field = baseField.field;
+ field = baseField.getReference();
}
addType(field.holder);
Set<DexField> typeFields = fields.get(field.holder);
@@ -245,7 +245,7 @@
}
private void registerField(DexEncodedField field) {
- registerTypeReference(field.field.type);
+ registerTypeReference(field.getReference().type);
}
private void registerMethod(ProgramMethod method) {
@@ -277,10 +277,11 @@
clazz.forEachMethod(
method -> {
ResolutionResult resolutionResult =
- appInfo.resolveMethodOn(superType, method.method, superType != clazz.superType);
+ appInfo.resolveMethodOn(
+ superType, method.getReference(), superType != clazz.superType);
DexEncodedMethod dexEncodedMethod = resolutionResult.getSingleTarget();
if (dexEncodedMethod != null) {
- addMethod(dexEncodedMethod.method);
+ addMethod(dexEncodedMethod.getReference());
}
});
}
@@ -428,7 +429,7 @@
if (encodedMethod.accessFlags.isConstructor()) {
printConstructorName(encodedMethod);
} else {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
append(method.proto.returnType.toSourceString());
append(" ");
append(method.name.toSourceString());
@@ -467,7 +468,7 @@
}
methodDefinitions.add(encodedMethod);
}
- methodDefinitions.sort(Comparator.comparing(x -> x.method.name.toSourceString()));
+ methodDefinitions.sort(Comparator.comparing(x -> x.getReference().name.toSourceString()));
for (DexEncodedMethod encodedMethod : methodDefinitions) {
printMethod(encodedMethod, dexClass.type.toSourceString());
}
@@ -506,7 +507,7 @@
void printMethod(DexEncodedMethod encodedMethod, String typeName) {
append(typeName + ": ");
printNameAndReturn(encodedMethod);
- printArguments(encodedMethod.method);
+ printArguments(encodedMethod.getReference());
appendLine("");
}
@@ -578,7 +579,7 @@
append("static ");
}
printNameAndReturn(encodedMethod);
- printArguments(encodedMethod.method);
+ printArguments(encodedMethod.getReference());
appendLine(";");
}
diff --git a/src/main/java/com/android/tools/r8/cf/CfPrinter.java b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
index 9862f27..64dd9a5 100644
--- a/src/main/java/com/android/tools/r8/cf/CfPrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
@@ -140,7 +140,7 @@
}
if (method != null) {
builder.append(".method ");
- appendMethod(method.method);
+ appendMethod(method.getReference());
newline();
}
builder.append(".limit stack ").append(code.getMaxStack());
diff --git a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
index ec4b22f..90fc9ee 100644
--- a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
+++ b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
@@ -242,7 +242,8 @@
: createInitializedType(code.method().getHolderType());
} else {
argumentType =
- createInitializedType(code.method().method.proto.parameters.values[argumentIndex]);
+ createInitializedType(
+ code.method().getReference().proto.parameters.values[argumentIndex]);
}
Value outValue = instruction.outValue();
if (outValue.outType().isObject()) {
diff --git a/src/main/java/com/android/tools/r8/dex/FileWriter.java b/src/main/java/com/android/tools/r8/dex/FileWriter.java
index adfab44..889fc27 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -275,25 +275,25 @@
// static methods, as well as public non-abstract (default)
// and private instance methods.
private void checkInterfaceMethod(DexEncodedMethod method) {
- if (application.dexItemFactory.isClassConstructor(method.method)) {
+ if (application.dexItemFactory.isClassConstructor(method.getReference())) {
return; // Class constructor is always OK.
}
if (method.accessFlags.isStatic()) {
if (!options.canUseDefaultAndStaticInterfaceMethods()
&& !options.testing.allowStaticInterfaceMethodsForPreNApiLevel) {
throw options.reporter.fatalError(
- new StaticInterfaceMethodDiagnostic(new MethodPosition(method.method)));
+ new StaticInterfaceMethodDiagnostic(new MethodPosition(method.getReference())));
}
} else {
if (method.isInstanceInitializer()) {
throw new CompilationError(
- "Interface must not have constructors: " + method.method.toSourceString());
+ "Interface must not have constructors: " + method.getReference().toSourceString());
}
if (!method.accessFlags.isAbstract() && !method.accessFlags.isPrivate() &&
!options.canUseDefaultAndStaticInterfaceMethods()) {
throw options.reporter.fatalError(
- new DefaultInterfaceMethodDiagnostic(new MethodPosition(method.method)));
+ new DefaultInterfaceMethodDiagnostic(new MethodPosition(method.getReference())));
}
}
@@ -302,12 +302,14 @@
return;
}
throw options.reporter.fatalError(
- new PrivateInterfaceMethodDiagnostic(new MethodPosition(method.method)));
+ new PrivateInterfaceMethodDiagnostic(new MethodPosition(method.getReference())));
}
if (!method.accessFlags.isPublic()) {
- throw new CompilationError("Interface methods must not be "
- + "protected or package private: " + method.method.toSourceString());
+ throw new CompilationError(
+ "Interface methods must not be "
+ + "protected or package private: "
+ + method.getReference().toSourceString());
}
}
@@ -636,32 +638,36 @@
private void writeEncodedFields(List<DexEncodedField> unsortedFields) {
List<DexEncodedField> fields = new ArrayList<>(unsortedFields);
- fields.sort((a, b) -> a.field.acceptCompareTo(b.field, mapping.getCompareToVisitor()));
+ fields.sort(
+ (a, b) ->
+ a.getReference().acceptCompareTo(b.getReference(), mapping.getCompareToVisitor()));
int currentOffset = 0;
for (DexEncodedField field : fields) {
assert field.validateDexValue(application.dexItemFactory);
- int nextOffset = mapping.getOffsetFor(field.field);
+ int nextOffset = mapping.getOffsetFor(field.getReference());
assert nextOffset - currentOffset >= 0;
dest.putUleb128(nextOffset - currentOffset);
currentOffset = nextOffset;
dest.putUleb128(field.accessFlags.getAsDexAccessFlags());
- desugaredLibraryCodeToKeep.recordField(field.field);
+ desugaredLibraryCodeToKeep.recordField(field.getReference());
}
}
private void writeEncodedMethods(
Iterable<DexEncodedMethod> unsortedMethods, boolean isSharedSynthetic) {
List<DexEncodedMethod> methods = IterableUtils.toNewArrayList(unsortedMethods);
- methods.sort((a, b) -> a.method.acceptCompareTo(b.method, mapping.getCompareToVisitor()));
+ methods.sort(
+ (a, b) ->
+ a.getReference().acceptCompareTo(b.getReference(), mapping.getCompareToVisitor()));
int currentOffset = 0;
for (DexEncodedMethod method : methods) {
- int nextOffset = mapping.getOffsetFor(method.method);
+ int nextOffset = mapping.getOffsetFor(method.getReference());
assert nextOffset - currentOffset >= 0;
dest.putUleb128(nextOffset - currentOffset);
currentOffset = nextOffset;
dest.putUleb128(method.accessFlags.getAsDexAccessFlags());
DexCode code = codeMapping.getCode(method);
- desugaredLibraryCodeToKeep.recordMethod(method.method);
+ desugaredLibraryCodeToKeep.recordMethod(method.getReference());
if (code == null) {
assert method.shouldNotHaveCode();
dest.putUleb128(0);
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
index c8d9834..0056aff 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
@@ -455,7 +455,7 @@
}
assert potentialHolder.isInterface();
for (DexEncodedMethod virtualMethod : potentialHolder.virtualMethods()) {
- if (virtualMethod.method.hasSameProtoAndName(method.method)
+ if (virtualMethod.getReference().hasSameProtoAndName(method.getReference())
&& virtualMethod.accessFlags.isSameVisibility(method.accessFlags)) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 7622121..7321cc0 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -588,11 +588,11 @@
if (!options().isGeneratingClassFiles()) {
return false;
}
- if (cfByteCodePassThrough.contains(method.method)) {
+ if (cfByteCodePassThrough.contains(method.getReference())) {
return true;
}
return options().testing.cfByteCodePassThrough != null
- && options().testing.cfByteCodePassThrough.test(method.method);
+ && options().testing.cfByteCodePassThrough.test(method.getReference());
}
public boolean hasCfByteCodePassThroughMethods() {
diff --git a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
index 349332a..a05960f 100644
--- a/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/AppliedGraphLens.java
@@ -50,7 +50,7 @@
// Record original field signatures.
for (DexEncodedField encodedField : clazz.fields()) {
- DexField field = encodedField.field;
+ DexField field = encodedField.getReference();
DexField original = appView.graphLens().getOriginalFieldSignature(field);
if (original != field) {
DexField existing = originalFieldSignatures.forcePut(field, original);
@@ -60,7 +60,7 @@
// Record original method signatures.
for (DexEncodedMethod encodedMethod : clazz.methods()) {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
DexMethod original = appView.graphLens().getOriginalMethodSignature(method);
DexMethod existing = originalMethodSignatures.inverse().get(original);
if (existing == null) {
diff --git a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
index 1c30bbf..4ed66d8 100644
--- a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
@@ -128,9 +128,10 @@
void writeField(DexEncodedField field, PrintStream ps) {
if (writeFields) {
ClassNameMapper naming = application.getProguardMap();
- FieldSignature fieldSignature = naming != null
- ? naming.originalSignatureOf(field.field)
- : FieldSignature.fromDexField(field.field);
+ FieldSignature fieldSignature =
+ naming != null
+ ? naming.originalSignatureOf(field.getReference())
+ : FieldSignature.fromDexField(field.getReference());
writeAnnotations(null, field.annotations(), ps);
ps.print(field.accessFlags + " ");
ps.print(fieldSignature);
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index 71b938f..315bb3e 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -300,7 +300,7 @@
}
// If tree shaking, only keep annotations on kept methods.
if (appView.appInfo().hasLiveness()
- && !appView.appInfo().withLiveness().isPinned(method.method)) {
+ && !appView.appInfo().withLiveness().isPinned(method.getReference())) {
return false;
}
return true;
@@ -575,7 +575,7 @@
// The enqueuer might build IR to trace reflective behaviour. At that point liveness is not
// known, so be conservative with collection parameter name information.
if (appView.appInfo().hasLiveness()
- && !appView.appInfo().withLiveness().isPinned(encodedMethod.method)) {
+ && !appView.appInfo().withLiveness().isPinned(encodedMethod.getReference())) {
return DexEncodedMethod.NO_PARAMETER_INFO;
}
@@ -585,7 +585,7 @@
if (!encodedMethod.isStatic()) {
localSlotsForParameters.set(nextLocalSlotsForParameters++);
}
- for (DexType type : encodedMethod.method.proto.parameters.values) {
+ for (DexType type : encodedMethod.getReference().proto.parameters.values) {
localSlotsForParameters.set(nextLocalSlotsForParameters);
nextLocalSlotsForParameters += type.isLongType() || type.isDoubleType() ? 2 : 1;
}
@@ -607,7 +607,7 @@
@Override
public void registerArgumentReferences(DexEncodedMethod method, ArgumentUse registry) {
- DexProto proto = method.method.proto;
+ DexProto proto = method.getReference().proto;
boolean isStatic = method.accessFlags.isStatic();
int argumentCount = proto.parameters.values.length + (isStatic ? 0 : 1);
Int2IntArrayMap indexToNumber = new Int2IntArrayMap(argumentCount);
@@ -728,7 +728,7 @@
if (!method.isInstanceInitializer()
&& appView
.graphLens()
- .getOriginalMethodSignature(method.method)
+ .getOriginalMethodSignature(method.getReference())
.isInstanceInitializer(appView.dexItemFactory())) {
// We cannot verify instance initializers if they are moved.
return StackMapStatus.NOT_PRESENT;
@@ -746,7 +746,7 @@
return reportStackMapError(
CfCodeStackMapValidatingException.multipleFramesForLabel(
origin,
- appView.graphLens().getOriginalMethodSignature(method.method),
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
appView),
appView);
}
@@ -756,7 +756,9 @@
// From b/168212806, it is possible that the first instruction is a frame.
return reportStackMapError(
CfCodeStackMapValidatingException.unexpectedStackMapFrame(
- origin, appView.graphLens().getOriginalMethodSignature(method.method), appView),
+ origin,
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
+ appView),
appView);
}
}
@@ -777,15 +779,17 @@
if (requireStackMapFrame && stateMap.isEmpty()) {
return reportStackMapError(
CfCodeStackMapValidatingException.noFramesForMethodWithJumps(
- origin, appView.graphLens().getOriginalMethodSignature(method.method), appView),
+ origin,
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
+ appView),
appView);
}
DexType context = appView.graphLens().lookupType(method.getHolderType());
- DexType returnType = appView.graphLens().lookupType(method.method.getReturnType());
+ DexType returnType = appView.graphLens().lookupType(method.getReference().getReturnType());
RewrittenPrototypeDescription rewrittenDescription = RewrittenPrototypeDescription.none();
if (applyProtoTypeChanges) {
rewrittenDescription =
- appView.graphLens().lookupPrototypeChangesForMethodDefinition(method.method);
+ appView.graphLens().lookupPrototypeChangesForMethodDefinition(method.getReference());
if (!rewrittenDescription.isEmpty()
&& rewrittenDescription.getRewrittenReturnInfo() != null) {
returnType = rewrittenDescription.getRewrittenReturnInfo().getOldType();
@@ -824,7 +828,7 @@
return reportStackMapError(
CfCodeStackMapValidatingException.toDiagnostics(
origin,
- appView.graphLens().getOriginalMethodSignature(method.method),
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
i,
instruction,
ex.getMessage(),
@@ -889,7 +893,7 @@
initialLocals.put(index++, FrameType.initialized(context));
}
ArgumentInfoCollection argumentsInfo = protoTypeChanges.getArgumentInfoCollection();
- DexType[] parameters = method.method.proto.parameters.values;
+ DexType[] parameters = method.getReference().proto.parameters.values;
int originalNumberOfArguments =
parameters.length
+ argumentsInfo.numberOfRemovedArguments()
diff --git a/src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java b/src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
index ad9bf23..d2d763e 100644
--- a/src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
@@ -46,17 +46,18 @@
}
public List<DexEncodedMethod> sortMethodAnnotations(CompareToVisitor visitor) {
- methodAnnotations.sort((a, b) -> a.method.acceptCompareTo(b.method, visitor));
+ methodAnnotations.sort((a, b) -> a.getReference().acceptCompareTo(b.getReference(), visitor));
return methodAnnotations;
}
public List<DexEncodedMethod> sortParameterAnnotations(CompareToVisitor visitor) {
- parameterAnnotations.sort((a, b) -> a.method.acceptCompareTo(b.method, visitor));
+ parameterAnnotations.sort(
+ (a, b) -> a.getReference().acceptCompareTo(b.getReference(), visitor));
return parameterAnnotations;
}
public List<DexEncodedField> sortFieldAnnotations(CompareToVisitor visitor) {
- fieldAnnotations.sort((a, b) -> a.field.acceptCompareTo(b.field, visitor));
+ fieldAnnotations.sort((a, b) -> a.getReference().acceptCompareTo(b.getReference(), visitor));
return fieldAnnotations;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 130dbcf..0b4b188 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -257,7 +257,9 @@
if (options.canHaveDalvikAbstractMethodOnNonAbstractClassVerificationBug() && !isAbstract()) {
for (DexEncodedMethod method : methods) {
assert !method.isAbstract()
- : "Non-abstract method on abstract class: `" + method.method.toSourceString() + "`";
+ : "Non-abstract method on abstract class: `"
+ + method.getReference().toSourceString()
+ + "`";
}
}
return true;
@@ -363,7 +365,7 @@
public boolean definesStaticField(DexField field) {
for (DexEncodedField encodedField : staticFields()) {
- if (encodedField.field == field) {
+ if (encodedField.getReference() == field) {
return true;
}
}
@@ -427,7 +429,7 @@
private boolean verifyCorrectnessOfFieldHolder(DexEncodedField field) {
assert field.getHolderType() == type
: "Expected field `"
- + field.field.toSourceString()
+ + field.getReference().toSourceString()
+ "` to have holder `"
+ type.toSourceString()
+ "`";
@@ -444,8 +446,8 @@
private boolean verifyNoDuplicateFields() {
Set<DexField> unique = Sets.newIdentityHashSet();
for (DexEncodedField field : fields()) {
- boolean changed = unique.add(field.field);
- assert changed : "Duplicate field `" + field.field.toSourceString() + "`";
+ boolean changed = unique.add(field.getReference());
+ assert changed : "Duplicate field `" + field.getReference().toSourceString() + "`";
}
return true;
}
@@ -463,11 +465,11 @@
public DexField lookupUniqueInstanceFieldWithName(DexString name) {
DexField field = null;
for (DexEncodedField encodedField : instanceFields()) {
- if (encodedField.field.name == name) {
+ if (encodedField.getReference().name == name) {
if (field != null) {
return null;
}
- field = encodedField.field;
+ field = encodedField.getReference();
}
}
return field;
@@ -544,7 +546,7 @@
DexEncodedMethod matchingName = null;
DexEncodedMethod signaturePolymorphicMethod = null;
for (DexEncodedMethod method : virtualMethods()) {
- if (method.method.name == methodName) {
+ if (method.getReference().name == methodName) {
if (matchingName != null) {
// The jvm spec, section 5.4.3.3 details that there must be exactly one method with the
// given name only.
@@ -564,8 +566,8 @@
|| method.getHolderType() == factory.varHandleType;
return method.accessFlags.isVarargs()
&& method.accessFlags.isNative()
- && method.method.proto.parameters.size() == 1
- && method.method.proto.parameters.values[0] != factory.objectArrayType;
+ && method.getReference().proto.parameters.size() == 1
+ && method.getReference().proto.parameters.values[0] != factory.objectArrayType;
}
private <D extends DexEncodedMember<D, R>, R extends DexMember<D, R>> D lookupTarget(
@@ -704,7 +706,7 @@
public DexEncodedMethod getInitializer(DexType[] parameters) {
for (DexEncodedMethod method : directMethods()) {
if (method.isInstanceInitializer()
- && Arrays.equals(method.method.proto.parameters.values, parameters)) {
+ && Arrays.equals(method.getReference().proto.parameters.values, parameters)) {
return method;
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
index 32743f0..09bc3b7 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
@@ -63,11 +63,11 @@
}
public DexDebugEntryBuilder(DexEncodedMethod method, DexItemFactory factory) {
- assert method != null && method.method != null;
- this.method = method.method;
+ assert method != null && method.getReference() != null;
+ this.method = method.getReference();
positionState =
new DexDebugPositionState(
- method.getCode().asDexCode().getDebugInfo().startLine, method.method);
+ method.getCode().asDexCode().getDebugInfo().startLine, method.getReference());
DexCode code = method.getCode().asDexCode();
DexDebugInfo info = code.getDebugInfo();
int argumentRegister = code.registerSize - code.incomingRegisterSize;
@@ -77,7 +77,7 @@
startArgument(argumentRegister, name, type);
argumentRegister += ValueType.fromDexType(type).requiredRegisters();
}
- DexType[] types = method.method.proto.parameters.values;
+ DexType[] types = method.getReference().proto.parameters.values;
DexString[] names = info.parameters;
for (int i = 0; i < types.length; i++) {
// If null, the parameter has a parameterized type and the local is introduced in the stream.
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index f166e3c..bdfe991 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -110,7 +110,7 @@
if (startLine == NO_LINE_INFO) {
return null;
}
- DexString[] params = new DexString[method.method.getArity()];
+ DexString[] params = new DexString[method.getReference().getArity()];
if (arguments != null) {
assert params.length == arguments.size();
for (int i = 0; i < arguments.size(); i++) {
@@ -158,7 +158,7 @@
private void startArgument(Argument argument) {
if (arguments == null) {
- arguments = new ArrayList<>(method.method.getArity());
+ arguments = new ArrayList<>(method.getReference().getArity());
}
if (!argument.outValue().isThis()) {
arguments.add(argument.getLocalInfo());
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
index 1a2b411..65bc4fb 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -31,7 +31,6 @@
implements StructuralItem<DexEncodedField> {
public static final DexEncodedField[] EMPTY_ARRAY = {};
- public final DexField field;
public final FieldAccessFlags accessFlags;
private DexValue staticValue;
private final boolean deprecated;
@@ -42,10 +41,10 @@
private KotlinFieldLevelInfo kotlinMemberInfo = NO_KOTLIN_INFO;
private static void specify(StructuralSpecification<DexEncodedField, ?> spec) {
- spec.withItem(f -> f.field)
- .withItem(f -> f.accessFlags)
+ spec.withItem(DexEncodedField::getReference)
+ .withItem(DexEncodedField::getAccessFlags)
.withNullableItem(f -> f.staticValue)
- .withBool(f -> f.deprecated)
+ .withBool(DexEncodedField::isDeprecated)
// TODO(b/171867022): The generic signature should be part of the definition.
.withAssert(f -> f.genericSignature.hasNoSignature());
// TODO(b/171867022): Should the optimization info and member info be part of the definition?
@@ -82,8 +81,7 @@
DexValue staticValue,
boolean deprecated,
boolean d8R8Synthesized) {
- super(annotations, d8R8Synthesized);
- this.field = field;
+ super(field, annotations, d8R8Synthesized);
this.accessFlags = accessFlags;
this.staticValue = staticValue;
this.deprecated = deprecated;
@@ -103,7 +101,7 @@
}
public DexType type() {
- return field.type;
+ return getReference().type;
}
public boolean isDeprecated() {
@@ -111,8 +109,8 @@
}
public boolean isProgramField(DexDefinitionSupplier definitions) {
- if (field.holder.isClassType()) {
- DexClass clazz = definitions.definitionFor(field.holder);
+ if (getReference().holder.isClassType()) {
+ DexClass clazz = definitions.definitionFor(getReference().holder);
return clazz != null && clazz.isProgramClass();
}
return false;
@@ -158,22 +156,17 @@
@Override
public String toString() {
- return "Encoded field " + field;
+ return "Encoded field " + getReference();
}
@Override
public String toSmaliString() {
- return field.toSmaliString();
+ return getReference().toSmaliString();
}
@Override
public String toSourceString() {
- return field.toSourceString();
- }
-
- @Override
- public DexField getReference() {
- return field;
+ return getReference().toSourceString();
}
public DexType getType() {
@@ -201,7 +194,7 @@
public ProgramField asProgramField(DexDefinitionSupplier definitions) {
assert getHolderType().isClassType();
- DexProgramClass clazz = asProgramClassOrNull(definitions.definitionForHolder(field));
+ DexProgramClass clazz = asProgramClassOrNull(definitions.definitionForHolder(getReference()));
if (clazz != null) {
return new ProgramField(clazz, this);
}
@@ -264,7 +257,7 @@
public DexValue getStaticValue() {
assert accessFlags.isStatic();
- return staticValue == null ? DexValue.defaultForType(field.type) : staticValue;
+ return staticValue == null ? DexValue.defaultForType(getReference().type) : staticValue;
}
/**
@@ -277,7 +270,7 @@
boolean isWritten = appView.appInfo().isFieldWrittenByFieldPutInstruction(this);
if (!isWritten) {
// Since the field is not written, we can simply return the default value for the type.
- DexValue value = isStatic() ? getStaticValue() : DexValue.defaultForType(field.type);
+ DexValue value = isStatic() ? getStaticValue() : DexValue.defaultForType(getReference().type);
return value.asConstInstruction(appView, code, local);
}
@@ -286,11 +279,11 @@
if (abstractValue.isSingleValue()) {
SingleValue singleValue = abstractValue.asSingleValue();
if (singleValue.isSingleFieldValue()
- && singleValue.asSingleFieldValue().getField() == field) {
+ && singleValue.asSingleFieldValue().getField() == getReference()) {
return null;
}
if (singleValue.isMaterializableInContext(appView, code.context())) {
- TypeElement type = TypeElement.fromDexType(field.type, maybeNull(), appView);
+ TypeElement type = TypeElement.fromDexType(getReference().type, maybeNull(), appView);
return singleValue.createMaterializingInstruction(
appView, code, TypeAndLocalInfoSupplier.create(type, local));
}
@@ -299,12 +292,12 @@
// The only way to figure out whether the static value contains the final value is ensure the
// value is not the default or check that <clinit> is not present.
if (accessFlags.isFinal() && isStatic()) {
- DexClass clazz = appView.definitionFor(field.holder);
+ DexClass clazz = appView.definitionFor(getReference().holder);
if (clazz == null || clazz.hasClassInitializer()) {
return null;
}
DexValue staticValue = getStaticValue();
- if (!staticValue.isDefault(field.type)) {
+ if (!staticValue.isDefault(getReference().type)) {
return staticValue.asConstInstruction(appView, code, local);
}
}
@@ -317,7 +310,7 @@
}
public DexEncodedField toTypeSubstitutedField(DexField field, Consumer<Builder> consumer) {
- if (this.field == field) {
+ if (this.getReference() == field) {
return this;
}
return builder(this).setField(field).apply(consumer).build();
@@ -327,12 +320,13 @@
if (!accessFlags.isStatic() || staticValue == null) {
return true;
}
- if (field.type.isPrimitiveType()) {
- assert staticValue.getType(factory) == field.type
- : "Static " + field + " has invalid static value " + staticValue + ".";
+ if (getReference().type.isPrimitiveType()) {
+ assert staticValue.getType(factory) == getReference().type
+ : "Static " + getReference() + " has invalid static value " + staticValue + ".";
}
if (staticValue.isDexValueNull()) {
- assert field.type.isReferenceType() : "Static " + field + " has invalid null static value.";
+ assert getReference().type.isReferenceType()
+ : "Static " + getReference() + " has invalid null static value.";
}
// TODO(b/150593449): Support non primitive DexValue (String, enum) and add assertions.
return true;
@@ -369,7 +363,7 @@
Builder(DexEncodedField from) {
// Copy all the mutable state of a DexEncodedField here.
- field = from.field;
+ field = from.getReference();
accessFlags = from.accessFlags.copy();
// TODO(b/169923358): Consider removing the fieldSignature here.
genericSignature = from.getGenericSignature();
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMember.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMember.java
index 7d66bb6..0074842 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMember.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMember.java
@@ -16,8 +16,11 @@
// set.
private final boolean d8R8Synthesized;
- public DexEncodedMember(DexAnnotationSet annotations, boolean d8R8Synthesized) {
+ private final R reference;
+
+ public DexEncodedMember(R reference, DexAnnotationSet annotations, boolean d8R8Synthesized) {
super(annotations);
+ this.reference = reference;
this.d8R8Synthesized = d8R8Synthesized;
}
@@ -32,7 +35,9 @@
}
@Override
- public abstract R getReference();
+ public R getReference() {
+ return reference;
+ }
public boolean isD8R8Synthesized() {
return d8R8Synthesized;
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 470bee9..967b7e8 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -150,7 +150,6 @@
public static final Int2ReferenceMap<DebugLocalInfo> NO_PARAMETER_INFO =
new Int2ReferenceArrayMap<>(0);
- public final DexMethod method;
public final MethodAccessFlags accessFlags;
public final boolean deprecated;
public ParameterAnnotationsList parameterAnnotationsList;
@@ -311,8 +310,7 @@
boolean d8R8Synthesized,
CfVersion classFileVersion,
boolean deprecated) {
- super(annotations, d8R8Synthesized);
- this.method = method;
+ super(method, annotations, d8R8Synthesized);
this.accessFlags = accessFlags;
this.deprecated = deprecated;
this.genericSignature = genericSignature;
@@ -386,7 +384,7 @@
@Override
public DexMethod getReference() {
checkIfObsolete();
- return method;
+ return super.getReference();
}
public DexType getParameter(int index) {
@@ -398,11 +396,11 @@
}
public DexMethodSignature getSignature() {
- return new DexMethodSignature(method);
+ return new DexMethodSignature(getReference());
}
public DexType returnType() {
- return method.proto.returnType;
+ return getReference().proto.returnType;
}
public ParameterAnnotationsList liveParameterAnnotations(AppView<AppInfoWithLiveness> appView) {
@@ -420,19 +418,19 @@
assert isLibraryMethodOverride.isPossiblyFalse()
|| this.isLibraryMethodOverride.isPossiblyTrue()
: "Method `"
- + method.toSourceString()
+ + getReference().toSourceString()
+ "` went from not overriding a library method to overriding a library method";
assert isLibraryMethodOverride.isPossiblyTrue()
|| this.isLibraryMethodOverride.isPossiblyFalse()
: "Method `"
- + method.toSourceString()
+ + getReference().toSourceString()
+ "` went from overriding a library method to not overriding a library method";
this.isLibraryMethodOverride = isLibraryMethodOverride;
}
public boolean isProgramMethod(DexDefinitionSupplier definitions) {
- if (method.holder.isClassType()) {
- DexClass clazz = definitions.definitionFor(method.holder);
+ if (getReference().holder.isClassType()) {
+ DexClass clazz = definitions.definitionFor(getReference().holder);
return clazz != null && clazz.isProgramClass();
}
return false;
@@ -444,8 +442,8 @@
}
public DexClassAndMethod asDexClassAndMethod(DexDefinitionSupplier definitions) {
- assert method.holder.isClassType();
- DexClass clazz = definitions.definitionForHolder(method);
+ assert getReference().holder.isClassType();
+ DexClass clazz = definitions.definitionForHolder(getReference());
if (clazz != null) {
return DexClassAndMethod.create(clazz, this);
}
@@ -453,8 +451,8 @@
}
public ProgramMethod asProgramMethod(DexDefinitionSupplier definitions) {
- assert method.holder.isClassType();
- DexProgramClass clazz = asProgramClassOrNull(definitions.definitionForHolder(method));
+ assert getReference().holder.isClassType();
+ DexProgramClass clazz = asProgramClassOrNull(definitions.definitionForHolder(getReference()));
if (clazz != null) {
return new ProgramMethod(clazz, this);
}
@@ -530,7 +528,7 @@
public boolean isDefaultInitializer() {
checkIfObsolete();
- return isInstanceInitializer() && method.proto.parameters.isEmpty();
+ return isInstanceInitializer() && getReference().proto.parameters.isEmpty();
}
public boolean isClassInitializer() {
@@ -698,28 +696,28 @@
return true;
case PROCESSED_INLINING_CANDIDATE_SUBCLASS:
- if (appInfo.isSubtype(containerType, method.holder)) {
+ if (appInfo.isSubtype(containerType, getReference().holder)) {
return true;
}
whyAreYouNotInliningReporter.reportCallerNotSubtype();
return false;
case PROCESSED_INLINING_CANDIDATE_SAME_PACKAGE:
- if (containerType.isSamePackage(method.holder)) {
+ if (containerType.isSamePackage(getReference().holder)) {
return true;
}
whyAreYouNotInliningReporter.reportCallerNotSamePackage();
return false;
case PROCESSED_INLINING_CANDIDATE_SAME_NEST:
- if (NestUtils.sameNest(containerType, method.holder, appInfo)) {
+ if (NestUtils.sameNest(containerType, getReference().holder, appInfo)) {
return true;
}
whyAreYouNotInliningReporter.reportCallerNotSameNest();
return false;
case PROCESSED_INLINING_CANDIDATE_SAME_CLASS:
- if (containerType == method.holder) {
+ if (containerType == getReference().holder) {
return true;
}
whyAreYouNotInliningReporter.reportCallerNotSameClass();
@@ -808,7 +806,7 @@
@Override
public String toString() {
checkIfObsolete();
- return "Encoded method " + method;
+ return "Encoded method " + getReference();
}
@Override
@@ -869,7 +867,7 @@
public String qualifiedName() {
checkIfObsolete();
- return method.qualifiedName();
+ return getReference().qualifiedName();
}
public String descriptor() {
@@ -881,11 +879,11 @@
checkIfObsolete();
StringBuilder builder = new StringBuilder();
builder.append("(");
- for (DexType type : method.proto.parameters.values) {
+ for (DexType type : getReference().proto.parameters.values) {
builder.append(namingLens.lookupDescriptor(type).toString());
}
builder.append(")");
- builder.append(namingLens.lookupDescriptor(method.proto.returnType).toString());
+ builder.append(namingLens.lookupDescriptor(getReference().proto.returnType).toString());
return builder.toString();
}
@@ -903,8 +901,8 @@
builder.append(".method ");
builder.append(accessFlags.toSmaliString());
builder.append(" ");
- builder.append(method.name.toSmaliString());
- builder.append(method.proto.toSmaliString());
+ builder.append(getReference().name.toSmaliString());
+ builder.append(getReference().proto.toSmaliString());
builder.append("\n");
if (code != null) {
DexCode dexCode = code.asDexCode();
@@ -920,7 +918,7 @@
@Override
public String toSourceString() {
checkIfObsolete();
- return method.toSourceString();
+ return getReference().toSourceString();
}
public DexEncodedMethod toAbstractMethod() {
@@ -946,7 +944,7 @@
offset += instruction.getSize();
}
int requiredArgRegisters = accessFlags.isStatic() ? 0 : 1;
- for (DexType type : method.proto.parameters.values) {
+ for (DexType type : getReference().proto.parameters.values) {
requiredArgRegisters += ValueType.fromDexType(type).requiredRegisters();
}
return new DexCode(
@@ -998,7 +996,7 @@
}
public CfCode buildEmptyThrowingCfCode() {
- return buildEmptyThrowingCfCode(method);
+ return buildEmptyThrowingCfCode(getReference());
}
public static CfCode buildEmptyThrowingCfCode(DexMethod method) {
@@ -1034,9 +1032,9 @@
}
instructions[i] = new CfReturn(ValueType.INT);
return new CfCode(
- method.holder,
+ getReference().holder,
1 + BooleanUtils.intValue(negate),
- method.getArity() + 1,
+ getReference().getArity() + 1,
Arrays.asList(instructions),
Collections.emptyList(),
Collections.emptyList());
@@ -1076,10 +1074,13 @@
private DexEncodedMethod toMethodThatLogsErrorDexCode(DexItemFactory itemFactory) {
checkIfObsolete();
- Signature signature = MethodSignature.fromDexMethod(method);
+ Signature signature = MethodSignature.fromDexMethod(getReference());
DexString message =
itemFactory.createString(
- CONFIGURATION_DEBUGGING_PREFIX + method.holder.toSourceString() + ": " + signature);
+ CONFIGURATION_DEBUGGING_PREFIX
+ + getReference().holder.toSourceString()
+ + ": "
+ + signature);
DexString tag = itemFactory.createString("[R8]");
DexType[] args = {itemFactory.stringType, itemFactory.stringType};
DexProto proto = itemFactory.createProto(itemFactory.intType, args);
@@ -1110,10 +1111,13 @@
private DexEncodedMethod toMethodThatLogsErrorCfCode(DexItemFactory itemFactory) {
checkIfObsolete();
- Signature signature = MethodSignature.fromDexMethod(method);
+ Signature signature = MethodSignature.fromDexMethod(getReference());
DexString message =
itemFactory.createString(
- CONFIGURATION_DEBUGGING_PREFIX + method.holder.toSourceString() + ": " + signature);
+ CONFIGURATION_DEBUGGING_PREFIX
+ + getReference().holder.toSourceString()
+ + ": "
+ + signature);
DexString tag = itemFactory.createString("[R8]");
DexType logger = itemFactory.javaUtilLoggingLoggerType;
DexMethod getLogger =
@@ -1132,7 +1136,7 @@
exceptionType,
itemFactory.createProto(itemFactory.voidType, itemFactory.stringType),
itemFactory.constructorMethodName);
- int locals = method.proto.parameters.size() + 1;
+ int locals = getReference().proto.parameters.size() + 1;
if (!isStaticMember()) {
// Consider `this` pointer
locals++;
@@ -1152,7 +1156,7 @@
.add(new CfThrow());
CfCode code =
new CfCode(
- method.holder,
+ getReference().holder,
3,
locals,
instructionBuilder.build(),
@@ -1171,7 +1175,7 @@
public DexEncodedMethod toTypeSubstitutedMethod(DexMethod method, Consumer<Builder> consumer) {
checkIfObsolete();
- if (this.method == method) {
+ if (this.getReference() == method) {
return this;
}
Builder builder = builder(this);
@@ -1243,7 +1247,7 @@
public DexEncodedMethod toRenamedHolderMethod(DexType newHolderType, DexItemFactory factory) {
DexEncodedMethod.Builder builder = DexEncodedMethod.builder(this);
- builder.setMethod(method.withHolder(newHolderType, factory));
+ builder.setMethod(getReference().withHolder(newHolderType, factory));
return builder.build();
}
@@ -1318,7 +1322,7 @@
public DexEncodedMethod toForwardingMethod(
DexClass newHolder, DexDefinitionSupplier definitions) {
- DexMethod newMethod = method.withHolder(newHolder, definitions.dexItemFactory());
+ DexMethod newMethod = getReference().withHolder(newHolder, definitions.dexItemFactory());
checkIfObsolete();
// Clear the final flag, as this method is now overwritten. Do this before creating the builder
@@ -1347,13 +1351,17 @@
.setStaticSource(newMethod)
.setStaticTarget(
getReference(),
- method.getHolderType().isInterface(definitions)),
+ getReference()
+ .getHolderType()
+ .isInterface(definitions)),
codeBuilder ->
codeBuilder
.setNonStaticSource(newMethod)
.setSuperTarget(
getReference(),
- method.getHolderType().isInterface(definitions)))
+ getReference()
+ .getHolderType()
+ .isInterface(definitions)))
.build())
.modifyAccessFlags(MethodAccessFlags::setBridge))
.build();
@@ -1435,7 +1443,7 @@
}
public MethodPosition getPosition() {
- return new MethodPosition(method.asMethodReference());
+ return new MethodPosition(getReference().asMethodReference());
}
@Override
@@ -1456,7 +1464,7 @@
}
public static int slowCompare(DexEncodedMethod m1, DexEncodedMethod m2) {
- return m1.method.compareTo(m2.method);
+ return m1.getReference().compareTo(m2.getReference());
}
public MethodOptimizationInfo getOptimizationInfo() {
@@ -1543,7 +1551,7 @@
private Builder(DexEncodedMethod from, boolean d8R8Synthesized) {
// Copy all the mutable state of a DexEncodedMethod here.
- method = from.method;
+ method = from.getReference();
accessFlags = from.accessFlags.copy();
genericSignature = from.getGenericSignature();
annotations = from.annotations();
diff --git a/src/main/java/com/android/tools/r8/graph/DexField.java b/src/main/java/com/android/tools/r8/graph/DexField.java
index ef99d01..fd2c110 100644
--- a/src/main/java/com/android/tools/r8/graph/DexField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexField.java
@@ -175,7 +175,7 @@
@Override
public boolean match(DexEncodedField encodedField) {
- return match(encodedField.field);
+ return match(encodedField.getReference());
}
public String qualifiedName() {
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethod.java b/src/main/java/com/android/tools/r8/graph/DexMethod.java
index 8484a94..c96dc4a 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethod.java
@@ -223,7 +223,7 @@
@Override
public boolean match(DexEncodedMethod encodedMethod) {
- return match(encodedMethod.method);
+ return match(encodedMethod.getReference());
}
public String qualifiedName() {
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index a4ccb8e..881b0e9 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -559,7 +559,8 @@
return null;
}
DexEncodedField[] fields = staticFields;
- Arrays.sort(fields, (a, b) -> a.field.compareToWithNamingLens(b.field, namingLens));
+ Arrays.sort(
+ fields, (a, b) -> a.getReference().compareToWithNamingLens(b.getReference(), namingLens));
int length = 0;
List<DexValue> values = new ArrayList<>(fields.length);
for (int i = 0; i < fields.length; i++) {
@@ -567,7 +568,7 @@
DexValue staticValue = field.getStaticValue();
assert staticValue != null;
values.add(staticValue);
- if (!staticValue.isDefault(field.field.type)) {
+ if (!staticValue.isDefault(field.getReference().type)) {
length = i + 1;
}
}
@@ -579,7 +580,7 @@
private boolean hasNonDefaultStaticFieldValues() {
for (DexEncodedField field : staticFields) {
DexValue value = field.getStaticValue();
- if (value != null && !value.isDefault(field.field.type)) {
+ if (value != null && !value.isDefault(field.getReference().type)) {
return true;
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLens.java b/src/main/java/com/android/tools/r8/graph/GraphLens.java
index e5c349c..3912ae6 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -334,7 +334,7 @@
DexDefinitionSupplier definitions,
GraphLens applied) {
assert originalEncodedMethod != DexEncodedMethod.SENTINEL;
- DexMethod newMethod = getRenamedMethodSignature(originalEncodedMethod.method, applied);
+ DexMethod newMethod = getRenamedMethodSignature(originalEncodedMethod.getReference(), applied);
// Note that:
// * Even if `newMethod` is the same as `originalEncodedMethod.method`, we still need to look it
// up, since `originalEncodedMethod` may be obsolete.
@@ -602,10 +602,10 @@
Set<DexMethod> originalMethods = Sets.newIdentityHashSet();
for (DexProgramClass clazz : originalApplication.classes()) {
for (DexEncodedField field : clazz.fields()) {
- originalFields.add(field.field);
+ originalFields.add(field.getReference());
}
for (DexEncodedMethod method : clazz.methods()) {
- originalMethods.add(method.method);
+ originalMethods.add(method.getReference());
}
}
@@ -631,7 +631,7 @@
// Methods synthesized by D8/R8 may not be mapped.
continue;
}
- DexMethod originalMethod = getOriginalMethodSignature(method.method);
+ DexMethod originalMethod = getOriginalMethodSignature(method.getReference());
assert originalMethods.contains(originalMethod);
}
}
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 d8815c7..4def125 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -510,9 +510,9 @@
throw new CompilationError(message, origin);
}
for (DexEncodedField instanceField : instanceFields) {
- if (!recordComponents.contains(instanceField.field)) {
+ if (!recordComponents.contains(instanceField.getReference())) {
throw new CompilationError(
- message + " Unmatched field " + instanceField.field + ".", origin);
+ message + " Unmatched field " + instanceField.getReference() + ".", origin);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/LookupCompletenessHelper.java b/src/main/java/com/android/tools/r8/graph/LookupCompletenessHelper.java
index 3c7b2d8..4a99071 100644
--- a/src/main/java/com/android/tools/r8/graph/LookupCompletenessHelper.java
+++ b/src/main/java/com/android/tools/r8/graph/LookupCompletenessHelper.java
@@ -34,7 +34,7 @@
if (pinnedMethods == null) {
pinnedMethods = Sets.newIdentityHashSet();
}
- pinnedMethods.add(method.method);
+ pinnedMethods.add(method.getReference());
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java b/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java
index 7c38464..17072ef 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java
@@ -26,8 +26,8 @@
Set<DexMethod> unique = Sets.newIdentityHashSet();
forEachMethod(
method -> {
- boolean changed = unique.add(method.method);
- assert changed : "Duplicate method `" + method.method.toSourceString() + "`";
+ boolean changed = unique.add(method.getReference());
+ assert changed : "Duplicate method `" + method.getReference().toSourceString() + "`";
});
return true;
}
diff --git a/src/main/java/com/android/tools/r8/graph/MethodCollection.java b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
index ccf33aa..35e0541 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
@@ -137,7 +137,7 @@
public List<DexEncodedMethod> allMethodsSorted() {
List<DexEncodedMethod> sorted = new ArrayList<>(size());
forEachMethod(sorted::add);
- sorted.sort((a, b) -> a.method.compareTo(b.method));
+ sorted.sort((a, b) -> a.getReference().compareTo(b.getReference()));
return sorted;
}
@@ -344,7 +344,7 @@
private boolean verifyCorrectnessOfMethodHolder(DexEncodedMethod method) {
assert method.getHolderType() == holder.type
: "Expected method `"
- + method.method.toSourceString()
+ + method.getReference().toSourceString()
+ "` to have holder `"
+ holder.type.toSourceString()
+ "`";
diff --git a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
index f3385af..a7d3c45 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
@@ -57,7 +57,7 @@
methodMap.put(existingKey, method);
} else {
methodMap.remove(existingKey);
- methodMap.put(wrap(method.method), method);
+ methodMap.put(wrap(method.getReference()), method);
}
}
@@ -165,7 +165,7 @@
@Override
void addMethod(DexEncodedMethod method) {
- Wrapper<DexMethod> key = wrap(method.method);
+ Wrapper<DexMethod> key = wrap(method.getReference());
DexEncodedMethod old = methodMap.put(key, method);
assert old == null;
}
@@ -229,12 +229,12 @@
forEachMethod(
method -> {
if (belongsToVirtualPool(method)) {
- newMap.put(wrap(method.method), method);
+ newMap.put(wrap(method.getReference()), method);
}
});
for (DexEncodedMethod method : methods) {
assert belongsToDirectPool(method);
- newMap.put(wrap(method.method), method);
+ newMap.put(wrap(method.getReference()), method);
}
methodMap = newMap;
}
@@ -252,12 +252,12 @@
forEachMethod(
method -> {
if (belongsToDirectPool(method)) {
- newMap.put(wrap(method.method), method);
+ newMap.put(wrap(method.getReference()), method);
}
});
for (DexEncodedMethod method : methods) {
assert belongsToVirtualPool(method);
- newMap.put(wrap(method.method), method);
+ newMap.put(wrap(method.getReference()), method);
}
methodMap = newMap;
}
@@ -271,7 +271,7 @@
for (DexEncodedMethod method : initialValues) {
DexEncodedMethod newMethod = replacement.apply(method);
if (newMethod != method) {
- removeMethod(method.method);
+ removeMethod(method.getReference());
addMethod(newMethod);
}
}
@@ -359,7 +359,7 @@
private boolean verifyVirtualizedMethods(Set<DexEncodedMethod> methods) {
for (DexEncodedMethod method : methods) {
assert belongsToVirtualPool(method);
- assert methodMap.get(wrap(method.method)) == method;
+ assert methodMap.get(wrap(method.getReference())) == method;
}
return true;
}
diff --git a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
index 041033e..d846788 100644
--- a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
@@ -346,7 +346,7 @@
return null;
}
// 1-3. Search the initial class and its supers in order for a matching instance method.
- DexMethod method = getResolvedMethod().method;
+ DexMethod method = getResolvedMethod().getReference();
DexClassAndMethod target = null;
DexClass current = initialType;
while (current != null) {
@@ -446,7 +446,7 @@
return LookupResult.createResult(
methodTargets,
lambdaTargets,
- incompleteness.computeCollectionState(resolvedMethod.method, appInfo));
+ incompleteness.computeCollectionState(resolvedMethod.getReference(), appInfo));
}
@Override
@@ -626,12 +626,12 @@
private DexClassAndMethod lookupMaximallySpecificDispatchTarget(
DexClass dynamicInstance, AppInfoWithClassHierarchy appInfo) {
- return appInfo.lookupMaximallySpecificMethod(dynamicInstance, resolvedMethod.method);
+ return appInfo.lookupMaximallySpecificMethod(dynamicInstance, resolvedMethod.getReference());
}
private DexClassAndMethod lookupMaximallySpecificDispatchTarget(
LambdaDescriptor lambdaDescriptor, AppInfoWithClassHierarchy appInfo) {
- return appInfo.lookupMaximallySpecificMethod(lambdaDescriptor, resolvedMethod.method);
+ return appInfo.lookupMaximallySpecificMethod(lambdaDescriptor, resolvedMethod.getReference());
}
/**
@@ -642,7 +642,7 @@
*/
private static DexEncodedMethod lookupOverrideCandidate(
DexEncodedMethod method, DexClass clazz) {
- DexEncodedMethod candidate = clazz.lookupVirtualMethod(method.method);
+ DexEncodedMethod candidate = clazz.lookupVirtualMethod(method.getReference());
assert candidate == null || !candidate.isPrivateMethod();
if (candidate != null) {
return isOverriding(method, candidate) ? candidate : DexEncodedMethod.SENTINEL;
@@ -659,7 +659,7 @@
if (clazz == null) {
return resolvedMethod;
}
- DexEncodedMethod otherOverride = clazz.lookupVirtualMethod(resolvedMethod.method);
+ DexEncodedMethod otherOverride = clazz.lookupVirtualMethod(resolvedMethod.getReference());
if (otherOverride != null
&& isOverriding(resolvedMethod, otherOverride)
&& (otherOverride.accessFlags.isPublic() || otherOverride.accessFlags.isProtected())) {
@@ -680,7 +680,7 @@
*/
public static boolean isOverriding(
DexEncodedMethod resolvedMethod, DexEncodedMethod candidate) {
- assert resolvedMethod.method.match(candidate.method);
+ assert resolvedMethod.getReference().match(candidate.getReference());
assert !candidate.isPrivateMethod();
if (resolvedMethod.accessFlags.isPublic() || resolvedMethod.accessFlags.isProtected()) {
return true;
diff --git a/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java b/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java
index add54d6..131ca4e 100644
--- a/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java
+++ b/src/main/java/com/android/tools/r8/graph/RewrittenPrototypeDescription.java
@@ -252,7 +252,7 @@
// Currently not allowed to remove the receiver of an instance method. This would involve
// changing invoke-direct/invoke-virtual into invoke-static.
assert encodedMethod.isStatic() || !getArgumentInfo(0).isRemovedArgumentInfo();
- DexType[] params = encodedMethod.method.proto.parameters.values;
+ DexType[] params = encodedMethod.getReference().proto.parameters.values;
if (isEmpty()) {
return params;
}
@@ -433,12 +433,12 @@
public DexProto rewriteProto(DexEncodedMethod encodedMethod, DexItemFactory dexItemFactory) {
if (isEmpty()) {
- return encodedMethod.method.proto;
+ return encodedMethod.getReference().proto;
}
DexType newReturnType =
rewrittenReturnInfo != null
? rewrittenReturnInfo.newType
- : encodedMethod.method.proto.returnType;
+ : encodedMethod.getReference().proto.returnType;
DexType[] newParameters = argumentInfoCollection.rewriteParameters(encodedMethod);
return dexItemFactory.createProto(newReturnType, newParameters);
}
diff --git a/src/main/java/com/android/tools/r8/graph/TreeFixerBase.java b/src/main/java/com/android/tools/r8/graph/TreeFixerBase.java
index 27f3251..5bbc1ee 100644
--- a/src/main/java/com/android/tools/r8/graph/TreeFixerBase.java
+++ b/src/main/java/com/android/tools/r8/graph/TreeFixerBase.java
@@ -43,7 +43,7 @@
}
private DexEncodedField recordFieldChange(DexEncodedField from, DexEncodedField to) {
- recordFieldChange(from.field, to.field);
+ recordFieldChange(from.getReference(), to.getReference());
return to;
}
@@ -77,7 +77,7 @@
/** Callback to allow custom handling when an encoded method changes. */
public DexEncodedMethod recordMethodChange(DexEncodedMethod from, DexEncodedMethod to) {
- recordMethodChange(from.method, to.method);
+ recordMethodChange(from.getReference(), to.getReference());
return to;
}
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 131198c..a47acd6 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
@@ -167,7 +167,7 @@
DexMethod renameDirectMethod(ProgramMethod method) {
assert method.getDefinition().belongsToDirectPool();
return dexItemFactory.createFreshMethodName(
- method.getDefinition().method.name.toSourceString(),
+ method.getDefinition().getReference().name.toSourceString(),
method.getHolderType(),
method.getDefinition().getProto(),
group.getTarget().getType(),
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 e8130ed..c144128 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
@@ -112,7 +112,7 @@
flags.setPrivate();
classMethodsBuilder.addDirectMethod(encodedMethod);
- return encodedMethod.method;
+ return encodedMethod.getReference();
}
private MethodAccessFlags getAccessFlags() {
diff --git a/src/main/java/com/android/tools/r8/inspector/internal/FieldInspectorImpl.java b/src/main/java/com/android/tools/r8/inspector/internal/FieldInspectorImpl.java
index 056d652e..c7e0cbb 100644
--- a/src/main/java/com/android/tools/r8/inspector/internal/FieldInspectorImpl.java
+++ b/src/main/java/com/android/tools/r8/inspector/internal/FieldInspectorImpl.java
@@ -26,8 +26,8 @@
reference =
Reference.field(
parent.getClassReference(),
- field.field.name.toString(),
- Reference.typeFromDescriptor(field.field.type.toDescriptorString()));
+ field.getReference().name.toString(),
+ Reference.typeFromDescriptor(field.getReference().type.toDescriptorString()));
}
return reference;
}
@@ -45,7 +45,7 @@
@Override
public Optional<ValueInspector> getInitialValue() {
if (field.isStatic() && field.getStaticValue() != null) {
- return Optional.of(new ValueInspectorImpl(field.getStaticValue(), field.field.type));
+ return Optional.of(new ValueInspectorImpl(field.getStaticValue(), field.getReference().type));
}
return Optional.empty();
}
diff --git a/src/main/java/com/android/tools/r8/inspector/internal/MethodInspectorImpl.java b/src/main/java/com/android/tools/r8/inspector/internal/MethodInspectorImpl.java
index 1d868be..3c27924 100644
--- a/src/main/java/com/android/tools/r8/inspector/internal/MethodInspectorImpl.java
+++ b/src/main/java/com/android/tools/r8/inspector/internal/MethodInspectorImpl.java
@@ -27,14 +27,14 @@
reference =
Reference.method(
parent.getClassReference(),
- method.method.name.toString(),
+ method.getReference().name.toString(),
ListUtils.map(
- Arrays.asList(method.method.proto.parameters.values),
+ Arrays.asList(method.getReference().proto.parameters.values),
param -> Reference.typeFromDescriptor(param.toDescriptorString())),
- method.method.proto.returnType.isVoidType()
+ method.getReference().proto.returnType.isVoidType()
? null
: Reference.typeFromDescriptor(
- method.method.proto.returnType.toDescriptorString()));
+ method.getReference().proto.returnType.toDescriptorString()));
}
return reference;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java b/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java
index 5926ecc..b2b6111 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java
@@ -72,7 +72,8 @@
}
TypeElement valueType = instruction.returnValue().getType();
TypeElement returnType =
- TypeElement.fromDexType(method.method.proto.returnType, Nullability.maybeNull(), appView);
+ TypeElement.fromDexType(
+ method.getReference().proto.returnType, Nullability.maybeNull(), appView);
if (verifyTypesHelper.isAssignable(valueType, returnType)) {
return true;
}
@@ -80,7 +81,7 @@
if (returnType.isClassType() && valueType.isReferenceType()) {
// Interface types are treated like Object according to the JVM spec.
// https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.10.1.2-100
- DexClass clazz = appView.definitionFor(method.method.proto.returnType);
+ DexClass clazz = appView.definitionFor(method.getReference().proto.returnType);
return clazz != null && clazz.isInterface();
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
index ccef272..d1b411a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
@@ -102,7 +102,7 @@
Map<DexEncodedField, AbstractValue> abstractInstanceFieldValuesForClass =
new IdentityHashMap<>();
for (DexEncodedField field : clazz.instanceFields()) {
- FieldAccessInfo fieldAccessInfo = fieldAccessInfos.get(field.field);
+ FieldAccessInfo fieldAccessInfo = fieldAccessInfos.get(field.getReference());
if (fieldAccessInfo != null && !fieldAccessInfo.hasReflectiveAccess()) {
abstractInstanceFieldValuesForClass.put(field, BottomValue.getInstance());
}
@@ -112,14 +112,14 @@
}
private boolean isAlwaysZero(DexEncodedField field) {
- return !appView.appInfo().isPinned(field.field) && !nonZeroFields.contains(field);
+ return !appView.appInfo().isPinned(field.getReference()) && !nonZeroFields.contains(field);
}
void acceptClassInitializerDefaultsResult(
ClassInitializerDefaultsResult classInitializerDefaultsResult) {
classInitializerDefaultsResult.forEachOptimizedField(
(field, value) -> {
- if (!value.isDefault(field.field.type)) {
+ if (!value.isDefault(field.getReference().type)) {
nonZeroFields.add(field);
}
});
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java
index a178a69..a1e3eb5 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java
@@ -17,7 +17,7 @@
public void recordFieldAccess(
FieldInstruction instruction, DexEncodedField field, OptimizationFeedback feedback) {
- if (!field.field.type.isIntType()) {
+ if (!field.getReference().type.isIntType()) {
return;
}
@@ -79,7 +79,7 @@
}
if (user.isFieldPut()) {
FieldInstruction fieldInstruction = user.asFieldInstruction();
- if (fieldInstruction.getField() == encodedField.field) {
+ if (fieldInstruction.getField() == encodedField.getReference()) {
return true;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
index 05259ca..b11431e 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
@@ -134,7 +134,7 @@
private void clearReadsAndWritesFromFieldsOfInterest(AppInfoWithLiveness appInfo) {
FieldAccessInfoCollection<?> fieldAccessInfoCollection = appInfo.getFieldAccessInfoCollection();
for (DexEncodedField field : constantFields) {
- fieldAccessInfoCollection.get(field.field).asMutable().clearReads();
+ fieldAccessInfoCollection.get(field.getReference()).asMutable().clearReads();
}
for (DexEncodedField field : readFields.keySet()) {
fieldAccessInfoCollection.get(field.getReference()).asMutable().clearWrites();
@@ -165,7 +165,7 @@
private static FieldClassification classifyField(
DexEncodedField field, AppView<AppInfoWithLiveness> appView) {
FieldAccessInfo fieldAccessInfo =
- appView.appInfo().getFieldAccessInfoCollection().get(field.field);
+ appView.appInfo().getFieldAccessInfoCollection().get(field.getReference());
if (fieldAccessInfo == null
|| fieldAccessInfo.hasReflectiveAccess()
|| fieldAccessInfo.isAccessedFromMethodHandle()
@@ -184,7 +184,7 @@
if (singleValue.isSingleFieldValue()) {
SingleFieldValue singleFieldValue = singleValue.asSingleFieldValue();
DexField singleField = singleFieldValue.getField();
- if (singleField != field.field
+ if (singleField != field.getReference()
&& !singleFieldValue.mayHaveFinalizeMethodDirectlyOrIndirectly(appView)) {
return FieldClassification.CONSTANT;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/ConcreteMutableFieldSet.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/ConcreteMutableFieldSet.java
index 5bf0c61..f84e13d 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/ConcreteMutableFieldSet.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/ConcreteMutableFieldSet.java
@@ -73,7 +73,7 @@
assert !isEmpty();
ConcreteMutableFieldSet rewrittenSet = new ConcreteMutableFieldSet();
for (DexEncodedField field : fields) {
- DexField rewrittenFieldReference = lens.lookupField(field.field);
+ DexField rewrittenFieldReference = lens.lookupField(field.getReference());
DexClass holder = appView.definitionForHolder(rewrittenFieldReference);
DexEncodedField rewrittenField = rewrittenFieldReference.lookupOnClass(holder);
if (rewrittenField == null) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java
index fc01602..13d03d5 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java
@@ -150,7 +150,7 @@
// Dynamic upper bound type.
TypeElement fieldType =
- TypeElement.fromDexType(field.field.type, Nullability.maybeNull(), appView);
+ TypeElement.fromDexType(field.getReference().type, Nullability.maybeNull(), appView);
TypeElement dynamicUpperBoundType = value.getDynamicUpperBoundType(appView);
if (dynamicUpperBoundType.strictlyLessThan(fieldType, appView)) {
if (maybeNull && dynamicUpperBoundType.isDefinitelyNotNull()) {
@@ -201,7 +201,7 @@
}
return appView
.abstractValueFactory()
- .createSingleFieldValue(field.field, computeObjectState(value));
+ .createSingleFieldValue(field.getReference(), computeObjectState(value));
}
/**
@@ -330,7 +330,7 @@
return appView
.abstractValueFactory()
- .createSingleFieldValue(valuesField.field, new EnumValuesObjectState(valuesState));
+ .createSingleFieldValue(valuesField.getReference(), new EnumValuesObjectState(valuesState));
}
private ObjectState computeEnumInstanceObjectState(Value value) {
@@ -428,7 +428,7 @@
return appView
.abstractValueFactory()
- .createSingleFieldValue(enumField.field, computeObjectState(value));
+ .createSingleFieldValue(enumField.getReference(), computeObjectState(value));
}
private ObjectState computeObjectState(Value value) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValues.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValues.java
index 65e1ea3..ec51f91 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValues.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValues.java
@@ -63,11 +63,13 @@
assert valuesCandidateAbstractValue == null
|| valuesCandidateAbstractValue.equals(value);
valuesCandidateAbstractValue = value;
- enumObjectStateBuilder.put(staticField.field, value.asSingleFieldValue().getState());
+ enumObjectStateBuilder.put(
+ staticField.getReference(), value.asSingleFieldValue().getState());
}
} else if (factory.enumMembers.isEnumField(staticField, staticField.getHolderType())) {
if (value.isSingleFieldValue() && !value.asSingleFieldValue().getState().isEmpty()) {
- enumObjectStateBuilder.put(staticField.field, value.asSingleFieldValue().getState());
+ enumObjectStateBuilder.put(
+ staticField.getReference(), value.asSingleFieldValue().getState());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java
index 64f5bea..f0e63e9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java
@@ -113,7 +113,7 @@
}
DexType enumLiteCandidate = null;
for (DexEncodedMethod virtualMethod : enumLiteMap.virtualMethods()) {
- if (!matchesFindValueByNumberMethod(virtualMethod.method)) {
+ if (!matchesFindValueByNumberMethod(virtualMethod.getReference())) {
return null;
}
if (virtualMethod.returnType() == references.enumLiteType) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
index f15ad69..3cb884a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
@@ -109,7 +109,8 @@
@Override
public boolean isReachableOrReferencedField(
AppInfoWithLiveness appInfo, DexEncodedField field) {
- return !wasRemoved(field.field) && super.isReachableOrReferencedField(appInfo, field);
+ return !wasRemoved(field.getReference())
+ && super.isReachableOrReferencedField(appInfo, field);
}
};
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
index c5f72a3..da0ed41 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
@@ -440,9 +440,9 @@
if (clazz != null) {
DexEncodedMethod newBuilderMethod =
clazz.lookupDirectMethod(
- method -> method.method.name == references.newBuilderMethodName);
+ method -> method.getReference().name == references.newBuilderMethodName);
if (newBuilderMethod != null) {
- bypassClinitforInlining.add(newBuilderMethod.method);
+ bypassClinitforInlining.add(newBuilderMethod.getReference());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java
index 5c3692c..f8c2bf0 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java
@@ -64,7 +64,8 @@
return null;
}
ObjectState state =
- enumStaticFieldValues.getObjectStateForPossiblyPinnedField(enumInstanceField.field);
+ enumStaticFieldValues.getObjectStateForPossiblyPinnedField(
+ enumInstanceField.getReference());
if (state == null) {
return null;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java
index b25f946..030fe3d 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java
@@ -147,7 +147,7 @@
}
public boolean isDynamicMethod(DexEncodedMethod encodedMethod) {
- return isDynamicMethod(encodedMethod.method);
+ return isDynamicMethod(encodedMethod.getReference());
}
public boolean isDynamicMethod(ProgramMethod method) {
@@ -160,7 +160,7 @@
}
public boolean isDynamicMethodBridge(DexEncodedMethod method) {
- return isDynamicMethodBridge(method.method);
+ return isDynamicMethodBridge(method.getReference());
}
public boolean isDynamicMethodBridge(ProgramMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/NonEmptyObjectState.java b/src/main/java/com/android/tools/r8/ir/analysis/value/NonEmptyObjectState.java
index 6aacc3d..567449e 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/NonEmptyObjectState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/NonEmptyObjectState.java
@@ -31,7 +31,7 @@
@Override
public AbstractValue getAbstractFieldValue(DexEncodedField field) {
- return state.getOrDefault(field.field, UnknownValue.getInstance());
+ return state.getOrDefault(field.getReference(), UnknownValue.getInstance());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/ObjectState.java b/src/main/java/com/android/tools/r8/ir/analysis/value/ObjectState.java
index 4db63a6..012a204 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/ObjectState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/ObjectState.java
@@ -70,8 +70,8 @@
public void recordFieldHasValue(DexEncodedField field, AbstractValue abstractValue) {
if (!abstractValue.isUnknown()) {
- assert !state.containsKey(field.field);
- state.put(field.field, abstractValue);
+ assert !state.containsKey(field.getReference());
+ state.put(field.getReference(), abstractValue);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
index fa42fcd..6c773a6 100644
--- a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
@@ -113,7 +113,7 @@
// Only check for <clinit> side effects if there is no -assumenosideeffects rule.
if (appView.appInfo().hasLiveness()) {
AppInfoWithLiveness appInfoWithLiveness = appView.appInfo().withLiveness();
- if (appInfoWithLiveness.noSideEffects.containsKey(resolvedField.field)) {
+ if (appInfoWithLiveness.noSideEffects.containsKey(resolvedField.getReference())) {
return false;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index 0995f34..202df23 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -1091,7 +1091,7 @@
}
}
assert arguments.size()
- == method().method.getArity()
+ == method().getReference().getArity()
+ ((method().accessFlags.isStatic() || ignoreReceiver) ? 0 : 1);
return arguments;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewInstance.java b/src/main/java/com/android/tools/r8/ir/code/NewInstance.java
index 39f2aee..ae02e8b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewInstance.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewInstance.java
@@ -185,7 +185,7 @@
.appInfo()
.resolveMethodOnClass(dexItemFactory.objectMembers.finalize, clazz);
if (finalizeResolutionResult.isSingleResolution()) {
- DexMethod finalizeMethod = finalizeResolutionResult.getSingleTarget().method;
+ DexMethod finalizeMethod = finalizeResolutionResult.getSingleTarget().getReference();
if (finalizeMethod != dexItemFactory.enumMembers.finalize
&& finalizeMethod != dexItemFactory.objectMembers.finalize) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
index 1017f53..9b68a81 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
@@ -111,7 +111,7 @@
boolean isDeadProtoExtensionField =
appView.withGeneratedExtensionRegistryShrinker(
- shrinker -> shrinker.isDeadProtoExtensionField(encodedField.field), false);
+ shrinker -> shrinker.isDeadProtoExtensionField(encodedField.getReference()), false);
if (isDeadProtoExtensionField) {
return false;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java
index e6f7cb6..4be3d83 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java
@@ -38,7 +38,7 @@
boolean verifyAllMethodsWithCodeExists() {
for (DexProgramClass clazz : appView.appInfo().classes()) {
for (DexEncodedMethod method : clazz.methods()) {
- assert method.hasCode() == (nodes.get(method.method) != null);
+ assert method.hasCode() == (nodes.get(method.getReference()) != null);
}
}
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java
index 967fee0..32be662 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilderBase.java
@@ -195,7 +195,7 @@
private void processInvokeWithDynamicDispatch(
Invoke.Type type, DexEncodedMethod encodedTarget, ProgramMethod context) {
- DexMethod target = encodedTarget.method;
+ DexMethod target = encodedTarget.getReference();
DexClass clazz = appView.definitionFor(target.holder);
if (clazz == null) {
assert false : "Unable to lookup holder of `" + target.toSourceString() + "`";
@@ -258,7 +258,7 @@
}
DexEncodedField encodedField = appView.appInfo().resolveField(field).getResolvedField();
- if (encodedField == null || appView.appInfo().isPinned(encodedField.field)) {
+ if (encodedField == null || appView.appInfo().isPinned(encodedField.getReference())) {
return;
}
@@ -273,7 +273,7 @@
addClassInitializerTarget(clazz);
}
- FieldAccessInfo fieldAccessInfo = fieldAccessInfoCollection.get(encodedField.field);
+ FieldAccessInfo fieldAccessInfo = fieldAccessInfoCollection.get(encodedField.getReference());
if (fieldAccessInfo != null && fieldAccessInfo.hasKnownWriteContexts()) {
if (fieldAccessInfo.getNumberOfWriteContexts() == 1) {
fieldAccessInfo.forEachWriteContext(this::addFieldReadEdge);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index 8a63d63..682ca02 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -187,7 +187,7 @@
public DexField resolveField(DexField field) {
DexEncodedField resolvedField =
appView.appInfoForDesugaring().resolveField(field).getResolvedField();
- return resolvedField == null ? field : resolvedField.field;
+ return resolvedField == null ? field : resolvedField.getReference();
}
private void computeInitializers() {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index 93c61ab..321c96c 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -542,7 +542,7 @@
}
int originalNumberOfArguments =
- method.method.proto.parameters.values.length
+ method.getReference().proto.parameters.values.length
+ argumentsInfo.numberOfRemovedArguments()
+ (method.isStatic() ? 0 : 1)
- prototypeChanges.numberOfExtraParameters();
@@ -562,14 +562,14 @@
DexType argType;
if (argumentInfo.isRewrittenTypeInfo()) {
RewrittenTypeInfo argumentRewrittenTypeInfo = argumentInfo.asRewrittenTypeInfo();
- assert method.method.proto.getParameter(usedArgumentIndex)
+ assert method.getReference().proto.getParameter(usedArgumentIndex)
== argumentRewrittenTypeInfo.getNewType();
// The old type is used to prevent that a changed value from reference to primitive
// type breaks IR building. Rewriting from the old to the new type will be done in the
// IRConverter (typically through the lensCodeRewriter).
argType = argumentRewrittenTypeInfo.getOldType();
} else {
- argType = method.method.proto.getParameter(usedArgumentIndex);
+ argType = method.getReference().proto.getParameter(usedArgumentIndex);
}
usedArgumentIndex++;
writeCallback.accept(register, argType);
@@ -585,7 +585,7 @@
}
for (ExtraParameter extraParameter : prototypeChanges.getExtraParameters()) {
- DexType argType = method.method.proto.getParameter(usedArgumentIndex);
+ DexType argType = method.getReference().proto.getParameter(usedArgumentIndex);
TypeElement type = extraParameter.getTypeElement(appView, argType);
register += type.requiredRegisters();
usedArgumentIndex++;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 54b0a66..0530046 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -1196,7 +1196,7 @@
+ ExceptionUtils.getMainStackTrace();
assert !method.isProcessed()
|| !appView.enableWholeProgramOptimizations()
- || !appView.appInfo().withLiveness().isNeverReprocessMethod(method.method)
+ || !appView.appInfo().withLiveness().isNeverReprocessMethod(method.getReference())
: "Illegal reprocessing due to -neverreprocess rule: " + context.toSourceString();
if (typeChecker != null && !typeChecker.check(code)) {
@@ -1621,7 +1621,7 @@
timing.end();
}
- if (appView.appInfo().withLiveness().isPinned(code.method().method)) {
+ if (appView.appInfo().withLiveness().isPinned(code.method().getReference())) {
return;
}
@@ -1785,7 +1785,7 @@
return;
}
// Only constructors with certain signatures.
- DexTypeList paramTypes = code.method().method.proto.parameters;
+ DexTypeList paramTypes = code.method().getReference().proto.parameters;
if (paramTypes.size() != 3 ||
paramTypes.values[0] != options.itemFactory.doubleType ||
paramTypes.values[1] != options.itemFactory.doubleType ||
@@ -1967,7 +1967,7 @@
printer.end("cfg");
}
if (options.extensiveLoggingFilter.size() > 0
- && options.extensiveLoggingFilter.contains(code.method().method.toSourceString())) {
+ && options.extensiveLoggingFilter.contains(code.method().getReference().toSourceString())) {
String current = code.toString();
System.out.println();
System.out.println("-----------------------------------------------------------------------");
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index b6609b8..6ccaf0f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -596,7 +596,7 @@
if (ret.isReturnVoid()) {
break;
}
- DexType returnType = code.method().method.proto.returnType;
+ DexType returnType = code.method().getReference().proto.returnType;
Value retValue = ret.returnValue();
DexType initialType =
retValue.getType().isPrimitiveType()
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
index 4c073e1..d9f8625 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
@@ -152,7 +152,7 @@
+ ", its imprecise type is: "
+ stillImprecise.get(0).getType(),
code.origin,
- new MethodPosition(code.method().method.asMethodReference())));
+ new MethodPosition(code.method().getReference().asMethodReference())));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/ClassProcessor.java
index 6200603..630a67d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/ClassProcessor.java
@@ -384,7 +384,7 @@
Set<Wrapper<DexMethod>> defaultMethods =
new HashSet<>(iface.getMethodCollection().numberOfVirtualMethods());
for (DexEncodedMethod method : iface.virtualMethods(DexEncodedMethod::isDefaultMethod)) {
- defaultMethods.add(equivalence.wrap(method.method));
+ defaultMethods.add(equivalence.wrap(method.getReference()));
}
return MethodSignatures.create(defaultMethods);
}
@@ -644,7 +644,7 @@
"Attempt to add forwarding method that conflicts with existing method.",
null,
clazz.getOrigin(),
- new MethodPosition(methodOnSelf.method.asMethodReference()));
+ new MethodPosition(methodOnSelf.getReference().asMethodReference()));
}
// NOTE: Never add a forwarding method to methods of classes unknown or coming from android.jar
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 fd4abda..5760bd2 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
@@ -267,7 +267,7 @@
private static boolean hasVirtualMethodWithSignature(DexClass clazz, DexEncodedMethod method) {
for (DexEncodedMethod existingMethod : clazz.virtualMethods()) {
- if (existingMethod.method.equals(method.method)) {
+ if (existingMethod.getReference().equals(method.getReference())) {
return true;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DefaultMethodsHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/DefaultMethodsHelper.java
index 07277bc..838374d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DefaultMethodsHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DefaultMethodsHelper.java
@@ -44,7 +44,7 @@
DexMethod getSingleCandidate(DexMethod method) {
DexMethod candidate = null;
for (DexEncodedMethod encodedMethod : live) {
- DexMethod current = encodedMethod.method;
+ DexMethod current = encodedMethod.getReference();
if (current.proto == method.proto && current.name == method.name) {
if (candidate != null) {
return null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryAPIConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryAPIConverter.java
index f2f255a..4f05b2e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryAPIConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryAPIConverter.java
@@ -341,10 +341,10 @@
private ProgramMethod generateCallbackMethod(
DexEncodedMethod originalMethod, DexProgramClass clazz) {
DexMethod methodToInstall =
- methodWithVivifiedTypeInSignature(originalMethod.method, clazz.type, appView);
+ methodWithVivifiedTypeInSignature(originalMethod.getReference(), clazz.type, appView);
CfCode cfCode =
new APIConverterWrapperCfCodeProvider(
- appView, originalMethod.method, null, this, clazz.isInterface())
+ appView, originalMethod.getReference(), null, this, clazz.isInterface())
.generateCfCode();
DexEncodedMethod newMethod =
wrapperSynthesizor.newSynthesizedMethod(methodToInstall, originalMethod, cfCode);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
index 8a6624e..4f4673a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
@@ -264,7 +264,7 @@
if (!appView.options().encodeChecksums) {
return DexProgramClass::invalidChecksumRequest;
}
- return c -> method.method.hashCode();
+ return c -> method.getReference().hashCode();
}
// Used by the ListOfBackportedMethods utility.
@@ -331,7 +331,7 @@
}
DexEncodedMethod singleTarget = resolutionResult.getSingleTarget();
assert singleTarget != null;
- retarget = getRetargetLibraryMember(singleTarget.method);
+ retarget = getRetargetLibraryMember(singleTarget.getReference());
}
return retarget;
}
@@ -622,7 +622,8 @@
// Dispatch holder.
DexType holderType = dispatchHolderTypeFor(emulatedDispatchMethod);
DexEncodedMethod dispatchMethod =
- generateHolderDispatchMethod(emulatedDispatchMethod, holderType, itfMethod.method);
+ generateHolderDispatchMethod(
+ emulatedDispatchMethod, holderType, itfMethod.getReference());
synthesizeClassWithUniqueMethod(
builder,
holderAccessFlags,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java
index ce4f61a..f5845d4 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java
@@ -239,7 +239,9 @@
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY, // No static fields.
new DexEncodedField[] {wrapperField},
- new DexEncodedMethod[] {synthesizeConstructor(wrapperField.field), conversionMethod},
+ new DexEncodedMethod[] {
+ synthesizeConstructor(wrapperField.getReference()), conversionMethod
+ },
virtualMethods,
factory.getSkipNameValidationForTesting(),
DexProgramClass::checksumFromType);
@@ -275,21 +277,17 @@
DexMethod methodToInstall =
factory.createMethod(
wrapperField.getHolderType(),
- dexEncodedMethod.method.proto,
- dexEncodedMethod.method.name);
+ dexEncodedMethod.getReference().proto,
+ dexEncodedMethod.getReference().name);
CfCode cfCode;
if (dexEncodedMethod.isFinal()) {
invalidWrappers.add(wrapperField.getHolderType());
- finalMethods.add(dexEncodedMethod.method);
+ finalMethods.add(dexEncodedMethod.getReference());
continue;
} else {
cfCode =
new APIConverterVivifiedWrapperCfCodeProvider(
- appView,
- methodToInstall,
- wrapperField.field,
- converter,
- isInterface)
+ appView, methodToInstall, wrapperField.getReference(), converter, isInterface)
.generateCfCode();
}
DexEncodedMethod newDexEncodedMethod =
@@ -320,16 +318,20 @@
boolean isInterface = holderClass == null || holderClass.isInterface();
DexMethod methodToInstall =
DesugaredLibraryAPIConverter.methodWithVivifiedTypeInSignature(
- dexEncodedMethod.method, wrapperField.getHolderType(), appView);
+ dexEncodedMethod.getReference(), wrapperField.getHolderType(), appView);
CfCode cfCode;
if (dexEncodedMethod.isFinal()) {
invalidWrappers.add(wrapperField.getHolderType());
- finalMethods.add(dexEncodedMethod.method);
+ finalMethods.add(dexEncodedMethod.getReference());
continue;
} else {
cfCode =
new APIConverterWrapperCfCodeProvider(
- appView, dexEncodedMethod.method, wrapperField.field, converter, isInterface)
+ appView,
+ dexEncodedMethod.getReference(),
+ wrapperField.getReference(),
+ converter,
+ isInterface)
.generateCfCode();
}
DexEncodedMethod newDexEncodedMethod =
@@ -398,7 +400,7 @@
// This looks quadratic but given the size of the collections met in practice for
// desugared libraries (Max ~15) it does not matter.
for (DexEncodedMethod alreadyImplementedMethod : implementedMethods) {
- if (alreadyImplementedMethod.method.match(virtualMethod.method)) {
+ if (alreadyImplementedMethod.getReference().match(virtualMethod.getReference())) {
alreadyAdded = true;
break;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index a1c0d58..0ed24b2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -198,8 +198,10 @@
clazz.forEachMethod(
m -> {
if (m.isDefaultMethod()) {
- appInfo.dexItemFactory().registerTypeNeededForDesugaring(m.method.proto.returnType);
- for (DexType param : m.method.proto.parameters.values) {
+ appInfo
+ .dexItemFactory()
+ .registerTypeNeededForDesugaring(m.getReference().proto.returnType);
+ for (DexType param : m.getReference().proto.parameters.values) {
appInfo.dexItemFactory().registerTypeNeededForDesugaring(param);
}
}
@@ -216,7 +218,7 @@
if (emulatedInterfaceClass != null) {
for (DexEncodedMethod encodedMethod :
emulatedInterfaceClass.methods(DexEncodedMethod::isDefaultMethod)) {
- emulatedMethods.add(encodedMethod.method.name);
+ emulatedMethods.add(encodedMethod.getReference().name);
}
}
}
@@ -1476,7 +1478,7 @@
// Hide by virtual methods of this interface.
for (DexEncodedMethod virtual : definedInterface.virtualMethods()) {
- helper.hideMatches(virtual.method);
+ helper.hideMatches(virtual.getReference());
}
// Add all default methods of this interface.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
index d20eee7..9c65847 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
@@ -256,7 +256,8 @@
implMethod.copyMetadata(virtual);
virtual.setDefaultInterfaceMethodImplementation(implMethod);
companionMethods.add(implMethod);
- graphLensBuilder.recordCodeMovedToCompanionClass(method.getReference(), implMethod.method);
+ graphLensBuilder.recordCodeMovedToCompanionClass(
+ method.getReference(), implMethod.getReference());
}
// Remove bridge methods.
@@ -397,7 +398,7 @@
// also be kept (such a situation can happen if the vertical class merger merges two interfaces).
private boolean interfaceMethodRemovalChangesApi(DexEncodedMethod method, DexClass iface) {
if (appView.enableWholeProgramOptimizations()) {
- if (appView.appInfo().withLiveness().isPinned(method.method)) {
+ if (appView.appInfo().withLiveness().isPinned(method.getReference())) {
return true;
}
}
@@ -411,7 +412,7 @@
if (clazz == null || !seenBefore.add(clazz.type)) {
continue;
}
- if (clazz.lookupVirtualMethod(method.method) != null) {
+ if (clazz.lookupVirtualMethod(method.getReference()) != null) {
return false;
}
addSuperTypes(clazz, worklist);
@@ -433,7 +434,8 @@
if (method.accessFlags.isNative()) {
throw new Unimplemented("Native interface methods are not yet supported.");
}
- return method.accessFlags.isStatic() && !rewriter.factory.isClassConstructor(method.method);
+ return method.accessFlags.isStatic()
+ && !rewriter.factory.isClassConstructor(method.getReference());
}
// Specific lens which remaps invocation types to static since all rewrites performed here
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 d54264c..a264d65 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
@@ -575,7 +575,7 @@
true);
newMethod.copyMetadata(encodedMethod);
forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
- encodedMethod.method, callTarget);
+ encodedMethod.getReference(), callTarget);
DexEncodedMethod.setDebugInfoWithFakeThisParameter(
newMethod.getCode(), callTarget.getArity(), appView);
@@ -659,7 +659,7 @@
true);
newMethod.copyMetadata(encodedMethod);
forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
- encodedMethod.method, callTarget);
+ encodedMethod.getReference(), callTarget);
return newMethod;
});
if (replacement != null) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java b/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java
index 28bbf14..8f9421d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ArgumentRemovalUtils.java
@@ -13,10 +13,10 @@
// Returns true if this method is pinned from the perspective of optimizations that attempt to
// remove method arguments.
public static boolean isPinned(DexEncodedMethod method, AppView<AppInfoWithLiveness> appView) {
- return appView.appInfo().isPinned(method.method)
- || appView.appInfo().isBootstrapMethod(method.method)
- || appView.appInfo().isFailedResolutionTarget(method.method)
- || appView.appInfo().isMethodTargetedByInvokeDynamic(method.method)
+ return appView.appInfo().isPinned(method.getReference())
+ || appView.appInfo().isBootstrapMethod(method.getReference())
+ || appView.appInfo().isFailedResolutionTarget(method.getReference())
+ || appView.appInfo().isMethodTargetedByInvokeDynamic(method.getReference())
|| method.accessFlags.isNative();
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java b/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
index 5eb23bb..43be45b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
@@ -384,12 +384,13 @@
}
}
}
- assert argumentsSeen == code.method().method.getArity() + (code.method().isStatic() ? 0 : 1)
+ assert argumentsSeen
+ == code.method().getReference().getArity() + (code.method().isStatic() ? 0 : 1)
: "args: "
+ argumentsSeen
+ " != "
+ "arity: "
- + code.method().method.getArity()
+ + code.method().getReference().getArity()
+ ", static: "
+ code.method().isStatic();
// After packed Argument instructions, add Assume and constant instructions.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
index b176db1..3551295 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
@@ -164,7 +164,7 @@
// Set initial values for static fields from the definitive static put instructions collected.
finalFieldPuts.forEach(
(field, put) -> {
- DexType fieldType = field.field.type;
+ DexType fieldType = field.getReference().type;
Value value = put.value().getAliasedValue();
if (unnecessaryStaticPuts.contains(put)) {
if (fieldType == dexItemFactory.stringType) {
@@ -253,7 +253,7 @@
.map(appInfoWithLiveness::resolveField)
.map(FieldResolutionResult::getResolvedField)
.filter(appInfoWithLiveness::isStaticFieldWrittenOnlyInEnclosingStaticInitializer)
- .map(field -> field.field)
+ .map(field -> field.getReference())
.collect(Collectors.toSet());
// Then retain only these fields that are actually no longer being written to.
@@ -264,7 +264,7 @@
DexEncodedField encodedField =
appInfoWithLiveness.resolveField(field).getResolvedField();
if (encodedField != null) {
- candidates.remove(encodedField.field);
+ candidates.remove(encodedField.getReference());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index d3dc297..32ec969 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -263,7 +263,7 @@
if (appView
.dexItemFactory()
.objectsMethods
- .isRequireNonNullMethod(code.method().method)) {
+ .isRequireNonNullMethod(code.method().getReference())) {
continue;
}
@@ -524,7 +524,8 @@
int selfRecursionFanOut = 0;
Instruction lastSelfRecursiveCall = null;
for (Instruction i : code.instructions()) {
- if (i.isInvokeMethod() && i.asInvokeMethod().getInvokedMethod() == code.method().method) {
+ if (i.isInvokeMethod()
+ && i.asInvokeMethod().getInvokedMethod() == code.method().getReference()) {
selfRecursionFanOut++;
lastSelfRecursiveCall = i;
}
@@ -3720,7 +3721,7 @@
InstructionListIterator iterator = block.listIterator(code);
// Attach some synthetic position to all inserted code.
- Position position = Position.synthetic(1, method.method, null);
+ Position position = Position.synthetic(1, method.getReference(), null);
iterator.setInsertionPosition(position);
// Split arguments into their own block.
@@ -3748,7 +3749,7 @@
Value value = addConstString(code, iterator, "INVOKE ");
iterator.add(new InvokeVirtual(print, null, ImmutableList.of(out, value)));
- value = addConstString(code, iterator, method.method.qualifiedName());
+ value = addConstString(code, iterator, method.getReference().qualifiedName());
iterator.add(new InvokeVirtual(print, null, ImmutableList.of(out, value)));
Value openParenthesis = addConstString(code, iterator, "(");
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
index fa3886e..0cc7497 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
@@ -387,7 +387,7 @@
}
// Change the invoke-virtual instruction to target the refined resolution result instead.
- return newResolutionResult.getResolvedMethod().method;
+ return newResolutionResult.getResolvedMethod().getReference();
}
private boolean isRebindingNewClassIntoMainDex(ProgramMethod context, DexMethod reboundMethod) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DynamicTypeOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/DynamicTypeOptimization.java
index 20e0515..9b738b6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DynamicTypeOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DynamicTypeOptimization.java
@@ -30,7 +30,7 @@
* <p>If the method has no normal exits, then null is returned.
*/
public TypeElement computeDynamicReturnType(DexEncodedMethod method, IRCode code) {
- assert method.method.proto.returnType.isReferenceType();
+ assert method.getReference().proto.returnType.isReferenceType();
List<TypeElement> returnedTypes = new ArrayList<>();
for (BasicBlock block : code.blocks) {
JumpInstruction exitInstruction = block.exit();
@@ -43,7 +43,7 @@
}
public ClassTypeElement computeDynamicLowerBoundType(DexEncodedMethod method, IRCode code) {
- assert method.method.proto.returnType.isReferenceType();
+ assert method.getReference().proto.returnType.isReferenceType();
ClassTypeElement result = null;
for (BasicBlock block : code.blocks) {
JumpInstruction exitInstruction = block.exit();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java b/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java
index 74a4324..652c185 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MethodPoolCollection.java
@@ -58,7 +58,7 @@
clazz.forEachMethod(
encodedMethod -> {
if (methodTester.test(encodedMethod)) {
- methodPool.seen(equivalence.wrap(encodedMethod.method));
+ methodPool.seen(equivalence.wrap(encodedMethod.getReference()));
}
});
if (clazz.superType != null) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
index f802efe..014337c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
@@ -363,14 +363,14 @@
fieldInitializationInfos.forEachWithDeterministicOrder(
appView,
(field, info) -> {
- if (!appView.appInfo().withLiveness().mayPropagateValueFor(field.field)) {
+ if (!appView.appInfo().withLiveness().mayPropagateValueFor(field.getReference())) {
return;
}
if (info.isArgumentInitializationInfo()) {
Value value =
invoke.getArgument(info.asArgumentInitializationInfo().getArgumentIndex());
Value object = invoke.getReceiver().getAliasedValue();
- FieldAndObject fieldAndObject = new FieldAndObject(field.field, object);
+ FieldAndObject fieldAndObject = new FieldAndObject(field.getReference(), object);
if (field.isFinal()) {
activeState.putFinalInstanceField(fieldAndObject, new ExistingValue(value));
} else {
@@ -380,7 +380,7 @@
SingleValue value = info.asSingleValue();
if (value.isMaterializableInContext(appView.withLiveness(), method)) {
Value object = invoke.getReceiver().getAliasedValue();
- FieldAndObject fieldAndObject = new FieldAndObject(field.field, object);
+ FieldAndObject fieldAndObject = new FieldAndObject(field.getReference(), object);
if (field.isFinal()) {
activeState.putFinalInstanceField(fieldAndObject, new MaterializableValue(value));
} else {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
index 6758593..d532b9b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
@@ -178,7 +178,7 @@
});
new Rewriter(code, instructionIterator, serviceLoaderLoad)
- .perform(classLoaderInvoke, synthesizedMethod.method);
+ .perform(classLoaderInvoke, synthesizedMethod.getReference());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
index 7bec65e..5536f0e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
@@ -100,7 +100,7 @@
}
private void extractSwitchMap(DexEncodedField encodedField, IRCode initializer) {
- DexField field = encodedField.field;
+ DexField field = encodedField.getReference();
Int2ReferenceMap<DexField> switchMap = new Int2ReferenceArrayMap<>();
// Find each array-put instruction that updates an entry of the array that is stored in
@@ -162,7 +162,7 @@
private boolean maybeIsSwitchMap(DexEncodedField dexEncodedField) {
// We are looking for synthetic fields of type int[].
- DexField field = dexEncodedField.field;
+ DexField field = dexEncodedField.getReference();
return dexEncodedField.accessFlags.isSynthetic()
&& (field.name.startsWith(switchMapPrefix) || field.name.startsWith(kotlinSwitchMapPrefix))
&& field.type == intArrayType;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
index d60ba25..3e58a94 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
@@ -158,7 +158,7 @@
for (DexEncodedMethod virtualMethod : clazz.virtualMethods()) {
RewrittenPrototypeDescription prototypeChanges =
RewrittenPrototypeDescription.createForUninstantiatedTypes(
- virtualMethod.method,
+ virtualMethod.getReference(),
appView,
getRemovedArgumentsInfo(virtualMethod, ALLOW_ARGUMENT_REMOVAL));
if (!prototypeChanges.isEmpty()) {
@@ -186,7 +186,7 @@
Set<Wrapper<DexMethod>> usedSignatures = new HashSet<>();
for (DexEncodedMethod method : clazz.methods()) {
if (!prototypeChangesPerMethod.containsKey(method)) {
- usedSignatures.add(equivalence.wrap(method.method));
+ usedSignatures.add(equivalence.wrap(method.getReference()));
}
}
@@ -195,7 +195,7 @@
.getMethodCollection()
.replaceDirectMethods(
encodedMethod -> {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
RewrittenPrototypeDescription prototypeChanges =
prototypeChangesPerMethod.getOrDefault(
encodedMethod, RewrittenPrototypeDescription.none());
@@ -230,7 +230,7 @@
.getMethodCollection()
.replaceVirtualMethods(
encodedMethod -> {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
RewrittenPrototypeDescription prototypeChanges =
getPrototypeChanges(encodedMethod, DISALLOW_ARGUMENT_REMOVAL);
ArgumentInfoCollection removedArgumentsInfo =
@@ -262,7 +262,7 @@
.getMethodCollection()
.replaceVirtualMethods(
encodedMethod -> {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
RewrittenPrototypeDescription prototypeChanges =
getPrototypeChanges(encodedMethod, DISALLOW_ARGUMENT_REMOVAL);
ArgumentInfoCollection removedArgumentsInfo =
@@ -299,11 +299,11 @@
private RewrittenPrototypeDescription getPrototypeChanges(
DexEncodedMethod encodedMethod, Strategy strategy) {
if (ArgumentRemovalUtils.isPinned(encodedMethod, appView)
- || appView.appInfo().isKeepConstantArgumentsMethod(encodedMethod.method)) {
+ || appView.appInfo().isKeepConstantArgumentsMethod(encodedMethod.getReference())) {
return RewrittenPrototypeDescription.none();
}
return RewrittenPrototypeDescription.createForUninstantiatedTypes(
- encodedMethod.method, appView, getRemovedArgumentsInfo(encodedMethod, strategy));
+ encodedMethod.getReference(), appView, getRemovedArgumentsInfo(encodedMethod, strategy));
}
private ArgumentInfoCollection getRemovedArgumentsInfo(
@@ -313,7 +313,7 @@
}
ArgumentInfoCollection.Builder argInfosBuilder = ArgumentInfoCollection.builder();
- DexProto proto = encodedMethod.method.proto;
+ DexProto proto = encodedMethod.getReference().proto;
int offset = encodedMethod.isStatic() ? 0 : 1;
for (int i = 0; i < proto.parameters.size(); ++i) {
DexType type = proto.parameters.values[i];
@@ -329,7 +329,7 @@
private DexMethod getNewMethodSignature(
DexEncodedMethod encodedMethod, RewrittenPrototypeDescription prototypeChanges) {
DexItemFactory dexItemFactory = appView.dexItemFactory();
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
DexProto newProto = prototypeChanges.rewriteProto(encodedMethod, dexItemFactory);
return dexItemFactory.createMethod(method.holder, newProto, method.name);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java
index ec1b904..0ebf96b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UnusedArgumentsCollector.java
@@ -133,8 +133,8 @@
DexString newName = null;
do {
if (newName == null) {
- newName = method.method.name;
- } else if (!appView.dexItemFactory().isConstructor(method.method)) {
+ newName = method.getReference().name;
+ } else if (!appView.dexItemFactory().isConstructor(method.getReference())) {
newName =
appView
.dexItemFactory()
@@ -142,7 +142,7 @@
SymbolGenerationUtils.numberToIdentifier(
count,
MixedCasing.USE_MIXED_CASE,
- method.method.name.toSourceString().toCharArray()));
+ method.getReference().name.toSourceString().toCharArray()));
} else {
// Constructors must be named `<init>`.
return null;
@@ -156,7 +156,7 @@
DexEncodedMethod removeArguments(
DexEncodedMethod method, DexMethod newSignature, ArgumentInfoCollection unused) {
- boolean removed = usedSignatures.remove(equivalence.wrap(method.method));
+ boolean removed = usedSignatures.remove(equivalence.wrap(method.getReference()));
assert removed;
markSignatureAsUsed(newSignature);
@@ -180,10 +180,12 @@
DexString newName = null;
do {
if (newName == null) {
- newName = method.method.name;
- } else if (!appView.dexItemFactory().isConstructor(method.method)) {
+ newName = method.getReference().name;
+ } else if (!appView.dexItemFactory().isConstructor(method.getReference())) {
newName =
- appView.dexItemFactory().createString(method.method.name.toSourceString() + count);
+ appView
+ .dexItemFactory()
+ .createString(method.getReference().name.toSourceString() + count);
} else {
// Constructors must be named `<init>`.
return null;
@@ -210,7 +212,7 @@
private void processDirectMethods(DexProgramClass clazz) {
UsedSignatures signatures = new UsedSignatures();
for (DexEncodedMethod method : clazz.methods()) {
- signatures.markSignatureAsUsed(method.method);
+ signatures.markSignatureAsUsed(method.getReference());
}
clazz
@@ -220,7 +222,7 @@
// If this is a method with known resolution issues, then don't remove any unused
// arguments.
- if (appView.appInfo().isFailedResolutionTarget(method.method)) {
+ if (appView.appInfo().isFailedResolutionTarget(method.getReference())) {
return method;
}
@@ -229,14 +231,14 @@
DexProto newProto = createProtoWithRemovedArguments(method, unused);
DexMethod newSignature = signatures.getNewSignature(method, newProto);
if (newSignature == null) {
- assert appView.dexItemFactory().isConstructor(method.method);
+ assert appView.dexItemFactory().isConstructor(method.getReference());
return method;
}
DexEncodedMethod newMethod =
signatures.removeArguments(method, newSignature, unused);
synchronized (this) {
- methodMapping.put(method.method, newMethod.method);
- removedArguments.put(newMethod.method, unused);
+ methodMapping.put(method.getReference(), newMethod.getReference());
+ removedArguments.put(newMethod.getReference(), unused);
}
return newMethod;
}
@@ -265,8 +267,8 @@
signatures.removeArguments(
method, signatures.getNewSignature(method, newProto), unused);
- methodMapping.put(method.method, newMethod.method);
- removedArguments.put(newMethod.method, unused);
+ methodMapping.put(method.getReference(), newMethod.getReference());
+ removedArguments.put(newMethod.getReference(), unused);
return newMethod;
}
return method;
@@ -280,7 +282,7 @@
private ArgumentInfoCollection collectUnusedArguments(
DexEncodedMethod method, MemberPool<DexMethod> methodPool) {
if (ArgumentRemovalUtils.isPinned(method, appView)
- || appView.appInfo().isKeepUnusedArgumentsMethod(method.method)) {
+ || appView.appInfo().isKeepUnusedArgumentsMethod(method.getReference())) {
return null;
}
// Only process classfile code objects.
@@ -292,13 +294,13 @@
// an unused argument cannot be removed unless it is unused in all of the related methods in
// the hierarchy.
assert methodPool != null;
- Wrapper<DexMethod> wrapper = equivalence.wrap(method.method);
+ Wrapper<DexMethod> wrapper = equivalence.wrap(method.getReference());
if (methodPool.hasSeenStrictlyAbove(wrapper) || methodPool.hasSeenStrictlyBelow(wrapper)) {
return null;
}
}
int offset = method.accessFlags.isStatic() ? 0 : 1;
- int argumentCount = method.method.proto.parameters.size() + offset;
+ int argumentCount = method.getReference().proto.parameters.size() + offset;
CollectUsedArguments collector = new CollectUsedArguments();
if (!method.accessFlags.isStatic()) {
// TODO(65810338): The receiver cannot be removed without transforming the method to being
@@ -313,7 +315,7 @@
if (!used.get(argumentIndex)) {
RemovedArgumentInfo removedArg =
RemovedArgumentInfo.builder()
- .setType(method.method.proto.parameters.values[argumentIndex - offset])
+ .setType(method.getReference().proto.parameters.values[argumentIndex - offset])
.build();
argInfosBuilder.addArgumentInfo(argumentIndex, removedArg);
}
@@ -326,7 +328,9 @@
private DexProto createProtoWithRemovedArguments(
DexEncodedMethod encodedMethod, ArgumentInfoCollection unused) {
DexType[] parameters = unused.rewriteParameters(encodedMethod);
- return appView.dexItemFactory().createProto(encodedMethod.method.proto.returnType, parameters);
+ return appView
+ .dexItemFactory()
+ .createProto(encodedMethod.getReference().proto.returnType, parameters);
}
private static class CollectUsedArguments extends ArgumentUse {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index 4857999..f7b79aa 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -290,8 +290,8 @@
// Class must not define finalizer.
DexItemFactory dexItemFactory = appView.dexItemFactory();
for (DexEncodedMethod method : clazz.virtualMethods()) {
- if (method.method.name == dexItemFactory.finalizeMethodName
- && method.method.proto == dexItemFactory.objectMembers.finalize.proto) {
+ if (method.getReference().name == dexItemFactory.finalizeMethodName
+ && method.getReference().proto == dexItemFactory.objectMembers.finalize.proto) {
return EligibilityStatus.NOT_ELIGIBLE;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
index 27deb32..ce781ec 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
@@ -341,7 +341,7 @@
eligibleEnums.add(type);
}
} else if (use.isReturn()) {
- DexType returnType = code.method().method.proto.returnType;
+ DexType returnType = code.method().getReference().proto.returnType;
if (enumUnboxingCandidatesInfo.isCandidate(returnType)) {
eligibleEnums.add(returnType);
}
@@ -500,7 +500,7 @@
for (DexEncodedField staticField : enumClass.staticFields()) {
if (factory.enumMembers.isEnumField(staticField, enumClass.type)) {
ObjectState enumState =
- enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.field);
+ enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.getReference());
if (enumState == null) {
if (staticField.getOptimizationInfo().isDead()) {
// We don't care about unused field data.
@@ -514,11 +514,11 @@
return null;
}
int ordinal = optionalOrdinal.getAsInt();
- unboxedValues.put(staticField.field, ordinalToUnboxedInt(ordinal));
+ unboxedValues.put(staticField.getReference(), ordinalToUnboxedInt(ordinal));
ordinalToObjectState.put(ordinal, enumState);
} else if (factory.enumMembers.isValuesFieldCandidate(staticField, enumClass.type)) {
ObjectState valuesState =
- enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.field);
+ enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.getReference());
if (valuesState == null) {
if (staticField.getOptimizationInfo().isDead()) {
// We don't care about unused field data.
@@ -533,7 +533,7 @@
assert valuesContents == null
|| valuesContents.equals(valuesState.asEnumValuesObjectState());
valuesContents = valuesState.asEnumValuesObjectState();
- valuesField.add(staticField.field);
+ valuesField.add(staticField.getReference());
}
}
@@ -1012,7 +1012,7 @@
return Reason.ELIGIBLE;
}
// The put value has to be of the field type.
- if (field.field.type.toBaseType(factory) != enumClass.type) {
+ if (field.getReference().type.toBaseType(factory) != enumClass.type) {
return Reason.TYPE_MISMATCH_FIELD_PUT;
}
return Reason.ELIGIBLE;
@@ -1095,7 +1095,7 @@
// Return is used for valueOf methods.
if (instruction.isReturn()) {
- DexType returnType = code.method().method.proto.returnType;
+ DexType returnType = code.method().getReference().proto.returnType;
if (returnType != enumClass.type && returnType.toBaseType(factory) != enumClass.type) {
return Reason.IMPLICIT_UP_CAST_IN_RETURN;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java
index 88845d9..0d1c0fa 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java
@@ -85,18 +85,18 @@
}
static boolean isEnumField(DexEncodedField staticField, DexType enumType) {
- return staticField.field.type == enumType
+ return staticField.getReference().type == enumType
&& staticField.accessFlags.isEnum()
&& staticField.accessFlags.isFinal();
}
static boolean matchesValuesField(
DexEncodedField staticField, DexType enumType, DexItemFactory factory) {
- return staticField.field.type.isArrayType()
- && staticField.field.type.toArrayElementType(factory) == enumType
+ return staticField.getReference().type.isArrayType()
+ && staticField.getReference().type.toArrayElementType(factory) == enumType
&& staticField.accessFlags.isSynthetic()
&& staticField.accessFlags.isFinal()
- && staticField.field.name == factory.enumValuesFieldName;
+ && staticField.getReference().name == factory.enumValuesFieldName;
}
private void removeEnumsInAnnotations() {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index 17d0cc7..31e84bb 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -103,7 +103,7 @@
private DexEncodedMethod fixupEncodedMethodToUtility(
DexEncodedMethod encodedMethod, DexType newHolder) {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
DexString newMethodName =
factory.createString(
enumUnboxerRewriter.compatibleName(method.holder)
@@ -137,9 +137,10 @@
method.getName().toString() + (method.isNonPrivateVirtualMethod() ? "$enumunboxing$" : "");
DexMethod newMethod = factory.createMethod(method.getHolderType(), newProto, newMethodName);
newMethod = ensureUniqueMethod(method, newMethod);
- int numberOfExtraNullParameters = newMethod.getArity() - method.method.getArity();
+ int numberOfExtraNullParameters = newMethod.getArity() - method.getReference().getArity();
boolean isStatic = method.isStatic();
- lensBuilder.move(method.method, newMethod, isStatic, isStatic, numberOfExtraNullParameters);
+ lensBuilder.move(
+ method.getReference(), newMethod, isStatic, isStatic, numberOfExtraNullParameters);
return method.toTypeSubstitutedMethod(
newMethod,
builder ->
@@ -195,7 +196,7 @@
}
for (int i = 0; i < fields.size(); i++) {
DexEncodedField encodedField = fields.get(i);
- DexField field = encodedField.field;
+ DexField field = encodedField.getReference();
DexType newType = fixupType(field.type);
if (newType != field.type) {
DexField newField = factory.createField(field.holder, newType, field.name);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 7ad0bdb..70b07a6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -144,7 +144,7 @@
.appInfo()
.resolveMethodOnClass(factory.objectMembers.toString, enumFieldType.getClassType())
.getSingleTarget();
- if (singleTarget != null && singleTarget.method != factory.enumMembers.toString) {
+ if (singleTarget != null && singleTarget.getReference() != factory.enumMembers.toString) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
index ab2b0ac..83fdf6a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
@@ -81,13 +81,13 @@
private TypeElement[] getStaticTypes(AppView<?> appView, DexEncodedMethod method) {
int argOffset = method.isStatic() ? 0 : 1;
- int size = method.method.getArity() + argOffset;
+ int size = method.getReference().getArity() + argOffset;
TypeElement[] staticTypes = new TypeElement[size];
if (!method.isStatic()) {
staticTypes[0] =
TypeElement.fromDexType(method.getHolderType(), definitelyNotNull(), appView);
}
- for (int i = 0; i < method.method.getArity(); i++) {
+ for (int i = 0; i < method.getReference().getArity(); i++) {
staticTypes[i + argOffset] =
TypeElement.fromDexType(method.getParameter(i), maybeNull(), appView);
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index aa28923..a48292a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
@@ -215,7 +215,7 @@
IRCode code,
OptimizationFeedback feedback,
InstanceFieldInitializationInfoCollection instanceFieldInitializationInfos) {
- assert !appView.appInfo().isPinned(method.method);
+ assert !appView.appInfo().isPinned(method.getReference());
if (!method.isInstanceInitializer()) {
return;
@@ -227,7 +227,7 @@
return;
}
- if (appView.appInfo().mayHaveSideEffects.containsKey(method.method)) {
+ if (appView.appInfo().mayHaveSideEffects.containsKey(method.getReference())) {
return;
}
@@ -813,7 +813,7 @@
DexEncodedMethod method,
IRCode code) {
if (dynamicTypeOptimization != null) {
- DexType staticReturnTypeRaw = method.method.proto.returnType;
+ DexType staticReturnTypeRaw = method.getReference().proto.returnType;
if (!staticReturnTypeRaw.isReferenceType()) {
return;
}
@@ -887,7 +887,7 @@
if (!options.enableSideEffectAnalysis) {
return;
}
- if (appView.appInfo().mayHaveSideEffects.containsKey(method.method)) {
+ if (appView.appInfo().mayHaveSideEffects.containsKey(method.getReference())) {
return;
}
ProgramMethod context = code.context();
@@ -954,8 +954,8 @@
.resolveMethodOnClass(appView.dexItemFactory().objectMembers.finalize, clazz);
DexEncodedMethod target = resolutionResult.getSingleTarget();
return target != null
- && target.method != dexItemFactory.enumMembers.finalize
- && target.method != dexItemFactory.objectMembers.finalize;
+ && target.getReference() != dexItemFactory.enumMembers.finalize
+ && target.getReference() != dexItemFactory.objectMembers.finalize;
}
private void computeReturnValueOnlyDependsOnArguments(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java
index 411e7a8..5a12983 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java
@@ -150,9 +150,13 @@
@Override
public void recordFieldHasAbstractValue(
DexEncodedField field, AppView<AppInfoWithLiveness> appView, AbstractValue abstractValue) {
- assert appView.appInfo().getFieldAccessInfoCollection().contains(field.field);
- assert !appView.appInfo().getFieldAccessInfoCollection().get(field.field).hasReflectiveAccess();
- if (appView.appInfo().mayPropagateValueFor(field.field)) {
+ assert appView.appInfo().getFieldAccessInfoCollection().contains(field.getReference());
+ assert !appView
+ .appInfo()
+ .getFieldAccessInfoCollection()
+ .get(field.getReference())
+ .hasReflectiveAccess();
+ if (appView.appInfo().mayPropagateValueFor(field.getReference())) {
getFieldOptimizationInfoForUpdating(field).setAbstractValue(abstractValue);
}
}
@@ -189,7 +193,7 @@
@Override
public synchronized void methodReturnsAbstractValue(
DexEncodedMethod method, AppView<AppInfoWithLiveness> appView, AbstractValue value) {
- if (appView.appInfo().mayPropagateValueFor(method.method)) {
+ if (appView.appInfo().mayPropagateValueFor(method.getReference())) {
getMethodOptimizationInfoForUpdating(method).markReturnsAbstractValue(value);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
index 3fb77d9..5c39d40 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
@@ -66,7 +66,7 @@
@Override
public void recordFieldHasAbstractValue(
DexEncodedField field, AppView<AppInfoWithLiveness> appView, AbstractValue abstractValue) {
- if (appView.appInfo().mayPropagateValueFor(field.field)) {
+ if (appView.appInfo().mayPropagateValueFor(field.getReference())) {
field.getMutableOptimizationInfo().setAbstractValue(abstractValue);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/field/InstanceFieldInitializationInfoCollection.java b/src/main/java/com/android/tools/r8/ir/optimize/info/field/InstanceFieldInitializationInfoCollection.java
index 9fa412a..aca1f76 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/field/InstanceFieldInitializationInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/field/InstanceFieldInitializationInfoCollection.java
@@ -47,7 +47,7 @@
public void recordInitializationInfo(
DexEncodedField field, InstanceFieldInitializationInfo info) {
- recordInitializationInfo(field.field, info);
+ recordInitializationInfo(field.getReference(), info);
}
public Builder recordInitializationInfo(DexField field, InstanceFieldInitializationInfo info) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/field/NonTrivialInstanceFieldInitializationInfoCollection.java b/src/main/java/com/android/tools/r8/ir/optimize/info/field/NonTrivialInstanceFieldInitializationInfoCollection.java
index 6335e27..2081721 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/field/NonTrivialInstanceFieldInitializationInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/field/NonTrivialInstanceFieldInitializationInfoCollection.java
@@ -57,7 +57,8 @@
@Override
public InstanceFieldInitializationInfo get(DexEncodedField field) {
- return infos.getOrDefault(field.field, UnknownInstanceFieldInitializationInfo.getInstance());
+ return infos.getOrDefault(
+ field.getReference(), UnknownInstanceFieldInitializationInfo.getInstance());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java
index 2de1eb0..b986800 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryOptimizationInfoInitializer.java
@@ -94,7 +94,8 @@
for (DexEncodedField field : finalLibraryFields) {
if (field.isStatic()) {
feedback.recordLibraryFieldHasAbstractValue(
- field, abstractValueFactory.createSingleFieldValue(field.field, ObjectState.empty()));
+ field,
+ abstractValueFactory.createSingleFieldValue(field.getReference(), ObjectState.empty()));
}
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
index 5a2f63a..7761bfa 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
@@ -128,7 +128,7 @@
// field. The requirements for the initialization of this field will be
// checked later.
for (DexEncodedField field : cls.staticFields()) {
- DexType type = field.field.type;
+ DexType type = field.getReference().type;
if (singletonFields.put(type, field) != null) {
// There is already candidate singleton field found.
markNotEligible(type, notEligible);
@@ -137,7 +137,7 @@
// Don't allow fields with this candidate types.
for (DexEncodedField field : cls.instanceFields()) {
- markNotEligible(field.field.type, notEligible);
+ markNotEligible(field.getReference().type, notEligible);
}
// Don't allow methods that take a value of this type.
@@ -192,11 +192,11 @@
private boolean isPinned(DexClass clazz, DexEncodedField singletonField) {
AppInfoWithLiveness appInfo = appView.appInfo();
- if (appInfo.isPinned(clazz.type) || appInfo.isPinned(singletonField.field)) {
+ if (appInfo.isPinned(clazz.type) || appInfo.isPinned(singletonField.getReference())) {
return true;
}
for (DexEncodedMethod method : clazz.methods()) {
- if (!method.isStatic() && appInfo.isPinned(method.method)) {
+ if (!method.isStatic() && appInfo.isPinned(method.getReference())) {
return true;
}
}
@@ -589,7 +589,7 @@
if (invoke.hasOutValue()
&& candidateInfo.getter.get() != null
- && candidateInfo.getter.get().method == invoke.getInvokedMethod()) {
+ && candidateInfo.getter.get().getReference() == invoke.getInvokedMethod()) {
candidateInfo = analyzeAllValueUsers(candidateInfo, invoke.outValue(), false);
}
return candidateInfo;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
index 27806d5..69d65c8 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
@@ -253,13 +253,15 @@
.filter(
instruction -> {
if (instruction.isStaticGet()
- && instruction.asStaticGet().getField() == info.singletonField.field) {
+ && instruction.asStaticGet().getField()
+ == info.singletonField.getReference()) {
return true;
}
DexEncodedMethod getter = info.getter.get();
return getter != null
&& instruction.isInvokeStatic()
- && instruction.asInvokeStatic().getInvokedMethod() == getter.method;
+ && instruction.asInvokeStatic().getInvokedMethod()
+ == getter.getReference();
})
.collect(Collectors.toList());
boolean fixableFieldReadsPerUsage = true;
@@ -319,10 +321,10 @@
return false;
},
methodsToBeStaticized::add);
- singletonFields.put(candidate.singletonField.field, candidate);
+ singletonFields.put(candidate.singletonField.getReference(), candidate);
DexEncodedMethod getter = candidate.getter.get();
if (getter != null) {
- singletonGetters.put(getter.method, candidate);
+ singletonGetters.put(getter.getReference(), candidate);
}
ProgramMethodSet referencedFrom =
materializedReferencedFromCollections.getOrDefault(candidate, ProgramMethodSet.empty());
@@ -447,7 +449,8 @@
if (newInstance.outValue().hasAnyUsers()) {
TypeElement type = TypeElement.fromDexType(newInstance.clazz, maybeNull(), appView);
newInstance.replace(
- new StaticGet(code.createValue(type), candidateInfo.singletonField.field), code);
+ new StaticGet(code.createValue(type), candidateInfo.singletonField.getReference()),
+ code);
} else {
newInstance.removeOrReplaceByDebugLocalRead(code);
}
@@ -753,11 +756,11 @@
for (DexEncodedMethod method : candidateClass.methods()) {
if (method.isStatic()) {
newDirectMethods.add(method);
- } else if (!factory().isConstructor(method.method)) {
+ } else if (!factory().isConstructor(method.getReference())) {
DexEncodedMethod staticizedMethod = method.toStaticMethodWithoutThis();
newDirectMethods.add(staticizedMethod);
staticizedMethods.createAndAdd(candidateClass, staticizedMethod);
- methodMapping.put(method.method, staticizedMethod.method);
+ methodMapping.put(method.getReference(), staticizedMethod.getReference());
}
}
candidateClass.setVirtualMethods(DexEncodedMethod.EMPTY_ARRAY);
@@ -786,8 +789,9 @@
private boolean classMembersConflict(DexClass a, DexClass b) {
assert Streams.stream(a.methods()).allMatch(DexEncodedMethod::isStatic);
assert a.instanceFields().size() == 0;
- return a.staticFields().stream().anyMatch(fld -> b.lookupField(fld.field) != null)
- || Streams.stream(a.methods()).anyMatch(method -> b.lookupMethod(method.method) != null);
+ return a.staticFields().stream().anyMatch(fld -> b.lookupField(fld.getReference()) != null)
+ || Streams.stream(a.methods())
+ .anyMatch(method -> b.lookupMethod(method.getReference()) != null);
}
private boolean hasMembersNotStaticized(
@@ -818,10 +822,10 @@
List<DexEncodedField> oldFields = hostClass.staticFields();
for (int i = 0; i < oldFields.size(); i++) {
DexEncodedField field = oldFields.get(i);
- DexField newField = mapCandidateField(field.field, candidateClass.type, hostType);
- if (newField != field.field) {
+ DexField newField = mapCandidateField(field.getReference(), candidateClass.type, hostType);
+ if (newField != field.getReference()) {
newFields[i] = field.toTypeSubstitutedField(newField);
- fieldMapping.put(field.field, newField);
+ fieldMapping.put(field.getReference(), newField);
} else {
newFields[i] = field;
}
@@ -830,10 +834,10 @@
List<DexEncodedField> extraFields = candidateClass.staticFields();
for (int i = 0; i < extraFields.size(); i++) {
DexEncodedField field = extraFields.get(i);
- DexField newField = mapCandidateField(field.field, candidateClass.type, hostType);
- if (newField != field.field) {
+ DexField newField = mapCandidateField(field.getReference(), candidateClass.type, hostType);
+ if (newField != field.getReference()) {
newFields[numOfHostStaticFields + i] = field.toTypeSubstitutedField(newField);
- fieldMapping.put(field.field, newField);
+ fieldMapping.put(field.getReference(), newField);
} else {
newFields[numOfHostStaticFields + i] = field;
}
@@ -852,7 +856,8 @@
for (DexEncodedMethod method : extraMethods) {
DexEncodedMethod newMethod =
method.toTypeSubstitutedMethod(
- factory().createMethod(hostType, method.method.proto, method.method.name));
+ factory()
+ .createMethod(hostType, method.getReference().proto, method.getReference().name));
newMethods.add(newMethod);
// If the old method from the candidate class has been staticized,
if (staticizedMethods.remove(method)) {
@@ -860,11 +865,11 @@
// has just been migrated to the host class.
staticizedMethods.createAndAdd(hostClass, newMethod);
}
- DexMethod originalMethod = methodMapping.getRepresentativeKey(method.method);
+ DexMethod originalMethod = methodMapping.getRepresentativeKey(method.getReference());
if (originalMethod == null) {
- methodMapping.put(method.method, newMethod.method);
+ methodMapping.put(method.getReference(), newMethod.getReference());
} else {
- methodMapping.put(originalMethod, newMethod.method);
+ methodMapping.put(originalMethod, newMethod.getReference());
}
}
hostClass.addDirectMethods(newMethods);
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
index 012bd0e..179dffd 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -609,7 +609,7 @@
if (intervals == null) {
throw new CompilationError(
"Unexpected attempt to get register for a value without a register in method `"
- + code.method().method.toSourceString()
+ + code.method().getReference().toSourceString()
+ "`.",
code.origin);
}
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 1587e8a..5ade4de 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -218,9 +218,9 @@
if (clazz.isRecord()) {
// TODO(b/169645628): Strip record components if not kept.
for (DexEncodedField instanceField : clazz.instanceFields()) {
- String componentName = namingLens.lookupName(instanceField.field).toString();
+ String componentName = namingLens.lookupName(instanceField.getReference()).toString();
String componentDescriptor =
- namingLens.lookupDescriptor(instanceField.field.type).toString();
+ namingLens.lookupDescriptor(instanceField.getReference().type).toString();
String componentSignature =
instanceField.getGenericSignature().toRenamedString(namingLens, isTypeMissing);
writer.visitRecordComponent(componentName, componentDescriptor, componentSignature);
@@ -239,7 +239,9 @@
}
if (options.desugarSpecificOptions().sortMethodsOnCfOutput) {
SortedSet<ProgramMethod> programMethodSortedSet =
- Sets.newTreeSet((a, b) -> a.getDefinition().method.compareTo(b.getDefinition().method));
+ Sets.newTreeSet(
+ (a, b) ->
+ a.getDefinition().getReference().compareTo(b.getDefinition().getReference()));
clazz.forEachProgramMethod(programMethodSortedSet::add);
programMethodSortedSet.forEach(
method -> writeMethod(method, version, rewriter, writer, defaults));
@@ -268,7 +270,7 @@
// In this case bridges have been introduced for the Cf back-end,
// which do not have class file version.
assert options.isDesugaredLibraryCompilation() || options.cfToCfDesugar
- : "Expected class file version for " + method.method.toSourceString();
+ : "Expected class file version for " + method.getReference().toSourceString();
assert MIN_VERSION_FOR_COMPILER_GENERATED_CODE.isLessThan(
options.classFileVersionAfterDesugaring(InternalOptions.SUPPORTED_CF_VERSION));
// Any desugaring rewrites which cannot meet the default class file version after
@@ -355,8 +357,8 @@
if (field.isDeprecated()) {
access = AsmUtils.withDeprecated(access);
}
- String name = namingLens.lookupName(field.field).toString();
- String desc = namingLens.lookupDescriptor(field.field.type).toString();
+ String name = namingLens.lookupName(field.getReference()).toString();
+ String desc = namingLens.lookupDescriptor(field.getReference().type).toString();
String signature = field.getGenericSignature().toRenamedString(namingLens, isTypeMissing);
Object value = getStaticValue(field);
FieldVisitor visitor = writer.visitField(access, name, desc, signature, value);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
index d9baf1f..f10902f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -93,11 +93,11 @@
Consumer<DexEncodedMethod> keepByteCode) {
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : hostClass.fields()) {
- fieldMap.put(toJvmFieldSignature(field.field).asString(), field);
+ fieldMap.put(toJvmFieldSignature(field.getReference()).asString(), field);
}
Map<String, DexEncodedMethod> methodMap = new HashMap<>();
for (DexEncodedMethod method : hostClass.methods()) {
- methodMap.put(toJvmMethodSignature(method.method).asString(), method);
+ methodMap.put(toJvmMethodSignature(method.getReference()).asString(), method);
}
ImmutableList.Builder<KotlinConstructorInfo> notBackedConstructors = ImmutableList.builder();
for (KmConstructor kmConstructor : kmClass.getConstructors()) {
@@ -184,7 +184,7 @@
return;
}
for (DexEncodedField field : hostClass.fields()) {
- if (field.field.name.toString().equals(companionObjectName)) {
+ if (field.getReference().name.toString().equals(companionObjectName)) {
field.setKotlinMemberInfo(new KotlinCompanionInfo());
return;
}
@@ -221,7 +221,10 @@
// Find a companion object.
for (DexEncodedField field : clazz.fields()) {
if (field.getKotlinMemberInfo().isCompanion()) {
- field.getKotlinMemberInfo().asCompanion().rewrite(kmClass, field.field, namingLens);
+ field
+ .getKotlinMemberInfo()
+ .asCompanion()
+ .rewrite(kmClass, field.getReference(), namingLens);
}
}
// Take all not backed constructors because we will never find them in definitions.
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
index 79b4173..7447bbd 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
@@ -184,7 +184,7 @@
}
KotlinPropertyGroup kotlinPropertyGroup =
properties.computeIfAbsent(kotlinPropertyInfo, ignored -> new KotlinPropertyGroup());
- if (method.method.proto.returnType == appView.dexItemFactory().voidType) {
+ if (method.getReference().proto.returnType == appView.dexItemFactory().voidType) {
// This is a setter.
kotlinPropertyGroup.setSetter(method);
} else {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
index f5ce062..008177e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
@@ -114,8 +114,8 @@
// TODO(b/154348683): Check method for flags to pass in.
String finalName = this.name;
if (method != null) {
- String methodName = method.method.name.toString();
- String rewrittenName = namingLens.lookupName(method.method).toString();
+ String methodName = method.getReference().name.toString();
+ String rewrittenName = namingLens.lookupName(method.getReference()).toString();
if (!methodName.equals(rewrittenName)) {
finalName = rewrittenName;
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java
index 974e4a8..2606807 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmFieldSignatureInfo.java
@@ -40,8 +40,8 @@
DexEncodedField field, AppView<?> appView, NamingLens namingLens) {
String finalName = name;
if (field != null) {
- String fieldName = field.field.name.toString();
- String rewrittenName = namingLens.lookupName(field.field).toString();
+ String fieldName = field.getReference().name.toString();
+ String rewrittenName = namingLens.lookupName(field.getReference()).toString();
if (!fieldName.equals(rewrittenName)) {
finalName = rewrittenName;
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java
index 2469a54..b0314be 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmMethodSignatureInfo.java
@@ -79,8 +79,8 @@
assert returnType != null;
String finalName = name;
if (method != null) {
- String methodName = method.method.name.toString();
- String rewrittenName = namingLens.lookupName(method.method).toString();
+ String methodName = method.getReference().name.toString();
+ String rewrittenName = namingLens.lookupName(method.getReference()).toString();
if (!methodName.equals(rewrittenName)) {
finalName = rewrittenName;
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
index cc215d5..01a7c2a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
@@ -40,7 +40,7 @@
JvmMethodSignature signature = JvmExtensionsKt.getSignature(lambda.function);
if (signature != null) {
for (DexEncodedMethod method : clazz.methods()) {
- if (toJvmMethodSignature(method.method).asString().equals(signature.asString())) {
+ if (toJvmMethodSignature(method.getReference()).asString().equals(signature.asString())) {
method.setKotlinMemberInfo(kotlinFunctionInfo);
return new KotlinLambdaInfo(kotlinFunctionInfo, true);
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
index 1e3273c..4a5904e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
@@ -182,7 +182,10 @@
if (kotlinMetadata == null || kotlinMetadata.isNotProgramClass()) {
return true;
}
- return kotlinMetadata.methods(method -> method.method.name == fieldName).iterator().hasNext();
+ return kotlinMetadata
+ .methods(method -> method.getReference().name == fieldName)
+ .iterator()
+ .hasNext();
}
private DexAnnotation createKotlinMetadataAnnotation(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
index 1ac03db..41ff17d 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
@@ -47,11 +47,11 @@
Consumer<DexEncodedMethod> keepByteCode) {
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : clazz.fields()) {
- fieldMap.put(toJvmFieldSignature(field.field).asString(), field);
+ fieldMap.put(toJvmFieldSignature(field.getReference()).asString(), field);
}
Map<String, DexEncodedMethod> methodMap = new HashMap<>();
for (DexEncodedMethod method : clazz.methods()) {
- methodMap.put(toJvmMethodSignature(method.method).asString(), method);
+ methodMap.put(toJvmMethodSignature(method.getReference()).asString(), method);
}
return new KotlinPackageInfo(
JvmExtensionsKt.getModuleName(kmPackage),
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
index 1b91b62..9ab6c15 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -152,11 +152,11 @@
}
private void renameDanglingTypesInField(DexEncodedField field) {
- renameDanglingType(field.field.type);
+ renameDanglingType(field.getReference().type);
}
private void renameDanglingTypesInMethod(DexEncodedMethod method) {
- DexProto proto = method.method.proto;
+ DexProto proto = method.getReference().proto;
renameDanglingType(proto.returnType);
for (DexType type : proto.parameters.values) {
renameDanglingType(type);
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
index 55ed725..bec8073 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
@@ -106,10 +106,10 @@
reservedNames = getOrCreateReservedFieldNamingState(clazz.type);
}
reservedNames.markReservedDirectly(
- reservedName, field.field.name, field.field.type);
+ reservedName, field.getReference().name, field.getReference().type);
// TODO(b/148846065): Consider lazily computing the renaming on actual lookups.
- if (reservedName != field.field.name) {
- renaming.put(field.field, reservedName);
+ if (reservedName != field.getReference().name) {
+ renaming.put(field.getReference(), reservedName);
}
}
}
@@ -135,8 +135,8 @@
clazz -> {
for (DexEncodedField field : clazz.fields()) {
DexString reservedName = strategy.getReservedName(field, clazz);
- if (reservedName != null && reservedName != field.field.name) {
- renaming.put(field.field, reservedName);
+ if (reservedName != null && reservedName != field.getReference().name) {
+ renaming.put(field.getReference(), reservedName);
}
}
});
@@ -270,8 +270,10 @@
return;
}
DexEncodedField definition = appView.appInfo().resolveFieldOn(holder, field).getResolvedField();
- if (definition != null && definition.field != field && renaming.containsKey(definition.field)) {
- renaming.put(field, renaming.get(definition.field));
+ if (definition != null
+ && definition.getReference() != field
+ && renaming.containsKey(definition.getReference())) {
+ renaming.put(field, renaming.get(definition.getReference()));
}
}
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
index 2d9a19d..e0de1d5 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
@@ -74,7 +74,7 @@
private void decoupleIdentifierNameStringInStaticField(DexEncodedField encodedField) {
assert encodedField.accessFlags.isStatic();
- if (!identifierNameStrings.containsKey(encodedField.field)) {
+ if (!identifierNameStrings.containsKey(encodedField.getReference())) {
return;
}
DexValueString staticValue = encodedField.getStaticValue().asDexValueString();
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java
index 01157b9..3e4078b 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java
@@ -378,9 +378,9 @@
private static DexField inferFieldInHolder(DexClass holder, String name, DexType fieldType) {
for (DexEncodedField encodedField : holder.fields()) {
- if (encodedField.field.name.toString().equals(name)
- && (fieldType == null || encodedField.field.type == fieldType)) {
- return encodedField.field;
+ if (encodedField.getReference().name.toString().equals(name)
+ && (fieldType == null || encodedField.getReference().type == fieldType)) {
+ return encodedField.getReference();
}
}
return null;
@@ -388,8 +388,8 @@
private static DexMethod inferMethodNameInHolder(DexClass holder, String name) {
for (DexEncodedMethod encodedMethod : holder.methods()) {
- if (encodedMethod.method.name.toString().equals(name)) {
- return encodedMethod.method;
+ if (encodedMethod.getReference().name.toString().equals(name)) {
+ return encodedMethod.getReference();
}
}
return null;
@@ -399,9 +399,9 @@
DexClass holder, String name, DexTypeList arguments) {
assert arguments != null;
for (DexEncodedMethod encodedMethod : holder.methods()) {
- if (encodedMethod.method.name.toString().equals(name)
- && encodedMethod.method.proto.parameters.equals(arguments)) {
- return encodedMethod.method;
+ if (encodedMethod.getReference().name.toString().equals(name)
+ && encodedMethod.getReference().proto.parameters.equals(arguments)) {
+ return encodedMethod.getReference();
}
}
return null;
diff --git a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
index 0f5924d..3ba2467 100644
--- a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
@@ -483,7 +483,8 @@
boolean differentName = implementedMethod.getName() != virtualMethod.getName();
if (differentName
&& MethodJavaSignatureEquivalence.getEquivalenceIgnoreName()
- .equivalent(implementedMethod.method, virtualMethod.method)) {
+ .equivalent(
+ implementedMethod.getReference(), virtualMethod.getReference())) {
InterfaceMethodGroupState interfaceMethodGroupState =
globalStateMap.computeIfAbsent(
definitionEquivalence.wrap(implementedMethod),
diff --git a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
index eb4e9ca..a51edde 100644
--- a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
+++ b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
@@ -96,7 +96,7 @@
// If the method does not have a direct renaming, return the resolutions mapping.
ResolutionResult resolutionResult = appView.appInfo().unsafeResolveMethodDueToDexFormat(method);
if (resolutionResult.isSingleResolution()) {
- return renaming.getOrDefault(resolutionResult.getSingleTarget().method, method.name);
+ return renaming.getOrDefault(resolutionResult.getSingleTarget().getReference(), method.name);
}
// If resolution fails, the method must be renamed consistently with the targets that give rise
// to the failure.
@@ -104,8 +104,9 @@
List<DexEncodedMethod> targets = new ArrayList<>();
resolutionResult.asFailedResolution().forEachFailureDependency(targets::add);
if (!targets.isEmpty()) {
- DexString firstRename = renaming.get(targets.get(0).method);
- assert targets.stream().allMatch(target -> renaming.get(target.method) == firstRename);
+ DexString firstRename = renaming.get(targets.get(0).getReference());
+ assert targets.stream()
+ .allMatch(target -> renaming.get(target.getReference()) == firstRename);
if (firstRename != null) {
return firstRename;
}
@@ -138,7 +139,7 @@
// If we can resolve `item`, then the renaming for `item` and its resolution should be the
// same.
DexEncodedMethod resolvedMethod = resolution.asSingleResolution().getResolvedMethod();
- assert lookupName(method) == lookupName(resolvedMethod.method);
+ assert lookupName(method) == lookupName(resolvedMethod.getReference());
return true;
}
@@ -162,7 +163,7 @@
.asFailedResolution()
.forEachFailureDependency(
failureDependence -> {
- assert lookupName(method) == lookupName(failureDependence.method);
+ assert lookupName(method) == lookupName(failureDependence.getReference());
});
return true;
}
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index c00993f..a542a2f 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -260,22 +260,24 @@
if (!allowMemberRenaming(holder)
|| holder.accessFlags.isAnnotation()
|| method.accessFlags.isConstructor()
- || !appView.appInfo().isMinificationAllowed(method.method)) {
- return method.method.name;
+ || !appView.appInfo().isMinificationAllowed(method.getReference())) {
+ return method.getReference().name;
}
if (desugaredLibraryRenaming
&& method.isLibraryMethodOverride().isTrue()
- && appView.rewritePrefix.hasRewrittenTypeInSignature(method.method.proto, appView)) {
+ && appView.rewritePrefix.hasRewrittenTypeInSignature(
+ method.getReference().proto, appView)) {
// With desugared library, call-backs names are reserved here.
- return method.method.name;
+ return method.getReference().name;
}
return null;
}
@Override
public DexString getReservedName(DexEncodedField field, DexClass holder) {
- if (holder.isLibraryClass() || !appView.appInfo().isMinificationAllowed(field.field)) {
- return field.field.name;
+ if (holder.isLibraryClass()
+ || !appView.appInfo().isMinificationAllowed(field.getReference())) {
+ return field.getReference().name;
}
return null;
}
diff --git a/src/main/java/com/android/tools/r8/naming/NamingLens.java b/src/main/java/com/android/tools/r8/naming/NamingLens.java
index bdd0e70..b6e94ee 100644
--- a/src/main/java/com/android/tools/r8/naming/NamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/NamingLens.java
@@ -166,14 +166,14 @@
}
for (DexEncodedField field : clazz.fields()) {
- DexField newField = lookupField(field.field, dexItemFactory);
+ DexField newField = lookupField(field.getReference(), dexItemFactory);
boolean referencesChanged = references.add(newField);
assert referencesChanged
: "Duplicate definition of field `" + newField.toSourceString() + "`";
}
for (DexEncodedMethod method : clazz.methods()) {
- DexMethod newMethod = lookupMethod(method.method, dexItemFactory);
+ DexMethod newMethod = lookupMethod(method.getReference(), dexItemFactory);
boolean referencesChanged = references.add(newMethod);
assert referencesChanged
: "Duplicate definition of method `" + newMethod.toSourceString() + "`";
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index d902890..a8e299a 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -502,12 +502,12 @@
@Override
public DexString getReservedName(DexEncodedMethod method, DexClass holder) {
- return getReservedName(method, method.method.name, holder);
+ return getReservedName(method, method.getReference().name, holder);
}
@Override
public DexString getReservedName(DexEncodedField field, DexClass holder) {
- return getReservedName(field, field.field.name, holder);
+ return getReservedName(field, field.getReference().name, holder);
}
private DexString getReservedName(DexDefinition definition, DexString name, DexClass holder) {
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
index 04a24b6..2b9252f 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -188,11 +188,11 @@
DexEncodedMethod target = lookupTarget.apply(method);
// TODO(b/128404854) Rebind to the lowest library class or program class. For now we allow
// searching in library for methods, but this should be done on classpath instead.
- if (target == null || target.method == method) {
+ if (target == null || target.getReference() == method) {
return;
}
DexClass targetClass = appView.definitionFor(target.getHolderType());
- DexMethod targetMethod = target.method;
+ DexMethod targetMethod = target.getReference();
if (originalClass.isProgramClass()) {
// In Java bytecode, it is only possible to target interface methods that are in one of
// the immediate super-interfaces via a super-invocation (see
@@ -235,7 +235,7 @@
target.toForwardingMethod(bridgeHolder, appView);
bridgeHolder.addMethod(bridgeMethodDefinition);
}
- assert lookupTarget.apply(method).method == bridgeMethod;
+ assert lookupTarget.apply(method).getReference() == bridgeMethod;
}
});
}
@@ -267,7 +267,7 @@
assert bridgeHolder != null;
assert bridgeHolder != targetClass;
bridges.accept(bridgeHolder, method, target);
- return target.method.withHolder(bridgeHolder.getType(), appView.dexItemFactory());
+ return target.getReference().withHolder(bridgeHolder.getType(), appView.dexItemFactory());
}
private DexProgramClass findHolderForInterfaceMethodBridge(DexProgramClass clazz, DexType iface) {
@@ -316,9 +316,9 @@
findHolderForVisibilityBridge(originalClass, targetClass, packageDescriptor);
assert bridgeHolder != null;
bridges.accept(bridgeHolder, method, target);
- return target.method.withHolder(bridgeHolder.getType(), appView.dexItemFactory());
+ return target.getReference().withHolder(bridgeHolder.getType(), appView.dexItemFactory());
}
- return target.method;
+ return target.getReference();
}
private DexProgramClass findHolderForVisibilityBridge(
diff --git a/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java
index 96dd07b..f073314 100644
--- a/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/VisibilityBridgeRemover.java
@@ -87,7 +87,10 @@
if (targetMethod != null && targetMethod.accessFlags.isPublic()) {
if (Log.ENABLED) {
Log.info(
- getClass(), "Removing visibility forwarding %s -> %s", method, targetMethod.method);
+ getClass(),
+ "Removing visibility forwarding %s -> %s",
+ method,
+ targetMethod.getReference());
}
return true;
}
diff --git a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java
index ea4ee0e..69c59b5 100644
--- a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java
+++ b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java
@@ -140,7 +140,7 @@
for (DexEncodedMethod method : subclass.virtualMethods()) {
BridgeInfo bridgeInfo = method.getOptimizationInfo().getBridgeInfo();
if (bridgeInfo != null) {
- candidates.add(equivalence.wrap(method.method));
+ candidates.add(equivalence.wrap(method.getReference()));
}
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AbstractMethodRemover.java b/src/main/java/com/android/tools/r8/shaking/AbstractMethodRemover.java
index b64646d..4123c10 100644
--- a/src/main/java/com/android/tools/r8/shaking/AbstractMethodRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AbstractMethodRemover.java
@@ -64,7 +64,7 @@
DexEncodedMethod method = virtualMethods.get(i);
if (scope.addMethodIfMoreVisible(method) != AddMethodIfMoreVisibleResult.NOT_ADDED
|| !method.accessFlags.isAbstract()
- || appView.appInfo().isPinned(method.method)) {
+ || appView.appInfo().isPinned(method.getReference())) {
if (methods != null) {
methods.add(method);
}
@@ -76,7 +76,7 @@
}
}
if (Log.ENABLED) {
- Log.debug(getClass(), "Removing abstract method %s.", method.method);
+ Log.debug(getClass(), "Removing abstract method %s.", method.getReference());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index 057a80f..34c11ee 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -254,7 +254,7 @@
boolean liveGetter =
definition
.getMethodCollection()
- .hasVirtualMethods(method -> method.method.name == original.name);
+ .hasVirtualMethods(method -> method.getReference().name == original.name);
return liveGetter ? original : null;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index c9db30c..4622786 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -731,7 +731,7 @@
}
assert clazz.isInterface();
for (DexEncodedMethod method : clazz.virtualMethods()) {
- if (method.method.name == callSite.methodName && method.accessFlags.isAbstract()) {
+ if (method.getReference().name == callSite.methodName && method.accessFlags.isAbstract()) {
result.add(method);
}
}
@@ -810,7 +810,7 @@
public boolean isFieldRead(DexEncodedField encodedField) {
assert checkIfObsolete();
- DexField field = encodedField.field;
+ DexField field = encodedField.getReference();
FieldAccessInfo info = getFieldAccessInfoCollection().get(field);
if (info != null && info.isRead()) {
return true;
@@ -824,12 +824,13 @@
public boolean isFieldWritten(DexEncodedField encodedField) {
assert checkIfObsolete();
- return isFieldWrittenByFieldPutInstruction(encodedField) || isPinned(encodedField.field);
+ return isFieldWrittenByFieldPutInstruction(encodedField)
+ || isPinned(encodedField.getReference());
}
public boolean isFieldWrittenByFieldPutInstruction(DexEncodedField encodedField) {
assert checkIfObsolete();
- DexField field = encodedField.field;
+ DexField field = encodedField.getReference();
FieldAccessInfo info = getFieldAccessInfoCollection().get(field);
if (info != null && info.isWritten()) {
// The field is written directly by the program itself.
@@ -842,7 +843,7 @@
public boolean isFieldOnlyWrittenInMethod(DexEncodedField field, DexEncodedMethod method) {
assert checkIfObsolete();
assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
- if (isPinned(field.field)) {
+ if (isPinned(field.getReference())) {
return false;
}
return isFieldOnlyWrittenInMethodIgnoringPinning(field, method);
@@ -852,7 +853,7 @@
DexEncodedField field, DexEncodedMethod method) {
assert checkIfObsolete();
assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
- FieldAccessInfo fieldAccessInfo = getFieldAccessInfoCollection().get(field.field);
+ FieldAccessInfo fieldAccessInfo = getFieldAccessInfoCollection().get(field.getReference());
return fieldAccessInfo != null
&& fieldAccessInfo.isWritten()
&& !fieldAccessInfo.isWrittenOutside(method);
@@ -861,10 +862,10 @@
public boolean isInstanceFieldWrittenOnlyInInstanceInitializers(DexEncodedField field) {
assert checkIfObsolete();
assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
- if (isPinned(field.field)) {
+ if (isPinned(field.getReference())) {
return false;
}
- FieldAccessInfo fieldAccessInfo = getFieldAccessInfoCollection().get(field.field);
+ FieldAccessInfo fieldAccessInfo = getFieldAccessInfoCollection().get(field.getReference());
if (fieldAccessInfo == null || !fieldAccessInfo.isWritten()) {
return false;
}
@@ -999,7 +1000,7 @@
DexProgramClass clazz = asProgramClassOrNull(definitionFor(type));
if (clazz != null) {
for (DexEncodedMethod method : clazz.directMethods()) {
- if (method.isInstanceInitializer() && isPinned(method.method)) {
+ if (method.isInstanceInitializer() && isPinned(method.getReference())) {
return true;
}
}
@@ -1271,7 +1272,7 @@
if (refinedReceiverClass.isProgramClass()) {
DexClassAndMethod clazzAndMethod =
resolution.lookupVirtualDispatchTarget(refinedReceiverClass.asProgramClass(), this);
- if (clazzAndMethod == null || isPinned(clazzAndMethod.getDefinition().method)) {
+ if (clazzAndMethod == null || isPinned(clazzAndMethod.getDefinition().getReference())) {
// TODO(b/150640456): We should maybe only consider program methods.
return DexEncodedMethod.SENTINEL;
}
@@ -1283,7 +1284,7 @@
// implementation, but we use this for library modelling.
DexEncodedMethod resolvedMethod = resolution.getResolvedMethod();
DexEncodedMethod targetOnReceiver =
- refinedReceiverClass.lookupVirtualMethod(resolvedMethod.method);
+ refinedReceiverClass.lookupVirtualMethod(resolvedMethod.getReference());
if (targetOnReceiver != null && isOverriding(resolvedMethod, targetOnReceiver)) {
return targetOnReceiver;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java b/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java
index f032832..03611d6 100644
--- a/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/shaking/ClassInitFieldSynthesizer.java
@@ -54,7 +54,7 @@
}
// When compiling for dex, we can't use wide fields since we've only allocated a single
// register for the out-value of each ClassInit instruction
- if (staticField.field.type.isWideType()) {
+ if (staticField.getReference().type.isWideType()) {
continue;
}
if (encodedClinitField == null) {
@@ -90,7 +90,7 @@
d8R8Synthesized);
clazz.appendStaticField(encodedClinitField);
}
- lensBuilder.map(type, encodedClinitField.field);
+ lensBuilder.map(type, encodedClinitField.getReference());
}
private boolean isMinimumRequiredVisibility(
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index e818526..331466b 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -929,17 +929,17 @@
}
// Check if we have previously created a FieldAccessInfo object for the field definition.
- info = fieldAccessInfoCollection.get(encodedField.field);
+ info = fieldAccessInfoCollection.get(encodedField.getReference());
// If not, we must create one.
if (info == null) {
- info = new FieldAccessInfoImpl(encodedField.field);
- fieldAccessInfoCollection.extend(encodedField.field, info);
+ info = new FieldAccessInfoImpl(encodedField.getReference());
+ fieldAccessInfoCollection.extend(encodedField.getReference(), info);
}
// If `field` is an indirect reference, then create a mapping for it, such that we don't have
// to resolve the field the next time we see the reference.
- if (field != encodedField.field) {
+ if (field != encodedField.getReference()) {
fieldAccessInfoCollection.extend(field, info);
}
} else if (info == MISSING_FIELD_ACCESS_INFO) {
@@ -2122,7 +2122,7 @@
// targets another default method in the same interface (see testInvokeSpecialToDefault-
// Method). In a class, that would lead to a verification error.
if (encodedMethod.isNonPrivateVirtualMethod()
- && virtualMethodsTargetedByInvokeDirect.add(encodedMethod.method)) {
+ && virtualMethodsTargetedByInvokeDirect.add(encodedMethod.getReference())) {
workList.enqueueMarkMethodLiveAction(method, context, reason);
}
}
@@ -2442,7 +2442,7 @@
markVirtualMethodAsLive(
resolutionMethod,
graphReporter.reportReachableMethodAsLive(
- resolutionMethod.getDefinition().method, resolutionMethod));
+ resolutionMethod.getDefinition().getReference(), resolutionMethod));
return;
}
// Otherwise, we set the initial holder type to be the holder of the reachable method, which
@@ -2456,7 +2456,7 @@
lookup,
programMethod ->
graphReporter.reportReachableMethodAsLive(
- resolutionMethod.getDefinition().method, programMethod));
+ resolutionMethod.getDefinition().getReference(), programMethod));
}
}
@@ -2474,7 +2474,9 @@
// Note: It would be reasonable to not process methods already seen during the marking of
// program usages, but that would cause the methods to not be marked as library overrides.
markLibraryOrClasspathOverrideLive(
- instantiation, libraryClass, appInfo.resolveMethodOn(libraryClass, method.method));
+ instantiation,
+ libraryClass,
+ appInfo.resolveMethodOn(libraryClass, method.getReference()));
// Due to API conversion, some overrides can be hidden since they will be rewritten. See
// class comment of DesugaredLibraryAPIConverter and vivifiedType logic.
@@ -2482,11 +2484,12 @@
// maintains the library override. In the second enqueuer phase, the signature has been
// desugared, and the second resolution maintains the the library override.
if (instantiation.isClass()
- && appView.rewritePrefix.hasRewrittenTypeInSignature(method.method.proto, appView)) {
+ && appView.rewritePrefix.hasRewrittenTypeInSignature(
+ method.getReference().proto, appView)) {
DexMethod methodToResolve =
DesugaredLibraryAPIConverter.methodWithVivifiedTypeInSignature(
- method.method, method.getHolderType(), appView);
- assert methodToResolve != method.method;
+ method.getReference(), method.getHolderType(), appView);
+ assert methodToResolve != method.getReference();
markLibraryOrClasspathOverrideLive(
instantiation,
libraryClass,
@@ -2514,7 +2517,7 @@
if (instantiation.isClass()) {
// TODO(b/149976493): We need to mark these for lambdas too!
markOverridesAsLibraryMethodOverrides(
- instantiation.asClass(), lookup.asMethodTarget().getDefinition().method);
+ instantiation.asClass(), lookup.asMethodTarget().getDefinition().getReference());
}
}
@@ -2688,7 +2691,7 @@
}
public boolean isFieldReferenced(DexEncodedField field) {
- FieldAccessInfoImpl info = fieldAccessInfoCollection.get(field.field);
+ FieldAccessInfoImpl info = fieldAccessInfoCollection.get(field.getReference());
return info != null;
}
@@ -2834,7 +2837,7 @@
target,
programMethod ->
graphReporter.reportReachableMethodAsLive(
- resolvedMethod.method, programMethod)));
+ resolvedMethod.getReference(), programMethod)));
}
private void markVirtualDispatchTargetAsLive(
@@ -2874,7 +2877,7 @@
method -> {
DexProgramClass clazz = getProgramClassOrNull(method.getHolderType(), context);
if (clazz != null) {
- failedMethodResolutionTargets.add(method.method);
+ failedMethodResolutionTargets.add(method.getReference());
markMethodAsTargeted(new ProgramMethod(clazz, method), reason);
}
});
@@ -2920,7 +2923,7 @@
// If invoke target is invalid (inaccessible or not an instance-method) record it and stop.
DexClassAndMethod target = resolution.lookupInvokeSuperTarget(from.getHolder(), appInfo);
if (target == null) {
- failedMethodResolutionTargets.add(resolution.getResolvedMethod().method);
+ failedMethodResolutionTargets.add(resolution.getResolvedMethod().getReference());
return;
}
@@ -2961,7 +2964,7 @@
MainDexInfo.Builder builder = appView.appInfo().getMainDexInfo().builder();
liveTypes.getItems().forEach(builder::addRoot);
if (mode.isInitialMainDexTracing()) {
- liveMethods.getItems().forEach(method -> builder.addRoot(method.method));
+ liveMethods.getItems().forEach(method -> builder.addRoot(method.getReference()));
} else {
assert appView.appInfo().getMainDexInfo().isTracedMethodRootsCleared()
|| mode.isGenerateMainDexList();
@@ -3115,7 +3118,7 @@
}
void addLiveMethod(ProgramMethod method) {
- DexMethod signature = method.getDefinition().method;
+ DexMethod signature = method.getDefinition().getReference();
assert !liveMethods.containsKey(signature);
liveMethods.put(signature, method);
}
@@ -3399,7 +3402,7 @@
: "Expected type to be in live non-program types: " + clazz;
for (DexEncodedField field : clazz.fields()) {
if (clazz.isNotProgramClass() || isFieldReferenced(field)) {
- assert verifyReferencedType(field.field.type, worklist, app);
+ assert verifyReferencedType(field.getReference().type, worklist, app);
}
}
for (DexEncodedMethod method : clazz.methods()) {
@@ -3412,8 +3415,8 @@
private boolean verifyReferencedMethod(
DexEncodedMethod method, WorkList<DexClass> worklist, DexApplication app) {
- assert verifyReferencedType(method.method.proto.returnType, worklist, app);
- for (DexType param : method.method.proto.parameters.values) {
+ assert verifyReferencedType(method.getReference().proto.returnType, worklist, app);
+ for (DexType param : method.getReference().proto.parameters.values) {
assert verifyReferencedType(param, worklist, app);
}
return true;
@@ -3644,16 +3647,19 @@
return;
}
if (methodToKeep != singleTarget
- && !syntheticInterfaceMethodBridges.containsKey(methodToKeep.getDefinition().method)) {
- syntheticInterfaceMethodBridges.put(methodToKeep.getDefinition().method, methodToKeep);
- assert null == methodToKeep.getHolder().lookupMethod(methodToKeep.getDefinition().method);
+ && !syntheticInterfaceMethodBridges.containsKey(
+ methodToKeep.getDefinition().getReference())) {
+ syntheticInterfaceMethodBridges.put(
+ methodToKeep.getDefinition().getReference(), methodToKeep);
+ assert null
+ == methodToKeep.getHolder().lookupMethod(methodToKeep.getDefinition().getReference());
if (singleTargetMethod.isLibraryMethodOverride().isTrue()) {
methodToKeep.getDefinition().setLibraryMethodOverride(OptionalBool.TRUE);
}
DexProgramClass singleTargetHolder = singleTarget.getHolder();
assert singleTargetHolder.isInterface();
markVirtualMethodAsReachable(
- singleTargetMethod.method,
+ singleTargetMethod.getReference(),
singleTargetHolder.isInterface(),
singleTarget,
graphReporter.fakeReportShouldNotBeUsed());
@@ -3748,7 +3754,7 @@
DexProgramClass current = worklist.removeFirst();
assert visited.contains(current);
- if (current.lookupVirtualMethod(method.method) != null) {
+ if (current.lookupVirtualMethod(method.getReference()) != null) {
continue;
}
@@ -4482,7 +4488,7 @@
DexEncodedMethod target = holder.lookupDirectMethod(method);
if (target != null) {
// There is no dispatch on annotations, so only keep what is directly referenced.
- if (target.method == method) {
+ if (target.getReference() == method) {
markDirectStaticOrConstructorMethodAsLive(
new ProgramMethod(holder, target),
KeepReason.referencedInAnnotation(annotationHolder));
@@ -4490,7 +4496,7 @@
} else {
target = holder.lookupVirtualMethod(method);
// There is no dispatch on annotations, so only keep what is directly referenced.
- if (target != null && target.method == method) {
+ if (target != null && target.getReference() == method) {
markMethodAsTargeted(
new ProgramMethod(holder, target),
KeepReason.referencedInAnnotation(annotationHolder));
diff --git a/src/main/java/com/android/tools/r8/shaking/GraphReporter.java b/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
index 6459b7f..ac0d153 100644
--- a/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
+++ b/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
@@ -136,7 +136,7 @@
}
KeepRuleGraphNode ruleNode = getKeepRuleGraphNode(precondition, rule);
EdgeKind edgeKind = reportPrecondition(ruleNode);
- return reportEdge(ruleNode, getMethodGraphNode(method.method), edgeKind);
+ return reportEdge(ruleNode, getMethodGraphNode(method.getReference()), edgeKind);
}
KeepReasonWitness reportKeepMethod(
@@ -157,7 +157,7 @@
}
KeepRuleGraphNode ruleNode = getKeepRuleGraphNode(precondition, rule);
EdgeKind edgeKind = reportPrecondition(ruleNode);
- return reportEdge(ruleNode, getFieldGraphNode(field.field), edgeKind);
+ return reportEdge(ruleNode, getFieldGraphNode(field.getReference()), edgeKind);
}
KeepReasonWitness reportKeepField(
@@ -259,10 +259,11 @@
public KeepReasonWitness reportReachableMethodAsLive(
DexMethod overriddenMethod, ProgramMethod derivedMethod) {
- if (keptGraphConsumer != null && overriddenMethod != derivedMethod.getDefinition().method) {
+ if (keptGraphConsumer != null
+ && overriddenMethod != derivedMethod.getDefinition().getReference()) {
return reportEdge(
getMethodGraphNode(overriddenMethod),
- getMethodGraphNode(derivedMethod.getDefinition().method),
+ getMethodGraphNode(derivedMethod.getDefinition().getReference()),
EdgeKind.OverridingMethod);
}
return KeepReasonWitness.INSTANCE;
@@ -276,7 +277,7 @@
if (keptGraphConsumer != null && instantiation.isClass()) {
return reportEdge(
getClassGraphNode(instantiation.asClass().type),
- getMethodGraphNode(derivedMethod.getDefinition().method),
+ getMethodGraphNode(derivedMethod.getDefinition().getReference()),
EdgeKind.IsLibraryMethod);
}
return KeepReasonWitness.INSTANCE;
@@ -299,8 +300,8 @@
return KeepReasonWitness.INSTANCE;
}
return reportEdge(
- getMethodGraphNode(definition.method),
- getMethodGraphNode(implementation.method),
+ getMethodGraphNode(definition.getReference()),
+ getMethodGraphNode(implementation.getReference()),
EdgeKind.CompanionMethod);
}
@@ -375,14 +376,14 @@
// TODO(b/120959039): This should be dead code once no library classes are ever enqueued.
return KeepReasonWitness.INSTANCE;
}
- return registerEdge(getMethodGraphNode(method.method), reason);
+ return registerEdge(getMethodGraphNode(method.getReference()), reason);
}
public KeepReasonWitness registerField(DexEncodedField field, KeepReason reason) {
if (skipReporting(reason)) {
return KeepReasonWitness.INSTANCE;
}
- return registerEdge(getFieldGraphNode(field.field), reason);
+ return registerEdge(getFieldGraphNode(field.getReference()), reason);
}
private KeepReasonWitness registerEdge(GraphNode target, KeepReason reason) {
diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
index e843d0d..aa6844e 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
@@ -235,7 +235,7 @@
(enqueuer.isFieldLive(f)
|| enqueuer.isFieldReferenced(f)
|| f.getOptimizationInfo().valueHasBeenPropagated())
- && appView.graphLens().getOriginalFieldSignature(f.field).holder
+ && appView.graphLens().getOriginalFieldSignature(f.getReference()).holder
== sourceClass.type));
Iterables.addAll(
filteredMembers,
@@ -244,7 +244,7 @@
(enqueuer.isMethodLive(m)
|| enqueuer.isMethodTargeted(m)
|| m.getOptimizationInfo().returnValueHasBeenPropagated())
- && appView.graphLens().getOriginalMethodSignature(m.method).holder
+ && appView.graphLens().getOriginalMethodSignature(m.getReference()).holder
== sourceClass.type));
// If the number of member rules to hold is more than live members, we can't make it.
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java b/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java
index 81239aa..7e9b166 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java
@@ -307,13 +307,13 @@
@Override
public KeepMethodInfo getMethodInfo(DexEncodedMethod method, DexProgramClass holder) {
assert method.getHolderType() == holder.type;
- return keepMethodInfo.getOrDefault(method.method, KeepMethodInfo.bottom());
+ return keepMethodInfo.getOrDefault(method.getReference(), KeepMethodInfo.bottom());
}
@Override
public KeepFieldInfo getFieldInfo(DexEncodedField field, DexProgramClass holder) {
assert field.getHolderType() == holder.type;
- return keepFieldInfo.getOrDefault(field.field, KeepFieldInfo.bottom());
+ return keepFieldInfo.getOrDefault(field.getReference(), KeepFieldInfo.bottom());
}
public void joinClass(DexProgramClass clazz, Consumer<KeepClassInfo.Joiner> fn) {
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepReason.java b/src/main/java/com/android/tools/r8/shaking/KeepReason.java
index 53b944f..5e6b3fd 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepReason.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepReason.java
@@ -96,12 +96,12 @@
abstract String getKind();
public DexMethod getMethod() {
- return method.method;
+ return method.getReference();
}
@Override
public GraphNode getSourceNode(GraphReporter graphReporter) {
- return graphReporter.getMethodGraphNode(method.method);
+ return graphReporter.getMethodGraphNode(method.getReference());
}
}
@@ -264,10 +264,10 @@
if (holder.isDexClass()) {
return graphReporter.getClassGraphNode(holder.asDexClass().type);
} else if (holder.isDexEncodedField()) {
- return graphReporter.getFieldGraphNode(holder.asDexEncodedField().field);
+ return graphReporter.getFieldGraphNode(holder.asDexEncodedField().getReference());
} else {
assert holder.isDexEncodedMethod();
- return graphReporter.getMethodGraphNode(holder.asDexEncodedMethod().method);
+ return graphReporter.getMethodGraphNode(holder.asDexEncodedMethod().getReference());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java b/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
index 7760062..ab19637 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
@@ -53,7 +53,7 @@
clazz.annotations(), appInfo.dexItemFactory())) {
traceAnnotationsDirectDependencies(clazz.annotations());
}
- clazz.forEachField(field -> consumer.accept(field.field.type));
+ clazz.forEachField(field -> consumer.accept(field.getReference().type));
clazz.forEachProgramMethodMatching(
definition -> {
traceMethodDirectDependencies(definition.getReference(), consumer);
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexListBuilder.java b/src/main/java/com/android/tools/r8/shaking/MainDexListBuilder.java
index afb39bf..525417c 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexListBuilder.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexListBuilder.java
@@ -105,7 +105,7 @@
// Browse annotation values types in search for enum.
// Each annotation value is represented by a virtual method.
for (DexEncodedMethod method : clazz.virtualMethods()) {
- DexProto proto = method.method.proto;
+ DexProto proto = method.getReference().proto;
if (proto.parameters.isEmpty()) {
DexType valueType = proto.returnType.toBaseType(appView.dexItemFactory());
if (valueType.isClassType()) {
@@ -143,7 +143,7 @@
addDirectDependency(clazz);
// Add enum classes used for values as direct dependencies.
for (DexEncodedMethod method : clazz.virtualMethods()) {
- DexProto proto = method.method.proto;
+ DexProto proto = method.getReference().proto;
if (proto.parameters.isEmpty()) {
DexType valueType = proto.returnType.toBaseType(appView.dexItemFactory());
if (isEnum(valueType)) {
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationUtils.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationUtils.java
index c6afc11..8c0d0b4 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationUtils.java
@@ -75,11 +75,13 @@
memberRuleBuilder.setRuleType(ProguardMemberType.METHOD);
memberRuleBuilder.getAccessFlags().setFlags(method.accessFlags);
memberRuleBuilder.setName(
- IdentifierPatternWithWildcards.withoutWildcards(method.method.name.toString()));
- memberRuleBuilder.setTypeMatcher(ProguardTypeMatcher.create(method.method.proto.returnType));
- List<ProguardTypeMatcher> arguments = Arrays.stream(method.method.proto.parameters.values)
- .map(ProguardTypeMatcher::create)
- .collect(Collectors.toList());
+ IdentifierPatternWithWildcards.withoutWildcards(method.getReference().name.toString()));
+ memberRuleBuilder.setTypeMatcher(
+ ProguardTypeMatcher.create(method.getReference().proto.returnType));
+ List<ProguardTypeMatcher> arguments =
+ Arrays.stream(method.getReference().proto.parameters.values)
+ .map(ProguardTypeMatcher::create)
+ .collect(Collectors.toList());
memberRuleBuilder.setArguments(arguments);
builder.getMemberRules().add(memberRuleBuilder.build());
return builder.build();
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
index df5bdd1..2aba15e 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
@@ -185,7 +185,8 @@
AppView<?> appView,
Consumer<AnnotationMatchResult> matchedAnnotationsConsumer,
DexStringCache stringCache) {
- DexField originalSignature = appView.graphLens().getOriginalFieldSignature(field.field);
+ DexField originalSignature =
+ appView.graphLens().getOriginalFieldSignature(field.getReference());
switch (getRuleType()) {
case ALL:
case ALL_FIELDS:
@@ -236,7 +237,8 @@
AppView<?> appView,
Consumer<AnnotationMatchResult> matchedAnnotationsConsumer,
DexStringCache stringCache) {
- DexMethod originalSignature = appView.graphLens().getOriginalMethodSignature(method.method);
+ DexMethod originalSignature =
+ appView.graphLens().getOriginalMethodSignature(method.getReference());
switch (getRuleType()) {
case ALL_METHODS:
if (method.isClassInitializer()) {
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
index 8848ece..e78f53b 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
@@ -387,8 +387,8 @@
assert !encodedMethod.shouldNotHaveCode();
continue;
}
- propagateAssumeRules(clazz.type, encodedMethod.method, subTypes, noSideEffects);
- propagateAssumeRules(clazz.type, encodedMethod.method, subTypes, assumedValues);
+ propagateAssumeRules(clazz.type, encodedMethod.getReference(), subTypes, noSideEffects);
+ propagateAssumeRules(clazz.type, encodedMethod.getReference(), subTypes, assumedValues);
}
}
@@ -414,7 +414,7 @@
if (target == null || target.getHolderType() == type) {
continue;
}
- ProguardMemberRule ruleInSubType = assumeRulePool.get(target.method);
+ ProguardMemberRule ruleInSubType = assumeRulePool.get(target.getReference());
// We are looking for the greatest lower bound of assume rules from all sub types.
// If any subtype doesn't have a matching assume rule, the lower bound is literally nothing.
if (ruleInSubType == null) {
@@ -578,7 +578,7 @@
}
for (DexEncodedMethod method : clazz.virtualMethods()) {
// Check if we already added this.
- Wrapper<DexMethod> wrapped = MethodSignatureEquivalence.get().wrap(method.method);
+ Wrapper<DexMethod> wrapped = MethodSignatureEquivalence.get().wrap(method.getReference());
if (!seenMethods.add(wrapped)) {
continue;
}
@@ -592,7 +592,10 @@
private void tryAndKeepMethodOnClass(DexEncodedMethod method, ProguardMemberRule rule) {
SingleResolutionResult resolutionResult =
- appView.appInfo().resolveMethodOn(originalClazz, method.method).asSingleResolution();
+ appView
+ .appInfo()
+ .resolveMethodOn(originalClazz, method.getReference())
+ .asSingleResolution();
if (resolutionResult == null || !resolutionResult.isVirtualTarget()) {
return;
}
@@ -1008,7 +1011,7 @@
DexDefinition precondition,
ProguardIfRule ifRule) {
if (methodsMarked != null
- && methodsMarked.contains(MethodSignatureEquivalence.get().wrap(method.method))) {
+ && methodsMarked.contains(MethodSignatureEquivalence.get().wrap(method.getReference()))) {
// Ignore, method is overridden in sub class.
return;
}
@@ -1019,7 +1022,7 @@
getClass(), "Marking method `%s` due to `%s { %s }`.", method, context, rule);
}
if (methodsMarked != null) {
- methodsMarked.add(MethodSignatureEquivalence.get().wrap(method.method));
+ methodsMarked.add(MethodSignatureEquivalence.get().wrap(method.getReference()));
}
addItemToSets(method, context, rule, precondition, ifRule);
}
@@ -1075,13 +1078,13 @@
private void includeDescriptorClasses(DexDefinition item, ProguardKeepRuleBase context) {
if (item.isDexEncodedMethod()) {
- DexMethod method = item.asDexEncodedMethod().method;
+ DexMethod method = item.asDexEncodedMethod().getReference();
includeDescriptor(item, method.proto.returnType, context);
for (DexType value : method.proto.parameters.values) {
includeDescriptor(item, value, context);
}
} else if (item.isDexEncodedField()) {
- DexField field = item.asDexEncodedField().field;
+ DexField field = item.asDexEncodedField().getReference();
includeDescriptor(item, field.type, context);
} else {
assert item.isDexClass();
@@ -1114,7 +1117,7 @@
return;
}
if (options.isGeneratingDex()
- && encodedMethod.method.isLambdaDeserializeMethod(appView.dexItemFactory())) {
+ && encodedMethod.getReference().isLambdaDeserializeMethod(appView.dexItemFactory())) {
// Don't keep lambda deserialization methods.
return;
}
@@ -1131,7 +1134,7 @@
"The rule `"
+ rule
+ "` is ignored because the targeting interface method `"
- + encodedMethod.method.toSourceString()
+ + encodedMethod.getReference().toSourceString()
+ "` will be desugared."));
}
return;
@@ -1244,7 +1247,7 @@
if (!item.isDexEncodedMethod()) {
throw new Unreachable();
}
- whyAreYouNotInlining.add(item.asDexEncodedMethod().method);
+ whyAreYouNotInlining.add(item.asDexEncodedMethod().getReference());
context.markAsUsed();
} else if (context.isClassInlineRule()) {
ClassInlineRule classInlineRule = context.asClassInlineRule();
@@ -1285,13 +1288,13 @@
if (item.isDexEncodedField()) {
DexEncodedField field = item.asDexEncodedField();
if (field.isProgramField(appView)) {
- neverPropagateValue.add(item.asDexEncodedField().field);
+ neverPropagateValue.add(item.asDexEncodedField().getReference());
context.markAsUsed();
}
} else if (item.isDexEncodedMethod()) {
DexEncodedMethod method = item.asDexEncodedMethod();
if (method.isProgramMethod(appView)) {
- neverPropagateValue.add(item.asDexEncodedMethod().method);
+ neverPropagateValue.add(item.asDexEncodedMethod().getReference());
context.markAsUsed();
}
}
@@ -1301,15 +1304,15 @@
}
} else if (context instanceof ProguardIdentifierNameStringRule) {
if (item.isDexEncodedField()) {
- identifierNameStrings.add(item.asDexEncodedField().field);
+ identifierNameStrings.add(item.asDexEncodedField().getReference());
context.markAsUsed();
} else if (item.isDexEncodedMethod()) {
- identifierNameStrings.add(item.asDexEncodedMethod().method);
+ identifierNameStrings.add(item.asDexEncodedMethod().getReference());
context.markAsUsed();
}
} else if (context instanceof ConstantArgumentRule) {
if (item.isDexEncodedMethod()) {
- keepParametersWithConstantValue.add(item.asDexEncodedMethod().method);
+ keepParametersWithConstantValue.add(item.asDexEncodedMethod().getReference());
context.markAsUsed();
}
} else if (context instanceof ReprocessClassInitializerRule) {
@@ -1317,10 +1320,10 @@
if (clazz != null && clazz.hasClassInitializer()) {
switch (context.asReprocessClassInitializerRule().getType()) {
case ALWAYS:
- reprocess.add(clazz.getClassInitializer().method);
+ reprocess.add(clazz.getClassInitializer().getReference());
break;
case NEVER:
- neverReprocess.add(clazz.getClassInitializer().method);
+ neverReprocess.add(clazz.getClassInitializer().getReference());
break;
default:
throw new Unreachable();
@@ -1332,10 +1335,10 @@
DexEncodedMethod method = item.asDexEncodedMethod();
switch (context.asReprocessMethodRule().getType()) {
case ALWAYS:
- reprocess.add(method.method);
+ reprocess.add(method.getReference());
break;
case NEVER:
- neverReprocess.add(method.method);
+ neverReprocess.add(method.getReference());
break;
default:
throw new Unreachable();
@@ -1344,7 +1347,7 @@
}
} else if (context instanceof UnusedArgumentRule) {
if (item.isDexEncodedMethod()) {
- keepUnusedArguments.add(item.asDexEncodedMethod().method);
+ keepUnusedArguments.add(item.asDexEncodedMethod().getReference());
context.markAsUsed();
}
} else {
diff --git a/src/main/java/com/android/tools/r8/shaking/ScopedDexMethodSet.java b/src/main/java/com/android/tools/r8/shaking/ScopedDexMethodSet.java
index d3b7e21..07ad580 100644
--- a/src/main/java/com/android/tools/r8/shaking/ScopedDexMethodSet.java
+++ b/src/main/java/com/android/tools/r8/shaking/ScopedDexMethodSet.java
@@ -46,7 +46,7 @@
}
public boolean addMethod(DexEncodedMethod method) {
- Wrapper<DexMethod> wrapped = METHOD_EQUIVALENCE.wrap(method.method);
+ Wrapper<DexMethod> wrapped = METHOD_EQUIVALENCE.wrap(method.getReference());
if (contains(wrapped)) {
return false;
}
@@ -55,7 +55,7 @@
}
public AddMethodIfMoreVisibleResult addMethodIfMoreVisible(DexEncodedMethod method) {
- Wrapper<DexMethod> wrapped = METHOD_EQUIVALENCE.wrap(method.method);
+ Wrapper<DexMethod> wrapped = METHOD_EQUIVALENCE.wrap(method.getReference());
DexEncodedMethod existing = lookup(wrapped);
if (existing == null) {
items.put(wrapped, method);
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index 9b7a66b..6974a61 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -276,7 +276,7 @@
AppInfoWithLiveness appInfo = appView.appInfo();
InternalOptions options = appView.options();
int firstUnreachable =
- firstUnreachableIndex(methods, method -> appInfo.isLiveMethod(method.method));
+ firstUnreachableIndex(methods, method -> appInfo.isLiveMethod(method.getReference()));
// Return the original array if all methods are used.
if (firstUnreachable == -1) {
return null;
@@ -295,7 +295,7 @@
method.shouldNotHaveCode() && !method.hasCode()
? method
: method.toMethodThatLogsError(appView));
- methodsToKeepForConfigurationDebugging.add(method.method);
+ methodsToKeepForConfigurationDebugging.add(method.getReference());
} else if (appInfo.isTargetedMethod(method.getReference())) {
// If the method is already abstract, and doesn't have code, let it be.
if (method.shouldNotHaveCode() && !method.hasCode()) {
@@ -303,7 +303,7 @@
continue;
}
if (Log.ENABLED) {
- Log.debug(getClass(), "Making method %s abstract.", method.method);
+ Log.debug(getClass(), "Making method %s abstract.", method.getReference());
}
// Final classes cannot be abstract, so we have to keep the method in that case.
// Also some other kinds of methods cannot be abstract, so keep them around.
@@ -315,7 +315,7 @@
&& !method.isSynchronized()
&& !method.accessFlags.isPrivate()
&& !method.isStatic()
- && !appInfo.isFailedResolutionTarget(method.method);
+ && !appInfo.isFailedResolutionTarget(method.getReference());
// Private methods and static methods can only be targeted yet non-live as the result of
// an invalid invoke. They will not actually be called at runtime but we have to keep them
// as non-abstract (see above) to produce the same failure mode.
@@ -323,7 +323,7 @@
allowAbstract ? method.toAbstractMethod() : method.toEmptyThrowingMethod(options));
} else {
if (Log.ENABLED) {
- Log.debug(getClass(), "Removing method %s.", method.method);
+ Log.debug(getClass(), "Removing method %s.", method.getReference());
}
unusedItemsPrinter.registerUnusedMethod(method);
}
@@ -356,7 +356,7 @@
reachableOrReferencedFields.add(field);
} else {
if (Log.ENABLED) {
- Log.debug(getClass(), "Removing field %s.", field.field);
+ Log.debug(getClass(), "Removing field %s.", field.getReference());
}
unusedItemsPrinter.registerUnusedField(field);
}
@@ -379,7 +379,7 @@
// Pinned field which type is never instantiated are always null, they are marked as dead
// so their reads and writes are cleared, but they are still in the program.
assert !field.getOptimizationInfo().isDead() || appView.appInfo().isPinned(field)
- : "Expected field `" + field.field.toSourceString() + "` to be absent";
+ : "Expected field `" + field.getReference().toSourceString() + "` to be absent";
}
return true;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/UnusedItemsPrinter.java b/src/main/java/com/android/tools/r8/shaking/UnusedItemsPrinter.java
index 5b89abf..6bd61cd 100644
--- a/src/main/java/com/android/tools/r8/shaking/UnusedItemsPrinter.java
+++ b/src/main/java/com/android/tools/r8/shaking/UnusedItemsPrinter.java
@@ -105,15 +105,15 @@
append(accessFlags);
append(" ");
}
- append(method.method.proto.returnType.toSourceString());
+ append(method.getReference().proto.returnType.toSourceString());
append(" ");
- append(method.method.name.toSourceString());
+ append(method.getReference().name.toSourceString());
append("(");
- for (int i = 0; i < method.method.proto.parameters.values.length; i++) {
+ for (int i = 0; i < method.getReference().proto.parameters.values.length; i++) {
if (i != 0) {
append(",");
}
- append(method.method.proto.parameters.values[i].toSourceString());
+ append(method.getReference().proto.parameters.values[i].toSourceString());
}
append(")");
newline();
@@ -126,9 +126,9 @@
append(accessFlags);
append(" ");
}
- append(field.field.type.toSourceString());
+ append(field.getReference().type.toSourceString());
append(" ");
- append(field.field.name.toSourceString());
+ append(field.getReference().name.toSourceString());
newline();
}
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 b2d9332..3475116 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -512,7 +512,7 @@
}
// Check if the target is overriding and narrowing the access.
if (method.isPublic()) {
- DexEncodedMethod targetOverride = target.lookupVirtualMethod(method.method);
+ DexEncodedMethod targetOverride = target.lookupVirtualMethod(method.getReference());
if (targetOverride != null && !targetOverride.isPublic()) {
return true;
}
@@ -565,7 +565,7 @@
Set<Wrapper<DexMethod>> filteredSignatures = new HashSet<>();
for (DexProgramClass clazz : appInfo.classes()) {
for (DexEncodedMethod encodedMethod : clazz.methods()) {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
DexClass definition = appInfo.definitionFor(method.holder);
if (definition != null
&& definition.isProgramClass()
@@ -695,7 +695,7 @@
for (DexProgramClass clazz : appInfo.classes()) {
for (DexEncodedMethod encodedMethod : clazz.methods()) {
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
DexMethod originalMethod = graphLens.getOriginalMethodSignature(method);
DexMethod renamedMethod = graphLens.getRenamedMethodSignature(originalMethod);
@@ -727,7 +727,8 @@
private boolean methodResolutionMayChange(DexProgramClass source, DexProgramClass target) {
for (DexEncodedMethod virtualSourceMethod : source.virtualMethods()) {
- DexEncodedMethod directTargetMethod = target.lookupDirectMethod(virtualSourceMethod.method);
+ DexEncodedMethod directTargetMethod =
+ target.lookupDirectMethod(virtualSourceMethod.getReference());
if (directTargetMethod != null) {
// A private method shadows a virtual method. This situation is rare, since it is not
// allowed by javac. Therefore, we just give up in this case. (In principle, it would be
@@ -763,7 +764,7 @@
// Conservatively find all possible targets for this method.
LookupResultSuccess lookupResult =
appInfo
- .resolveMethodOnInterface(method.getHolderType(), method.method)
+ .resolveMethodOnInterface(method.getHolderType(), method.getReference())
.lookupVirtualDispatchTargets(target, appInfo)
.asLookupResultSuccess();
assert lookupResult != null;
@@ -873,11 +874,12 @@
for (DexType interfaceType : target.interfaces.values) {
DexClass clazz = appInfo.definitionFor(interfaceType);
for (DexEncodedField staticField : clazz.staticFields()) {
- staticFieldsInInterfacesOfTarget.add(equivalence.wrap(staticField.field));
+ staticFieldsInInterfacesOfTarget.add(equivalence.wrap(staticField.getReference()));
}
}
for (DexEncodedField instanceField : source.instanceFields()) {
- if (staticFieldsInInterfacesOfTarget.contains(equivalence.wrap(instanceField.field))) {
+ if (staticFieldsInInterfacesOfTarget.contains(
+ equivalence.wrap(instanceField.getReference()))) {
// An instruction "iget Target.f" or "iput Target.f" that used to hit a static field in an
// interface would now hit an instance field from [source], so that an IncompatibleClass-
// ChangeError would no longer be thrown. Abort merge.
@@ -926,7 +928,7 @@
DexEncodedMethod resultingConstructor =
renameConstructor(directMethod, availableMethodSignatures);
add(directMethods, resultingConstructor, MethodSignatureEquivalence.get());
- blockRedirectionOfSuperCalls(resultingConstructor.method);
+ blockRedirectionOfSuperCalls(resultingConstructor.getReference());
} else {
DexEncodedMethod resultingDirectMethod =
renameMethod(
@@ -934,9 +936,10 @@
availableMethodSignatures,
directMethod.isClassInitializer() ? Rename.NEVER : Rename.IF_NEEDED);
add(directMethods, resultingDirectMethod, MethodSignatureEquivalence.get());
- deferredRenamings.map(directMethod.method, resultingDirectMethod.method);
- deferredRenamings.recordMove(directMethod.method, resultingDirectMethod.method);
- blockRedirectionOfSuperCalls(resultingDirectMethod.method);
+ deferredRenamings.map(directMethod.getReference(), resultingDirectMethod.getReference());
+ deferredRenamings.recordMove(
+ directMethod.getReference(), resultingDirectMethod.getReference());
+ blockRedirectionOfSuperCalls(resultingDirectMethod.getReference());
}
}
@@ -945,7 +948,7 @@
if (shadowedBy != null) {
if (virtualMethod.isAbstract()) {
// Remove abstract/interface methods that are shadowed.
- deferredRenamings.map(virtualMethod.method, shadowedBy.method);
+ deferredRenamings.map(virtualMethod.getReference(), shadowedBy.getReference());
// The override now corresponds to the method in the parent, so unset its synthetic flag
// if the method in the parent is not synthetic.
@@ -977,8 +980,10 @@
renameMethod(virtualMethod, availableMethodSignatures, Rename.NEVER);
resultingVirtualMethod.setLibraryMethodOverride(
virtualMethod.isLibraryMethodOverride());
- deferredRenamings.map(virtualMethod.method, resultingVirtualMethod.method);
- deferredRenamings.recordMove(virtualMethod.method, resultingVirtualMethod.method);
+ deferredRenamings.map(
+ virtualMethod.getReference(), resultingVirtualMethod.getReference());
+ deferredRenamings.recordMove(
+ virtualMethod.getReference(), resultingVirtualMethod.getReference());
add(virtualMethods, resultingVirtualMethod, MethodSignatureEquivalence.get());
continue;
}
@@ -1005,7 +1010,7 @@
makeStatic(resultingDirectMethod);
// Update method pool collection now that we are adding a new public method.
- methodPoolForTarget.seen(resultingDirectMethod.method);
+ methodPoolForTarget.seen(resultingDirectMethod.getReference());
} else {
// This virtual method could be called directly from a sub class via an invoke-super in-
// struction. Therefore, we translate this virtual method into a direct method, such that
@@ -1019,8 +1024,9 @@
// Record that invoke-super instructions in the target class should be redirected to the
// newly created direct method.
- redirectSuperCallsInTarget(virtualMethod.method, resultingDirectMethod.method);
- blockRedirectionOfSuperCalls(resultingDirectMethod.method);
+ redirectSuperCallsInTarget(
+ virtualMethod.getReference(), resultingDirectMethod.getReference());
+ blockRedirectionOfSuperCalls(resultingDirectMethod.getReference());
if (shadowedBy == null) {
// In addition to the newly added direct method, create a virtual method such that we do
@@ -1029,12 +1035,14 @@
// it turns out that the method is never used, it will be removed by the final round
// of tree shaking.
shadowedBy = buildBridgeMethod(virtualMethod, resultingDirectMethod);
- deferredRenamings.recordCreationOfBridgeMethod(virtualMethod.method, shadowedBy.method);
+ deferredRenamings.recordCreationOfBridgeMethod(
+ virtualMethod.getReference(), shadowedBy.getReference());
add(virtualMethods, shadowedBy, MethodSignatureEquivalence.get());
}
- deferredRenamings.map(virtualMethod.method, shadowedBy.method);
- deferredRenamings.recordMove(virtualMethod.method, resultingDirectMethod.method);
+ deferredRenamings.map(virtualMethod.getReference(), shadowedBy.getReference());
+ deferredRenamings.recordMove(
+ virtualMethod.getReference(), resultingDirectMethod.getReference());
}
if (abortMerge) {
@@ -1046,7 +1054,7 @@
// Step 2: Merge fields
Set<DexString> existingFieldNames = new HashSet<>();
for (DexEncodedField field : target.fields()) {
- existingFieldNames.add(field.field.name);
+ existingFieldNames.add(field.getReference().name);
}
// In principle, we could allow multiple fields with the same name, and then only rename the
@@ -1223,8 +1231,8 @@
private DexEncodedMethod buildBridgeMethod(
DexEncodedMethod method, DexEncodedMethod invocationTarget) {
DexType holder = target.type;
- DexProto proto = method.method.proto;
- DexString name = method.method.name;
+ DexProto proto = method.getReference().proto;
+ DexString name = method.getReference().name;
DexMethod newMethod = application.dexItemFactory.createMethod(holder, proto, name);
MethodAccessFlags accessFlags = method.accessFlags.copy();
accessFlags.setBridge();
@@ -1235,8 +1243,8 @@
SynthesizedBridgeCode code =
new SynthesizedBridgeCode(
newMethod,
- appView.graphLens().getOriginalMethodSignature(method.method),
- invocationTarget.method,
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
+ invocationTarget.getReference(),
invocationTarget.isPrivateMethod() ? DIRECT : STATIC,
target.isInterface());
@@ -1265,7 +1273,7 @@
// Returns the method that shadows the given method, or null if method is not shadowed.
private DexEncodedMethod findMethodInTarget(DexEncodedMethod method) {
- ResolutionResult resolutionResult = appInfo.resolveMethodOn(target, method.method);
+ ResolutionResult resolutionResult = appInfo.resolveMethodOn(target, method.getReference());
if (!resolutionResult.isSingleResolution()) {
// May happen in case of missing classes, or if multiple implementations were found.
abortMerge = true;
@@ -1285,7 +1293,7 @@
"The non-abstract type `"
+ target.type.toSourceString()
+ "` does not implement the method `"
- + method.method.toSourceString()
+ + method.getReference().toSourceString()
+ "`.");
}
}
@@ -1321,8 +1329,8 @@
int i = 0;
for (DexEncodedField field : sourceFields) {
DexEncodedField resultingField = renameFieldIfNeeded(field, availableFieldSignatures);
- existingFieldNames.add(resultingField.field.name);
- deferredRenamings.map(field.field, resultingField.field);
+ existingFieldNames.add(resultingField.getReference().name);
+ deferredRenamings.map(field.getReference(), resultingField.getReference());
result[i] = resultingField;
i++;
}
@@ -1354,14 +1362,15 @@
do {
DexString newName = getFreshName(TEMPORARY_INSTANCE_INITIALIZER_PREFIX, count, oldHolder);
newSignature =
- application.dexItemFactory.createMethod(target.type, method.method.proto, newName);
+ application.dexItemFactory.createMethod(
+ target.type, method.getReference().proto, newName);
count++;
} while (!availableMethodSignatures.test(newSignature));
DexEncodedMethod result = method.toTypeSubstitutedMethod(newSignature);
result.getMutableOptimizationInfo().markForceInline();
- deferredRenamings.map(method.method, result.method);
- deferredRenamings.recordMove(method.method, result.method);
+ deferredRenamings.map(method.getReference(), result.getReference());
+ deferredRenamings.recordMove(method.getReference(), result.getReference());
// Renamed constructors turn into ordinary private functions. They can be private, as
// they are only references from their direct subclass, which they were merged into.
result.accessFlags.unsetConstructor();
@@ -1371,7 +1380,7 @@
private DexEncodedMethod renameMethod(
DexEncodedMethod method, Predicate<DexMethod> availableMethodSignatures, Rename strategy) {
- return renameMethod(method, availableMethodSignatures, strategy, method.method.proto);
+ return renameMethod(method, availableMethodSignatures, strategy, method.getReference().proto);
}
private DexEncodedMethod renameMethod(
@@ -1382,7 +1391,7 @@
// We cannot handle renaming static initializers yet and constructors should have been
// renamed already.
assert !method.accessFlags.isConstructor() || strategy == Rename.NEVER;
- DexString oldName = method.method.name;
+ DexString oldName = method.getReference().name;
DexType oldHolder = method.getHolderType();
DexMethod newSignature;
@@ -1417,17 +1426,18 @@
private DexEncodedField renameFieldIfNeeded(
DexEncodedField field, Predicate<DexField> availableFieldSignatures) {
- DexString oldName = field.field.name;
+ DexString oldName = field.getReference().name;
DexType oldHolder = field.getHolderType();
DexField newSignature =
- application.dexItemFactory.createField(target.type, field.field.type, oldName);
+ application.dexItemFactory.createField(target.type, field.getReference().type, oldName);
if (!availableFieldSignatures.test(newSignature)) {
int count = 1;
do {
DexString newName = getFreshName(oldName.toSourceString(), count, oldHolder);
newSignature =
- application.dexItemFactory.createField(target.type, field.field.type, newName);
+ application.dexItemFactory.createField(
+ target.type, field.getReference().type, newName);
count++;
} while (!availableFieldSignatures.test(newSignature));
}
@@ -1520,7 +1530,7 @@
@Override
public DexEncodedMethod recordMethodChange(
DexEncodedMethod method, DexEncodedMethod newMethod) {
- recordMethodChange(method.method, newMethod.method);
+ recordMethodChange(method.getReference(), newMethod.getReference());
if (newMethod.isNonPrivateVirtualMethod()) {
// Since we changed the return type or one of the parameters, this method cannot be a
// classpath or library method override, since we only class merge program classes.
diff --git a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
index 039f28d..16a6bfc 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -301,7 +301,7 @@
addType(field.type);
DexEncodedField baseField = appInfo.resolveField(field).getResolvedField();
if (baseField != null && baseField.getHolderType() != field.holder) {
- field = baseField.field;
+ field = baseField.getReference();
}
addType(field.holder);
TracedFieldImpl tracedField = new TracedFieldImpl(field, baseField);
@@ -381,9 +381,9 @@
ResolutionResult resolutionResult = appInfo.unsafeResolveMethodDueToDexFormat(method);
DexEncodedMethod target =
resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
- if (target != null && target.method != method) {
+ if (target != null && target.getReference() != method) {
addType(method.holder);
- addMethod(target.method);
+ addMethod(target.getReference());
} else {
addMethod(method);
}
@@ -397,9 +397,9 @@
@Override
public void registerInvokeStatic(DexMethod method) {
DexEncodedMethod target = appInfo.unsafeResolveMethodDueToDexFormat(method).getSingleTarget();
- if (target != null && target.method != method) {
+ if (target != null && target.getReference() != method) {
addType(method.holder);
- addMethod(target.method);
+ addMethod(target.getReference());
} else {
addMethod(method);
}
@@ -456,7 +456,7 @@
}
private void registerField(DexEncodedField field) {
- registerTypeReference(field.field.type);
+ registerTypeReference(field.getReference().type);
}
private void registerMethod(ProgramMethod method) {
@@ -488,10 +488,11 @@
clazz.forEachMethod(
method -> {
ResolutionResult resolutionResult =
- appInfo.resolveMethodOn(superType, method.method, superType != clazz.superType);
+ appInfo.resolveMethodOn(
+ superType, method.getReference(), superType != clazz.superType);
DexEncodedMethod dexEncodedMethod = resolutionResult.getSingleTarget();
if (dexEncodedMethod != null) {
- addMethod(dexEncodedMethod.method);
+ addMethod(dexEncodedMethod.getReference());
}
});
}
diff --git a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
index b1099e1..47ccd91 100644
--- a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
@@ -357,11 +357,12 @@
}
}
- DexMethod originalMethod = appView.graphLens().getOriginalMethodSignature(method.method);
+ DexMethod originalMethod =
+ appView.graphLens().getOriginalMethodSignature(method.getReference());
MethodSignature originalSignature =
MethodSignature.fromDexMethod(originalMethod, originalMethod.holder != originalType);
- DexString obfuscatedNameDexString = namingLens.lookupName(method.method);
+ DexString obfuscatedNameDexString = namingLens.lookupName(method.getReference());
String obfuscatedName = obfuscatedNameDexString.toString();
// Add simple "a() -> b" mapping if we won't have any other with concrete line numbers
@@ -467,7 +468,7 @@
}
allSeenAreInstanceInitializers = false;
// If the method is pinned, we cannot minify it.
- if (!keepInfo.isMinificationAllowed(method.method, appView, appView.options())) {
+ if (!keepInfo.isMinificationAllowed(method.getReference(), appView, appView.options())) {
continue;
}
// With desugared library, call-backs names are reserved here.
@@ -477,16 +478,17 @@
// We use the same name for interface names even if it has different types.
DexProgramClass clazz = appView.definitionForProgramType(method.getHolderType());
DexClassAndMethod lookupResult =
- appView.appInfo().lookupMaximallySpecificMethod(clazz, method.method);
+ appView.appInfo().lookupMaximallySpecificMethod(clazz, method.getReference());
if (lookupResult == null) {
// We cannot rename methods we cannot look up.
continue;
}
- String errorString = method.method.qualifiedName() + " is not kept but is overloaded";
+ String errorString = method.getReference().qualifiedName() + " is not kept but is overloaded";
assert lookupResult.getHolder().isInterface() : errorString;
// TODO(b/159113601): Reenable assert.
- assert true || originalName == null || originalName.equals(method.method.name) : errorString;
- originalName = method.method.name;
+ assert true || originalName == null || originalName.equals(method.getReference().name)
+ : errorString;
+ originalName = method.getReference().name;
}
return true;
}
@@ -544,7 +546,7 @@
Supplier<Builder> onDemandClassNamingBuilder) {
clazz.forEachField(
dexEncodedField -> {
- DexField dexField = dexEncodedField.field;
+ DexField dexField = dexEncodedField.getReference();
DexField originalField = graphLens.getOriginalFieldSignature(dexField);
DexString renamedName = namingLens.lookupName(dexField);
if (renamedName != originalField.name || originalField.holder != originalType) {
@@ -562,7 +564,7 @@
new IdentityHashMap<>(clazz.getMethodCollection().size());
for (DexEncodedMethod encodedMethod : clazz.methods()) {
// Add method only if renamed, moved, or contains positions.
- DexMethod method = encodedMethod.method;
+ DexMethod method = encodedMethod.getReference();
DexString renamedName = namingLens.lookupName(method);
if (renamedName != method.name
|| graphLens.getOriginalMethodSignature(method) != method
@@ -626,7 +628,7 @@
PositionEventEmitter positionEventEmitter =
new PositionEventEmitter(
application.dexItemFactory,
- appView.graphLens().getOriginalMethodSignature(method.method),
+ appView.graphLens().getOriginalMethodSignature(method.getReference()),
processedEvents);
Box<Boolean> inlinedOriginalPosition = new Box<>(false);
@@ -634,7 +636,8 @@
// Debug event visitor to map line numbers.
DexDebugEventVisitor visitor =
new DexDebugPositionState(
- debugInfo.startLine, appView.graphLens().getOriginalMethodSignature(method.method)) {
+ debugInfo.startLine,
+ appView.graphLens().getOriginalMethodSignature(method.getReference())) {
// Keep track of what PC has been emitted.
private int emittedPc = 0;
@@ -734,7 +737,7 @@
Pair<Integer, Position> lastPosition = new Pair<>();
DexDebugEventVisitor visitor =
- new DexDebugPositionState(debugInfo.startLine, method.method) {
+ new DexDebugPositionState(debugInfo.startLine, method.getReference()) {
@Override
public void visit(Default defaultEvent) {
super.visit(defaultEvent);
diff --git a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
index fcc79dc..2c58d15 100644
--- a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
+++ b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
@@ -111,7 +111,7 @@
continue;
}
String holderName = method.getHolderType().getName();
- String methodName = method.method.name.toString();
+ String methodName = method.getReference().name.toString();
String generatedMethodName = holderName + "_" + methodName;
CfCode code = getCode(holderName, methodName, method.getCode().asCfCode());
if (code != null) {
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java b/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
index 97f84ef..d840b52 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/B141942381.java
@@ -77,8 +77,8 @@
assertThat(set, isPresent());
assertEquals(
- set.getMethod().method.proto.parameters.values[0],
- storage.getField().field.type.toBaseType(inspector.getFactory()));
+ set.getMethod().getReference().proto.parameters.values[0],
+ storage.getField().getReference().type.toBaseType(inspector.getFactory()));
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DumpCoreLibUsage.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DumpCoreLibUsage.java
index 62d2d3a..ae4eda0 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DumpCoreLibUsage.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DumpCoreLibUsage.java
@@ -85,13 +85,13 @@
if (!field.accessFlags.isPublic()) {
continue;
}
- if (filter.contains(field.field)) {
+ if (filter.contains(field.getReference())) {
continue;
}
- if (usesTypeFromPackage(pkg, field.field)) {
+ if (usesTypeFromPackage(pkg, field.getReference())) {
headerWritten = writeHeaderIfNeeded(libraryClass.type, headerWritten);
System.out.println(" " + field.toSourceString());
- found.add(field.field);
+ found.add(field.getReference());
}
}
@@ -105,13 +105,13 @@
if (method.isSyntheticMethod()) {
continue;
}
- if (filter.contains(method.method)) {
+ if (filter.contains(method.getReference())) {
continue;
}
- if (usesTypeFromPackage(pkg, method.method)) {
+ if (usesTypeFromPackage(pkg, method.getReference())) {
headerWritten = writeHeaderIfNeeded(libraryClass.type, headerWritten);
- System.out.println(" " + method.method.toSourceStringWithoutHolder());
- found.add(method.method);
+ System.out.println(" " + method.getReference().toSourceStringWithoutHolder());
+ found.add(method.getReference());
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
index e345069..32d9d95 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.List;
import java.util.function.Function;
-import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -51,7 +50,7 @@
classSubject
.uniqueMethodWithName("applyFunction")
.getMethod()
- .method
+ .getReference()
.proto
.parameters
.values[0]
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
index cb8c24f..e23e86d 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
@@ -64,7 +64,7 @@
.anyMatch(
m ->
m.getMethod()
- .method
+ .getReference()
.proto
.parameters
.values[0]
@@ -75,7 +75,7 @@
.anyMatch(
m ->
m.getMethod()
- .method
+ .getReference()
.proto
.parameters
.values[0]
@@ -210,9 +210,9 @@
virtualMethods.stream()
.anyMatch(
m ->
- m.getMethod().method.name.toString().equals("foo")
+ m.getMethod().getReference().name.toString().equals("foo")
&& m.getMethod()
- .method
+ .getReference()
.proto
.parameters
.values[0]
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
index 0ee446d..5cd8c8d 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
@@ -121,7 +121,7 @@
IterableUtils.size(
myCollection
.getDexProgramClass()
- .virtualMethods(m -> m.method.name.toString().equals("forEach"))));
+ .virtualMethods(m -> m.getReference().name.toString().equals("forEach"))));
}
private void assertWrapperMethodsPresent(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
index b38e710..47320d8 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
@@ -86,16 +86,19 @@
private boolean isNestBridge(FoundMethodSubject methodSubject) {
DexEncodedMethod method = methodSubject.getMethod();
if (method.isInstanceInitializer()) {
- if (method.method.proto.parameters.isEmpty()) {
+ if (method.getReference().proto.parameters.isEmpty()) {
return false;
}
- DexType[] formals = method.method.proto.parameters.values;
+ DexType[] formals = method.getReference().proto.parameters.values;
DexType lastFormal = formals[formals.length - 1];
return lastFormal.isClassType()
&& SyntheticItemsTestUtils.isInitializerTypeArgument(
Reference.classFromDescriptor(lastFormal.toDescriptorString()));
}
- return method.method.name.toString()
+ return method
+ .getReference()
+ .name
+ .toString()
.startsWith(NestBasedAccessDesugaring.NEST_ACCESS_NAME_PREFIX);
}
}
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingClassStaticizerTest.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingClassStaticizerTest.java
index 1e5bd5b..750c6fe 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingClassStaticizerTest.java
@@ -76,7 +76,7 @@
MethodSubject method =
codeInspector.clazz(CompanionHost.class).uniqueMethodWithName(renamedMethodName);
assertThat(method, isPresent());
- assertEquals("int", method.getMethod().method.proto.parameters.toString());
+ assertEquals("int", method.getMethod().getReference().proto.parameters.toString());
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
index b1d9990..06666db 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -227,7 +227,7 @@
DexField aFieldOnInterface = factory
.createField(factory.createType("LInterface;"), factory.intType, "aField");
- assertEquals(aFieldOnInterface, appInfo.lookupStaticTarget(aFieldOnSubClass).field);
+ assertEquals(aFieldOnInterface, appInfo.lookupStaticTarget(aFieldOnSubClass).getReference());
assertEquals("42", runArt(application));
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
index 51b5323..57078d1 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
@@ -70,12 +70,13 @@
private void testVirtualLookup(DexProgramClass clazz, DexEncodedMethod method) {
// Check lookup will produce the same result.
- DexMethod id = method.method;
+ DexMethod id = method.getReference();
assertEquals(
- appInfo().resolveMethodOnClass(method.method, id.holder).getSingleTarget(), method);
+ appInfo().resolveMethodOnClass(method.getReference(), id.holder).getSingleTarget(), method);
// Check lookup targets with include method.
- ResolutionResult resolutionResult = appInfo().resolveMethodOnClass(method.method, clazz);
+ ResolutionResult resolutionResult =
+ appInfo().resolveMethodOnClass(method.getReference(), clazz);
AppInfoWithLiveness appInfo = null; // TODO(b/154881041): Remove or compute liveness.
LookupResult lookupResult =
resolutionResult.lookupVirtualDispatchTargets(
@@ -96,7 +97,7 @@
AppInfoWithLiveness appInfo = null; // TODO(b/154881041): Remove or compute liveness.
LookupResultSuccess lookupResult =
appInfo()
- .resolveMethodOnInterface(clazz, method.method)
+ .resolveMethodOnInterface(clazz, method.getReference())
.lookupVirtualDispatchTargets(clazz, appInfo(), appInfo, dexReference -> false)
.asLookupResultSuccess();
assertNotNull(lookupResult);
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java b/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
index 024dd38..ec665d3 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessInfoTest.java
@@ -140,7 +140,7 @@
private DexEncodedField uniqueFieldByName(DexProgramClass clazz, String name) {
DexEncodedField result = null;
for (DexEncodedField field : clazz.fields()) {
- if (field.field.name.toSourceString().equals(name)) {
+ if (field.getReference().name.toSourceString().equals(name)) {
assertNull(result);
result = field;
}
diff --git a/src/test/java/com/android/tools/r8/ir/conversion/PartialCallGraphTest.java b/src/test/java/com/android/tools/r8/ir/conversion/PartialCallGraphTest.java
index 009d4e3d..36acfe9 100644
--- a/src/test/java/com/android/tools/r8/ir/conversion/PartialCallGraphTest.java
+++ b/src/test/java/com/android/tools/r8/ir/conversion/PartialCallGraphTest.java
@@ -137,7 +137,7 @@
private Node findNode(Iterable<Node> nodes, String name) {
for (Node n : nodes) {
- if (n.getMethod().method.name.toString().equals(name)) {
+ if (n.getMethod().getReference().name.toString().equals(name)) {
return n;
}
}
@@ -147,7 +147,7 @@
private ProgramMethod findMethod(String name) {
for (DexProgramClass clazz : appView.appInfo().classes()) {
for (DexEncodedMethod method : clazz.methods()) {
- if (method.method.name.toString().equals(name)) {
+ if (method.getReference().name.toString().equals(name)) {
return new ProgramMethod(clazz, method);
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index 7049089..aad2f6f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -276,7 +276,7 @@
for (int i = 0; i < 3; ++i) {
MethodSubject markerSubject = clazz.method("void", "marker" + i, Collections.emptyList());
assertTrue(markerSubject.isPresent());
- markers[i] = markerSubject.getMethod().method;
+ markers[i] = markerSubject.getMethod().getReference();
}
// Count invokes to callee between markers.
@@ -290,7 +290,7 @@
DexMethod target = ((InvokeInstructionSubject) instruction).invokedMethod();
- if (target == callee.getMethod().method) {
+ if (target == callee.getMethod().getReference()) {
assertTrue(phase == 0 || phase == 1);
++counters[phase];
continue;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EnumCanonicalizationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EnumCanonicalizationTest.java
index 589fa3f..709a44b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EnumCanonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EnumCanonicalizationTest.java
@@ -73,7 +73,7 @@
.streamInstructions()
.filter(InstructionSubject::isStaticGet)
.map(InstructionSubject::getField)
- .filter(enumFieldSubject.getField().field::equals)
+ .filter(enumFieldSubject.getField().getReference()::equals)
.count());
assertEquals(
1,
@@ -81,7 +81,9 @@
.streamInstructions()
.filter(InstructionSubject::isStaticGet)
.map(InstructionSubject::getField)
- .filter(enumWithClassInitializationSideEffectsFieldSubject.getField().field::equals)
+ .filter(
+ enumWithClassInitializationSideEffectsFieldSubject.getField().getReference()
+ ::equals)
.count());
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/MemberValuePropagationWithClassInitializationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/MemberValuePropagationWithClassInitializationTest.java
index 50e52e2..fb3d7e4 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/MemberValuePropagationWithClassInitializationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/MemberValuePropagationWithClassInitializationTest.java
@@ -84,7 +84,7 @@
mainMethodSubject
.streamInstructions()
.filter(InstructionSubject::isStaticGet)
- .anyMatch(x -> x.getField() == clinitFieldSubject.getField().field));
+ .anyMatch(x -> x.getField() == clinitFieldSubject.getField().getReference()));
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalInstanceFieldLoadAfterStoreTest.java b/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalInstanceFieldLoadAfterStoreTest.java
index 329e574..cad2c50 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalInstanceFieldLoadAfterStoreTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalInstanceFieldLoadAfterStoreTest.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.redundantfieldloadelimination.RedundantFinalStaticFieldLoadAfterStoreTest.A;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FieldSubject;
@@ -80,7 +79,7 @@
.streamInstructions()
.filter(InstructionSubject::isInstanceGet)
.map(InstructionSubject::getField)
- .filter(fieldSubject.getField().field::equals)
+ .filter(fieldSubject.getField().getReference()::equals)
.count();
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalStaticFieldLoadAfterStoreTest.java b/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalStaticFieldLoadAfterStoreTest.java
index 2b910f5..701c43f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalStaticFieldLoadAfterStoreTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/redundantfieldloadelimination/RedundantFinalStaticFieldLoadAfterStoreTest.java
@@ -77,7 +77,7 @@
.streamInstructions()
.filter(InstructionSubject::isStaticGet)
.map(InstructionSubject::getField)
- .filter(fieldSubject.getField().field::equals)
+ .filter(fieldSubject.getField().getReference()::equals)
.count();
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index 6e91c38..d268888 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -345,7 +345,7 @@
assertThat(clazz, isPresent());
return Streams.stream(clazz.getDexProgramClass().methods())
.filter(method -> !method.isStatic())
- .map(method -> method.method.toSourceString())
+ .map(method -> method.getReference().toSourceString())
.sorted()
.collect(Collectors.toList());
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
index b254b43..0125189 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
@@ -64,7 +64,7 @@
MethodSubject createStaticMethodSubject =
factoryClassSubject.uniqueMethodWithName("createStatic");
assertThat(createStaticMethodSubject, isPresent());
- assertEquals(1, createStaticMethodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(1, createStaticMethodSubject.getMethod().getReference().proto.parameters.size());
for (int i = 1; i <= 3; ++i) {
String createStaticWithUnusedMethodName = "createStaticWithUnused" + i;
@@ -72,7 +72,7 @@
factoryClassSubject.uniqueMethodWithName(createStaticWithUnusedMethodName);
assertThat(createStaticWithUnusedMethodSubject, isPresent());
- DexMethod method = createStaticWithUnusedMethodSubject.getMethod().method;
+ DexMethod method = createStaticWithUnusedMethodSubject.getMethod().getReference();
assertEquals(1, method.proto.parameters.size());
assertEquals("java.lang.String", method.proto.parameters.toString());
}
@@ -81,7 +81,7 @@
factoryClassSubject.uniqueMethodWithName("createStaticWithUnused4");
assertThat(createStaticWithUnusedMethodSubject, isPresent());
- DexMethod method = createStaticWithUnusedMethodSubject.getMethod().method;
+ DexMethod method = createStaticWithUnusedMethodSubject.getMethod().getReference();
assertEquals(3, method.proto.parameters.size());
assertEquals(
"java.lang.String java.lang.String java.lang.String", method.proto.parameters.toString());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
index 0de94c9..8dc29fb 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/PrivateInstanceMethodCollisionTest.java
@@ -81,7 +81,7 @@
assertEquals(2, aClassSubject.allMethods(FoundMethodSubject::isVirtual).size());
String name = null;
for (FoundMethodSubject m : aClassSubject.allMethods(FoundMethodSubject::isVirtual)) {
- assertEquals(1, m.getMethod().method.proto.parameters.size());
+ assertEquals(1, m.getMethod().getReference().proto.parameters.size());
if (name == null) {
name = m.getFinalName();
} else {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
index c6dfe83..2e3904a 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
@@ -95,7 +95,7 @@
// TODO(b/131735725): Should also remove arguments from the virtual methods.
if (keepUninstantiatedArguments || methodSubject.getOriginalName().contains("Virtual")) {
- assertEquals(3, methodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(3, methodSubject.getMethod().getReference().proto.parameters.size());
assertEquals(3, methodSubject.getMethod().parameterAnnotationsList.size());
for (int i = 0; i < 3; ++i) {
@@ -115,7 +115,7 @@
}
}
} else {
- assertEquals(2, methodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(2, methodSubject.getMethod().getReference().proto.parameters.size());
assertEquals(2, methodSubject.getMethod().parameterAnnotationsList.size());
for (int i = 0; i < 2; ++i) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/VoidReturnTypeRewritingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/VoidReturnTypeRewritingTest.java
index 0ac4efc..5e5345a 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/VoidReturnTypeRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/VoidReturnTypeRewritingTest.java
@@ -63,16 +63,16 @@
MethodSubject createStaticMethodSubject =
factoryClassSubject.uniqueMethodWithName("createStatic");
assertThat(createStaticMethodSubject, isPresent());
- assertTrue(createStaticMethodSubject.getMethod().method.proto.returnType.isVoidType());
+ assertTrue(createStaticMethodSubject.getMethod().getReference().proto.returnType.isVoidType());
MethodSubject createVirtualMethodSubject =
factoryClassSubject.uniqueMethodWithName("createVirtual");
assertThat(createVirtualMethodSubject, isPresent());
- assertTrue(createVirtualMethodSubject.getMethod().method.proto.returnType.isVoidType());
+ assertTrue(createVirtualMethodSubject.getMethod().getReference().proto.returnType.isVoidType());
createVirtualMethodSubject =
inspector.clazz(SubFactory.class).uniqueMethodWithName("createVirtual");
assertThat(createVirtualMethodSubject, isPresent());
- assertTrue(createVirtualMethodSubject.getMethod().method.proto.returnType.isVoidType());
+ assertTrue(createVirtualMethodSubject.getMethod().getReference().proto.returnType.isVoidType());
ClassSubject subSubFactoryClassSubject = inspector.clazz(SubSubFactory.class);
assertThat(subSubFactoryClassSubject.method("void", "createVirtual"), isPresent());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/CollisionWithLibraryMethodsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/CollisionWithLibraryMethodsTest.java
index 45d858d..14efc77 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/CollisionWithLibraryMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/CollisionWithLibraryMethodsTest.java
@@ -65,10 +65,10 @@
if (minification) {
assertEquals("a", methodSubject.getFinalName());
- assertEquals(0, methodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(0, methodSubject.getMethod().getReference().proto.parameters.size());
} else {
assertEquals("toString1", methodSubject.getFinalName());
- assertEquals(0, methodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(0, methodSubject.getMethod().getReference().proto.parameters.size());
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
index 073c3b4..b7ddd9e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
@@ -79,7 +79,7 @@
assertEquals(2, aClassSubject.allMethods(FoundMethodSubject::isVirtual).size());
String name = null;
for (FoundMethodSubject m : aClassSubject.allMethods(FoundMethodSubject::isVirtual)) {
- assertEquals(1, m.getMethod().method.proto.parameters.size());
+ assertEquals(1, m.getMethod().getReference().proto.parameters.size());
if (name == null) {
name = m.getFinalName();
} else {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAndUninstantiatedTypesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAndUninstantiatedTypesTest.java
index af6296b..138f0a9 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAndUninstantiatedTypesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAndUninstantiatedTypesTest.java
@@ -58,8 +58,8 @@
List<FoundMethodSubject> methods = i.clazz(Main.class).allMethods();
assertEquals(9, methods.size());
for (FoundMethodSubject method : methods) {
- if (!method.getMethod().method.name.toString().equals("main")) {
- assertEquals(0, method.getMethod().method.getArity());
+ if (!method.getMethod().getReference().name.toString().equals("main")) {
+ assertEquals(0, method.getMethod().getReference().getArity());
}
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
index bd1b805..955c5d4 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
@@ -91,7 +91,7 @@
assertThat(methodSubject, isPresent());
if (keepUnusedArguments) {
- assertEquals(3, methodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(3, methodSubject.getMethod().getReference().proto.parameters.size());
assertEquals(3, methodSubject.getMethod().parameterAnnotationsList.size());
for (int i = 0; i < 3; ++i) {
@@ -109,7 +109,7 @@
}
}
} else {
- assertEquals(2, methodSubject.getMethod().method.proto.parameters.size());
+ assertEquals(2, methodSubject.getMethod().getReference().proto.parameters.size());
assertEquals(2, methodSubject.getMethod().parameterAnnotationsList.size());
for (int i = 0; i < 2; ++i) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentRemovalWithOverridingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentRemovalWithOverridingTest.java
index 7456d35..281db3e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentRemovalWithOverridingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentRemovalWithOverridingTest.java
@@ -63,7 +63,8 @@
MethodSubject methodSubject = classSubject.uniqueMethodWithName("greeting");
assertThat(methodSubject, isPresent());
- assertEquals("java.lang.String", methodSubject.getMethod().method.proto.parameters.toString());
+ assertEquals(
+ "java.lang.String", methodSubject.getMethod().getReference().proto.parameters.toString());
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionTest.java
index 2c7fe55..1137a01 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionTest.java
@@ -85,7 +85,7 @@
MethodSubject methodB1Subject =
bClassSubject.allMethods().stream().filter(FoundMethodSubject::isStatic).findFirst().get();
assertThat(methodB1Subject, isPresent());
- assertEquals(0, methodB1Subject.getMethod().method.proto.parameters.size());
+ assertEquals(0, methodB1Subject.getMethod().getReference().proto.parameters.size());
// TODO(b/129933280): Determine if we should use member pool collection for unused argument
// removal for private and static methods.
@@ -97,7 +97,7 @@
MethodSubject methodB2Subject =
bClassSubject.allMethods().stream().filter(FoundMethodSubject::isVirtual).findFirst().get();
assertThat(methodB2Subject, isPresent());
- assertEquals(0, methodB2Subject.getMethod().method.proto.parameters.size());
+ assertEquals(0, methodB2Subject.getMethod().getReference().proto.parameters.size());
// Verify that the virtual method B.method2() does not collide with a method in A.
assertNotEquals(methodB2Subject.getFinalName(), methodA1Subject.getFinalName());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsInstanceConstructorTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsInstanceConstructorTest.java
index ea67170..c890e97 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsInstanceConstructorTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsInstanceConstructorTest.java
@@ -59,7 +59,7 @@
MethodSubject methodSubject = classSubject.uniqueMethodWithName("<init>");
assertThat(methodSubject, isPresent());
- assertTrue(methodSubject.getMethod().method.proto.parameters.isEmpty());
+ assertTrue(methodSubject.getMethod().getReference().proto.parameters.isEmpty());
assertThat(inspector.clazz(B.class), not(isPresent()));
assertThat(inspector.clazz(C.class), not(isPresent()));
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
index b76eaa0..872b5f0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -129,7 +129,7 @@
MethodSubject method = main.uniqueMethodWithName(methodName);
assertThat(method, isPresent());
- int arity = method.getMethod().method.getArity();
+ int arity = method.getMethod().getReference().getArity();
// One from the method's own argument, if any, and
// Two from Array utils, `contains` and `indexOf`, if inlined with access relaxation.
assertEquals(
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java
index 4db441f..19458e2 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java
@@ -52,7 +52,7 @@
MethodSubject invoke = classSubject.uniqueMethodWithName("invoke");
assertThat(invoke, isPresent());
- assertEquals(2, invoke.getMethod().method.proto.parameters.size());
+ assertEquals(2, invoke.getMethod().getReference().proto.parameters.size());
}
}));
}
@@ -68,7 +68,7 @@
if (classSubject.getOriginalDescriptor().contains("$js")) {
MethodSubject get = classSubject.uniqueMethodWithName("get");
assertThat(get, isPresent());
- assertEquals(3, get.getMethod().method.proto.parameters.size());
+ assertEquals(3, get.getMethod().getReference().proto.parameters.size());
}
}));
}
diff --git a/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java b/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
index ff61668..5c48866 100644
--- a/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
+++ b/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
@@ -91,13 +91,13 @@
assertNotNull(f2);
// TODO(b/72858955): due to the potential reflective access, they should have different names
// by R8's improved reflective access detection or via keep rules.
- assertEquals(overloadaggressively, f1.field.name == f2.field.name);
+ assertEquals(overloadaggressively, f1.getReference().name == f2.getReference().name);
DexEncodedField f3 = a.field(B.class.getCanonicalName(), "f3").getField();
assertNotNull(f3);
// TODO(b/72858955): ditto
- assertEquals(overloadaggressively, f1.field.name == f3.field.name);
+ assertEquals(overloadaggressively, f1.getReference().name == f3.getReference().name);
// TODO(b/72858955): ditto
- assertEquals(overloadaggressively, f2.field.name == f3.field.name);
+ assertEquals(overloadaggressively, f2.getReference().name == f3.getReference().name);
String main = FieldUpdater.class.getCanonicalName();
ProcessResult javaOutput = runOnJavaRaw(main, classes);
@@ -143,7 +143,7 @@
assertNotNull(f3);
// TODO(b/72858955): due to the potential reflective access, they should have different names
// by R8's improved reflective access detection or via keep rules.
- assertEquals(overloadaggressively, f1.field.name == f3.field.name);
+ assertEquals(overloadaggressively, f1.getReference().name == f3.getReference().name);
String main = FieldResolution.class.getCanonicalName();
ProcessResult javaOutput = runOnJavaRaw(main, classes);
@@ -188,14 +188,14 @@
DexEncodedMethod m2 =
b.method("java.lang.Object", "getF2", ImmutableList.of()).getMethod();
// TODO(b/72858955): due to the potential reflective access, they should have different names.
- assertEquals(overloadaggressively, m1.method.name == m2.method.name);
+ assertEquals(overloadaggressively, m1.getReference().name == m2.getReference().name);
DexEncodedMethod m3 =
b.method("java.lang.String", "getF3", ImmutableList.of()).getMethod();
assertNotNull(m3);
// TODO(b/72858955): ditto
- assertEquals(overloadaggressively, m1.method.name == m3.method.name);
+ assertEquals(overloadaggressively, m1.getReference().name == m3.getReference().name);
// TODO(b/72858955): ditto
- assertEquals(overloadaggressively, m2.method.name == m3.method.name);
+ assertEquals(overloadaggressively, m2.getReference().name == m3.getReference().name);
String main = MethodResolution.class.getCanonicalName();
ProcessResult javaOutput = runOnJavaRaw(main, classes);
diff --git a/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java b/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java
index 0556439..33bef6d 100644
--- a/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java
+++ b/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java
@@ -232,7 +232,7 @@
return Arrays.stream(method.getMethod().getCode().asDexCode().instructions)
.filter(instruction -> instruction instanceof IgetObject)
.map(instruction -> (IgetObject) instruction)
- .filter(get -> get.getField() == field.getField().field)
+ .filter(get -> get.getField() == field.getField().getReference())
.count();
}
@@ -268,23 +268,33 @@
MethodSubject msvOnB = classB.method("void", "msv", ImmutableList.of());
assertThat(msvOnB, isPresent());
// Field load of volatile fields are never eliminated.
- assertEquals(5, countIget(mvOnA.getMethod().getCode().asDexCode(), vOnA.getField().field));
- assertEquals(5, countSget(msvOnA.getMethod().getCode().asDexCode(), svOnA.getField().field));
- assertEquals(5, countIget(mvOnB.getMethod().getCode().asDexCode(), vOnA.getField().field));
- assertEquals(5, countSget(msvOnB.getMethod().getCode().asDexCode(), svOnA.getField().field));
+ assertEquals(
+ 5, countIget(mvOnA.getMethod().getCode().asDexCode(), vOnA.getField().getReference()));
+ assertEquals(
+ 5, countSget(msvOnA.getMethod().getCode().asDexCode(), svOnA.getField().getReference()));
+ assertEquals(
+ 5, countIget(mvOnB.getMethod().getCode().asDexCode(), vOnA.getField().getReference()));
+ assertEquals(
+ 5, countSget(msvOnB.getMethod().getCode().asDexCode(), svOnA.getField().getReference()));
// For fields on the same class both separate compilation (D8) and whole program
// compilation (R8) will eliminate field loads on non-volatile fields.
- assertEquals(1, countIget(mfOnA.getMethod().getCode().asDexCode(), fOnA.getField().field));
- assertEquals(1, countSget(msfOnA.getMethod().getCode().asDexCode(), sfOnA.getField().field));
assertEquals(
- 2, countIget(mfWithMonitorOnA.getMethod().getCode().asDexCode(), fOnA.getField().field));
+ 1, countIget(mfOnA.getMethod().getCode().asDexCode(), fOnA.getField().getReference()));
+ assertEquals(
+ 1, countSget(msfOnA.getMethod().getCode().asDexCode(), sfOnA.getField().getReference()));
+ assertEquals(
+ 2,
+ countIget(
+ mfWithMonitorOnA.getMethod().getCode().asDexCode(), fOnA.getField().getReference()));
// For fields on other class both separate compilation (D8) and whole program
// compilation (R8) will differ in the eliminated field loads of non-volatile fields.
- assertEquals(mfOnBGets,
- countIget(mfOnB.getMethod().getCode().asDexCode(), fOnA.getField().field));
- assertEquals(msfOnBGets,
- countSget(msfOnB.getMethod().getCode().asDexCode(), sfOnA.getField().field));
+ assertEquals(
+ mfOnBGets,
+ countIget(mfOnB.getMethod().getCode().asDexCode(), fOnA.getField().getReference()));
+ assertEquals(
+ msfOnBGets,
+ countSget(msfOnB.getMethod().getCode().asDexCode(), sfOnA.getField().getReference()));
}
@Test
@@ -320,12 +330,17 @@
for (FieldSubject field : new FieldSubject[]{years, months, days}) {
- assertEquals(1,
- countIget(totalDays.getMethod().getCode().asDexCode(), field.getField().field));
- assertEquals(2,
- countIget(totalDaysTimes2.getMethod().getCode().asDexCode(), field.getField().field));
- assertEquals(3,
- countIget(totalDaysTimes3.getMethod().getCode().asDexCode(), field.getField().field));
+ assertEquals(
+ 1,
+ countIget(totalDays.getMethod().getCode().asDexCode(), field.getField().getReference()));
+ assertEquals(
+ 2,
+ countIget(
+ totalDaysTimes2.getMethod().getCode().asDexCode(), field.getField().getReference()));
+ assertEquals(
+ 3,
+ countIget(
+ totalDaysTimes3.getMethod().getCode().asDexCode(), field.getField().getReference()));
}
}
diff --git a/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentInterfaceTest.java b/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentInterfaceTest.java
index c92f813..edc4c42 100644
--- a/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentInterfaceTest.java
@@ -132,7 +132,7 @@
ResolutionResult resolutionResult =
appInfo.resolveMethodOnInterface(methodOnBReference.holder, methodOnBReference);
DexEncodedMethod resolved = resolutionResult.getSingleTarget();
- assertEquals(methodOnBReference, resolved.method);
+ assertEquals(methodOnBReference, resolved.getReference());
assertFalse(resolutionResult.isVirtualTarget());
DexEncodedMethod singleVirtualTarget =
appInfo.lookupSingleVirtualTarget(methodOnBReference, methodOnB, false);
@@ -144,7 +144,7 @@
ResolutionResult resolutionResult =
appInfo.resolveMethodOnInterface(methodOnBReference.holder, methodOnBReference);
DexEncodedMethod resolved = resolutionResult.getSingleTarget();
- assertEquals(methodOnBReference, resolved.method);
+ assertEquals(methodOnBReference, resolved.getReference());
assertFalse(resolutionResult.isVirtualTarget());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentTest.java b/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentTest.java
index 2ffd43d..7843995 100644
--- a/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/VirtualOverrideOfStaticMethodWithVirtualParentTest.java
@@ -176,7 +176,7 @@
DexProgramClass bClass = appInfo.definitionForProgramType(methodOnB.holder);
ResolutionResult resolutionResult = appInfo.resolveMethodOnClass(methodOnB, methodOnB.holder);
DexEncodedMethod resolved = resolutionResult.getSingleTarget();
- assertEquals(methodOnA, resolved.method);
+ assertEquals(methodOnA, resolved.getReference());
assertFalse(resolutionResult.isVirtualTarget());
DexEncodedMethod singleVirtualTarget =
appInfo.lookupSingleVirtualTarget(methodOnB, bClass.getProgramDefaultInitializer(), false);
@@ -187,7 +187,7 @@
public void lookupVirtualTargets() {
ResolutionResult resolutionResult = appInfo.resolveMethodOnClass(methodOnB, methodOnB.holder);
DexEncodedMethod resolved = resolutionResult.getSingleTarget();
- assertEquals(methodOnA, resolved.method);
+ assertEquals(methodOnA, resolved.getReference());
assertFalse(resolutionResult.isVirtualTarget());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java b/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java
index c636ef9..e116329 100644
--- a/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/singletarget/InstantiatedLowerBoundTest.java
@@ -67,7 +67,7 @@
appInfo.lookupSingleVirtualTarget(fooA, mainMethod, false, t -> false, typeA, latticeB);
assertNotNull(singleTarget);
DexMethod fooB = buildNullaryVoidMethod(B.class, "foo", appInfo.dexItemFactory());
- assertEquals(fooB, singleTarget.method);
+ assertEquals(fooB, singleTarget.getReference());
}
@Test
@@ -94,7 +94,7 @@
appInfo.lookupSingleVirtualTarget(fooA, mainMethod, false, t -> false, typeA, latticeB);
assertNotNull(singleTarget);
DexMethod fooB = buildNullaryVoidMethod(B.class, "foo", appInfo.dexItemFactory());
- assertEquals(fooB, singleTarget.method);
+ assertEquals(fooB, singleTarget.getReference());
}
@Test
@@ -133,7 +133,7 @@
lookupResult
.asLookupResultSuccess()
.forEach(
- clazzAndMethod -> actual.add(clazzAndMethod.getDefinition().method),
+ clazzAndMethod -> actual.add(clazzAndMethod.getDefinition().getReference()),
lambdaTarget -> {
assert false;
});
diff --git a/src/test/java/com/android/tools/r8/resolution/singletarget/SuccessAndInvalidLookupTest.java b/src/test/java/com/android/tools/r8/resolution/singletarget/SuccessAndInvalidLookupTest.java
index a4b183c..85bd2ca 100644
--- a/src/test/java/com/android/tools/r8/resolution/singletarget/SuccessAndInvalidLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/singletarget/SuccessAndInvalidLookupTest.java
@@ -55,7 +55,7 @@
DexEncodedMethod singleTarget =
appInfo.lookupSingleVirtualTarget(fooA, mainMethod, false, t -> false, typeA, null);
assertNotNull(singleTarget);
- assertEquals(fooA, singleTarget.method);
+ assertEquals(fooA, singleTarget.getReference());
DexEncodedMethod invalidSingleTarget =
appInfo.lookupSingleVirtualTarget(fooA, mainMethod, true, t -> false, typeA, null);
assertNull(invalidSingleTarget);
@@ -82,7 +82,7 @@
DexEncodedMethod singleTarget =
appInfo.lookupSingleVirtualTarget(fooI, mainMethod, true, t -> false, typeA, null);
assertNotNull(singleTarget);
- assertEquals(fooA, singleTarget.method);
+ assertEquals(fooA, singleTarget.getReference());
DexEncodedMethod invalidSingleTarget =
appInfo.lookupSingleVirtualTarget(fooI, mainMethod, false, t -> false, typeA, null);
assertNull(invalidSingleTarget);
diff --git a/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java b/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java
index ddaf47f..aa2df28 100644
--- a/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/AsterisksTest.java
@@ -99,9 +99,9 @@
DexClass clazz = classSubject.getDexProgramClass();
assertEquals(3, clazz.getMethodCollection().numberOfVirtualMethods());
for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
- assertTrue(encodedMethod.method.name.toString().startsWith("foo"));
+ assertTrue(encodedMethod.getReference().name.toString().startsWith("foo"));
MethodSubject methodSubject =
- classSubject.method(MethodSignature.fromDexMethod(encodedMethod.method));
+ classSubject.method(MethodSignature.fromDexMethod(encodedMethod.getReference()));
assertThat(methodSubject, isPresentAndNotRenamed());
}
}
@@ -135,9 +135,9 @@
DexClass clazz = classSubject.getDexProgramClass();
assertEquals(3, clazz.getMethodCollection().numberOfVirtualMethods());
for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
- assertTrue(encodedMethod.method.name.toString().startsWith("foo"));
+ assertTrue(encodedMethod.getReference().name.toString().startsWith("foo"));
MethodSubject methodSubject =
- classSubject.method(MethodSignature.fromDexMethod(encodedMethod.method));
+ classSubject.method(MethodSignature.fromDexMethod(encodedMethod.getReference()));
assertThat(methodSubject, isPresentAndNotRenamed());
}
}
@@ -155,9 +155,9 @@
DexClass clazz = classSubject.getDexProgramClass();
assertEquals(3, clazz.getMethodCollection().numberOfVirtualMethods());
for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
- assertTrue(encodedMethod.method.name.toString().startsWith("foo"));
+ assertTrue(encodedMethod.getReference().name.toString().startsWith("foo"));
MethodSubject methodSubject =
- classSubject.method(MethodSignature.fromDexMethod(encodedMethod.method));
+ classSubject.method(MethodSignature.fromDexMethod(encodedMethod.getReference()));
assertThat(methodSubject, isPresentAndNotRenamed());
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/FieldReadsJasminTest.java b/src/test/java/com/android/tools/r8/shaking/FieldReadsJasminTest.java
index 3f27bc6..c3e53cf 100644
--- a/src/test/java/com/android/tools/r8/shaking/FieldReadsJasminTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/FieldReadsJasminTest.java
@@ -254,7 +254,9 @@
.filter(InstructionSubject::isStaticGet)
.anyMatch(
instruction ->
- instruction.getField().equals(clinitFieldSubject.getField().field)));
+ instruction
+ .getField()
+ .equals(clinitFieldSubject.getField().getReference())));
});
}
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInInterfaceMarkingTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInInterfaceMarkingTest.java
index 437cdd2..42268b2 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInInterfaceMarkingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInInterfaceMarkingTest.java
@@ -58,7 +58,7 @@
AppInfoWithLiveness appInfo, DexType type) {
DexProgramClass clazz = appInfo.definitionFor(type).asProgramClass();
DexEncodedMethod method =
- clazz.lookupVirtualMethod(m -> m.method.name.toString().equals("isEmpty"));
+ clazz.lookupVirtualMethod(m -> m.getReference().name.toString().equals("isEmpty"));
assertTrue(method.isLibraryMethodOverride().isTrue());
}
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
index 331eb12..563a312 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
@@ -61,7 +61,7 @@
AppInfoWithLiveness appInfo, DexType type) {
DexProgramClass clazz = appInfo.definitionFor(type).asProgramClass();
DexEncodedMethod method =
- clazz.lookupVirtualMethod(m -> m.method.name.toString().equals("iterator"));
+ clazz.lookupVirtualMethod(m -> m.getReference().name.toString().equals("iterator"));
// TODO(b/149976493): Mark library overrides from lambda instances.
if (parameters.isCfRuntime()) {
assertTrue(method.isLibraryMethodOverride().isFalse());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
index 7111f51..34da969 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
@@ -74,13 +74,13 @@
}
private static void checkFieldInDictionary(FieldSubject field) {
- if (!names.contains(field.getField().field.name.toSourceString())) {
+ if (!names.contains(field.getField().getReference().name.toSourceString())) {
throw new AssertionError();
}
}
private static void checkMethodInDictionary(MethodSubject method) {
- String name = method.getMethod().method.name.toSourceString();
+ String name = method.getMethod().getReference().name.toSourceString();
if (!names.contains(name) && !name.equals("<init>") && !name.equals("main")) {
throw new AssertionError();
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/applymapping/IfRuleWithApplyMappingTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/applymapping/IfRuleWithApplyMappingTest.java
index 311d6a6..e841ffc 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/applymapping/IfRuleWithApplyMappingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/applymapping/IfRuleWithApplyMappingTest.java
@@ -65,7 +65,8 @@
inspector.clazz(IfRuleWithApplyMappingTestClass.class).uniqueMethodWithName("method");
assertThat(methodSubject, isPresent());
assertEquals(
- A.class.getTypeName(), methodSubject.getMethod().method.proto.parameters.toSourceString());
+ A.class.getTypeName(),
+ methodSubject.getMethod().getReference().proto.parameters.toSourceString());
}
}
diff --git a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
index e5a8027..b9a9dc8 100644
--- a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
+++ b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
@@ -55,10 +55,12 @@
assertEquals(1, getNumberOfProgramClasses(processdApplication));
CodeInspector inspector = new CodeInspector(processdApplication);
ClassSubject clazz = inspector.clazz(DEFAULT_CLASS_NAME);
- clazz.forAllMethods(method -> {
- int index = Integer.parseInt(method.getMethod().method.name.toString().substring(1));
- checkers.get(index).accept(method.getMethod(), values.get(index));
- });
+ clazz.forAllMethods(
+ method -> {
+ int index =
+ Integer.parseInt(method.getMethod().getReference().name.toString().substring(1));
+ checkers.get(index).accept(method.getMethod(), values.get(index));
+ });
}
}
diff --git a/src/test/java/com/android/tools/r8/smali/OutlineTest.java b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
index a7b67bf..9324b87 100644
--- a/src/test/java/com/android/tools/r8/smali/OutlineTest.java
+++ b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
@@ -870,7 +870,7 @@
List<DexType> r = new ArrayList<>();
for (DexEncodedMethod directMethod : outlineMethods) {
if (directMethod.getCode().asDexCode().instructions[0] instanceof InvokeVirtual) {
- r.add(directMethod.method.proto.returnType);
+ r.add(directMethod.getReference().proto.returnType);
}
}
assertEquals(2, r.size());
diff --git a/src/test/java/com/android/tools/r8/utils/AppComparator.java b/src/test/java/com/android/tools/r8/utils/AppComparator.java
index 3436b9a..9dcec97 100644
--- a/src/test/java/com/android/tools/r8/utils/AppComparator.java
+++ b/src/test/java/com/android/tools/r8/utils/AppComparator.java
@@ -60,10 +60,11 @@
CodeInspector inspect2 = new CodeInspector(app2, Paths.get(MAP_2));
// Define your own tester to pick methods to inspect.
- Predicate<DexEncodedMethod> methodTester = encodedMethod -> {
- return encodedMethod.method.name.toString().equals("run")
- && encodedMethod.method.getArity() == 0;
- };
+ Predicate<DexEncodedMethod> methodTester =
+ encodedMethod -> {
+ return encodedMethod.getReference().name.toString().equals("run")
+ && encodedMethod.getReference().getArity() == 0;
+ };
inspect1.forAllClasses(clazz1 -> {
clazz1.forAllMethods(method1 -> {
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
index 7059ae1..2b57e91 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
@@ -19,7 +19,7 @@
if (!targetSubject.isPresent()) {
throw new IllegalArgumentException();
}
- DexField target = targetSubject.getField().field;
+ DexField target = targetSubject.getField().getReference();
return new TypeSafeMatcher<MethodSubject>() {
@Override
protected boolean matchesSafely(MethodSubject subject) {
@@ -79,7 +79,7 @@
if (!targetSubject.isPresent()) {
throw new IllegalArgumentException();
}
- DexMethod target = targetSubject.getMethod().method;
+ DexMethod target = targetSubject.getMethod().getReference();
return new TypeSafeMatcher<MethodSubject>() {
@Override
protected boolean matchesSafely(MethodSubject subject) {
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
index ef44c64..aae1912 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
@@ -15,7 +15,7 @@
public abstract DexEncodedField getField();
public DexField getDexField() {
- return getField().field;
+ return getField().getReference();
}
public abstract DexValue getStaticValue();
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
index ed04f35..be358de 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
@@ -121,7 +121,7 @@
private DexEncodedMethod findMethod(Iterable<DexEncodedMethod> methods, DexMethod dexMethod) {
for (DexEncodedMethod method : methods) {
- if (method.method.equals(dexMethod)) {
+ if (method.getReference().equals(dexMethod)) {
return method;
}
}
@@ -320,7 +320,7 @@
private DexEncodedField findField(List<DexEncodedField> fields, DexField dexField) {
for (DexEncodedField field : fields) {
- if (field.field.equals(dexField)) {
+ if (field.getReference().equals(dexField)) {
return field;
}
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
index b071916..023f412 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
@@ -43,7 +43,7 @@
}
public TypeSubject type() {
- return new TypeSubject(codeInspector, dexField.field.type);
+ return new TypeSubject(codeInspector, dexField.getReference().type);
}
@Override
@@ -79,7 +79,7 @@
@Override
public FieldSignature getFinalSignature() {
- return FieldSignature.fromDexField(dexField.field);
+ return FieldSignature.fromDexField(dexField.getReference());
}
@Override
@@ -123,7 +123,9 @@
@Override
public String getJvmFieldSignatureAsString() {
- return dexField.field.name.toString() + ":" + dexField.field.type.toDescriptorString();
+ return dexField.getReference().name.toString()
+ + ":"
+ + dexField.getReference().type.toDescriptorString();
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
index a3f6892..0eb0de1 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
@@ -155,7 +155,7 @@
@Override
public MethodSignature getFinalSignature() {
- return MethodSignature.fromDexMethod(dexMethod.method);
+ return MethodSignature.fromDexMethod(dexMethod.getReference());
}
@Override
@@ -273,7 +273,7 @@
}
Object2IntMap<InstructionSubject> lineNumberTable = new Object2IntOpenHashMap<>();
DexDebugPositionState state =
- new DexDebugPositionState(debugInfo.startLine, getMethod().method);
+ new DexDebugPositionState(debugInfo.startLine, getMethod().getReference());
Iterator<DexDebugEvent> iterator = Arrays.asList(debugInfo.events).iterator();
for (Instruction insn : code.instructions) {
int offset = insn.getOffset();
@@ -337,7 +337,7 @@
}
public MethodReference asMethodReference() {
- DexMethod method = dexMethod.method;
+ DexMethod method = dexMethod.getReference();
return Reference.method(
Reference.classFromDescriptor(method.holder.toDescriptorString()),
method.name.toString(),
@@ -349,15 +349,15 @@
@Override
public String getJvmMethodSignatureAsString() {
- return dexMethod.method.name.toString()
+ return dexMethod.getName().toString()
+ "("
+ StringUtils.join(
"",
- Arrays.stream(dexMethod.method.proto.parameters.values)
+ Arrays.stream(dexMethod.getParameters().values)
.map(DexType::toDescriptorString)
.collect(Collectors.toList()))
+ ")"
- + dexMethod.method.proto.returnType.toDescriptorString();
+ + dexMethod.returnType().toDescriptorString();
}
@Override