Use getters to access holder of DexEncodedField and DexEncodedMethod
Change-Id: I3ca6acdb6658e1d83619994a1ab69d4768f2e304
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index a6d704b..bf55656 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -132,7 +132,7 @@
List<DexEncodedMethod> directMethods = new ArrayList<>();
List<DexEncodedMethod> virtualMethods = new ArrayList<>();
for (DexEncodedMethod method : methods) {
- assert method.method.holder == clazz.type;
+ assert method.holder() == clazz.type;
CfCode code = null;
if (!method.accessFlags.isAbstract() /*&& !method.accessFlags.isNative()*/) {
code = buildEmptyThrowingCfCode(method.method);
diff --git a/src/main/java/com/android/tools/r8/PrintUses.java b/src/main/java/com/android/tools/r8/PrintUses.java
index 4b310aa..51b6ed7 100644
--- a/src/main/java/com/android/tools/r8/PrintUses.java
+++ b/src/main/java/com/android/tools/r8/PrintUses.java
@@ -203,7 +203,7 @@
isStatic
? appInfo.lookupStaticTarget(field.holder, field)
: appInfo.lookupInstanceTarget(field.holder, field);
- if (baseField != null && baseField.field.holder != field.holder) {
+ if (baseField != null && baseField.holder() != field.holder) {
field = baseField.field;
}
addType(field.holder);
@@ -214,7 +214,7 @@
noObfuscationTypes.add(field.holder);
}
if (baseField.accessFlags.isVisibilityDependingOnPackage()) {
- keepPackageNames.add(baseField.field.holder.getPackageName());
+ keepPackageNames.add(baseField.holder().getPackageName());
}
typeFields.add(field);
}
@@ -234,7 +234,7 @@
noObfuscationTypes.add(method.holder);
}
if (encodedMethod.accessFlags.isVisibilityDependingOnPackage()) {
- keepPackageNames.add(encodedMethod.method.holder.getPackageName());
+ keepPackageNames.add(encodedMethod.holder().getPackageName());
}
typeMethods.add(method);
}
@@ -247,7 +247,7 @@
private void registerMethod(DexEncodedMethod method) {
DexEncodedMethod superTarget =
appInfo
- .resolveMethod(method.method.holder, method.method)
+ .resolveMethod(method.holder(), method.method)
.lookupInvokeSpecialTarget(context, appInfo);
if (superTarget != null) {
addMethod(superTarget.method);
@@ -477,7 +477,7 @@
if (encodedMethod.accessFlags.isStatic()) {
append("<clinit>");
} else {
- String holderName = encodedMethod.method.holder.toSourceString();
+ String holderName = encodedMethod.holder().toSourceString();
String constructorName = holderName.substring(holderName.lastIndexOf('.') + 1);
append(constructorName);
}
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 5b4d9f2..93973c3 100644
--- a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
+++ b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
@@ -238,8 +238,8 @@
if (argumentIndex < 0) {
argumentType =
code.method.isInstanceInitializer()
- ? new ThisInstanceInfo(instruction.asArgument(), code.method.method.holder)
- : createInitializedType(code.method.method.holder);
+ ? new ThisInstanceInfo(instruction.asArgument(), code.method.holder())
+ : createInitializedType(code.method.holder());
} else {
argumentType =
createInitializedType(code.method.method.proto.parameters.values[argumentIndex]);
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 a7c3ec0..bd4c6da 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -351,10 +351,10 @@
String originalClassName;
if (proguardMap != null) {
signature = proguardMap.originalSignatureOf(method.method);
- originalClassName = proguardMap.originalNameOf(method.method.holder);
+ originalClassName = proguardMap.originalNameOf(method.holder());
} else {
signature = MethodSignature.fromDexMethod(method.method);
- originalClassName = method.method.holder.toSourceString();
+ originalClassName = method.holder().toSourceString();
}
codeToSignatureMap.put(code, originalClassName + signature);
}
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 0c4267c..897763a 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -400,7 +400,7 @@
@Override
public void registerCodeReferences(DexEncodedMethod method, UseRegistry registry) {
for (CfInstruction instruction : instructions) {
- instruction.registerUse(registry, method.method.holder);
+ instruction.registerUse(registry, method.holder());
}
for (CfTryCatch tryCatch : tryCatchRanges) {
for (DexType guard : tryCatch.guards) {
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 85810ed..9dd0398 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -332,7 +332,7 @@
}
private boolean verifyCorrectnessOfFieldHolder(DexEncodedField field) {
- assert field.field.holder == type
+ assert field.holder() == type
: "Expected field `"
+ field.field.toSourceString()
+ "` to have holder `"
@@ -435,8 +435,7 @@
}
private boolean isSignaturePolymorphicMethod(DexEncodedMethod method, DexItemFactory factory) {
- assert method.method.holder == factory.methodHandleType
- || method.method.holder == factory.varHandleType;
+ assert method.holder() == factory.methodHandleType || method.holder() == factory.varHandleType;
return method.accessFlags.isVarargs()
&& method.accessFlags.isNative()
&& method.method.proto.parameters.size() == 1
diff --git a/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java b/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java
index 37f8853..6c05f12 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java
@@ -12,7 +12,7 @@
private final DexEncodedMethod method;
DexClassAndMethod(DexClass holder, DexEncodedMethod method) {
- assert holder.type == method.method.holder;
+ assert holder.type == method.holder();
this.holder = holder;
this.method = 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 49611c6..e73c267 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
@@ -73,7 +73,7 @@
int argumentRegister = code.registerSize - code.incomingRegisterSize;
if (!method.accessFlags.isStatic()) {
DexString name = factory.thisName;
- DexType type = method.method.holder;
+ DexType type = method.holder();
startArgument(argumentRegister, name, type);
argumentRegister += ValueType.fromDexType(type).requiredRegisters();
}
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 10427a3..44526ed 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -206,7 +206,7 @@
&& singleValue.asSingleFieldValue().getField() == field) {
return null;
}
- if (singleValue.isMaterializableInContext(appView, code.method.method.holder)) {
+ if (singleValue.isMaterializableInContext(appView, code.method.holder())) {
TypeElement type = TypeElement.fromDexType(field.type, maybeNull(), appView);
return singleValue.createMaterializingInstruction(
appView, code, TypeAndLocalInfoSupplier.create(type, local));
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 01b0e84..bb1ee15 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -450,7 +450,7 @@
WhyAreYouNotInliningReporter whyAreYouNotInliningReporter) {
checkIfObsolete();
return isInliningCandidate(
- container.method.holder, inliningReason, appInfo, whyAreYouNotInliningReporter);
+ container.holder(), inliningReason, appInfo, whyAreYouNotInliningReporter);
}
public boolean isInliningCandidate(
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignature.java b/src/main/java/com/android/tools/r8/graph/GenericSignature.java
index 049cb7a..91ba7b7 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignature.java
@@ -518,7 +518,7 @@
public static FieldTypeSignature toFieldTypeSignature(
DexEncodedField field, AppView<AppInfoWithLiveness> appView) {
- DexClass currentClassContext = appView.definitionFor(field.field.holder);
+ DexClass currentClassContext = appView.definitionFor(field.holder());
DexDefinitionSignature<?> signature =
toGenericSignature(currentClassContext, field, appView);
if (signature != null) {
@@ -530,7 +530,7 @@
public static MethodTypeSignature toMethodTypeSignature(
DexEncodedMethod method, AppView<AppInfoWithLiveness> appView) {
- DexClass currentClassContext = appView.definitionFor(method.method.holder);
+ DexClass currentClassContext = appView.definitionFor(method.holder());
DexDefinitionSignature<?> signature =
toGenericSignature(currentClassContext, method, appView);
if (signature != null) {
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 269b36b..6fecde6 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
@@ -228,7 +228,7 @@
}
private boolean verifyCorrectnessOfMethodHolder(DexEncodedMethod method) {
- assert method.method.holder == holder.type
+ assert method.holder() == holder.type
: "Expected method `"
+ method.method.toSourceString()
+ "` to have holder `"
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 e8cae8d..e123de4 100644
--- a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
@@ -119,12 +119,12 @@
assert initialResolutionHolder != null;
assert resolvedHolder != null;
assert resolvedMethod != null;
- assert resolvedHolder.type == resolvedMethod.method.holder;
+ assert resolvedHolder.type == resolvedMethod.holder();
this.resolvedHolder = resolvedHolder;
this.resolvedMethod = resolvedMethod;
this.initialResolutionHolder = initialResolutionHolder;
assert !resolvedMethod.isPrivateMethod()
- || initialResolutionHolder.type == resolvedMethod.method.holder;
+ || initialResolutionHolder.type == resolvedMethod.holder();
}
public DexClass getResolvedHolder() {
@@ -324,7 +324,7 @@
// It appears as if this check is also in place for non-initializer methods too.
// See NestInvokeSpecialMethodAccessWithIntermediateTest.
if ((target.isInstanceInitializer() || target.isPrivateMethod())
- && target.method.holder != symbolicReference.type) {
+ && target.holder() != symbolicReference.type) {
return null;
}
// Runtime exceptions:
@@ -567,7 +567,7 @@
}
if (candidate == null || candidate == DexEncodedMethod.SENTINEL) {
// We cannot find a target above the resolved method.
- if (current.type == overrideTarget.method.holder) {
+ if (current.type == overrideTarget.holder()) {
return null;
}
current = current.superType == null ? null : appInfo.definitionFor(current.superType);
@@ -646,7 +646,7 @@
}
// For package private methods, a valid override has to be inside the package.
assert resolvedMethod.accessFlags.isPackagePrivate();
- return resolvedMethod.method.holder.isSamePackage(candidate.method.holder);
+ return resolvedMethod.holder().isSamePackage(candidate.holder());
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
index fdb4dc1..061cbcf 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
@@ -127,7 +127,7 @@
}
private boolean hasKotlincClinitAssertionCode(DexEncodedMethod method) {
- if (method.method.holder == dexItemFactory.kotlin.kotlinAssertions) {
+ if (method.holder() == dexItemFactory.kotlin.kotlinAssertions) {
CfCode code = method.getCode().asCfCode();
for (int i = 1; i < code.instructions.size(); i++) {
CfInstruction instruction = code.instructions.get(i - 1);
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java
index f32143d..7ecd527 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/InitializedClassesInInstanceMethodsAnalysis.java
@@ -74,7 +74,7 @@
// Record that the enclosing class is guaranteed to be initialized at the allocation site.
AppInfoWithSubtyping appInfo = appView.appInfo();
- DexType guaranteedToBeInitialized = context.method.holder;
+ DexType guaranteedToBeInitialized = context.holder();
DexType existingGuaranteedToBeInitialized =
mapping.getOrDefault(key, guaranteedToBeInitialized);
mapping.put(
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
index 7167e72..94ee9cf 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
@@ -97,7 +97,7 @@
}
public boolean isClassDefinitelyLoadedBeforeInstruction(DexType type, Instruction instruction) {
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
BasicBlock block = instruction.getBlock();
// Visit the instructions in `block` prior to `instruction`.
@@ -335,7 +335,7 @@
if (!resolutionResult.isSingleResolution()) {
return false;
}
- DexType holder = resolutionResult.getSingleTarget().method.holder;
+ DexType holder = resolutionResult.getSingleTarget().holder();
return appView.isSubtype(holder, type).isTrue();
}
@@ -394,7 +394,7 @@
if (!resolutionResult.isSingleResolution()) {
return false;
}
- DexType holder = resolutionResult.getSingleTarget().method.holder;
+ DexType holder = resolutionResult.getSingleTarget().holder();
return appView.isSubtype(holder, type).isTrue();
}
@@ -430,7 +430,7 @@
if (!resolutionResult.isSingleResolution()) {
return false;
}
- DexType holder = resolutionResult.getSingleTarget().method.holder;
+ DexType holder = resolutionResult.getSingleTarget().holder();
return appView.isSubtype(holder, type).isTrue();
}
@@ -505,11 +505,11 @@
enqueue(clazz.type, visited, worklist);
} else if (definition.isDexEncodedField()) {
DexEncodedField field = definition.asDexEncodedField();
- enqueue(field.field.holder, visited, worklist);
+ enqueue(field.holder(), visited, worklist);
} else if (definition.isDexEncodedMethod()) {
assert instruction.isInvokeMethod();
DexEncodedMethod method = definition.asDexEncodedMethod();
- enqueue(method.method.holder, visited, worklist);
+ enqueue(method.holder(), visited, worklist);
enqueueInitializedClassesOnNormalExit(method, instruction.inValues(), visited, worklist);
} else {
assert false;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/DeterminismAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/DeterminismAnalysis.java
index 0fc8bd0..9ae6c86 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/DeterminismAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/DeterminismAnalysis.java
@@ -37,7 +37,7 @@
}
if (instr.isInvokeMethod()) {
DexEncodedMethod target =
- instr.asInvokeMethod().lookupSingleTarget(appView, code.method.method.holder);
+ instr.asInvokeMethod().lookupSingleTarget(appView, code.method.holder());
if (target != null && target.getOptimizationInfo().returnValueOnlyDependsOnArguments()) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java
index f5cd48d..406c9e6 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java
@@ -36,7 +36,7 @@
public static Set<DexType> computeInitializedClassesOnNormalExit(
AppView<AppInfoWithLiveness> appView, IRCode code) {
DominatorTree dominatorTree = new DominatorTree(code, Assumption.MAY_HAVE_UNREACHABLE_BLOCKS);
- Visitor visitor = new Visitor(appView, code.method.method.holder);
+ Visitor visitor = new Visitor(appView, code.method.holder());
for (BasicBlock dominator : dominatorTree.normalExitDominatorBlocks()) {
if (dominator.hasCatchHandlers()) {
// When determining which classes that are guaranteed to be initialized from a given
@@ -115,8 +115,8 @@
public Void handleFieldInstruction(FieldInstruction instruction) {
DexEncodedField field = appView.appInfo().resolveField(instruction.getField());
if (field != null) {
- if (field.field.holder.isClassType()) {
- markInitializedOnNormalExit(field.field.holder);
+ if (field.holder().isClassType()) {
+ markInitializedOnNormalExit(field.holder());
} else {
assert false : "Expected holder of field type to be a class type";
}
@@ -132,7 +132,7 @@
if (method.holder.isClassType()) {
DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, context);
if (singleTarget != null) {
- markInitializedOnNormalExit(singleTarget.method.holder);
+ markInitializedOnNormalExit(singleTarget.holder());
markInitializedOnNormalExit(
singleTarget.getOptimizationInfo().getInitializedClassesOnNormalExit());
} else {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
index 9fcee4a..05416df 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
@@ -84,7 +84,7 @@
public ValueMayDependOnEnvironmentAnalysis(AppView<?> appView, IRCode code) {
this.appView = appView;
this.code = code;
- this.context = code.method.method.holder;
+ this.context = code.method.holder();
}
public boolean valueMayDependOnEnvironment(Value value) {
@@ -433,7 +433,7 @@
if (definition.isStaticGet()) {
StaticGet staticGet = definition.asStaticGet();
DexEncodedField field = appView.appInfo().resolveField(staticGet.getField());
- if (field != null && field.field.holder == context) {
+ if (field != null && field.holder() == context) {
List<StaticPut> finalFieldPuts = computeFinalFieldPuts().get(field);
if (finalFieldPuts == null || finalFieldPuts.size() != 1) {
return false;
@@ -452,7 +452,7 @@
finalFieldPuts = new IdentityHashMap<>();
for (StaticPut staticPut : code.<StaticPut>instructions(Instruction::isStaticPut)) {
DexEncodedField field = appView.appInfo().resolveField(staticPut.getField());
- if (field != null && field.field.holder == context && field.isFinal()) {
+ if (field != null && field.holder() == context && field.isFinal()) {
finalFieldPuts.computeIfAbsent(field, ignore -> new ArrayList<>()).add(staticPut);
}
}
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 d5bd10a..75d5423 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
@@ -148,7 +148,7 @@
return;
}
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, context.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, context.holder());
if (singleTarget == null) {
// We just lost track.
abstractInstanceFieldValues.remove(clazz);
@@ -173,7 +173,7 @@
initializationInfo.asArgumentInitializationInfo();
Value argument = invoke.arguments().get(argumentInitializationInfo.getArgumentIndex());
AbstractValue abstractValue =
- entry.getValue().join(argument.getAbstractValue(appView, context.method.holder));
+ entry.getValue().join(argument.getAbstractValue(appView, context.holder()));
assert !abstractValue.isBottom();
if (!abstractValue.isUnknown()) {
entry.setValue(abstractValue);
@@ -294,7 +294,7 @@
if (abstractValue.isUnknown()) {
return true;
}
- assert abstractValue == value.getAbstractValue(appView, context.method.holder);
+ assert abstractValue == value.getAbstractValue(appView, context.holder());
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
index af990b1..08989c0 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/FieldValueAnalysis.java
@@ -49,7 +49,7 @@
DexProgramClass clazz,
DexEncodedMethod method) {
assert clazz != null;
- assert clazz.type == method.method.holder;
+ assert clazz.type == method.holder();
this.appView = appView;
this.clazz = clazz;
this.code = code;
@@ -129,7 +129,7 @@
// Then check if any of the instructions that precede the given instruction in the current block
// may read the field.
- DexType context = method.method.holder;
+ DexType context = method.holder();
InstructionIterator instructionIterator = block.iterator();
while (instructionIterator.hasNext()) {
Instruction current = instructionIterator.next();
@@ -164,7 +164,7 @@
* and its transitive predecessors.
*/
private Map<BasicBlock, AbstractFieldSet> createFieldsMaybeReadBeforeBlockInclusive() {
- DexType context = method.method.holder;
+ DexType context = method.holder();
Map<BasicBlock, AbstractFieldSet> result = new IdentityHashMap<>();
Deque<BasicBlock> worklist = DequeUtils.newArrayDeque(code.entryBlock());
while (!worklist.isEmpty()) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
index 3aec803..58b4194 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
@@ -86,7 +86,7 @@
assert appView.enableWholeProgramOptimizations();
assert method.isInstanceInitializer();
- DexProgramClass clazz = appView.definitionFor(method.method.holder).asProgramClass();
+ DexProgramClass clazz = appView.definitionFor(method.holder()).asProgramClass();
if (!appView.options().enableValuePropagationForInstanceFields) {
return EmptyInstanceFieldInitializationInfoCollection.getInstance();
}
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 4d57a5e..e2ab677 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
@@ -53,7 +53,7 @@
assert appView.enableWholeProgramOptimizations();
assert method.isClassInitializer();
timing.begin("Analyze class initializer");
- DexProgramClass clazz = appView.definitionFor(method.method.holder).asProgramClass();
+ DexProgramClass clazz = appView.definitionFor(method.holder()).asProgramClass();
new StaticFieldValueAnalysis(appView.withLiveness(), code, feedback, clazz, method)
.computeFieldOptimizationInfo(classInitializerDefaultsResult);
timing.end();
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 2a70440..08b29ce 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
@@ -130,7 +130,7 @@
*/
public void rewriteCode(DexEncodedMethod method, IRCode code) {
if (method.isClassInitializer()
- && classesWithRemovedExtensionFields.contains(method.method.holder)
+ && classesWithRemovedExtensionFields.contains(method.holder())
&& code.metadata().mayHaveStaticPut()) {
rewriteClassInitializer(code);
}
@@ -204,7 +204,7 @@
return false;
}
- DexClass clazz = appView.definitionFor(encodedField.field.holder);
+ DexClass clazz = appView.definitionFor(encodedField.holder());
if (clazz == null || !clazz.isProgramClass()) {
return false;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
index 390f2b2..b2d813a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
@@ -99,7 +99,7 @@
* newMessageInfo is still pending.
*/
private void rewriteDynamicMethod(DexEncodedMethod method, IRCode code) {
- DexClass context = appView.definitionFor(method.method.holder);
+ DexClass context = appView.definitionFor(method.holder());
if (context == null || !context.isProgramClass()) {
return;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java
index de37f38..1321984 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java
@@ -36,7 +36,7 @@
@Override
public Reason computeInliningReason(
InvokeMethod invoke, DexEncodedMethod target, DexEncodedMethod context) {
- DexProgramClass enclosingClass = appView.definitionFor(context.method.holder).asProgramClass();
+ DexProgramClass enclosingClass = appView.definitionFor(context.holder()).asProgramClass();
if (references.isAbstractGeneratedMessageLiteBuilder(enclosingClass)
&& invoke.isInvokeSuper()) {
// Aggressively inline invoke-super calls inside the GeneratedMessageLite builders. Such
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
index e414f23..d6d2990 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
@@ -135,7 +135,7 @@
return;
}
- DexType holder = encodedMethod.method.holder;
+ DexType holder = encodedMethod.holder();
if (seenButNotLiveProtos.containsKey(holder)) {
// The proto is now live instead of dead.
liveProtos.put(holder, seenButNotLiveProtos.remove(holder));
@@ -150,7 +150,7 @@
private void createProtoMessageInfoFromDynamicMethod(
DexEncodedMethod dynamicMethod, Map<DexType, ProtoMessageInfo> protos) {
- DexType holder = dynamicMethod.method.holder;
+ DexType holder = dynamicMethod.holder();
assert !protos.containsKey(holder);
DexClass context = appView.definitionFor(holder);
@@ -254,7 +254,7 @@
for (DexEncodedMethod findLiteExtensionByNumberMethod : findLiteExtensionByNumberMethods) {
IRCode code =
findLiteExtensionByNumberMethod.buildIR(
- appView, appView.appInfo().originFor(findLiteExtensionByNumberMethod.method.holder));
+ appView, appView.appInfo().originFor(findLiteExtensionByNumberMethod.holder()));
for (BasicBlock block : code.blocks(BasicBlock::isReturnBlock)) {
Value returnValue = block.exit().asReturn().returnValue().getAliasedValue();
if (returnValue.isPhi()) {
@@ -275,7 +275,7 @@
continue;
}
- DexProgramClass holder = asProgramClassOrNull(appView.definitionFor(field.field.holder));
+ DexProgramClass holder = asProgramClassOrNull(appView.definitionFor(field.holder()));
if (holder == null) {
assert false;
continue;
@@ -365,7 +365,7 @@
}
DexEncodedMethod dynamicMethod = protoMessageInfo.getDynamicMethod();
- DexProgramClass clazz = appView.definitionFor(dynamicMethod.method.holder).asProgramClass();
+ DexProgramClass clazz = appView.definitionFor(dynamicMethod.holder()).asProgramClass();
for (ProtoFieldInfo protoFieldInfo : protoMessageInfo.getFields()) {
DexEncodedField valueStorage = protoFieldInfo.getValueStorage(appView, protoMessageInfo);
@@ -526,7 +526,7 @@
return;
}
- DexClass clazz = appView.definitionFor(encodedOneOfCaseField.field.holder);
+ DexClass clazz = appView.definitionFor(encodedOneOfCaseField.holder());
if (clazz == null || !clazz.isProgramClass()) {
assert false;
return;
@@ -555,7 +555,7 @@
return;
}
- if (encodedOneOfField.field.holder != encodedOneOfCaseField.field.holder) {
+ if (encodedOneOfField.holder() != encodedOneOfCaseField.holder()) {
assert false;
return;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoMessageInfo.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoMessageInfo.java
index ac88305..f026295 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoMessageInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoMessageInfo.java
@@ -220,7 +220,7 @@
}
public DexType getType() {
- return dynamicMethod.method.holder;
+ return dynamicMethod.holder();
}
public boolean hasFields() {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java
index 3449c30..0d500e9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java
@@ -39,7 +39,7 @@
*/
public static ClassInitializerSideEffect classInitializerCanBePostponed(
AppView<?> appView, IRCode code) {
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
OptionalBool controlFlowMayDependOnEnvironment = OptionalBool.unknown();
boolean mayHaveSideEffects = false;
@@ -113,7 +113,7 @@
StaticPut staticPut = instruction.asStaticPut();
DexEncodedField field = appView.appInfo().resolveField(staticPut.getField());
if (field == null
- || field.field.holder != context
+ || field.holder() != context
|| environmentAnalysis.valueMayDependOnEnvironment(staticPut.value())
|| instruction.instructionInstanceCanThrow(appView, context).isThrowing()) {
return ClassInitializerSideEffect.SIDE_EFFECTS_THAT_CANNOT_BE_POSTPONED;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java
index 34a83d1..3f5640d 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java
@@ -72,7 +72,7 @@
Value returnedValue =
code.createValue(classClassType(appView, definitelyNotNull()), debugLocalInfo);
ConstClass instruction = new ConstClass(returnedValue, type);
- assert !instruction.instructionMayHaveSideEffects(appView, code.method.method.holder);
+ assert !instruction.instructionMayHaveSideEffects(appView, code.method.holder());
return instruction;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java
index ef38879..855694a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java
@@ -85,7 +85,7 @@
public boolean isMaterializableInContext(AppView<?> appView, DexType context) {
DexEncodedField encodedField = appView.appInfo().resolveField(field);
return isMemberVisibleFromOriginalContext(
- appView, context, encodedField.field.holder, encodedField.accessFlags);
+ appView, context, encodedField.holder(), encodedField.accessFlags);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java b/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java
index dc0b133..0994dc0 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java
@@ -90,7 +90,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
index f4a8a14..cd29ec9 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
@@ -192,7 +192,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
index 4e5c923..65a8acc 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
@@ -495,8 +495,8 @@
Set<BasicBlock> blocksToRemove,
DexType downcast) {
assert blocksToRemove != null;
- DexType codeHolder = code.method.method.holder;
- DexType inlineeHolder = inlinee.method.method.holder;
+ DexType codeHolder = code.method.holder();
+ DexType inlineeHolder = inlinee.method.holder();
if (codeHolder != inlineeHolder && inlinee.method.isOnlyInlinedIntoNestMembers()) {
// Should rewrite private calls to virtual calls.
assert NestUtils.sameNest(codeHolder, inlineeHolder, appView);
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstClass.java b/src/main/java/com/android/tools/r8/ir/code/ConstClass.java
index e77f315..a97ce72 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstClass.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstClass.java
@@ -142,7 +142,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
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 d7e0067..18f8326 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
@@ -232,7 +232,7 @@
assert isFieldGet();
DexEncodedField field = appView.appInfo().resolveField(getField());
if (field != null) {
- DexClass holder = appView.definitionFor(field.field.holder);
+ DexClass holder = appView.definitionFor(field.holder());
if (holder != null && holder.isLibraryClass() && field.isStatic() && field.isFinal()) {
return appView.abstractValueFactory().createSingleFieldValue(field.field);
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
index 6edc6da..0740db4 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
@@ -127,7 +127,7 @@
// * IncompatibleClassChangeError (instance-* instruction for static fields)
// * IllegalAccessError (not visible from the access context)
// * NullPointerException (null receiver)
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
index 116a3e6..58bcd28 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
@@ -142,7 +142,7 @@
// * IllegalAccessError (not visible from the access context)
// * NullPointerException (null receiver)
// * not read at all
- boolean haveSideEffects = instructionMayHaveSideEffects(appView, code.method.method.holder);
+ boolean haveSideEffects = instructionMayHaveSideEffects(appView, code.method.holder());
assert appView.enableWholeProgramOptimizations() || haveSideEffects
: "Expected instance-put instruction to have side effects in D8";
return !haveSideEffects;
diff --git a/src/main/java/com/android/tools/r8/ir/code/Instruction.java b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
index 654c2e8..b280728 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Instruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
@@ -593,7 +593,7 @@
/** Returns true is this instruction can be treated as dead code if its outputs are not used. */
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
// TODO(b/129530569): instructions with fine-grained side effect analysis may use:
- // return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ // return !instructionMayHaveSideEffects(appView, code.method.holder());
return !instructionInstanceCanThrow();
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
index ddc8952..d6aaf36 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
@@ -190,12 +190,12 @@
// Verify that the target method is accessible in the current context.
if (!isMemberVisibleFromOriginalContext(
- appView, context, target.method.holder, target.accessFlags)) {
+ appView, context, target.holder(), target.accessFlags)) {
return true;
}
// Verify that the target method does not have side-effects.
- DexClass clazz = appView.definitionFor(target.method.holder);
+ DexClass clazz = appView.definitionFor(target.holder());
if (clazz == null) {
assert false : "Expected to be able to find the enclosing class of a method definition";
return true;
@@ -218,7 +218,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
DexEncodedMethod method = code.method;
- if (instructionMayHaveSideEffects(appView, method.method.holder)) {
+ if (instructionMayHaveSideEffects(appView, method.holder())) {
return false;
}
@@ -236,7 +236,7 @@
if (appView.dexItemFactory().isConstructor(invoke.getInvokedMethod())
&& invoke.getReceiver() == getReceiver()) {
// If another constructor call than `this` is found, then it must not have side effects.
- if (invoke.instructionMayHaveSideEffects(appView, method.method.holder)) {
+ if (invoke.instructionMayHaveSideEffects(appView, method.holder())) {
return false;
}
if (otherInitCalls == null) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
index 9b708bc..63f6a89 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
@@ -118,9 +118,7 @@
methodTarget -> {
DexEncodedMethod target = methodTarget.getMethod();
if (target == refinedTarget
- || appView
- .isSubtype(target.method.holder, refinedReceiverType)
- .isPossiblyTrue()) {
+ || appView.isSubtype(target.holder(), refinedReceiverType).isPossiblyTrue()) {
result.add(target);
}
},
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
index a71d185..41fac8c 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
@@ -184,7 +184,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java b/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
index 7992a1c..b285dd6 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
@@ -197,7 +197,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java b/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
index 2d29972..01a6a76 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
@@ -183,7 +183,7 @@
// Verify that the target method is accessible in the current context.
if (!isMemberVisibleFromOriginalContext(
- appView, context, target.method.holder, target.accessFlags)) {
+ appView, context, target.holder(), target.accessFlags)) {
return true;
}
@@ -200,12 +200,14 @@
return false;
}
- return target.method.holder.classInitializationMayHaveSideEffects(
- appView,
- // Types that are a super type of `context` are guaranteed to be initialized
- // already.
- type -> appView.isSubtype(context, type).isTrue(),
- Sets.newIdentityHashSet());
+ return target
+ .holder()
+ .classInitializationMayHaveSideEffects(
+ appView,
+ // Types that are a super type of `context` are guaranteed to be initialized
+ // already.
+ type -> appView.isSubtype(context, type).isTrue(),
+ Sets.newIdentityHashSet());
}
return true;
@@ -213,6 +215,6 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java b/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
index 711c911..c30a8cb 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
@@ -180,7 +180,7 @@
// Verify that the target method is accessible in the current context.
if (!isMemberVisibleFromOriginalContext(
- appView, context, target.method.holder, target.accessFlags)) {
+ appView, context, target.holder(), target.accessFlags)) {
return true;
}
@@ -200,6 +200,6 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewArrayFilledData.java b/src/main/java/com/android/tools/r8/ir/code/NewArrayFilledData.java
index 2211a59..87643df 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewArrayFilledData.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewArrayFilledData.java
@@ -151,6 +151,6 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
}
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 d8acd0b..b59a2c2 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
@@ -196,7 +196,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
public void markNoSpilling() {
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
index 2c246f92..2b705fa 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
@@ -156,7 +156,7 @@
// * IncompatibleClassChangeError (static-* instruction for instance fields)
// * IllegalAccessError (not visible from the access context)
// * side-effects in <clinit>
- return !instructionMayHaveSideEffects(appView, code.method.method.holder);
+ return !instructionMayHaveSideEffects(appView, code.method.holder());
}
@Override
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 16c102b..7249d94 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
@@ -139,7 +139,7 @@
// * IllegalAccessError (not visible from the access context)
// * side-effects in <clinit>
// * not read _globally_
- boolean haveSideEffects = instructionMayHaveSideEffects(appView, code.method.method.holder);
+ boolean haveSideEffects = instructionMayHaveSideEffects(appView, code.method.holder());
assert appView.enableWholeProgramOptimizations() || haveSideEffects
: "Expected static-put instruction to have side effects in D8";
return !haveSideEffects;
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 6ff7e2f..18b62e6 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
@@ -178,7 +178,7 @@
if (singleTarget != null) {
assert !source.accessFlags.isBridge() || singleTarget != currentMethod.method;
DexProgramClass clazz =
- asProgramClassOrNull(appView.definitionFor(singleTarget.method.holder));
+ asProgramClassOrNull(appView.definitionFor(singleTarget.holder()));
if (clazz != null) {
// For static invokes, the class could be initialized.
if (type == Invoke.Type.STATIC) {
@@ -253,8 +253,7 @@
return;
}
- DexProgramClass clazz =
- asProgramClassOrNull(appView.definitionFor(encodedField.field.holder));
+ DexProgramClass clazz = asProgramClassOrNull(appView.definitionFor(encodedField.holder()));
if (clazz == null) {
return;
}
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 ae3e7cd..bbcd3c8 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
@@ -328,7 +328,7 @@
}
}
return new CfCode(
- method.method.holder,
+ method.holder(),
stackHeightTracker.maxHeight,
registerAllocator.registersUsed(),
instructions,
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index 1f1d2e5..f13653a 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -427,7 +427,7 @@
private void buildMethodEnterSynchronization(IRBuilder builder) {
assert needsGeneratedMethodSynchronization;
currentlyGeneratingMethodSynchronization = true;
- DexType type = method.method.holder;
+ DexType type = method.holder();
int monitorRegister;
if (isStatic()) {
monitorRegister = state.push(type).register;
@@ -633,7 +633,7 @@
return ((CfNew) instruction).getType();
}
if (type.isUninitializedThis()) {
- return method.method.holder;
+ return method.holder();
}
assert type.isTop();
return null;
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 993a69c..d5f28d4 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
@@ -530,7 +530,7 @@
int argumentIndex = 0;
if (!method.isStatic()) {
- writeCallback.accept(register, method.method.holder);
+ writeCallback.accept(register, method.holder());
addThisArgument(register);
argumentIndex++;
register++;
@@ -932,7 +932,7 @@
void addThisArgument(int register) {
boolean receiverCouldBeNull = context != null && context != method;
Nullability nullability = receiverCouldBeNull ? maybeNull() : definitelyNotNull();
- TypeElement receiverType = TypeElement.fromDexType(method.method.holder, nullability, appView);
+ TypeElement receiverType = TypeElement.fromDexType(method.holder(), nullability, appView);
addThisArgument(register, receiverType);
}
@@ -1463,14 +1463,14 @@
// therefore we use an invoke-direct instead. We need to do this as the Android Runtime
// will not allow invoke-virtual of a private method.
DexMethod invocationMethod = (DexMethod) item;
- DexType holderType = method.method.holder;
+ DexType holderType = method.holder();
if (invocationMethod.holder == holderType) {
DexClass holderClass = appView.definitionFor(holderType);
assert holderClass != null && holderClass.isProgramClass();
if (holderClass != null) {
DexEncodedMethod directTarget = holderClass.lookupDirectMethod(invocationMethod);
if (directTarget != null && !directTarget.isStatic()) {
- assert invocationMethod.holder == directTarget.method.holder;
+ assert invocationMethod.holder == directTarget.holder();
type = Type.DIRECT;
}
}
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 cae0c84..405ca67 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
@@ -609,10 +609,10 @@
if (appView.options().enableNeverMergePrefixes) {
for (DexString neverMergePrefix : neverMergePrefixes) {
// Synthetic classes will always be merged.
- if (method.method.holder.isD8R8SynthesizedClassType()) {
+ if (method.holder().isD8R8SynthesizedClassType()) {
continue;
}
- if (method.method.holder.descriptor.startsWith(neverMergePrefix)) {
+ if (method.holder().descriptor.startsWith(neverMergePrefix)) {
seenNeverMergePrefix = true;
} else {
seenNotNeverMergePrefix = true;
@@ -904,7 +904,7 @@
ThreadUtils.processItems(
methods,
method -> {
- IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.method.holder));
+ IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.holder()));
assert code != null;
assert !method.getCode().isOutlineCode();
// Instead of repeating all the optimizations of rewriteCode(), only run the
@@ -928,7 +928,7 @@
}
private void forEachSynthesizedServiceLoaderMethod(DexEncodedMethod method) {
- IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.method.holder));
+ IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.holder()));
assert code != null;
codeRewriter.rewriteMoveResult(code);
removeDeadCodeAndFinalizeIR(
@@ -1085,7 +1085,7 @@
private Timing rewriteCode(
DexEncodedMethod method, OptimizationFeedback feedback, MethodProcessor methodProcessor) {
- Origin origin = appView.appInfo().originFor(method.method.holder);
+ Origin origin = appView.appInfo().originFor(method.holder());
return ExceptionUtils.withOriginAttachmentHandler(
origin,
new MethodPosition(method.method),
@@ -1215,7 +1215,7 @@
if (memberValuePropagation != null) {
timing.begin("Propagate member values");
- memberValuePropagation.rewriteWithConstantValues(code, method.method.holder);
+ memberValuePropagation.rewriteWithConstantValues(code, method.holder());
timing.end();
}
@@ -1284,7 +1284,7 @@
if (devirtualizer != null) {
assert code.verifyTypes(appView);
timing.begin("Devirtualize invoke interface");
- devirtualizer.devirtualizeInvokeInterface(code, method.method.holder);
+ devirtualizer.devirtualizeInvokeInterface(code, method.holder());
timing.end();
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java b/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
index e742528..328365e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
@@ -175,7 +175,7 @@
OptimizationFeedback feedback) {
// TODO(b/140766440): Make IRConverter#process receive a list of CodeOptimization to conduct.
// Then, we can share IRCode creation there.
- Origin origin = appView.appInfo().originFor(method.method.holder);
+ Origin origin = appView.appInfo().originFor(method.holder());
if (appView.options().skipIR) {
feedback.markProcessed(method, ConstraintWithTarget.NEVER);
return;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 43db91d..78eaab5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -154,7 +154,7 @@
if (provider.requiresGenerationOfCode()) {
DexMethod newMethod = provider.provideMethod(appView);
methodProviders.putIfAbsent(newMethod, provider);
- holders.add(code.method.method.holder);
+ holders.add(code.method.holder());
}
}
if (!affectedValues.isEmpty()) {
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 3d16d19..ff5dd2f 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
@@ -294,7 +294,7 @@
return;
}
DexEncodedMethod target = resolution.getSingleTarget();
- DexClass targetHolder = appView.definitionFor(target.method.holder);
+ DexClass targetHolder = appView.definitionFor(target.holder());
// Don-t forward if the target is explicitly marked as 'dont-rewrite'
if (targetHolder == null || dontRewrite(targetHolder, target)) {
return;
@@ -330,7 +330,7 @@
private boolean isRetargetMethod(DexLibraryClass holder, DexEncodedMethod method) {
assert needsLibraryInfo();
- assert holder.type == method.method.holder;
+ assert holder.type == method.holder();
assert method.isNonPrivateVirtualMethod();
if (method.isFinal()) {
return false;
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 2be1832..b5c3f3e 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
@@ -152,12 +152,12 @@
MethodAccessFlags newAccessFlags = method.accessFlags.copy();
newAccessFlags.setBridge();
newAccessFlags.setSynthetic();
- DexMethod newMethod = factory.createMethod(method.method.holder, newProto, method.method.name);
+ DexMethod newMethod = factory.createMethod(method.holder(), newProto, method.method.name);
ForwardMethodSourceCode.Builder forwardSourceCodeBuilder =
ForwardMethodSourceCode.builder(newMethod);
forwardSourceCodeBuilder
.setReceiver(clazz.type)
- .setTargetReceiver(method.method.holder)
+ .setTargetReceiver(method.holder())
.setTarget(method.method)
.setInvokeType(Invoke.Type.VIRTUAL)
.setCastResult();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java
index 7b53a35..738f4aa 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/D8NestBasedAccessDesugaring.java
@@ -49,7 +49,7 @@
public void rewriteNestBasedAccesses(
DexEncodedMethod encodedMethod, IRCode code, AppView<?> appView) {
- DexClass currentClass = appView.definitionFor(encodedMethod.method.holder);
+ DexClass currentClass = appView.definitionFor(encodedMethod.holder());
assert currentClass != null;
if (!currentClass.isInANest()) {
return;
@@ -120,7 +120,7 @@
private void addDeferredBridges(Collection<DexEncodedMethod> bridges) {
for (DexEncodedMethod bridge : bridges) {
- DexClass holder = definitionFor(bridge.method.holder);
+ DexClass holder = definitionFor(bridge.holder());
assert holder != null && holder.isProgramClass();
holder.asProgramClass().addMethod(bridge);
}
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 c81eedb..0d771c3 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
@@ -106,7 +106,7 @@
public void desugar(IRCode code) {
- if (wrapperSynthesizor.hasSynthesized(code.method.method.holder)) {
+ if (wrapperSynthesizor.hasSynthesized(code.method.holder())) {
return;
}
@@ -140,7 +140,7 @@
if (!shouldRegisterCallback(encodedMethod)) {
return true;
}
- DexProgramClass holderClass = appView.definitionForProgramType(encodedMethod.method.holder);
+ DexProgramClass holderClass = appView.definitionForProgramType(encodedMethod.holder());
DexMethod installedCallback =
methodWithVivifiedTypeInSignature(encodedMethod.method, holderClass.type, appView);
assert holderClass.lookupMethod(installedCallback) != null;
@@ -161,7 +161,7 @@
public void registerCallbackIfRequired(DexEncodedMethod encodedMethod) {
if (shouldRegisterCallback(encodedMethod)) {
- DexClass dexClass = appView.definitionFor(encodedMethod.method.holder);
+ DexClass dexClass = appView.definitionFor(encodedMethod.holder());
assert dexClass != null;
registerCallback(dexClass, encodedMethod);
}
@@ -253,7 +253,7 @@
}
private synchronized void addCallBackSignature(DexClass dexClass, DexEncodedMethod method) {
- assert dexClass.type == method.method.holder;
+ assert dexClass.type == method.holder();
if (callBackMethods.computeIfAbsent(dexClass, key -> new HashSet<>()).add(method)) {
pendingCallBackMethods.computeIfAbsent(dexClass, key -> new ArrayList<>()).add(method);
}
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 3949767..76ceee5 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
@@ -118,7 +118,7 @@
appView
.appInfo()
.withClassHierarchy()
- .lookupSuperTarget(invoke.getInvokedMethod(), code.method.method.holder);
+ .lookupSuperTarget(invoke.getInvokedMethod(), code.method.holder());
// Final methods can be rewritten as a normal invoke.
if (dexEncodedMethod != null && !dexEncodedMethod.isFinal()) {
DexMethod retargetMethod =
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 30bc78e..6552db4 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
@@ -223,7 +223,7 @@
DexTypeList interfaces =
isItf ? new DexTypeList(new DexType[] {wrappingType}) : DexTypeList.empty();
return new DexProgramClass(
- wrapperField.field.holder,
+ wrapperField.holder(),
null,
new SynthesizedOrigin("Desugared library API Converter", getClass()),
ClassAccessFlags.fromSharedAccessFlags(
@@ -260,23 +260,24 @@
// return v3;
Set<DexMethod> finalMethods = Sets.newIdentityHashSet();
for (DexEncodedMethod dexEncodedMethod : dexMethods) {
- DexClass holderClass = appView.definitionFor(dexEncodedMethod.method.holder);
+ DexClass holderClass = appView.definitionFor(dexEncodedMethod.holder());
boolean isInterface;
if (holderClass == null) {
- assert appView.options().desugaredLibraryConfiguration.getEmulateLibraryInterface()
- .containsValue(dexEncodedMethod.method.holder);
+ assert appView
+ .options()
+ .desugaredLibraryConfiguration
+ .getEmulateLibraryInterface()
+ .containsValue(dexEncodedMethod.holder());
isInterface = true;
} else {
isInterface = holderClass.isInterface();
}
DexMethod methodToInstall =
factory.createMethod(
- wrapperField.field.holder,
- dexEncodedMethod.method.proto,
- dexEncodedMethod.method.name);
+ wrapperField.holder(), dexEncodedMethod.method.proto, dexEncodedMethod.method.name);
CfCode cfCode;
if (dexEncodedMethod.isFinal()) {
- invalidWrappers.add(wrapperField.field.holder);
+ invalidWrappers.add(wrapperField.holder());
finalMethods.add(dexEncodedMethod.method);
continue;
} else {
@@ -312,15 +313,15 @@
// return v3;
Set<DexMethod> finalMethods = Sets.newIdentityHashSet();
for (DexEncodedMethod dexEncodedMethod : dexMethods) {
- DexClass holderClass = appView.definitionFor(dexEncodedMethod.method.holder);
+ DexClass holderClass = appView.definitionFor(dexEncodedMethod.holder());
assert holderClass != null || appView.options().isDesugaredLibraryCompilation();
boolean isInterface = holderClass == null || holderClass.isInterface();
DexMethod methodToInstall =
DesugaredLibraryAPIConverter.methodWithVivifiedTypeInSignature(
- dexEncodedMethod.method, wrapperField.field.holder, appView);
+ dexEncodedMethod.method, wrapperField.holder(), appView);
CfCode cfCode;
if (dexEncodedMethod.isFinal()) {
- invalidWrappers.add(wrapperField.field.holder);
+ invalidWrappers.add(wrapperField.holder());
finalMethods.add(dexEncodedMethod.method);
continue;
} else {
@@ -342,7 +343,7 @@
List<DexEncodedMethod> generatedMethods = new ArrayList<>();
// Generate only abstract methods for library override detection.
for (DexEncodedMethod dexEncodedMethod : dexMethods) {
- DexClass holderClass = appView.definitionFor(dexEncodedMethod.method.holder);
+ DexClass holderClass = appView.definitionFor(dexEncodedMethod.holder());
assert holderClass != null || appView.options().isDesugaredLibraryCompilation();
if (!dexEncodedMethod.isFinal()) {
DexMethod methodToInstall =
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 1a4c416..e7c165d 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
@@ -238,7 +238,7 @@
invokeStatic.outValue(), invokeStatic.arguments()));
requiredDispatchClasses
.computeIfAbsent(clazz.asLibraryClass(), k -> Sets.newConcurrentHashSet())
- .add(appInfo.definitionFor(encodedMethod.method.holder).asProgramClass());
+ .add(appInfo.definitionFor(encodedMethod.holder()).asProgramClass());
}
} else {
instructions.replaceCurrentInstruction(
@@ -269,8 +269,7 @@
// WARNING: This may result in incorrect code on older platforms!
// Retarget call to an appropriate method of companion class.
DexMethod amendedMethod =
- amendDefaultMethod(
- appInfo.definitionFor(encodedMethod.method.holder), invokedMethod);
+ amendDefaultMethod(appInfo.definitionFor(encodedMethod.holder()), invokedMethod);
instructions.replaceCurrentInstruction(
new InvokeStatic(defaultAsMethodOfCompanionClass(amendedMethod),
invokeSuper.outValue(), invokeSuper.arguments()));
@@ -284,9 +283,9 @@
DexEncodedMethod dexEncodedMethod =
appView
.appInfo()
- .lookupSuperTarget(invokeSuper.getInvokedMethod(), code.method.method.holder);
+ .lookupSuperTarget(invokeSuper.getInvokedMethod(), code.method.holder());
if (dexEncodedMethod != null) {
- DexClass dexClass = appView.definitionFor(dexEncodedMethod.method.holder);
+ DexClass dexClass = appView.definitionFor(dexEncodedMethod.holder());
if (dexClass != null && dexClass.isLibraryClass()) {
// Rewriting is required because the super invoke resolves into a missing
// method (method is on desugared library). Find out if it needs to be
@@ -418,8 +417,8 @@
// interfaces.
return null;
}
- if (!singleTarget.isAbstract() && isEmulatedInterface(singleTarget.method.holder)) {
- return singleTarget.method.holder;
+ if (!singleTarget.isAbstract() && isEmulatedInterface(singleTarget.holder())) {
+ return singleTarget.holder();
}
return null;
}
@@ -616,8 +615,8 @@
}
emulationMethods.add(
DexEncodedMethod.toEmulateDispatchLibraryMethod(
- method.method.holder,
- emulateInterfaceLibraryMethod(method.method, method.method.holder, factory),
+ method.holder(),
+ emulateInterfaceLibraryMethod(method.method, method.holder(), factory),
companionMethod,
libraryMethod,
extraDispatchCases,
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 4409c30..ab5a9cd 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
@@ -320,7 +320,7 @@
} else {
assert code.isCfCode();
for (CfInstruction insn : code.asCfCode().getInstructions()) {
- if (insn instanceof CfInvoke && ((CfInvoke) insn).isInvokeSuper(method.method.holder)) {
+ if (insn instanceof CfInvoke && ((CfInvoke) insn).isInvokeSuper(method.holder())) {
return false;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
index d440b01..2ac43f0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
@@ -96,7 +96,7 @@
invocationContext == null ? null : lookupTargetMethod(appInfo, invocationContext);
if (targetMethod != null) {
targetAccessFlags = targetMethod.accessFlags.copy();
- targetHolder = targetMethod.method.holder;
+ targetHolder = targetMethod.holder();
} else {
targetAccessFlags = null;
targetHolder = null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index 4ee35d6..d6d698e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -135,7 +135,7 @@
*/
public void desugarLambdas(DexEncodedMethod encodedMethod, IRCode code) {
Set<Value> affectedValues = Sets.newIdentityHashSet();
- DexType currentType = encodedMethod.method.holder;
+ DexType currentType = encodedMethod.holder();
ListIterator<BasicBlock> blocks = code.listIterator();
while (blocks.hasNext()) {
BasicBlock block = blocks.next();
@@ -145,7 +145,7 @@
if (instruction.isInvokeCustom()) {
InvokeCustom invoke = instruction.asInvokeCustom();
LambdaDescriptor descriptor =
- inferLambdaDescriptor(invoke.getCallSite(), encodedMethod.method.holder);
+ inferLambdaDescriptor(invoke.getCallSite(), encodedMethod.holder());
if (descriptor == LambdaDescriptor.MATCH_FAILED) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
index b78757d..70f2b61 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
@@ -238,7 +238,7 @@
}
private DexMethod computeFieldBridge(DexEncodedField field, boolean isGet) {
- DexType holderType = field.field.holder;
+ DexType holderType = field.holder();
DexType fieldType = field.field.type;
int bridgeParameterCount =
BooleanUtils.intValue(!field.isStatic()) + BooleanUtils.intValue(!isGet);
@@ -259,10 +259,10 @@
boolean invokeRequiresRewriting(DexEncodedMethod method, DexClass contextClass) {
assert method != null;
// Rewrite only when targeting other nest members private fields.
- if (!method.accessFlags.isPrivate() || method.method.holder == contextClass.type) {
+ if (!method.accessFlags.isPrivate() || method.holder() == contextClass.type) {
return false;
}
- DexClass methodHolder = definitionFor(method.method.holder);
+ DexClass methodHolder = definitionFor(method.holder());
assert methodHolder != null; // from encodedMethod
return methodHolder.getNestHost() == contextClass.getNestHost();
}
@@ -270,10 +270,10 @@
boolean fieldAccessRequiresRewriting(DexEncodedField field, DexClass contextClass) {
assert field != null;
// Rewrite only when targeting other nest members private fields.
- if (!field.accessFlags.isPrivate() || field.field.holder == contextClass.type) {
+ if (!field.accessFlags.isPrivate() || field.holder() == contextClass.type) {
return false;
}
- DexClass fieldHolder = definitionFor(field.field.holder);
+ DexClass fieldHolder = definitionFor(field.holder());
assert fieldHolder != null; // from encodedField
return fieldHolder.getNestHost() == contextClass.getNestHost();
}
@@ -295,7 +295,7 @@
}
DexMethod ensureFieldAccessBridge(DexEncodedField field, boolean isGet) {
- DexClass holder = definitionFor(field.field.holder);
+ DexClass holder = definitionFor(field.holder());
assert holder != null;
DexMethod bridgeMethod = computeFieldBridge(field, isGet);
if (holderRequiresBridge(holder)) {
@@ -314,7 +314,7 @@
DexMethod ensureInvokeBridge(DexEncodedMethod method) {
// We add bridges only when targeting other nest members.
- DexClass holder = definitionFor(method.method.holder);
+ DexClass holder = definitionFor(method.holder());
assert holder != null;
DexMethod bridgeMethod;
if (method.isInstanceInitializer()) {
@@ -508,7 +508,7 @@
}
public DexType getHolder() {
- return field.field.holder;
+ return field.holder();
}
public DexField getField() {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java
index c4c9bd7..ca10fe6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java
@@ -56,7 +56,7 @@
private <E> void addDeferredBridgesAndMapMethods(
Map<E, DexEncodedMethod> bridges, BiConsumer<E, DexMethod> lensInserter) {
for (Map.Entry<E, DexEncodedMethod> entry : bridges.entrySet()) {
- DexClass holder = definitionFor(entry.getValue().method.holder);
+ DexClass holder = definitionFor(entry.getValue().holder());
assert holder != null && holder.isProgramClass();
holder.asProgramClass().addMethod(entry.getValue());
lensInserter.accept(entry.getKey(), entry.getValue().method);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java
index 17250cf..e477fe3 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java
@@ -99,7 +99,7 @@
new InvokeStatic(twrCloseResourceMethod, null, invoke.inValues()));
// Mark as a class referencing utility class.
- referencingClasses.add(appInfo.definitionFor(code.method.method.holder).asProgramClass());
+ referencingClasses.add(appInfo.definitionFor(code.method.holder()).asProgramClass());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
index da20118..a356e8b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
@@ -112,18 +112,18 @@
break;
case PACKAGE:
if (entry.value.size == 0) {
- if (!method.method.holder.descriptor.contains(dexItemFactory.descriptorSeparator)) {
+ if (!method.holder().descriptor.contains(dexItemFactory.descriptorSeparator)) {
transformation = entry.entry.getTransformation();
}
- } else if (method.method.holder.descriptor.startsWith(entry.value)) {
+ } else if (method.holder().descriptor.startsWith(entry.value)) {
transformation = entry.entry.getTransformation();
}
break;
case CLASS:
- if (method.method.holder.descriptor.equals(entry.value)) {
+ if (method.holder().descriptor.equals(entry.value)) {
transformation = entry.entry.getTransformation();
}
- if (isDescriptorForClassOrInnerClass(entry.value, method.method.holder.descriptor)) {
+ if (isDescriptorForClassOrInnerClass(entry.value, method.holder().descriptor)) {
transformation = entry.entry.getTransformation();
}
break;
@@ -311,7 +311,7 @@
if (method.isClassInitializer()) {
clinit = method;
} else {
- DexClass clazz = appView.definitionFor(method.method.holder);
+ DexClass clazz = appView.definitionFor(method.holder());
if (clazz == null) {
return;
}
@@ -328,7 +328,7 @@
if (current.isInvokeMethod()) {
InvokeMethod invoke = current.asInvokeMethod();
if (invoke.getInvokedMethod() == dexItemFactory.classMethods.desiredAssertionStatus) {
- if (method.method.holder == dexItemFactory.kotlin.kotlinAssertions) {
+ if (method.holder() == dexItemFactory.kotlin.kotlinAssertions) {
rewriteKotlinAssertionEnable(code, transformation, iterator, invoke);
} else {
iterator.replaceCurrentInstruction(code.createIntConstant(0));
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 368b58a..35895b7 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
@@ -98,7 +98,7 @@
continue;
}
}
- Collection<DexEncodedMethod> targets = invoke.lookupTargets(appView, context.method.holder);
+ Collection<DexEncodedMethod> targets = invoke.lookupTargets(appView, context.holder());
assert invoke.isInvokeMethodWithDynamicDispatch()
// For other invocation types, the size of targets should be at most one.
|| targets == null || targets.size() <= 1;
@@ -231,7 +231,7 @@
if (abstractValue.isSingleValue()) {
assert appView.options().enablePropagationOfConstantsAtCallSites;
SingleValue singleValue = abstractValue.asSingleValue();
- if (singleValue.isMaterializableInContext(appView, code.method.method.holder)) {
+ if (singleValue.isMaterializableInContext(appView, code.method.holder())) {
Instruction replacement =
singleValue.createMaterializingInstruction(appView, code, instr);
replacement.setPosition(instr.getPosition());
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 025c178..ce853a2 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
@@ -133,7 +133,7 @@
return ClassInitializerDefaultsResult.empty();
}
- DexClass clazz = appView.definitionFor(method.method.holder);
+ DexClass clazz = appView.definitionFor(method.holder());
if (clazz == null) {
return ClassInitializerDefaultsResult.empty();
}
@@ -160,7 +160,7 @@
Value value = put.value();
if (unnecessaryStaticPuts.contains(put)) {
if (fieldType == dexItemFactory.stringType) {
- fieldsWithStaticValues.put(field, getDexStringValue(value, method.method.holder));
+ fieldsWithStaticValues.put(field, getDexStringValue(value, method.holder()));
} else if (fieldType.isClassType() || fieldType.isArrayType()) {
if (value.isZero()) {
fieldsWithStaticValues.put(field, DexValueNull.NULL);
@@ -380,7 +380,7 @@
} else if (instruction.isStaticGet()) {
StaticGet get = instruction.asStaticGet();
DexEncodedField field = appView.appInfo().resolveField(get.getField());
- if (field != null && field.field.holder == clazz.type) {
+ if (field != null && field.holder() == clazz.type) {
isReadBefore.add(field.field);
} else if (instruction.instructionMayHaveSideEffects(appView, clazz.type)) {
// Reading another field is only OK if the read does not have side-effects.
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 5b78d8a..c390d5a 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
@@ -1115,7 +1115,7 @@
BasicBlock defaultTarget = theSwitch.fallthroughBlock();
SwitchCaseEliminator eliminator = null;
BasicBlockBehavioralSubsumption behavioralSubsumption =
- new BasicBlockBehavioralSubsumption(appView, code.method.method.holder);
+ new BasicBlockBehavioralSubsumption(appView, code.method.holder());
// Compute the set of switch cases that can be removed.
for (int i = 0; i < theSwitch.numberOfKeys(); i++) {
@@ -1231,7 +1231,7 @@
}
// Check if the invoked method is known to return one of its arguments.
- DexEncodedMethod target = invoke.lookupSingleTarget(appView, code.method.method.holder);
+ DexEncodedMethod target = invoke.lookupSingleTarget(appView, code.method.holder());
if (target != null && target.getOptimizationInfo().returnsArgument()) {
int argumentIndex = target.getOptimizationInfo().getReturnedArgument();
// Replace the out value of the invoke with the argument and ignore the out value.
@@ -1353,7 +1353,7 @@
// If the cast type is not accessible in the current context, we should not remove the cast
// in order to preserve IllegalAccessError. Note that JVM and ART behave differently: see
// {@link com.android.tools.r8.ir.optimize.checkcast.IllegalAccessErrorTest}.
- if (!isTypeVisibleFromContext(appView, code.method.method.holder, castType)) {
+ if (!isTypeVisibleFromContext(appView, code.method.holder(), castType)) {
return RemoveCheckCastInstructionIfTrivialResult.NO_REMOVALS;
}
@@ -1410,7 +1410,7 @@
InstanceOf instanceOf, InstructionListIterator it, IRCode code) {
// If the instance-of type is not accessible in the current context, we should not remove the
// instance-of instruction in order to preserve IllegalAccessError.
- if (!isTypeVisibleFromContext(appView, code.method.method.holder, instanceOf.type())) {
+ if (!isTypeVisibleFromContext(appView, code.method.holder(), instanceOf.type())) {
return false;
}
@@ -2469,7 +2469,7 @@
}
}
} else {
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
AbstractValue abstractValue = lhs.getAbstractValue(appView, context);
if (abstractValue.isSingleConstClassValue() || abstractValue.isSingleFieldValue()) {
AbstractValue otherAbstractValue = rhs.getAbstractValue(appView, context);
@@ -2761,7 +2761,7 @@
InvokeMethod invoke = insn.asInvokeMethod();
DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView.withLiveness(), code.method.method.holder);
+ invoke.lookupSingleTarget(appView.withLiveness(), code.method.holder());
if (singleTarget == null || !singleTarget.getOptimizationInfo().neverReturnsNormally()) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
index 2dff525..c98c262 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
@@ -88,7 +88,7 @@
public void canonicalize(AppView<?> appView, IRCode code) {
DexEncodedMethod method = code.method;
- DexType context = method.method.holder;
+ DexType context = method.holder();
Object2ObjectLinkedOpenCustomHashMap<Instruction, List<Value>> valuesDefinedByConstant =
new Object2ObjectLinkedOpenCustomHashMap<>(
new Strategy<Instruction>() {
@@ -149,8 +149,7 @@
continue;
}
SingleFieldValue singleFieldValue = abstractValue.asSingleFieldValue();
- if (method.isClassInitializer()
- && method.method.holder == singleFieldValue.getField().holder) {
+ if (method.isClassInitializer() && method.holder() == singleFieldValue.getField().holder) {
// Avoid that canonicalization inserts a read before the unique write in the class
// initializer, as that would change the program behavior.
continue;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index d225220..d9773d9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -105,7 +105,7 @@
return true;
}
- DexClass clazz = appView.definitionFor(singleTarget.method.holder);
+ DexClass clazz = appView.definitionFor(singleTarget.holder());
if (!clazz.isProgramClass()) {
if (clazz.isClasspathClass()) {
whyAreYouNotInliningReporter.reportClasspathMethod();
@@ -211,12 +211,12 @@
// Don't inline code with references beyond root main dex classes into a root main dex class.
// If we do this it can increase the size of the main dex dependent classes.
if (reason != Reason.FORCE
- && inlineeRefersToClassesNotInMainDex(method.method.holder, singleTarget)) {
+ && inlineeRefersToClassesNotInMainDex(method.holder(), singleTarget)) {
whyAreYouNotInliningReporter.reportInlineeRefersToClassesNotInMainDex();
return false;
}
assert reason != Reason.FORCE
- || !inlineeRefersToClassesNotInMainDex(method.method.holder, singleTarget);
+ || !inlineeRefersToClassesNotInMainDex(method.holder(), singleTarget);
return true;
}
@@ -360,8 +360,8 @@
// - the current method has already triggered the holder for the target method to be
// initialized, or
// - there is no non-trivial class initializer.
- DexType targetHolder = target.method.holder;
- if (appView.appInfo().isSubtype(method.method.holder, targetHolder)) {
+ DexType targetHolder = target.holder();
+ if (appView.appInfo().isSubtype(method.holder(), targetHolder)) {
return true;
}
DexClass clazz = appView.definitionFor(targetHolder);
@@ -374,14 +374,14 @@
appView.withInitializedClassesInInstanceMethods(
analysis ->
analysis.isClassDefinitelyLoadedInInstanceMethodsOn(
- target.method.holder, method.method.holder),
+ target.holder(), method.holder()),
false);
if (targetIsGuaranteedToBeInitialized) {
return true;
}
}
if (classInitializationAnalysis.isClassDefinitelyLoadedBeforeInstruction(
- target.method.holder, invoke)) {
+ target.holder(), invoke)) {
return true;
}
// Check for class initializer side effects when loading this class, as inlining might remove
@@ -445,8 +445,8 @@
// Allow inlining a constructor into a constructor of the same class, as the constructor code
// is expected to adhere to the VM specification.
- DexType callerMethodHolder = method.method.holder;
- DexType calleeMethodHolder = inlinee.method.method.holder;
+ DexType callerMethodHolder = method.holder();
+ DexType calleeMethodHolder = inlinee.method.holder();
// Calling a constructor on the same class from a constructor can always be inlined.
if (method.isInstanceInitializer() && callerMethodHolder == calleeMethodHolder) {
return true;
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 82ea8ab..897b85b 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
@@ -136,7 +136,7 @@
if (target == null) {
continue;
}
- DexType holderType = target.method.holder;
+ DexType holderType = target.holder();
DexClass holderClass = appView.definitionFor(holderType);
// Make sure we are not landing on another interface, e.g., interface's default method.
if (holderClass == null || holderClass.isInterface()) {
@@ -284,7 +284,7 @@
// Most likely due to a missing class, or invoke is already as specific as it gets.
return target;
}
- DexClass newTargetClass = appView.definitionFor(newTarget.method.holder);
+ DexClass newTargetClass = appView.definitionFor(newTarget.holder());
if (newTargetClass == null
|| newTargetClass.isLibraryClass()
|| !canInvokeTargetWithInvokeVirtual(newTarget)
@@ -296,13 +296,12 @@
}
private boolean canInvokeTargetWithInvokeVirtual(DexEncodedMethod target) {
- return target.isNonPrivateVirtualMethod()
- && appView.isInterface(target.method.holder).isFalse();
+ return target.isNonPrivateVirtualMethod() && appView.isInterface(target.holder()).isFalse();
}
private boolean hasAccessToInvokeTargetFromContext(DexEncodedMethod target, DexType context) {
assert !target.accessFlags.isPrivate();
- DexType holder = target.method.holder;
+ DexType holder = target.holder();
if (holder == context) {
// It is always safe to invoke a method from the same enclosing class.
return true;
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 8048e3a..d518ef6 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
@@ -78,8 +78,7 @@
TypeElement.fromDexType(invokedMethod.holder, definitelyNotNull(), appView);
dynamicLowerBoundType = null;
} else {
- DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView, code.method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method.holder());
if (singleTarget == null) {
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
index 5dba772..f59a458 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/IdempotentFunctionCallCanonicalizer.java
@@ -110,7 +110,7 @@
}
});
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
// Collect invocations along with arguments.
for (BasicBlock block : code.blocks) {
for (Instruction current : block.getInstructions()) {
@@ -143,7 +143,7 @@
}
// Verify that the target method is accessible in the current context.
if (!isMemberVisibleFromOriginalContext(
- appView, context, target.method.holder, target.accessFlags)) {
+ appView, context, target.holder(), target.accessFlags)) {
continue;
}
// Check if the call could throw a NPE as a result of the receiver being null.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index b56dece..91d2227 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -164,7 +164,7 @@
new InliningConstraints(appView, GraphLense.getIdentityLense());
for (Instruction instruction : code.instructions()) {
ConstraintWithTarget state =
- instructionAllowedForInlining(instruction, inliningConstraints, method.method.holder);
+ instructionAllowedForInlining(instruction, inliningConstraints, method.holder());
if (state == ConstraintWithTarget.NEVER) {
result = state;
break;
@@ -192,12 +192,12 @@
}
boolean hasInliningAccess(DexEncodedMethod method, DexEncodedMethod target) {
- if (!isVisibleWithFlags(target.method.holder, method.method.holder, target.accessFlags)) {
+ if (!isVisibleWithFlags(target.holder(), method.holder(), target.accessFlags)) {
return false;
}
// The class needs also to be visible for us to have access.
- DexClass targetClass = appView.definitionFor(target.method.holder);
- return isVisibleWithFlags(target.method.holder, method.method.holder, targetClass.accessFlags);
+ DexClass targetClass = appView.definitionFor(target.holder());
+ return isVisibleWithFlags(target.holder(), method.holder(), targetClass.accessFlags);
}
private boolean isVisibleWithFlags(DexType target, DexType context, AccessFlags flags) {
@@ -710,7 +710,7 @@
lockValue =
code.createValue(
TypeElement.fromDexType(dexItemFactory.objectType, definitelyNotNull(), appView));
- monitorEnterBlockIterator.add(new ConstClass(lockValue, target.method.holder));
+ monitorEnterBlockIterator.add(new ConstClass(lockValue, target.holder()));
} else {
lockValue = entryBlock.getInstructions().getFirst().asArgument().outValue();
}
@@ -964,7 +964,7 @@
if (current.isInvokeMethod()) {
InvokeMethod invoke = current.asInvokeMethod();
// TODO(b/142116551): This should be equivalent to invoke.lookupSingleTarget()!
- DexEncodedMethod singleTarget = oracle.lookupSingleTarget(invoke, context.method.holder);
+ DexEncodedMethod singleTarget = oracle.lookupSingleTarget(invoke, context.holder());
if (singleTarget == null) {
WhyAreYouNotInliningReporter.handleInvokeWithUnknownTarget(invoke, appView, context);
continue;
@@ -1115,8 +1115,8 @@
// method holder as a fallback.
receiverType = invoke.getInvokedMethod().holder;
}
- if (!appView.appInfo().isSubtype(receiverType, target.method.holder)) {
- return target.method.holder;
+ if (!appView.appInfo().isSubtype(receiverType, target.holder())) {
+ return target.holder();
}
}
return null;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index a1307a0..ea77caf 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -197,7 +197,7 @@
DexEncodedMethod alternativeDexEncodedMethod =
lookupFunction.apply(singleResolutionResult, superContext);
if (alternativeDexEncodedMethod != null
- && alternativeDexEncodedMethod.method.holder == superContext.type) {
+ && alternativeDexEncodedMethod.holder() == superContext.type) {
return alternativeDexEncodedMethod;
}
return null;
@@ -354,8 +354,8 @@
// `invocationContext` has access to the definition of the field.
//
// See, for example, InlineNonReboundFieldTest (b/128604123).
- if (field.holder != target.field.holder) {
- DexType actualFieldHolder = graphLense.lookupType(target.field.holder);
+ if (field.holder != target.holder()) {
+ DexType actualFieldHolder = graphLense.lookupType(target.holder());
fieldConstraintWithTarget =
ConstraintWithTarget.meet(
fieldConstraintWithTarget,
@@ -379,7 +379,7 @@
return ConstraintWithTarget.ALWAYS;
}
if (target != null) {
- DexType methodHolder = graphLense.lookupType(target.method.holder);
+ DexType methodHolder = graphLense.lookupType(target.holder());
DexClass methodClass = appView.definitionFor(methodHolder);
if (methodClass != null) {
if (!allowStaticInterfaceMethodCalls && methodClass.isInterface() && target.hasCode()) {
@@ -423,7 +423,7 @@
return ConstraintWithTarget.NEVER;
}
- DexType methodHolder = graphLense.lookupType(resolutionTarget.method.holder);
+ DexType methodHolder = graphLense.lookupType(resolutionTarget.holder());
DexClass methodClass = appView.definitionFor(methodHolder);
assert methodClass != null;
ConstraintWithTarget methodConstraintWithTarget =
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java b/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java
index c6694f4..508e394 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java
@@ -46,7 +46,7 @@
InstructionListIterator iterator = code.instructionListIterator();
DexClass callerHolderClass = appView.definitionFor(callerHolder);
assert callerHolderClass != null;
- assert code.method.method.holder != callerHolder;
+ assert code.method.holder() != callerHolder;
while (iterator.hasNext()) {
Instruction instruction = iterator.next();
if (instruction.isInvokeDirect()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
index 15904c5..2e41703 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
@@ -98,8 +98,7 @@
}
}
- DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView, code.method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method.holder());
if (singleTarget != null) {
MethodOptimizationInfo optimizationInfo = singleTarget.getOptimizationInfo();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index ab9fa71..d9ebcf6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -862,7 +862,7 @@
// See whether we could move this invoke somewhere else. We reuse the logic from inlining
// here, as the constraints are the same.
ConstraintWithTarget constraint =
- invoke.inliningConstraint(inliningConstraints, method.method.holder);
+ invoke.inliningConstraint(inliningConstraints, method.holder());
if (constraint != ConstraintWithTarget.ALWAYS) {
return false;
}
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 de9d4cc..e94bb7b 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
@@ -150,7 +150,7 @@
if (appView.enableWholeProgramOptimizations()) {
definition = appView.appInfo().resolveField(field);
} else {
- if (field.holder != method.method.holder) {
+ if (field.holder != method.holder()) {
return true;
}
definition = appView.definitionFor(field);
@@ -159,7 +159,7 @@
}
public void run() {
- DexType context = method.method.holder;
+ DexType context = method.holder();
for (BasicBlock block : dominatorTree.getSortedBlocks()) {
activeInitializedClasses =
activeInitializedClassesAtEntry.containsKey(block)
@@ -383,7 +383,7 @@
}
keysToRemove.forEach(activeInstanceFieldValues::remove);
} else if (instruction.isStaticPut()) {
- if (field.holder != code.method.method.holder) {
+ if (field.holder != code.method.holder()) {
// Accessing a static field on a different object could cause <clinit> to run which
// could modify any static field on any other object.
activeStaticFieldValues.clear();
@@ -391,7 +391,7 @@
activeStaticFieldValues.remove(field);
}
} else if (instruction.isStaticGet()) {
- if (field.holder != code.method.method.holder) {
+ if (field.holder != code.method.holder()) {
// Accessing a static field on a different object could cause <clinit> to run which
// could modify any static field on any other object.
activeStaticFieldValues.clear();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
index 1b56e8c..1e19dea 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
@@ -36,7 +36,7 @@
public static void rewriteGetClassOrForNameToConstClass(
AppView<AppInfoWithLiveness> appView, IRCode code) {
Set<Value> affectedValues = Sets.newIdentityHashSet();
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
ClassInitializationAnalysis classInitializationAnalysis =
new ClassInitializationAnalysis(appView, code);
for (BasicBlock block : code.blocks) {
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 8e0858a..6b854e6 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
@@ -351,8 +351,7 @@
Instruction instruction = instructionIterator.next();
if (instruction.throwsOnNullInput()) {
Value couldBeNullValue = instruction.getNonNullInput();
- if (isThrowNullCandidate(
- couldBeNullValue, instruction, appView, code.method.method.holder)) {
+ if (isThrowNullCandidate(couldBeNullValue, instruction, appView, code.method.holder())) {
if (instruction.isInstanceGet() || instruction.isInstancePut()) {
++numberOfInstanceGetOrInstancePutWithNullReceiver;
} else if (instruction.isInvokeMethodWithReceiver()) {
@@ -451,7 +450,7 @@
IRCode code,
AssumeDynamicTypeRemover assumeDynamicTypeRemover,
Set<Value> affectedValues) {
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
DexField field = instruction.getField();
DexType fieldType = field.type;
if (fieldType.isAlwaysNull(appView)) {
@@ -507,7 +506,7 @@
AssumeDynamicTypeRemover assumeDynamicTypeRemover,
Set<BasicBlock> blocksToBeRemoved,
Set<Value> affectedValues) {
- DexEncodedMethod target = invoke.lookupSingleTarget(appView, code.method.method.holder);
+ DexEncodedMethod target = invoke.lookupSingleTarget(appView, code.method.holder());
if (target == null) {
return;
}
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 db393ed..7b60b90 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
@@ -157,8 +157,7 @@
// Constructors must be named `<init>`.
return null;
}
- newSignature =
- appView.dexItemFactory().createMethod(method.method.holder, newProto, newName);
+ newSignature = appView.dexItemFactory().createMethod(method.holder(), newProto, newName);
count++;
} while (!isMethodSignatureAvailable(newSignature));
return newSignature;
@@ -198,8 +197,7 @@
// Constructors must be named `<init>`.
return null;
}
- newSignature =
- appView.dexItemFactory().createMethod(method.method.holder, newProto, newName);
+ newSignature = appView.dexItemFactory().createMethod(method.holder(), newProto, newName);
count++;
} while (methodPool.hasSeen(equivalence.wrap(newSignature)));
return newSignature;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index 81f68de..7f0ad04 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -160,7 +160,7 @@
if (eligibleClass.classInitializationMayHaveSideEffects(
appView,
// Types that are a super type of the current context are guaranteed to be initialized.
- type -> appView.isSubtype(method.method.holder, type).isTrue(),
+ type -> appView.isSubtype(method.holder(), type).isTrue(),
Sets.newIdentityHashSet())) {
return EligibilityStatus.HAS_CLINIT;
}
@@ -170,7 +170,7 @@
assert root.isStaticGet();
StaticGet staticGet = root.asStaticGet();
- if (staticGet.instructionMayHaveSideEffects(appView, method.method.holder)) {
+ if (staticGet.instructionMayHaveSideEffects(appView, method.holder())) {
return EligibilityStatus.RETRIEVAL_MAY_HAVE_SIDE_EFFECTS;
}
DexEncodedField field = appView.appInfo().resolveField(staticGet.getField());
@@ -265,8 +265,7 @@
if (user.isInvokeMethod()) {
InvokeMethod invokeMethod = user.asInvokeMethod();
- DexEncodedMethod singleTarget =
- invokeMethod.lookupSingleTarget(appView, method.method.holder);
+ DexEncodedMethod singleTarget = invokeMethod.lookupSingleTarget(appView, method.holder());
if (singleTarget == null) {
return user; // Not eligible.
}
@@ -507,8 +506,7 @@
continue;
}
- DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView, code.method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method.holder());
if (singleTarget == null || !indirectMethodCallsOnInstance.contains(singleTarget)) {
throw new IllegalClassInlinerStateException();
}
@@ -569,7 +567,7 @@
continue;
}
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, method.holder());
if (singleTarget != null) {
Predicate<InvokeMethod> noSideEffectsPredicate =
dexItemFactory.libraryMethodsWithoutSideEffects.getOrDefault(
@@ -1156,7 +1154,7 @@
}
// Check if the method is inline-able by standard inliner.
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, method.holder());
if (singleTarget == null) {
return false;
}
@@ -1190,7 +1188,7 @@
}
private boolean exemptFromInstructionLimit(DexEncodedMethod inlinee) {
- DexType inlineeHolder = inlinee.method.holder;
+ DexType inlineeHolder = inlinee.holder();
DexClass inlineeClass = appView.definitionFor(inlineeHolder);
assert inlineeClass != null;
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 84b952b..7dcc31a 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
@@ -92,7 +92,7 @@
public void analyzeEnums(IRCode code) {
// Enum <clinit> and <init> are analyzed in between the two processing phases using optimization
// feedback. Methods valueOf and values are generated by javac and are analyzed differently.
- DexClass dexClass = appView.definitionFor(code.method.method.holder);
+ DexClass dexClass = appView.definitionFor(code.method.holder());
if (dexClass.isEnum()
&& (code.method.isInitializer()
|| appView.dexItemFactory().enumMethods.isValueOfMethod(code.method.method, dexClass)
@@ -349,7 +349,7 @@
return Reason.INVALID_INVOKE_ON_ARRAY;
}
DexEncodedMethod encodedSingleTarget =
- invokeMethod.lookupSingleTarget(appView, code.method.method.holder);
+ invokeMethod.lookupSingleTarget(appView, code.method.holder());
if (encodedSingleTarget == null) {
return Reason.INVALID_INVOKE;
}
@@ -411,7 +411,7 @@
if (field == null) {
return Reason.INVALID_FIELD_PUT;
}
- DexProgramClass dexClass = appView.definitionForProgramType(field.field.holder);
+ DexProgramClass dexClass = appView.definitionForProgramType(field.holder());
if (dexClass == null) {
return Reason.INVALID_FIELD_PUT;
}
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 ba24e19..791c889 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
@@ -85,7 +85,7 @@
TypeElement[] staticTypes = new TypeElement[size];
if (!encodedMethod.isStatic()) {
staticTypes[0] =
- TypeElement.fromDexType(encodedMethod.method.holder, definitelyNotNull(), appView);
+ TypeElement.fromDexType(encodedMethod.holder(), definitelyNotNull(), appView);
}
for (int i = 0; i < encodedMethod.method.getArity(); i++) {
staticTypes[i + argOffset] =
@@ -168,7 +168,7 @@
Value aliasedValue = arg.getAliasedValue();
if (!aliasedValue.isPhi()) {
AbstractValue abstractValue =
- aliasedValue.definition.getAbstractValue(appView, method.method.holder);
+ aliasedValue.definition.getAbstractValue(appView, method.holder());
if (abstractValue.isNonTrivial()) {
newCallSiteInfo.constants.put(i, abstractValue);
}
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 19c897f..4889b2e 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
@@ -177,7 +177,7 @@
return;
}
- DexClass clazz = appView.definitionFor(method.method.holder);
+ DexClass clazz = appView.definitionFor(method.holder());
if (clazz == null) {
return;
}
@@ -241,8 +241,7 @@
case INVOKE_STATIC:
{
InvokeStatic invoke = insn.asInvokeStatic();
- DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView, method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, method.holder());
if (singleTarget == null) {
return; // Not allowed.
}
@@ -263,7 +262,7 @@
DexMethod invokedMethod = invoke.getInvokedMethod();
DexType returnType = invokedMethod.proto.returnType;
if (returnType.isClassType()
- && appView.appInfo().isRelatedBySubtyping(returnType, method.method.holder)) {
+ && appView.appInfo().isRelatedBySubtyping(returnType, method.holder())) {
return; // Not allowed, could introduce an alias of the receiver.
}
callsReceiver.add(new Pair<>(Invoke.Type.VIRTUAL, invokedMethod));
@@ -373,7 +372,7 @@
if (definition.isArgument()) {
feedback.methodReturnsArgument(method, definition.asArgument().getIndex());
}
- DexType context = method.method.holder;
+ DexType context = method.holder();
AbstractValue abstractReturnValue = definition.getAbstractValue(appView, context);
if (abstractReturnValue.isNonTrivial()) {
feedback.methodReturnsAbstractValue(method, appView, abstractReturnValue);
@@ -417,7 +416,7 @@
return;
}
- DexClass clazz = appView.appInfo().definitionFor(method.method.holder);
+ DexClass clazz = appView.appInfo().definitionFor(method.holder());
if (clazz == null) {
assert false;
return;
@@ -687,7 +686,7 @@
if (method.isStatic()) {
// Identifies if the method preserves class initialization after inlining.
feedback.markTriggerClassInitBeforeAnySideEffect(
- method, triggersClassInitializationBeforeSideEffect(method.method.holder, code, appView));
+ method, triggersClassInitializationBeforeSideEffect(method.holder(), code, appView));
} else {
// Identifies if the method preserves null check of the receiver after inlining.
final Value receiver = code.getThis();
@@ -707,7 +706,7 @@
return alwaysTriggerExpectedEffectBeforeAnythingElse(
code,
(instruction, it) -> {
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
if (instruction.definitelyTriggersClassInitialization(
clazz, context, appView, DIRECTLY, AnalysisAssumption.INSTRUCTION_DOES_NOT_THROW)) {
// In order to preserve class initialization semantic, the exception must not be caught
@@ -849,7 +848,7 @@
// We found a NPE check on the value.
return InstructionEffect.DESIRED_EFFECT;
}
- } else if (instr.instructionMayHaveSideEffects(appView, code.method.method.holder)) {
+ } else if (instr.instructionMayHaveSideEffects(appView, code.method.holder())) {
// If the current instruction is const-string, this could load the parameter name.
// Just make sure it is indeed not throwing.
if (instr.isConstString() && !instr.instructionInstanceCanThrow()) {
@@ -1014,7 +1013,7 @@
if (appView.appInfo().mayHaveSideEffects.containsKey(method.method)) {
return;
}
- DexType context = method.method.holder;
+ DexType context = method.holder();
if (method.isClassInitializer()) {
// For class initializers, we also wish to compute if the class initializer has observable
// side effects.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java
index 3a98637..608c41f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/InliningIRProvider.java
@@ -38,7 +38,7 @@
return cached;
}
Position position = Position.getPositionForInlining(appView, invoke, context);
- Origin origin = appView.appInfo().originFor(method.method.holder);
+ Origin origin = appView.appInfo().originFor(method.holder());
return method.buildInliningIR(
context, appView, valueNumberGenerator, position, origin, methodProcessor);
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
index 1ff91c0..091a5e5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
@@ -32,8 +32,7 @@
return;
}
- Collection<DexEncodedMethod> possibleTargets =
- invoke.lookupTargets(appView, context.method.holder);
+ Collection<DexEncodedMethod> possibleTargets = invoke.lookupTargets(appView, context.holder());
if (possibleTargets == null) {
// In principle, this invoke might target any method in the program, but we do not want to
// report a message for each of the methods in `AppInfoWithLiveness#whyAreYouNotInlining`,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
index 64026ca..b141817 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
@@ -220,7 +220,7 @@
"final field `"
+ instancePut.getField()
+ "` must be initialized in a constructor of `"
- + callee.method.holder.toSourceString()
+ + callee.holder().toSourceString()
+ "`.");
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/CodeProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/CodeProcessor.java
index 1648958..eb8b742 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/CodeProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/CodeProcessor.java
@@ -218,7 +218,7 @@
private boolean shouldRewrite(DexType type) {
// Rewrite references to lambda classes if we are outside the class.
- return type != (context != null ? context : method).method.holder;
+ return type != (context != null ? context : method).holder();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
index ce2394c..0bdaa57 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
@@ -133,7 +133,7 @@
Inliner inliner,
DexEncodedMethod context,
InliningIRProvider provider) {
- DexProgramClass clazz = appView.definitionFor(method.method.holder).asProgramClass();
+ DexProgramClass clazz = appView.definitionFor(method.holder()).asProgramClass();
assert clazz != null;
LambdaGroup lambdaGroup = lambdaGroups.get(clazz);
@@ -162,7 +162,7 @@
assert resolution.isSingleResolution();
DexEncodedMethod singleTarget = resolution.getSingleTarget();
assert singleTarget != null;
- invokesToInline.put(invoke, new InliningInfo(singleTarget, singleTarget.method.holder));
+ invokesToInline.put(invoke, new InliningInfo(singleTarget, singleTarget.holder()));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java
index 3e602b7..4d79186 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java
@@ -54,7 +54,7 @@
return field.name == context.kotlin.functional.kotlinStyleLambdaInstanceName
&& lambda == field.type
&& context.factory.isClassConstructor(context.method.method)
- && context.method.method.holder == lambda;
+ && context.method.holder() == lambda;
}
@Override
@@ -100,10 +100,10 @@
// Allow calls to a constructor from other classes if the lambda is singleton,
// otherwise allow such a call only from the same class static initializer.
boolean isSingletonLambda = group.isStateless() && group.isSingletonLambda(lambda);
- return (isSingletonLambda == (context.method.method.holder == lambda)) &&
- invoke.isInvokeDirect() &&
- context.factory.isConstructor(method) &&
- CaptureSignature.getCaptureSignature(method.proto.parameters).equals(group.id().capture);
+ return (isSingletonLambda == (context.method.holder() == lambda))
+ && invoke.isInvokeDirect()
+ && context.factory.isConstructor(method)
+ && CaptureSignature.getCaptureSignature(method.proto.parameters).equals(group.id().capture);
}
private boolean isValidVirtualCall(InvokeMethod invoke) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java
index 31444c6..16d514c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java
@@ -70,7 +70,7 @@
InvokeMethod invoke,
Set<Value> affectedValues) {
Value argument = invoke.arguments().get(0);
- AbstractValue abstractValue = argument.getAbstractValue(appView, code.method.method.holder);
+ AbstractValue abstractValue = argument.getAbstractValue(appView, code.method.holder());
if (abstractValue.isSingleNumberValue()) {
instructionIterator.replaceCurrentInstructionWithStaticGet(
appView,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMethodOptimizer.java
index f3d7cc6..531807e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMethodOptimizer.java
@@ -83,8 +83,7 @@
Instruction instruction = instructionIterator.next();
if (instruction.isInvokeMethod()) {
InvokeMethod invoke = instruction.asInvokeMethod();
- DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView, code.method.method.holder);
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method.holder());
if (singleTarget != null) {
optimizeInvoke(code, instructionIterator, invoke, singleTarget, affectedValues);
}
@@ -103,7 +102,7 @@
Set<Value> affectedValues) {
LibraryMethodModelCollection optimizer =
libraryMethodModelCollections.getOrDefault(
- singleTarget.method.holder, NopLibraryMethodModelCollection.getInstance());
+ singleTarget.holder(), NopLibraryMethodModelCollection.getInstance());
optimizer.optimize(code, instructionIterator, invoke, singleTarget, affectedValues);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
index 501a761..09c8f4e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
@@ -47,7 +47,7 @@
private void optimizeEquals(
IRCode code, InstructionListIterator instructionIterator, InvokeMethod invoke) {
if (appView.appInfo().hasLiveness()) {
- DexType context = code.method.method.holder;
+ DexType context = code.method.holder();
Value first = invoke.arguments().get(0).getAliasedValue();
Value second = invoke.arguments().get(1).getAliasedValue();
if (isPrunedClassNameComparison(first, second, context)
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 3c99a56..9680a8e 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
@@ -78,11 +78,11 @@
}
boolean isHostClassInitializer(DexEncodedMethod method) {
- return factory.isClassConstructor(method.method) && method.method.holder == hostType();
+ return factory.isClassConstructor(method.method) && method.holder() == hostType();
}
DexType hostType() {
- return singletonField.field.holder;
+ return singletonField.holder();
}
DexClass hostClass() {
@@ -212,7 +212,7 @@
public final void examineMethodCode(DexEncodedMethod method, IRCode code) {
Set<Instruction> alreadyProcessed = Sets.newIdentityHashSet();
- CandidateInfo receiverClassCandidateInfo = candidates.get(method.method.holder);
+ CandidateInfo receiverClassCandidateInfo = candidates.get(method.holder());
Value receiverValue = code.getThis(); // NOTE: is null for static methods.
if (receiverClassCandidateInfo != null) {
if (receiverValue != null) {
@@ -224,13 +224,13 @@
// If the candidate is still valid, ignore all instructions
// we treat as valid usages on receiver.
- if (candidates.get(method.method.holder) != null) {
+ if (candidates.get(method.holder()) != null) {
alreadyProcessed.addAll(receiverValue.uniqueUsers());
}
} else {
// We are inside a static method of candidate class.
// Check if this is a valid getter of the singleton field.
- if (method.method.proto.returnType == method.method.holder) {
+ if (method.method.proto.returnType == method.holder()) {
List<Instruction> examined = isValidGetter(receiverClassCandidateInfo, code);
if (examined != null) {
DexEncodedMethod getter = receiverClassCandidateInfo.getter.get();
@@ -272,7 +272,7 @@
// This must guarantee that removing field access will not result in missing side
// effects, otherwise we can still staticize, but cannot remove singleton reads.
while (iterator.hasNext()) {
- if (!isAllowedInHostClassInitializer(method.method.holder, iterator.next(), code)) {
+ if (!isAllowedInHostClassInitializer(method.holder(), iterator.next(), code)) {
candidateInfo.preserveRead.set(true);
iterator.previous();
break;
@@ -463,7 +463,7 @@
if (ListUtils.lastIndexMatching(values, v -> v.getAliasedValue() == candidateValue) != 0
|| methodInvoked == null
- || methodInvoked.method.holder != candidateType) {
+ || methodInvoked.holder() != candidateType) {
return false;
}
@@ -608,7 +608,7 @@
: resolutionResult.isVirtualTarget() ? resolutionResult.getSingleTarget() : null;
if (ListUtils.lastIndexMatching(invoke.inValues(), isAliasedValue) == 0
&& methodInvoked != null
- && methodInvoked.method.holder == candidateInfo.candidate.type) {
+ && methodInvoked.holder() == candidateInfo.candidate.type) {
continue;
}
}
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 f79593b..ecdc979 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
@@ -184,7 +184,7 @@
if (method.isStatic() || factory().isConstructor(method.method)) {
continue;
}
- IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.method.holder));
+ IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.holder()));
assert code != null;
Value thisValue = code.getThis();
assert thisValue != null;
@@ -205,7 +205,7 @@
// CHECK: references to field read usages are fixable.
boolean fixableFieldReads = true;
for (DexEncodedMethod method : info.referencedFrom) {
- IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.method.holder));
+ IRCode code = method.buildIR(appView, appView.appInfo().originFor(method.holder()));
assert code != null;
List<StaticGet> singletonFieldReads =
Streams.stream(code.instructionIterator())
@@ -301,7 +301,7 @@
Collection<BiConsumer<IRCode, MethodProcessor>> codeOptimizations,
OptimizationFeedback feedback,
OneTimeMethodProcessor methodProcessor) {
- Origin origin = appView.appInfo().originFor(method.method.holder);
+ Origin origin = appView.appInfo().originFor(method.holder());
IRCode code = method.buildIR(appView, origin);
codeOptimizations.forEach(codeOptimization -> codeOptimization.accept(code, methodProcessor));
CodeRewriter.removeAssumeInstructions(appView, code);
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 b178579..5506792 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
@@ -273,7 +273,7 @@
return;
}
assert definition.field != field;
- assert definition.field.holder != field.holder;
+ assert definition.holder() != field.holder;
// If the definition is renamed,
if (renaming.containsKey(definition.field)) {
// Assign the same, renamed name as the definition to the reference.
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
index 9286684..6652d4a 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
@@ -52,7 +52,7 @@
public DexString getOrCreateNameFor(DexField field) {
DexEncodedField encodedField = appView.appInfo().resolveField(field);
if (encodedField != null) {
- DexClass clazz = appView.definitionFor(encodedField.field.holder);
+ DexClass clazz = appView.definitionFor(encodedField.holder());
if (clazz == null) {
return field.name;
}
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 d5873a9..332477a 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
@@ -148,13 +148,13 @@
}
Value in = instruction.value();
if (!in.isConstString()) {
- warnUndeterminedIdentifierIfNecessary(field, method.method.holder, instruction, null);
+ warnUndeterminedIdentifierIfNecessary(field, method.holder(), instruction, null);
return iterator;
}
DexString original = in.getConstInstruction().asConstString().getValue();
DexReference itemBasedString = inferMemberOrTypeFromNameString(appView, original);
if (itemBasedString == null) {
- warnUndeterminedIdentifierIfNecessary(field, method.method.holder, instruction, original);
+ warnUndeterminedIdentifierIfNecessary(field, method.holder(), instruction, original);
return iterator;
}
// Move the cursor back to $fieldPut
@@ -213,7 +213,7 @@
if (isReflectionMethod(appView.dexItemFactory(), invokedMethod) || isClassNameComparison) {
DexReference itemBasedString = identifyIdentifier(invoke, appView);
if (itemBasedString == null) {
- DexType context = method.method.holder;
+ DexType context = method.holder();
warnUndeterminedIdentifierIfNecessary(invokedMethod, context, invoke, null);
return iterator;
}
@@ -280,14 +280,13 @@
for (int i = 0; i < ins.size(); i++) {
Value in = ins.get(i);
if (!in.isConstString()) {
- warnUndeterminedIdentifierIfNecessary(invokedMethod, method.method.holder, invoke, null);
+ warnUndeterminedIdentifierIfNecessary(invokedMethod, method.holder(), invoke, null);
continue;
}
DexString original = in.getConstInstruction().asConstString().getValue();
DexReference itemBasedString = inferMemberOrTypeFromNameString(appView, original);
if (itemBasedString == null) {
- warnUndeterminedIdentifierIfNecessary(
- invokedMethod, method.method.holder, invoke, original);
+ warnUndeterminedIdentifierIfNecessary(invokedMethod, method.holder(), invoke, original);
continue;
}
// Move the cursor back to $invoke
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 4d20f6b..beb3727 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -142,7 +142,7 @@
// 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) {
- DexClass targetClass = appView.definitionFor(target.method.holder);
+ DexClass targetClass = appView.definitionFor(target.holder());
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 IndirectSuperInterfaceTest).
@@ -159,8 +159,8 @@
// visibility problems when rebinding.
final DexEncodedMethod finalTarget = target;
Set<DexEncodedMethod> contexts = methodsWithContexts.get(method);
- if (contexts.stream().anyMatch(context ->
- mayNeedBridgeForVisibility(context.method.holder, finalTarget))) {
+ if (contexts.stream()
+ .anyMatch(context -> mayNeedBridgeForVisibility(context.holder(), finalTarget))) {
target =
insertBridgeForVisibilityIfNeeded(
method, target, originalClass, targetClass, lookupTarget);
@@ -217,7 +217,7 @@
}
private boolean mayNeedBridgeForVisibility(DexType context, DexEncodedMethod method) {
- DexType holderType = method.method.holder;
+ DexType holderType = method.holder();
DexClass holder = appView.definitionFor(holderType);
if (holder == null) {
return false;
@@ -315,7 +315,7 @@
.allMatch(
context ->
isMemberVisibleFromOriginalContext(
- appView, context.method.holder, target.field.holder, target.accessFlags))) {
+ appView, context.holder(), target.holder(), target.accessFlags))) {
builder.map(
field, lense.lookupField(validTargetFor(target.field, field, DexClass::lookupField)));
}
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 fdd1274..bfb9fad 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -561,7 +561,7 @@
}
for (DexCallSite callSite : callSites) {
for (DexEncodedMethod method : lookupLambdaImplementedMethods(callSite)) {
- worklist.add(method.method.holder);
+ worklist.add(method.holder());
}
}
while (!worklist.isEmpty()) {
@@ -855,16 +855,16 @@
if (fieldAccessInfo == null || !fieldAccessInfo.isWritten()) {
return false;
}
- DexType holder = field.field.holder;
+ DexType holder = field.holder();
return fieldAccessInfo.isWrittenOnlyInMethodSatisfying(
- method -> method.isInstanceInitializer() && method.method.holder == holder);
+ method -> method.isInstanceInitializer() && method.holder() == holder);
}
public boolean isStaticFieldWrittenOnlyInEnclosingStaticInitializer(DexEncodedField field) {
assert checkIfObsolete();
assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
DexEncodedMethod staticInitializer =
- definitionFor(field.field.holder).asProgramClass().getClassInitializer();
+ definitionFor(field.holder()).asProgramClass().getClassInitializer();
return staticInitializer != null && isFieldOnlyWrittenInMethod(field, staticInitializer);
}
@@ -876,7 +876,7 @@
}
private boolean isLibraryOrClasspathField(DexEncodedField field) {
- DexClass holder = definitionFor(field.field.holder);
+ DexClass holder = definitionFor(field.holder());
return holder == null || holder.isLibraryClass() || holder.isClasspathClass();
}
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 20dde1b..8a9058c 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -495,7 +495,7 @@
}
} else if (item.isDexEncodedField()) {
DexEncodedField dexEncodedField = item.asDexEncodedField();
- DexProgramClass holder = getProgramClassOrNull(dexEncodedField.field.holder);
+ DexProgramClass holder = getProgramClassOrNull(dexEncodedField.holder());
if (holder != null) {
workList.enqueueMarkFieldKeptAction(
holder,
@@ -504,7 +504,7 @@
}
} else if (item.isDexEncodedMethod()) {
DexEncodedMethod encodedMethod = item.asDexEncodedMethod();
- DexProgramClass holder = getProgramClassOrNull(encodedMethod.method.holder);
+ DexProgramClass holder = getProgramClassOrNull(encodedMethod.holder());
if (holder != null) {
workList.enqueueMarkMethodKeptAction(
holder,
@@ -537,7 +537,7 @@
// Utility to avoid adding to the worklist if already live.
private boolean enqueueMarkMethodLiveAction(
DexProgramClass clazz, DexEncodedMethod method, KeepReason reason) {
- assert method.method.holder == clazz.type;
+ assert method.holder() == clazz.type;
if (liveMethods.add(clazz, method, reason)) {
workList.enqueueMarkMethodLiveAction(clazz, method, reason);
return true;
@@ -657,7 +657,7 @@
CfCode code = contextMethod.getCode().asCfCode();
if (code != null) {
LambdaClass lambdaClass =
- lambdaRewriter.getOrCreateLambdaClass(descriptor, contextMethod.method.holder);
+ lambdaRewriter.getOrCreateLambdaClass(descriptor, contextMethod.holder());
lambdaClasses.put(lambdaClass.type, new Pair<>(lambdaClass, contextMethod));
lambdaCallSites
.computeIfAbsent(contextMethod, k -> new IdentityHashMap<>())
@@ -1059,7 +1059,7 @@
fieldAccessInfoCollection.get(encodedField.field).setReadFromMethodHandle();
}
- DexProgramClass clazz = getProgramClassOrNull(encodedField.field.holder);
+ DexProgramClass clazz = getProgramClassOrNull(encodedField.holder());
if (clazz == null) {
return false;
}
@@ -1108,7 +1108,7 @@
fieldAccessInfoCollection.get(encodedField.field).setWrittenFromMethodHandle();
}
- DexProgramClass clazz = getProgramClassOrNull(encodedField.field.holder);
+ DexProgramClass clazz = getProgramClassOrNull(encodedField.holder());
if (clazz == null) {
return false;
}
@@ -1156,7 +1156,7 @@
fieldAccessInfoCollection.get(encodedField.field).setReadFromMethodHandle();
}
- if (!isProgramClass(encodedField.field.holder)) {
+ if (!isProgramClass(encodedField.holder())) {
// No need to trace into the non-program code.
return false;
}
@@ -1213,7 +1213,7 @@
fieldAccessInfoCollection.get(encodedField.field).setWrittenFromMethodHandle();
}
- if (!isProgramClass(encodedField.field.holder)) {
+ if (!isProgramClass(encodedField.holder())) {
// No need to trace into the non-program code.
return false;
}
@@ -1255,7 +1255,7 @@
if (methodHolderClass != null && methodHolderClass.isInterface()) {
return method;
}
- DexClass holderClass = appView.definitionFor(currentMethod.method.holder);
+ DexClass holderClass = appView.definitionFor(currentMethod.holder());
if (holderClass == null || holderClass.superType == null || holderClass.isInterface()) {
// We do not know better or this call is made from an interface.
return method;
@@ -1717,7 +1717,7 @@
private void markMethodAsTargeted(
DexProgramClass clazz, DexEncodedMethod method, KeepReason reason) {
- assert method.method.holder == clazz.type;
+ assert method.holder() == clazz.type;
if (!targetedMethods.add(method, reason)) {
// Already targeted.
return;
@@ -1820,7 +1820,7 @@
StringDiagnostic message =
new StringDiagnostic(
"Lambda expression implements missing interface `" + itf.toSourceString() + "`",
- appInfo.originFor(context.method.holder));
+ appInfo.originFor(context.holder()));
options.reporter.warning(message);
} else if (!clazz.isInterface()) {
StringDiagnostic message =
@@ -1829,7 +1829,7 @@
+ "`"
+ itf.toSourceString()
+ "`",
- appInfo.originFor(context.method.holder));
+ appInfo.originFor(context.holder()));
options.reporter.warning(message);
}
}
@@ -1969,7 +1969,7 @@
&& appView.rewritePrefix.hasRewrittenTypeInSignature(method.method.proto, appView)) {
DexMethod methodToResolve =
DesugaredLibraryAPIConverter.methodWithVivifiedTypeInSignature(
- method.method, method.method.holder, appView);
+ method.method, method.holder(), appView);
assert methodToResolve != method.method;
markLibraryOrClasspathOverrideLive(
instantiation,
@@ -2124,7 +2124,7 @@
DexProgramClass holder, DexEncodedField field, KeepReason reason) {
assert field != null;
assert field.isProgramField(appView);
- markTypeAsLive(field.field.holder, reason);
+ markTypeAsLive(field.holder(), reason);
markTypeAsLive(field.field.type, reason);
if (Log.ENABLED) {
Log.verbose(getClass(), "Adding instance field `%s` to live set.", field.field);
@@ -2141,7 +2141,7 @@
private void markDirectStaticOrConstructorMethodAsLive(
DexProgramClass clazz, DexEncodedMethod encodedMethod, KeepReason reason) {
- assert encodedMethod.method.holder == clazz.type;
+ assert encodedMethod.holder() == clazz.type;
if (!enqueueMarkMethodLiveAction(clazz, encodedMethod, reason)) {
// Already marked live.
@@ -2196,7 +2196,7 @@
if (info == null) {
return false;
}
- DexClass clazz = appView.definitionFor(field.field.holder);
+ DexClass clazz = appView.definitionFor(field.holder());
DexEncodedMethod defaultInitializer = clazz.getDefaultInitializer();
return defaultInitializer != null
? info.isWrittenOutside(defaultInitializer)
@@ -2385,7 +2385,7 @@
failedResolutionTargets.add(symbolicMethod);
failedResolution.forEachFailureDependency(
method -> {
- DexProgramClass clazz = getProgramClassOrNull(method.method.holder);
+ DexProgramClass clazz = getProgramClassOrNull(method.holder());
if (clazz != null) {
failedResolutionTargets.add(method.method);
markMethodAsTargeted(clazz, method, reason);
@@ -2430,14 +2430,14 @@
}
// If invoke target is invalid (inaccessible or not an instance-method) record it and stop.
// TODO(b/146016987): We should be passing the full program context and not looking it up again.
- DexProgramClass fromHolder = appInfo.definitionFor(from.method.holder).asProgramClass();
+ DexProgramClass fromHolder = appInfo.definitionFor(from.holder()).asProgramClass();
DexEncodedMethod target = resolution.lookupInvokeSuperTarget(fromHolder, appInfo);
if (target == null) {
failedResolutionTargets.add(resolution.getResolvedMethod().method);
return;
}
- DexProgramClass clazz = getProgramClassOrNull(target.method.holder);
+ DexProgramClass clazz = getProgramClassOrNull(target.holder());
if (clazz == null) {
return;
}
@@ -2645,7 +2645,7 @@
// Ensure accessors if needed and mark them live too.
DexEncodedMethod accessor = lambdaClass.target.ensureAccessibilityIfNeeded(false);
if (accessor != null) {
- DexProgramClass clazz = getProgramClassOrNull(accessor.method.holder);
+ DexProgramClass clazz = getProgramClassOrNull(accessor.holder());
additions.addLiveMethod(new ProgramMethod(clazz, accessor));
}
}
@@ -2826,7 +2826,7 @@
// Generate first the callbacks since they may require extra wrappers.
List<DexEncodedMethod> callbacks = desugaredLibraryWrapperAnalysis.generateCallbackMethods();
for (DexEncodedMethod callback : callbacks) {
- DexProgramClass clazz = getProgramClassOrNull(callback.method.holder);
+ DexProgramClass clazz = getProgramClassOrNull(callback.holder());
additions.addLiveMethod(new ProgramMethod(clazz, callback));
}
@@ -3111,7 +3111,7 @@
} else {
DexEncodedMethod implementation = target.getDefaultInterfaceMethodImplementation();
if (implementation != null) {
- DexProgramClass companion = getProgramClassOrNull(implementation.method.holder);
+ DexProgramClass companion = getProgramClassOrNull(implementation.holder());
markTypeAsLive(companion, graphReporter.reportCompanionClass(holder, companion));
markVirtualMethodAsLive(
companion,
@@ -3128,7 +3128,7 @@
// Package protected due to entry point from worklist.
void markFieldAsKept(DexProgramClass holder, DexEncodedField target, KeepReason reason) {
- assert holder.type == target.field.holder;
+ assert holder.type == target.holder();
if (target.accessFlags.isStatic()) {
markStaticFieldAsLive(target, reason);
} else {
@@ -3206,7 +3206,7 @@
void markMethodAsLive(DexEncodedMethod method, KeepReason reason) {
assert liveMethods.contains(method);
- DexProgramClass clazz = getProgramClassOrNull(method.method.holder);
+ DexProgramClass clazz = getProgramClassOrNull(method.holder());
if (clazz == null) {
return;
}
@@ -3221,7 +3221,7 @@
if (Log.ENABLED) {
Log.verbose(getClass(), "Found super invoke constraint on `%s`.", superCallTarget.method);
}
- DexProgramClass targetClass = getProgramClassOrNull(superCallTarget.method.holder);
+ DexProgramClass targetClass = getProgramClassOrNull(superCallTarget.holder());
assert targetClass != null;
if (targetClass != null) {
markMethodAsTargeted(
@@ -3246,7 +3246,7 @@
private void markReferencedTypesAsLive(DexEncodedMethod method) {
markTypeAsLive(
- method.method.holder, clazz -> graphReporter.reportClassReferencedFrom(clazz, method));
+ method.holder(), clazz -> graphReporter.reportClassReferencedFrom(clazz, method));
markParameterAndReturnTypesAsLive(method);
}
@@ -3290,7 +3290,7 @@
}
private void handleReflectiveBehavior(DexEncodedMethod method) {
- DexType originHolder = method.method.holder;
+ DexType originHolder = method.holder();
Origin origin = appInfo.originFor(originHolder);
IRCode code = method.buildIR(appView, origin);
InstructionIterator iterator = code.instructionIterator();
@@ -3578,7 +3578,7 @@
DexType type = invoke.inValues().get(0).definition.asConstClass().getValue();
DexProgramClass clazz = getProgramClassOrNull(type);
if (clazz != null && clazz.accessFlags.isEnum()) {
- DexProgramClass holder = getProgramClassOrNull(method.method.holder);
+ DexProgramClass holder = getProgramClassOrNull(method.holder());
markEnumValuesAsReachable(clazz, KeepReason.invokedFrom(holder, method));
}
}
@@ -3603,7 +3603,7 @@
+ "` is being passed to the method `"
+ invoke.getInvokedMethod().toSourceString()
+ "`, but was not found in `META-INF/services/`.",
- appInfo.originFor(method.method.holder)));
+ appInfo.originFor(method.holder())));
}
return;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
index c795bcc..2a46ba3 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
@@ -264,7 +264,7 @@
public void enqueueMarkReachableFieldAction(
DexProgramClass clazz, DexEncodedField field, KeepReason reason) {
- assert field.field.holder == clazz.type;
+ assert field.holder() == clazz.type;
queue.add(new MarkReachableFieldAction(field, reason));
}
@@ -294,13 +294,13 @@
void enqueueMarkMethodLiveAction(
DexProgramClass clazz, DexEncodedMethod method, KeepReason reason) {
- assert method.method.holder == clazz.type;
+ assert method.holder() == clazz.type;
queue.add(new MarkMethodLiveAction(method, reason));
}
void enqueueMarkMethodKeptAction(
DexProgramClass clazz, DexEncodedMethod method, KeepReason reason) {
- assert method.method.holder == clazz.type;
+ assert method.holder() == clazz.type;
queue.add(new MarkMethodKeptAction(clazz, method, reason));
}
@@ -317,7 +317,7 @@
public void enqueueTraceInvokeDirectAction(
DexMethod invokedMethod, DexProgramClass currentHolder, DexEncodedMethod currentMethod) {
- assert currentMethod.method.holder == currentHolder.type;
+ assert currentMethod.holder() == currentHolder.type;
queue.add(new TraceInvokeDirectAction(invokedMethod, currentHolder, currentMethod));
}
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 cf863de..6c52e2a 100644
--- a/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
+++ b/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
@@ -171,7 +171,7 @@
public KeepReasonWitness reportCompatKeepDefaultInitializer(
DexProgramClass holder, DexEncodedMethod defaultInitializer) {
- assert holder.type == defaultInitializer.method.holder;
+ assert holder.type == defaultInitializer.holder();
assert holder.getDefaultInitializer() == defaultInitializer;
if (keptGraphConsumer != null) {
reportEdge(
@@ -183,7 +183,7 @@
}
public KeepReasonWitness reportCompatKeepMethod(DexProgramClass holder, DexEncodedMethod method) {
- assert holder.type == method.method.holder;
+ assert holder.type == method.holder();
// TODO(b/141729349): This compat rule is from the method to itself and has not edge. Fix it.
// The rule is stating that if the method is targeted it is live. Since such an edge does
// not contribute to additional information in the kept graph as it stands (no distinction
@@ -234,7 +234,7 @@
public KeepReasonWitness reportReachableClassInitializer(
DexProgramClass clazz, DexEncodedMethod initializer) {
if (initializer != null) {
- assert clazz.type == initializer.method.holder;
+ assert clazz.type == initializer.holder();
assert initializer.isClassInitializer();
if (keptGraphConsumer != null) {
ClassGraphNode source = getClassGraphNode(clazz.type);
@@ -284,7 +284,7 @@
public KeepReasonWitness reportCompanionMethod(
DexEncodedMethod definition, DexEncodedMethod implementation) {
- assert InterfaceMethodRewriter.isCompanionClassType(implementation.method.holder);
+ assert InterfaceMethodRewriter.isCompanionClassType(implementation.holder());
if (keptGraphConsumer == null) {
return KeepReasonWitness.INSTANCE;
}
@@ -359,7 +359,7 @@
if (skipReporting(reason)) {
return KeepReasonWitness.INSTANCE;
}
- if (reason.edgeKind() == EdgeKind.IsLibraryMethod && isNonProgramClass(method.method.holder)) {
+ if (reason.edgeKind() == EdgeKind.IsLibraryMethod && isNonProgramClass(method.holder())) {
// Don't report edges to actual library methods.
// TODO(b/120959039): This should be dead code once no library classes are ever enqueued.
return KeepReasonWitness.INSTANCE;
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 c66d4a4..dd76e19 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepReason.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepReason.java
@@ -152,7 +152,7 @@
private InvokedFrom(DexProgramClass holder, DexEncodedMethod method) {
super(method);
- assert holder.type == method.method.holder;
+ assert holder.type == method.holder();
}
@Override
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 f75a307..590ede0 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationUtils.java
@@ -57,7 +57,7 @@
public static ProguardKeepRule buildMethodKeepRule(DexClass clazz, DexEncodedMethod method) {
// TODO(b/122295241): These generated rules should be linked into the graph, eg, the method
// using identified reflection should be the source keeping the target alive.
- assert clazz.type == method.method.holder;
+ assert clazz.type == method.holder();
ProguardKeepRule.Builder builder = ProguardKeepRule.builder();
builder.setOrigin(proguardCompatOrigin);
builder.setType(ProguardKeepRuleType.KEEP_CLASS_MEMBERS);
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
index 928de3a..a0576b6 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
@@ -377,7 +377,7 @@
DexEncodedMethod target =
appView.appInfo().resolveMethod(subType, referenceInSubType).getSingleTarget();
// But, the resolution should not be landed on the current type we are visiting.
- if (target == null || target.method.holder == type) {
+ if (target == null || target.holder() == type) {
continue;
}
ProguardMemberRule ruleInSubType = assumeRulePool.get(target.method);
@@ -598,7 +598,7 @@
private boolean canInsertForwardingMethod(DexClass holder, DexEncodedMethod target) {
return appView.options().isGeneratingDex()
- || ArrayUtils.contains(holder.interfaces.values, target.method.holder);
+ || ArrayUtils.contains(holder.interfaces.values, target.holder());
}
private void markMatchingOverriddenMethods(
@@ -1056,7 +1056,7 @@
if (options.isInterfaceMethodDesugaringEnabled()
&& encodedMethod.hasCode()
&& (encodedMethod.isPrivateMethod() || encodedMethod.isStaticMember())) {
- DexClass holder = appView.definitionFor(encodedMethod.method.holder);
+ DexClass holder = appView.definitionFor(encodedMethod.holder());
if (holder != null && holder.isInterface()) {
if (rule.isSpecific()) {
options.reporter.warning(
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 7326fad..4675107 100644
--- a/src/main/java/com/android/tools/r8/shaking/ScopedDexMethodSet.java
+++ b/src/main/java/com/android/tools/r8/shaking/ScopedDexMethodSet.java
@@ -63,8 +63,8 @@
}
if (method.accessFlags.isMoreVisibleThan(
existing.accessFlags,
- method.method.holder.getPackageName(),
- existing.method.holder.getPackageName())) {
+ method.holder().getPackageName(),
+ existing.holder().getPackageName())) {
items.put(wrapped, method);
return AddMethodIfMoreVisibleResult.ADDED_MORE_VISIBLE;
}
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 92fa339..8ec0dac 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -736,7 +736,7 @@
// Conservatively find all possible targets for this method.
LookupResultSuccess lookupResult =
appInfo
- .resolveMethodOnInterface(method.method.holder, method.method)
+ .resolveMethodOnInterface(method.holder(), method.method)
.lookupVirtualDispatchTargets(target, appInfo)
.asLookupResultSuccess();
assert lookupResult != null;
@@ -988,7 +988,7 @@
Rename.ALWAYS,
appView
.dexItemFactory()
- .prependTypeToProto(virtualMethod.method.holder, virtualMethod.method.proto));
+ .prependTypeToProto(virtualMethod.holder(), virtualMethod.method.proto));
makeStatic(resultingDirectMethod);
// Update method pool collection now that we are adding a new public method.
@@ -1327,7 +1327,7 @@
private DexEncodedMethod renameConstructor(
DexEncodedMethod method, Predicate<DexMethod> availableMethodSignatures) {
assert method.isInstanceInitializer();
- DexType oldHolder = method.method.holder;
+ DexType oldHolder = method.holder();
DexMethod newSignature;
int count = 1;
@@ -1363,7 +1363,7 @@
// renamed already.
assert !method.accessFlags.isConstructor() || strategy == Rename.NEVER;
DexString oldName = method.method.name;
- DexType oldHolder = method.method.holder;
+ DexType oldHolder = method.holder();
DexMethod newSignature;
switch (strategy) {
@@ -1398,7 +1398,7 @@
private DexEncodedField renameFieldIfNeeded(
DexEncodedField field, Predicate<DexField> availableFieldSignatures) {
DexString oldName = field.field.name;
- DexType oldHolder = field.field.holder;
+ DexType oldHolder = field.holder();
DexField newSignature =
application.dexItemFactory.createField(target.type, field.field.type, oldName);
@@ -1647,7 +1647,7 @@
code.computeInliningConstraint(
method,
appView,
- new SingleTypeMapperGraphLense(method.method.holder, invocationContext),
+ new SingleTypeMapperGraphLense(method.holder(), invocationContext),
invocationContext);
if (constraint == ConstraintWithTarget.NEVER) {
return AbortReason.UNSAFE_INLINING;
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLense.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLense.java
index eded127..1013539 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLense.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLense.java
@@ -125,7 +125,7 @@
if (virtualToDirectMethodMap != null) {
GraphLenseLookupResult lookup = virtualToDirectMethodMap.get(previous.getMethod());
if (lookup != null) {
- // If the super class A of the enclosing class B (i.e., context.method.holder)
+ // If the super class A of the enclosing class B (i.e., context.holder())
// has been merged into B during vertical class merging, and this invoke-super instruction
// was resolving to a method in A, then the target method has been changed to a direct
// method and moved into B, so that we need to use an invoke-direct instruction instead of
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 6bce9c1..9c18d3a 100644
--- a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
@@ -185,7 +185,7 @@
if (parsedData != null || parsedKotlinSourceDebugExtensions.containsKey(holder)) {
return parsedData;
}
- DexClass clazz = appView.definitionFor(currentMethod.method.holder);
+ DexClass clazz = appView.definitionFor(currentMethod.holder());
DexValueString dexValueString = appView.getSourceDebugExtensionForType(clazz);
if (dexValueString != null) {
parsedData = KotlinSourceDebugExtensionParser.parse(dexValueString.value.toString());
@@ -456,7 +456,7 @@
continue;
}
// We use the same name for interface names even if it has different types.
- DexProgramClass clazz = appView.definitionForProgramType(method.method.holder);
+ DexProgramClass clazz = appView.definitionForProgramType(method.holder());
DexClassAndMethod lookupResult =
appView.appInfo().lookupMaximallySpecificMethod(clazz, method.method);
if (lookupResult == null) {
@@ -783,7 +783,7 @@
}
method.setCode(
new CfCode(
- method.method.holder,
+ method.holder(),
oldCode.getMaxStack(),
oldCode.getMaxLocals(),
newInstructions,
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 862bb79..2ffc39e 100644
--- a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
+++ b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
@@ -102,8 +102,7 @@
if (method.isInitializer()) {
continue;
}
- String methodName =
- method.method.holder.getName() + "_" + method.method.name.toString();
+ String methodName = method.holder().getName() + "_" + method.method.name.toString();
codePrinter.visitMethod(methodName, method.getCode().asCfCode());
}
});
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 07db6bd..2438ab2 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -83,12 +83,9 @@
DexEncodedMethod method = getMethod(inspector, DEFAULT_CLASS_NAME, "int", "x",
ImmutableList.of());
assertFalse(
- appInfo
- .resolveMethod(method.method.holder, method.method)
- .getSingleTarget()
- .isVirtualMethod());
- assertNull(appInfo.lookupDirectTarget(method.method, method.method.holder));
- assertNotNull(appInfo.lookupStaticTarget(method.method, method.method.holder));
+ appInfo.resolveMethod(method.holder(), method.method).getSingleTarget().isVirtualMethod());
+ assertNull(appInfo.lookupDirectTarget(method.method, method.holder()));
+ assertNotNull(appInfo.lookupStaticTarget(method.method, method.holder()));
if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(DexVm.Version.V4_4_4)) {
// Dalvik rejects at verification time instead of producing the
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 741be70..20ed6dc 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreLookupTest.java
@@ -94,7 +94,7 @@
.asLookupResultSuccess();
assertNotNull(lookupResult);
assertFalse(lookupResult.hasLambdaTargets());
- if (appInfo().subtypes(method.method.holder).stream()
+ if (appInfo().subtypes(method.holder()).stream()
.allMatch(t -> appInfo().definitionFor(t).isInterface())) {
Counter counter = new Counter();
lookupResult.forEach(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java
index 2a2ad92..b5997bf 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/HashCodeTest.java
@@ -43,8 +43,8 @@
private void callSiteOptimizationInfoInspect(DexEncodedMethod encodedMethod) {
// TODO(b/139246447): should avoid visiting A#<init>, which is trivial, default init!
- assert encodedMethod.method.holder.toSourceString().endsWith("A")
- && encodedMethod.toSourceString().contains("<init>")
+ assert encodedMethod.holder().toSourceString().endsWith("A")
+ && encodedMethod.toSourceString().contains("<init>")
: "Unexpected revisit: " + encodedMethod.toSourceString();
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java
index 4890c6a..54a3b8e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeInterfaceWithRefinedReceiverTest.java
@@ -64,7 +64,7 @@
assert encodedMethod.method.name.toString().equals("m")
: "Unexpected revisit: " + encodedMethod.toSourceString();
CallSiteOptimizationInfo callSiteOptimizationInfo = encodedMethod.getCallSiteOptimizationInfo();
- if (encodedMethod.method.holder.toSourceString().endsWith("$C")) {
+ if (encodedMethod.holder().toSourceString().endsWith("$C")) {
assert callSiteOptimizationInfo.getDynamicUpperBoundType(1).isDefinitelyNotNull();
} else {
assert callSiteOptimizationInfo.getDynamicUpperBoundType(1).isDefinitelyNull();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java
index a0a436d..96b85ec 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/InvokeVirtualWithRefinedReceiverTest.java
@@ -61,7 +61,7 @@
assert encodedMethod.method.name.toString().equals("m")
: "Unexpected revisit: " + encodedMethod.toSourceString();
CallSiteOptimizationInfo callSiteOptimizationInfo = encodedMethod.getCallSiteOptimizationInfo();
- if (encodedMethod.method.holder.toSourceString().endsWith("$C")) {
+ if (encodedMethod.holder().toSourceString().endsWith("$C")) {
assert callSiteOptimizationInfo.getDynamicUpperBoundType(1).isDefinitelyNotNull();
} else {
assert callSiteOptimizationInfo.getDynamicUpperBoundType(1).isDefinitelyNull();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java
index ab5d763..14ff937 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/constants/InvokeVirtualPositiveTest.java
@@ -65,7 +65,7 @@
CallSiteOptimizationInfo callSiteOptimizationInfo = encodedMethod.getCallSiteOptimizationInfo();
assert callSiteOptimizationInfo.getDynamicUpperBoundType(1).isDefinitelyNotNull();
AbstractValue abstractValue = callSiteOptimizationInfo.getAbstractArgumentValue(1);
- if (encodedMethod.method.holder.toSourceString().endsWith("$A")) {
+ if (encodedMethod.holder().toSourceString().endsWith("$A")) {
assert abstractValue.isSingleStringValue()
&& abstractValue.asSingleStringValue().getDexString().toString().equals("nul");
} else {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java
index 8cc1e12..204f41b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/dynamicupperboundtype/InvokeInterfacePositiveTest.java
@@ -66,7 +66,7 @@
CallSiteOptimizationInfo callSiteOptimizationInfo = encodedMethod.getCallSiteOptimizationInfo();
TypeElement upperBoundType = callSiteOptimizationInfo.getDynamicUpperBoundType(1);
assert upperBoundType.isDefinitelyNotNull();
- if (encodedMethod.method.holder.toSourceString().endsWith("$A")) {
+ if (encodedMethod.holder().toSourceString().endsWith("$A")) {
assert upperBoundType.isClassType()
&& upperBoundType.asClassType().getClassType().toSourceString().endsWith("$Sub1");
} else {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java
index ad7b3ae..4882c32 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualNegativeTest.java
@@ -66,7 +66,7 @@
TypeElement upperBoundType = callSiteOptimizationInfo.getDynamicUpperBoundType(1);
assert upperBoundType.isNullable();
assert upperBoundType.isClassType()
- && upperBoundType.asClassType().getClassType().equals(encodedMethod.method.holder);
+ && upperBoundType.asClassType().getClassType().equals(encodedMethod.holder());
} else {
assert methodName.equals("test");
assert callSiteOptimizationInfo.getDynamicUpperBoundType(0).isDefinitelyNotNull();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java
index 0551286..0009024 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/nullability/InvokeVirtualPositiveTest.java
@@ -64,10 +64,10 @@
TypeElement upperBoundType = callSiteOptimizationInfo.getDynamicUpperBoundType(1);
assert upperBoundType.isClassType()
&& upperBoundType.asClassType().getClassType().toSourceString().endsWith("$A");
- if (encodedMethod.method.holder.toSourceString().endsWith("$A")) {
+ if (encodedMethod.holder().toSourceString().endsWith("$A")) {
assert upperBoundType.isDefinitelyNotNull();
} else {
- assert encodedMethod.method.holder.toSourceString().endsWith("$B");
+ assert encodedMethod.holder().toSourceString().endsWith("$B");
assert upperBoundType.isNullable();
}
}
diff --git a/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java b/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java
index 0d89583..7bd9cc9 100644
--- a/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/SingleTargetLookupTest.java
@@ -186,8 +186,7 @@
Assert.assertNull(singleVirtualTarget);
} else {
Assert.assertNotNull(singleVirtualTarget);
- Assert.assertEquals(
- toType(singleTargetHolderOrNull, appInfo), singleVirtualTarget.method.holder);
+ Assert.assertEquals(toType(singleTargetHolderOrNull, appInfo), singleVirtualTarget.holder());
}
}
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java
index a9dc70f..18cbb66 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessTest.java
@@ -133,7 +133,7 @@
DexEncodedMethod targetSuper =
resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
if (inSameNest) {
- assertEquals(definingClassDefinition.type, targetSpecial.method.holder);
+ assertEquals(definingClassDefinition.type, targetSpecial.holder());
assertEquals(targetSpecial, targetSuper);
} else {
assertNull(targetSpecial);
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java
index 490b7dc..58575d8 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessTest.java
@@ -109,7 +109,7 @@
DexEncodedMethod targetSuper =
resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
if (inSameNest) {
- assertEquals(definingClassDefinition.type, targetSpecial.method.holder);
+ assertEquals(definingClassDefinition.type, targetSpecial.holder());
assertEquals(targetSpecial, targetSuper);
} else {
assertNull(targetSpecial);
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
index 8e21be0..79e8f76 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
@@ -142,7 +142,7 @@
DexEncodedMethod targetSuper =
resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
if (inSameNest && symbolicReferenceIsDefiningType) {
- assertEquals(definingClassDefinition.type, targetSpecial.method.holder);
+ assertEquals(definingClassDefinition.type, targetSpecial.holder());
assertEquals(targetSpecial, targetSuper);
} else {
assertNull(targetSpecial);
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java
index 49426c4..db75b6e 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodPublicAccessWithIntermediateTest.java
@@ -108,7 +108,7 @@
// Verify that looking up the dispatch target returns the defining method.
DexEncodedMethod targetSpecial =
resolutionResult.lookupInvokeSpecialTarget(callerClassDefinition, appInfo);
- assertEquals(definingClassDefinition.type, targetSpecial.method.holder);
+ assertEquals(definingClassDefinition.type, targetSpecial.holder());
DexEncodedMethod targetSuper =
resolutionResult.lookupInvokeSuperTarget(callerClassDefinition, appInfo);
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/AbstractAllTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/AbstractAllTest.java
index 005f292..b6023ce 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/AbstractAllTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/AbstractAllTest.java
@@ -48,7 +48,7 @@
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
// Currently R8 will resolve to L::f as that is the first in the topological search.
// Resolution may return any of the matches, so it is valid if this expectation changes.
- assertEquals(L.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(L.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultLeftAbstractRightTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultLeftAbstractRightTest.java
index 0c3ed4c..2068ef1 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultLeftAbstractRightTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultLeftAbstractRightTest.java
@@ -51,7 +51,7 @@
DexMethod method = buildNullaryVoidMethod(B.class, "f", appInfo.dexItemFactory());
ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
- assertEquals(L.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(L.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultRightAbstractLeftTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultRightAbstractLeftTest.java
index 42f7600..64908c4 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultRightAbstractLeftTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultRightAbstractLeftTest.java
@@ -51,7 +51,7 @@
DexMethod method = buildNullaryVoidMethod(B.class, "f", appInfo.dexItemFactory());
ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
- assertEquals(R.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(R.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractLeftTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractLeftTest.java
index c29509d..4841f77 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractLeftTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractLeftTest.java
@@ -54,7 +54,7 @@
DexMethod method = buildNullaryVoidMethod(B.class, "f", appInfo.dexItemFactory());
ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
- assertEquals(L.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(L.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractRightTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractRightTest.java
index e7c5ab8..6059ea1 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractRightTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAbstractRightTest.java
@@ -54,7 +54,7 @@
DexMethod method = buildNullaryVoidMethod(B.class, "f", appInfo.dexItemFactory());
ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
- assertEquals(R.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(R.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndBothTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndBothTest.java
index 3d7071d..433575f 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndBothTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndBothTest.java
@@ -55,8 +55,7 @@
Set<String> holders = new HashSet<>();
resolutionResult
.asFailedResolution()
- .forEachFailureDependency(
- target -> holders.add(target.method.holder.toSourceString()));
+ .forEachFailureDependency(target -> holders.add(target.holder().toSourceString()));
assertEquals(ImmutableSet.of(L.class.getTypeName(), R.class.getTypeName()), holders);
}
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndLeftTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndLeftTest.java
index b5c2018..e04908b 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndLeftTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndLeftTest.java
@@ -45,7 +45,7 @@
DexMethod method = buildNullaryVoidMethod(B.class, "f", appInfo.dexItemFactory());
ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
- assertEquals(L.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(L.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndRightTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndRightTest.java
index 867cfe9..7472e89 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndRightTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/DefaultTopAndRightTest.java
@@ -45,7 +45,7 @@
DexMethod method = buildNullaryVoidMethod(B.class, "f", appInfo.dexItemFactory());
ResolutionResult resolutionResult = appInfo.resolveMethod(method.holder, method);
DexEncodedMethod resolutionTarget = resolutionResult.getSingleTarget();
- assertEquals(R.class.getTypeName(), resolutionTarget.method.holder.toSourceString());
+ assertEquals(R.class.getTypeName(), resolutionTarget.holder().toSourceString());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/TwoDefaultMethodsWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/TwoDefaultMethodsWithoutTopTest.java
index b2a4ce2..5966b9d 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacediamonds/TwoDefaultMethodsWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacediamonds/TwoDefaultMethodsWithoutTopTest.java
@@ -56,8 +56,7 @@
Set<String> holders = new HashSet<>();
resolutionResult
.asFailedResolution()
- .forEachFailureDependency(
- m -> holders.add(m.method.holder.toSourceString()));
+ .forEachFailureDependency(m -> holders.add(m.holder().toSourceString()));
assertEquals(ImmutableSet.of(I.class.getTypeName(), J.class.getTypeName()), holders);
}