Encapsulate IRCode.method
Change-Id: I01086e0fa538223a50e95b4cb7ebc8286b1bedb5
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 93973c3..b98c4cb 100644
--- a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
+++ b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
@@ -228,7 +228,7 @@
InstructionIterator it = code.instructionIterator();
Instruction instruction = null;
// Set the out-value types of each argument based on the method signature.
- int argumentIndex = code.method.accessFlags.isStatic() ? 0 : -1;
+ int argumentIndex = code.method().accessFlags.isStatic() ? 0 : -1;
while (it.hasNext()) {
instruction = it.next();
if (!instruction.isArgument()) {
@@ -237,12 +237,12 @@
TypeInfo argumentType;
if (argumentIndex < 0) {
argumentType =
- code.method.isInstanceInitializer()
- ? new ThisInstanceInfo(instruction.asArgument(), code.method.holder())
- : createInitializedType(code.method.holder());
+ code.method().isInstanceInitializer()
+ ? new ThisInstanceInfo(instruction.asArgument(), code.method().holder())
+ : createInitializedType(code.method().holder());
} else {
argumentType =
- createInitializedType(code.method.method.proto.parameters.values[argumentIndex]);
+ createInitializedType(code.method().method.proto.parameters.values[argumentIndex]);
}
Value outValue = instruction.outValue();
if (outValue.outType().isObject()) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index 53d2835..bb3405a 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -59,7 +59,7 @@
private int startLine = NO_LINE_INFO;
public DexDebugEventBuilder(IRCode code, InternalOptions options) {
- this.method = code.method;
+ this.method = code.method();
this.factory = options.itemFactory;
this.options = options;
}
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 4e3c645..2ffb49e 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -214,7 +214,7 @@
&& singleValue.asSingleFieldValue().getField() == field) {
return null;
}
- if (singleValue.isMaterializableInContext(appView, code.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/ir/analysis/ClassInitializationAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
index 94ee9cf..e825ba4 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.holder();
+ DexType context = code.method().holder();
BasicBlock block = instruction.getBlock();
// Visit the instructions in `block` prior to `instruction`.
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 9ae6c86..5452f50 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.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 406c9e6..215f2a1 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.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
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java b/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java
index 7397eb8..8c8eeb9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/TypeChecker.java
@@ -43,7 +43,7 @@
return false;
}
} else if (instruction.isReturn()) {
- if (!check(instruction.asReturn(), code.method)) {
+ if (!check(instruction.asReturn(), code.method())) {
return false;
}
} else if (instruction.isStaticPut()) {
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 f68aa3a..fbb6735 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
@@ -81,7 +81,7 @@
public ValueMayDependOnEnvironmentAnalysis(AppView<?> appView, IRCode code) {
this.appView = appView;
this.code = code;
- this.context = code.method.holder();
+ this.context = code.method().holder();
}
public boolean valueMayDependOnEnvironment(Value value) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java
index 43e484d..b1cac80 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java
@@ -137,8 +137,8 @@
}
}
}
- if (!configuration.isLegitimateEscapeRoute(appView, this, user, code.method.method)
- && isDirectlyEscaping(user, code.method.method, arguments)) {
+ if (!configuration.isLegitimateEscapeRoute(appView, this, user, code.method().method)
+ && isDirectlyEscaping(user, code.method().method, arguments)) {
if (stoppingCriterion.test(user)) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAccessAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAccessAnalysis.java
index 1e8bb52..7c148a4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAccessAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAccessAnalysis.java
@@ -74,7 +74,7 @@
DexEncodedField encodedField = appView.appInfo().resolveField(fieldInstruction.getField());
if (encodedField != null && encodedField.isProgramField(appView)) {
if (fieldAssignmentTracker != null) {
- fieldAssignmentTracker.recordFieldAccess(fieldInstruction, encodedField, code.method);
+ fieldAssignmentTracker.recordFieldAccess(fieldInstruction, encodedField, code.method());
}
if (fieldBitAccessAnalysis != null) {
fieldBitAccessAnalysis.recordFieldAccess(fieldInstruction, encodedField, feedback);
@@ -85,7 +85,7 @@
DexProgramClass clazz = asProgramClassOrNull(appView.definitionFor(newInstance.clazz));
if (clazz != null) {
if (fieldAssignmentTracker != null) {
- fieldAssignmentTracker.recordAllocationSite(newInstance, clazz, code.method);
+ fieldAssignmentTracker.recordAllocationSite(newInstance, clazz, code.method());
}
}
}
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 0d500e9..b3aaf9c 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.holder();
+ DexType context = code.method().holder();
OptionalBool controlFlowMayDependOnEnvironment = OptionalBool.unknown();
boolean mayHaveSideEffects = false;
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 fd5338c..e443a41 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
@@ -74,7 +74,7 @@
Value returnedValue =
code.createValue(classClassType(appView, definitelyNotNull()), debugLocalInfo);
ConstClass instruction = new ConstClass(returnedValue, type);
- assert !instruction.instructionMayHaveSideEffects(appView, code.method.holder());
+ assert !instruction.instructionMayHaveSideEffects(appView, code.method().holder());
return instruction;
}
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 0994dc0..a1ed1d7 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.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 cd29ec9..37daada 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.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 fe74303..b4ceb0d 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
@@ -498,9 +498,9 @@
Set<BasicBlock> blocksToRemove,
DexType downcast) {
assert blocksToRemove != null;
- DexType codeHolder = code.method.holder();
- DexType inlineeHolder = inlinee.method.holder();
- if (codeHolder != inlineeHolder && inlinee.method.isOnlyInlinedIntoNestMembers()) {
+ 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);
NestUtils.rewriteNestCallsForInlining(inlinee, codeHolder, 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 bb5788b..c2d5232 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
@@ -139,7 +139,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.holder());
+ return !instructionMayHaveSideEffects(appView, code.method().holder());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index 67f3616..53b9336 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -104,7 +104,7 @@
// use odd instruction numbers for the insertion of moves during spilling.
public static final int INSTRUCTION_NUMBER_DELTA = 2;
- public final DexEncodedMethod method;
+ private final DexEncodedMethod method;
public LinkedList<BasicBlock> blocks;
public final ValueNumberGenerator valueNumberGenerator;
@@ -145,6 +145,10 @@
return metadata;
}
+ public DexEncodedMethod method() {
+ return method;
+ }
+
public BasicBlock entryBlock() {
return blocks.getFirst();
}
@@ -784,7 +788,7 @@
for (BasicBlock block : blocks) {
assert block.consistentBlockInstructions(
argumentsAllowed,
- options.debug || method.getOptimizationInfo().isReachabilitySensitive());
+ options.debug || method().getOptimizationInfo().isReachabilitySensitive());
argumentsAllowed = false;
}
return true;
@@ -1061,12 +1065,13 @@
}
}
assert arguments.size()
- == method.method.getArity() + ((method.accessFlags.isStatic() || ignoreReceiver) ? 0 : 1);
+ == method().method.getArity()
+ + ((method().accessFlags.isStatic() || ignoreReceiver) ? 0 : 1);
return arguments;
}
public Value getThis() {
- if (method.accessFlags.isStatic()) {
+ if (method().accessFlags.isStatic()) {
return null;
}
Instruction firstArg = entryBlock().iterator().nextUntil(Instruction::isArgument);
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 0740db4..3050da7 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.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 58bcd28..fd76ad3 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.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/InvokeDirect.java b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
index d6aaf36..e492db1 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
@@ -217,7 +217,7 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- DexEncodedMethod method = code.method;
+ DexEncodedMethod method = code.method();
if (instructionMayHaveSideEffects(appView, method.holder())) {
return false;
}
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 41fac8c..4006bd7 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.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 b285dd6..3f5a1ab 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.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 01a6a76..9a9f727 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
@@ -215,6 +215,6 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.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 92eb384..b9a0765 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
@@ -205,6 +205,6 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !instructionMayHaveSideEffects(appView, code.method.holder());
+ return !instructionMayHaveSideEffects(appView, code.method().holder());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/MoveException.java b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
index e9cd95f..9f21f17 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MoveException.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
@@ -80,7 +80,8 @@
@Override
public boolean canBeDeadCode(AppView<?> appView, IRCode code) {
- return !(appView.options().debug || code.method.getOptimizationInfo().isReachabilitySensitive())
+ return !(appView.options().debug
+ || code.method().getOptimizationInfo().isReachabilitySensitive())
&& appView.options().isGeneratingDex();
}
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 87643df..fd6cf65 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.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 3f20225..e30cdf1 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.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 9b939f7..de66cba 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
@@ -153,7 +153,7 @@
// * IncompatibleClassChangeError (static-* instruction for instance fields)
// * IllegalAccessError (not visible from the access context)
// * side-effects in <clinit>
- return !instructionMayHaveSideEffects(appView, code.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 7249d94..78d4de9 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.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/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 200b7f0..7b15fcc 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
@@ -815,7 +815,7 @@
outliner.applyOutliningCandidate(code);
printMethod(code, "IR after outlining (SSA)", null);
removeDeadCodeAndFinalizeIR(
- code.method, code, OptimizationFeedbackIgnore.getInstance(), Timing.empty());
+ code.method(), code, OptimizationFeedbackIgnore.getInstance(), Timing.empty());
},
executorService);
feedback.updateVisibleOptimizationInfo();
@@ -1125,7 +1125,7 @@
// TODO(b/140766440): Convert all sub steps an implementer of CodeOptimization
private Timing optimize(
IRCode code, OptimizationFeedback feedback, MethodProcessor methodProcessor) {
- DexEncodedMethod method = code.method;
+ DexEncodedMethod method = code.method();
DexProgramClass holder = asProgramClassOrNull(appView.definitionForHolder(method));
assert holder != null;
@@ -1628,7 +1628,7 @@
timing.end();
}
- if (appView.appInfo().withLiveness().isPinned(code.method.method)) {
+ if (appView.appInfo().withLiveness().isPinned(code.method().method)) {
return;
}
@@ -1636,15 +1636,15 @@
if (method.isInitializer()) {
if (method.isClassInitializer()) {
StaticFieldValueAnalysis.run(
- appView, code, classInitializerDefaultsResult, feedback, code.method, timing);
+ appView, code, classInitializerDefaultsResult, feedback, code.method(), timing);
} else {
instanceFieldInitializationInfos =
InstanceFieldValueAnalysis.run(
- appView, code, classInitializerDefaultsResult, feedback, code.method, timing);
+ appView, code, classInitializerDefaultsResult, feedback, code.method(), timing);
}
}
methodOptimizationInfoCollector.collectMethodOptimizationInfo(
- code.method,
+ code.method(),
code,
feedback,
dynamicTypeOptimization,
@@ -1780,11 +1780,11 @@
return;
}
// Only constructors.
- if (!code.method.isInstanceInitializer()) {
+ if (!code.method().isInstanceInitializer()) {
return;
}
// Only constructors with certain signatures.
- DexTypeList paramTypes = code.method.method.proto.parameters;
+ DexTypeList paramTypes = code.method().method.proto.parameters;
if (paramTypes.size() != 3 ||
paramTypes.values[0] != options.itemFactory.doubleType ||
paramTypes.values[1] != options.itemFactory.doubleType ||
@@ -1966,7 +1966,7 @@
printer.end("cfg");
}
if (options.extensiveLoggingFilter.size() > 0
- && options.extensiveLoggingFilter.contains(code.method.method.toSourceString())) {
+ && options.extensiveLoggingFilter.contains(code.method().method.toSourceString())) {
String current = code.toString();
System.out.println();
System.out.println("-----------------------------------------------------------------------");
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index f605494..e6f5e43 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -499,7 +499,7 @@
if (ret.isReturnVoid()) {
break;
}
- DexType returnType = code.method.method.proto.returnType;
+ DexType returnType = code.method().method.proto.returnType;
Value retValue = ret.returnValue();
DexType initialType =
retValue.getType().isPrimitiveType()
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
index 58f7155..8279864 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
@@ -152,7 +152,7 @@
+ ", its imprecise type is: "
+ stillImprecise.get(0).getType(),
code.origin,
- new MethodPosition(code.method.method)));
+ new MethodPosition(code.method().method)));
}
}
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 706cfa0..e9aed7f 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
@@ -159,7 +159,7 @@
if (provider.requiresGenerationOfCode()) {
DexMethod newMethod = provider.provideMethod(appView);
methodProviders.putIfAbsent(newMethod, provider);
- holders.add(code.method.holder());
+ holders.add(code.method().holder());
}
}
if (!affectedValues.isEmpty()) {
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 12e4c5e..b9913cc 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,14 +106,14 @@
public void desugar(IRCode code) {
- if (wrapperSynthesizor.hasSynthesized(code.method.holder())) {
+ if (wrapperSynthesizor.hasSynthesized(code.method().holder())) {
return;
}
if (!canGenerateWrappersAndCallbacks()) {
- assert validateCallbackWasGeneratedInEnqueuer(code.method);
+ assert validateCallbackWasGeneratedInEnqueuer(code.method());
} else {
- registerCallbackIfRequired(code.method);
+ registerCallbackIfRequired(code.method());
}
ListIterator<BasicBlock> blockIterator = code.listIterator();
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 64825c1..ecf9d2e 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
@@ -135,7 +135,7 @@
appView
.appInfo()
.withClassHierarchy()
- .lookupSuperTarget(invoke.getInvokedMethod(), code.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/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index 9bdc9b0..31d3797 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
@@ -315,7 +315,7 @@
DexEncodedMethod dexEncodedMethod =
appView
.appInfo()
- .lookupSuperTarget(invokeSuper.getInvokedMethod(), code.method.holder());
+ .lookupSuperTarget(invokeSuper.getInvokedMethod(), code.method().holder());
if (dexEncodedMethod != null) {
DexClass dexClass = appView.definitionFor(dexEncodedMethod.holder());
if (dexClass != null && dexClass.isLibraryClass()) {
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 e477fe3..6f3aed5 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.holder()).asProgramClass());
+ referencingClasses.add(appInfo.definitionFor(code.method().holder()).asProgramClass());
}
}
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 d5c3caa..312ae5d 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
@@ -80,7 +80,7 @@
if (mode != Mode.COLLECT) {
return;
}
- DexEncodedMethod context = code.method;
+ DexEncodedMethod context = code.method();
for (Instruction instruction : code.instructions()) {
if (!instruction.isInvokeMethod() && !instruction.isInvokeCustom()) {
continue;
@@ -222,7 +222,7 @@
return;
}
// TODO(b/139246447): Assert no BOTTOM left.
- if (!callSiteOptimizationInfo.hasUsefulOptimizationInfo(appView, code.method)) {
+ if (!callSiteOptimizationInfo.hasUsefulOptimizationInfo(appView, code.method())) {
return;
}
Set<Value> affectedValues = Sets.newIdentityHashSet();
@@ -245,7 +245,7 @@
if (abstractValue.isSingleValue()) {
assert appView.options().enablePropagationOfConstantsAtCallSites;
SingleValue singleValue = abstractValue.asSingleValue();
- if (singleValue.isMaterializableInContext(appView, code.method.holder())) {
+ if (singleValue.isMaterializableInContext(appView, code.method().holder())) {
Instruction replacement =
singleValue.createMaterializingInstruction(appView, code, instr);
replacement.setPosition(instr.getPosition());
@@ -296,9 +296,14 @@
}
}
}
- assert argumentsSeen == code.method.method.getArity() + (code.method.isStatic() ? 0 : 1)
- : "args: " + argumentsSeen + " != "
- + "arity: " + code.method.method.getArity() + ", static: " + code.method.isStatic();
+ assert argumentsSeen == code.method().method.getArity() + (code.method().isStatic() ? 0 : 1)
+ : "args: "
+ + argumentsSeen
+ + " != "
+ + "arity: "
+ + code.method().method.getArity()
+ + ", static: "
+ + code.method().isStatic();
// After packed Argument instructions, add Assume<?> and constant instructions.
assert !iterator.peekPrevious().isArgument();
iterator.previous();
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 68a1b7c..3dbe05d 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
@@ -254,7 +254,10 @@
// Check for the patterns 'if (x == null) throw null' and
// 'if (x == null) throw new NullPointerException()'.
if (instruction.isIf()) {
- if (appView.dexItemFactory().objectsMethods.isRequireNonNullMethod(code.method.method)) {
+ if (appView
+ .dexItemFactory()
+ .objectsMethods
+ .isRequireNonNullMethod(code.method().method)) {
continue;
}
@@ -309,7 +312,7 @@
boolean canDetachValueIsNullTarget = true;
for (Instruction i : valueIsNullTarget.instructionsBefore(throwInstruction)) {
- if (!i.isBlockLocalInstructionWithoutSideEffects(appView, code.method.holder())) {
+ if (!i.isBlockLocalInstructionWithoutSideEffects(appView, code.method().holder())) {
canDetachValueIsNullTarget = false;
break;
}
@@ -515,7 +518,7 @@
int selfRecursionFanOut = 0;
Instruction lastSelfRecursiveCall = null;
for (Instruction i : code.instructions()) {
- if (i.isInvokeMethod() && i.asInvokeMethod().getInvokedMethod() == code.method.method) {
+ if (i.isInvokeMethod() && i.asInvokeMethod().getInvokedMethod() == code.method().method) {
selfRecursionFanOut++;
lastSelfRecursiveCall = i;
}
@@ -1130,7 +1133,7 @@
BasicBlock defaultTarget = theSwitch.fallthroughBlock();
SwitchCaseEliminator eliminator = null;
BasicBlockBehavioralSubsumption behavioralSubsumption =
- new BasicBlockBehavioralSubsumption(appView, code.method.holder());
+ new BasicBlockBehavioralSubsumption(appView, code.method().holder());
// Compute the set of switch cases that can be removed.
int alwaysHitCase = -1;
@@ -1255,7 +1258,7 @@
}
// Check if the invoked method is known to return one of its arguments.
- DexEncodedMethod target = invoke.lookupSingleTarget(appView, code.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.
@@ -1377,7 +1380,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.holder(), castType)) {
+ if (!isTypeVisibleFromContext(appView, code.method().holder(), castType)) {
return RemoveCheckCastInstructionIfTrivialResult.NO_REMOVALS;
}
@@ -1434,7 +1437,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.holder(), instanceOf.type())) {
+ if (!isTypeVisibleFromContext(appView, code.method().holder(), instanceOf.type())) {
return false;
}
@@ -2502,7 +2505,7 @@
}
}
} else {
- DexType context = code.method.holder();
+ DexType context = code.method().holder();
AbstractValue abstractValue = lhs.getAbstractValue(appView, context);
if (abstractValue.isSingleConstClassValue()) {
AbstractValue otherAbstractValue = rhs.getAbstractValue(appView, context);
@@ -2819,7 +2822,7 @@
InvokeMethod invoke = insn.asInvokeMethod();
DexEncodedMethod singleTarget =
- invoke.lookupSingleTarget(appView.withLiveness(), code.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 c98c262..691de34 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
@@ -87,7 +87,7 @@
}
public void canonicalize(AppView<?> appView, IRCode code) {
- DexEncodedMethod method = code.method;
+ DexEncodedMethod method = code.method();
DexType context = method.holder();
Object2ObjectLinkedOpenCustomHashMap<Instruction, List<Value>> valuesDefinedByConstant =
new Object2ObjectLinkedOpenCustomHashMap<>(
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 d6387e0..db75756 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
@@ -451,7 +451,7 @@
// 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.holder();
- DexType calleeMethodHolder = inlinee.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/DynamicTypeOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/DynamicTypeOptimization.java
index d518ef6..eac97c1 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,7 +78,8 @@
TypeElement.fromDexType(invokedMethod.holder, definitelyNotNull(), appView);
dynamicLowerBoundType = null;
} else {
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.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 76ca615..62b5ab3 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.holder();
+ DexType context = code.method().holder();
// Collect invocations along with arguments.
for (BasicBlock block : code.blocks) {
for (Instruction current : block.getInstructions()) {
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 08c5544..fdb59ae 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
@@ -739,7 +739,7 @@
}
}
- if (inliningIRProvider.shouldApplyCodeRewritings(code.method)) {
+ if (inliningIRProvider.shouldApplyCodeRewritings(code.method())) {
assert lensCodeRewriter != null;
lensCodeRewriter.rewrite(code, target);
}
@@ -1048,10 +1048,11 @@
postProcessInlineeBlocks(code, inlinee.code, blockIterator, block);
// The synthetic and bridge flags are maintained only if the inlinee has also these flags.
- if (context.accessFlags.isBridge() && !inlinee.code.method.accessFlags.isBridge()) {
+ if (context.accessFlags.isBridge() && !inlinee.code.method().accessFlags.isBridge()) {
context.accessFlags.demoteFromBridge();
}
- if (context.accessFlags.isSynthetic() && !inlinee.code.method.accessFlags.isSynthetic()) {
+ if (context.accessFlags.isSynthetic()
+ && !inlinee.code.method().accessFlags.isSynthetic()) {
context.accessFlags.demoteFromSynthetic();
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
index 9247ca6..e6dcbbe 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
@@ -211,7 +211,7 @@
if (current.isStaticGet()) {
StaticGet staticGet = current.asStaticGet();
replaceInstructionByInitClassIfPossible(
- staticGet, staticGet.getField().holder, code, iterator, code.method.holder());
+ staticGet, staticGet.getField().holder, code, iterator, code.method().holder());
}
replacement.setPosition(position);
if (block.hasCatchHandlers()) {
@@ -366,7 +366,7 @@
abstractValue = target.getOptimizationInfo().getAbstractValue();
if (abstractValue.isUnknown() && !target.isStatic()) {
AbstractValue abstractReceiverValue =
- current.asInstanceGet().object().getAbstractValue(appView, code.method.holder());
+ current.asInstanceGet().object().getAbstractValue(appView, code.method().holder());
if (abstractReceiverValue.isSingleFieldValue()) {
abstractValue =
abstractReceiverValue.asSingleFieldValue().getState().getAbstractFieldValue(target);
@@ -390,9 +390,9 @@
&& singleValue.asSingleFieldValue().getField() == field) {
return;
}
- if (singleValue.isMaterializableInContext(appView, code.method.holder())) {
+ if (singleValue.isMaterializableInContext(appView, code.method().holder())) {
BasicBlock block = current.getBlock();
- DexType context = code.method.holder();
+ DexType context = code.method().holder();
Position position = current.getPosition();
// All usages are replaced by the replacement value.
@@ -493,7 +493,7 @@
return;
}
- replaceInstructionByNullCheckIfPossible(current, iterator, code.method.holder());
+ replaceInstructionByNullCheckIfPossible(current, iterator, code.method().holder());
}
private void replaceStaticPutByInitClassIfNeverRead(
@@ -508,7 +508,7 @@
}
replaceInstructionByInitClassIfPossible(
- current, field.holder(), code, iterator, code.method.holder());
+ current, field.holder(), code, iterator, code.method().holder());
}
/**
@@ -534,7 +534,7 @@
ListIterator<BasicBlock> blockIterator,
Set<Value> affectedValues,
Predicate<BasicBlock> blockTester) {
- DexType context = code.method.holder();
+ DexType context = code.method().holder();
while (blockIterator.hasNext()) {
BasicBlock block = blockIterator.next();
if (!blockTester.test(block)) {
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 508e394..3cd05c5 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.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 bc294fa..662eb39 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
@@ -89,7 +89,8 @@
InvokeMethod invoke = current.asInvokeMethod();
DexMethod invokedMethod = invoke.getInvokedMethod();
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.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 d9ebcf6..6a05911 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
@@ -1184,7 +1184,7 @@
ListIterator<BasicBlock> blocksIterator,
BasicBlock block,
List<Integer> toRemove) {
- super(code.method, block);
+ super(code.method(), block);
this.code = code;
this.blocksIterator = blocksIterator;
this.toRemove = toRemove;
@@ -1280,9 +1280,9 @@
assert outlineMethodIdentifierGenerator == null;
outlineMethodIdentifierGenerator =
code -> {
- assert !code.method.getCode().isOutlineCode();
+ assert !code.method().getCode().isOutlineCode();
for (BasicBlock block : code.blocks) {
- new OutlineMethodIdentifier(code.method, block, candidateMap).process();
+ new OutlineMethodIdentifier(code.method(), block, candidateMap).process();
}
};
}
@@ -1295,8 +1295,8 @@
}
public void identifyOutlineSites(IRCode code) {
- assert !code.method.getCode().isOutlineCode();
- DexClass clazz = asProgramClassOrNull(appView.definitionFor(code.method.holder()));
+ assert !code.method().getCode().isOutlineCode();
+ DexClass clazz = asProgramClassOrNull(appView.definitionFor(code.method().holder()));
assert clazz != null;
if (clazz == null) {
return;
@@ -1307,7 +1307,7 @@
}
for (BasicBlock block : code.blocks) {
- new OutlineSiteIdentifier(code.method, block).process();
+ new OutlineSiteIdentifier(code.method(), block).process();
}
}
@@ -1405,7 +1405,7 @@
}
public void applyOutliningCandidate(IRCode code) {
- assert !code.method.getCode().isOutlineCode();
+ assert !code.method().getCode().isOutlineCode();
ListIterator<BasicBlock> blocksIterator = code.listIterator();
while (blocksIterator.hasNext()) {
BasicBlock block = blocksIterator.next();
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 2df8259..ccb328e 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
@@ -69,7 +69,7 @@
public RedundantFieldLoadElimination(AppView<?> appView, IRCode code) {
this.appView = appView;
- this.method = code.method;
+ this.method = code.method();
this.code = code;
}
@@ -397,7 +397,7 @@
// that we are conservative.
activeState.removeNonFinalInstanceFields(field);
} else if (instruction.isStaticPut()) {
- if (field.holder != code.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.
activeState.clearNonFinalStaticFields();
@@ -405,7 +405,7 @@
activeState.removeNonFinalStaticField(field);
}
} else if (instruction.isStaticGet()) {
- if (field.holder != code.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.
activeState.clearNonFinalStaticFields();
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 3b427cb..c60da19 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
@@ -39,7 +39,7 @@
return;
}
Set<Value> affectedValues = Sets.newIdentityHashSet();
- DexType context = code.method.holder();
+ DexType context = code.method().holder();
ClassInitializationAnalysis classInitializationAnalysis =
new ClassInitializationAnalysis(appView, code);
for (BasicBlock block : code.blocks) {
@@ -68,8 +68,9 @@
ConstClass constClass = new ConstClass(value, type);
it.replaceCurrentInstruction(constClass);
if (appView.options().isGeneratingClassFiles()) {
- code.method.upgradeClassFileVersion(
- appView.options().requiredCfVersionForConstClassInstructions());
+ code.method()
+ .upgradeClassFileVersion(
+ appView.options().requiredCfVersionForConstClassInstructions());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
index 3285e2a..a2d21c3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
@@ -174,7 +174,7 @@
service -> {
DexEncodedMethod addedMethod = createSynthesizedMethod(service, classes);
if (appView.options().isGeneratingClassFiles()) {
- addedMethod.upgradeClassFileVersion(code.method.getClassFileVersion());
+ addedMethod.upgradeClassFileVersion(code.method().getClassFileVersion());
}
return addedMethod;
});
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 0676f1c..055f575 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,7 +351,8 @@
Instruction instruction = instructionIterator.next();
if (instruction.throwsOnNullInput()) {
Value couldBeNullValue = instruction.getNonNullInput();
- if (isThrowNullCandidate(couldBeNullValue, instruction, appView, code.method.holder())) {
+ if (isThrowNullCandidate(
+ couldBeNullValue, instruction, appView, code.method().holder())) {
if (instruction.isInstanceGet() || instruction.isInstancePut()) {
++numberOfInstanceGetOrInstancePutWithNullReceiver;
} else if (instruction.isInvokeMethodWithReceiver()) {
@@ -450,7 +451,7 @@
IRCode code,
AssumeDynamicTypeRemover assumeDynamicTypeRemover,
Set<Value> affectedValues) {
- DexType context = code.method.holder();
+ DexType context = code.method().holder();
DexField field = instruction.getField();
DexType fieldType = field.type;
if (fieldType.isAlwaysNull(appView)) {
@@ -506,7 +507,7 @@
AssumeDynamicTypeRemover assumeDynamicTypeRemover,
Set<BasicBlock> blocksToBeRemoved,
Set<Value> affectedValues) {
- DexEncodedMethod target = invoke.lookupSingleTarget(appView, code.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/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index 9b443bc..798b820 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -203,13 +203,13 @@
// Assess eligibility of instance and class.
EligibilityStatus status = processor.isInstanceEligible();
if (status != EligibilityStatus.ELIGIBLE) {
- logEligibilityStatus(code.method, root, status);
+ logEligibilityStatus(code.method(), root, status);
// This root will never be inlined.
rootsIterator.remove();
continue;
}
status = processor.isClassAndUsageEligible();
- logEligibilityStatus(code.method, root, status);
+ logEligibilityStatus(code.method(), root, status);
if (status != EligibilityStatus.ELIGIBLE) {
// This root will never be inlined.
rootsIterator.remove();
@@ -220,7 +220,7 @@
InstructionOrPhi ineligibleUser = processor.areInstanceUsersEligible(defaultOracle);
if (ineligibleUser != null) {
// This root may succeed if users change in future.
- logIneligibleUser(code.method, root, ineligibleUser);
+ logIneligibleUser(code.method(), root, ineligibleUser);
continue;
}
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 7f0ad04..1dbf932 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
@@ -506,7 +506,8 @@
continue;
}
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method.holder());
+ DexEncodedMethod singleTarget =
+ invoke.lookupSingleTarget(appView, code.method().holder());
if (singleTarget == null || !indirectMethodCallsOnInstance.contains(singleTarget)) {
throw new IllegalClassInlinerStateException();
}
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 d878322..cf9c904 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
@@ -188,7 +188,7 @@
// If dependencies is null, it means the enum is not eligible (It has been marked as
// unboxable by this thread or another one), so we do not need to record dependencies.
if (dependencies != null) {
- dependencies.add(code.method);
+ dependencies.add(code.method());
}
}
}
@@ -266,7 +266,7 @@
eligibleEnums.add(type);
}
} else if (use.isReturn()) {
- DexType returnType = code.method.method.proto.returnType;
+ DexType returnType = code.method().method.proto.returnType;
if (enumsUnboxingCandidates.containsKey(returnType)) {
eligibleEnums.add(returnType);
}
@@ -394,7 +394,7 @@
return Reason.INVALID_INVOKE_ON_ARRAY;
}
DexEncodedMethod encodedSingleTarget =
- invokeMethod.lookupSingleTarget(appView, code.method.holder());
+ invokeMethod.lookupSingleTarget(appView, code.method().holder());
if (encodedSingleTarget == null) {
return Reason.INVALID_INVOKE;
}
@@ -405,7 +405,7 @@
}
if (dexClass.isProgramClass()) {
if (dexClass.isEnum() && encodedSingleTarget.isInstanceInitializer()) {
- if (code.method.holder() == dexClass.type && code.method.isClassInitializer()) {
+ if (code.method().holder() == dexClass.type && code.method().isClassInitializer()) {
// The enum instance initializer is allowed to be called only from the enum clinit.
return Reason.ELIGIBLE;
} else {
@@ -446,8 +446,8 @@
return Reason.ELIGIBLE;
} else if (singleTarget == factory.enumMethods.constructor) {
// Enum constructor call is allowed only if first call of an enum initializer.
- if (code.method.isInstanceInitializer()
- && code.method.holder() == enumClass.type
+ if (code.method().isInstanceInitializer()
+ && code.method().holder() == enumClass.type
&& isFirstInstructionAfterArguments(invokeMethod, code)) {
return Reason.ELIGIBLE;
}
@@ -543,7 +543,7 @@
// Return is used for valueOf methods.
if (instruction.isReturn()) {
- DexType returnType = code.method.method.proto.returnType;
+ DexType returnType = code.method().method.proto.returnType;
if (returnType != enumClass.type && returnType.toBaseType(factory) != enumClass.type) {
return Reason.IMPLICIT_UP_CAST_IN_RETURN;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index da135b0..14a3800 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
@@ -715,7 +715,7 @@
return alwaysTriggerExpectedEffectBeforeAnythingElse(
code,
(instruction, it) -> {
- DexType context = code.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
@@ -848,7 +848,7 @@
if (isInstantiationOfNullPointerException(instr, it, appView.dexItemFactory())) {
it.next(); // Skip call to NullPointerException.<init>.
return InstructionEffect.NO_EFFECT;
- } else if (instr.throwsNpeIfValueIsNull(value, appView, code.method.holder())) {
+ } else if (instr.throwsNpeIfValueIsNull(value, appView, code.method().holder())) {
// In order to preserve NPE semantic, the exception must not be caught by any handler.
// Therefore, we must ignore this instruction if it is covered by a catch handler.
// Note: this is a conservative approach where we consider that any catch handler could
@@ -857,7 +857,7 @@
// We found a NPE check on the value.
return InstructionEffect.DESIRED_EFFECT;
}
- } else if (instr.instructionMayHaveSideEffects(appView, code.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()) {
@@ -1198,7 +1198,7 @@
}
}
if (facts.length() > 0) {
- feedback.setNonNullParamOnNormalExits(code.method, facts);
+ feedback.setNonNullParamOnNormalExits(code.method(), facts);
}
}
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 16d514c..76e81ac 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.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/LibraryMemberOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java
index 6986547..6566187 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LibraryMemberOptimizer.java
@@ -114,7 +114,7 @@
Instruction instruction = instructionIterator.next();
if (instruction.isInvokeMethod()) {
InvokeMethod invoke = instruction.asInvokeMethod();
- DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method.holder());
+ DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, code.method().holder());
if (singleTarget != null) {
optimizeInvoke(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 0713076..1283bf4 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.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/StaticizingProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
index c451bd7..845a01c 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
@@ -353,7 +353,7 @@
OptimizationFeedback feedback) {
return (code, methodProcessor) ->
converter.collectOptimizationInfo(
- code.method,
+ code.method(),
code,
ClassInitializerDefaultsResult.empty(),
feedback,
@@ -362,7 +362,7 @@
}
private void removeCandidateInstantiation(IRCode code, MethodProcessor methodProcessor) {
- CandidateInfo candidateInfo = hostClassInits.get(code.method);
+ CandidateInfo candidateInfo = hostClassInits.get(code.method());
assert candidateInfo != null;
// Find and remove instantiation and its users.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
index cc8a24f..ae94194 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
@@ -299,7 +299,7 @@
// Find Class#get*Name() with a constant-class and replace it with a const-string if possible.
public void rewriteClassGetName(AppView<?> appView, IRCode code) {
// Conflict with {@link CodeRewriter#collectClassInitializerDefaults}.
- if (code.method.isClassInitializer()) {
+ if (code.method().isClassInitializer()) {
return;
}
Set<Value> affectedValues = Sets.newIdentityHashSet();
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
index 0f6f6c9..7eddfcc 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -206,7 +206,7 @@
// There are no linked values prior to register allocation.
assert noLinkedValues();
assert code.isConsistentSSA();
- if (this.code.method.accessFlags.isBridge() && implementationIsBridge(this.code)) {
+ if (this.code.method().accessFlags.isBridge() && implementationIsBridge(this.code)) {
transformBridgeMethod();
}
computeNeedsRegister();
@@ -225,7 +225,7 @@
// and we do not actually want locals information in the output.
if (options().debug) {
computeDebugInfo(code, blocks, liveIntervals, this, liveAtEntrySets);
- } else if (code.method.getOptimizationInfo().isReachabilitySensitive()) {
+ } else if (code.method().getOptimizationInfo().isReachabilitySensitive()) {
InstructionListIterator it = code.instructionListIterator();
while (it.hasNext()) {
Instruction instruction = it.next();
@@ -604,7 +604,7 @@
if (intervals == null) {
throw new CompilationError(
"Unexpected attempt to get register for a value without a register in method `"
- + code.method.method.toSourceString()
+ + code.method().method.toSourceString()
+ "`.",
code.origin);
}
@@ -1634,8 +1634,8 @@
// Set all free positions for possible registers to max integer.
RegisterPositions freePositions = new RegisterPositions(registerConstraint + 1);
- if ((options().debug || code.method.getOptimizationInfo().isReachabilitySensitive())
- && !code.method.accessFlags.isStatic()) {
+ if ((options().debug || code.method().getOptimizationInfo().isReachabilitySensitive())
+ && !code.method().accessFlags.isStatic()) {
// If we are generating debug information or if the method is reachability sensitive,
// we pin the this value register. The debugger expects to always be able to find it in
// the input register.
@@ -2495,7 +2495,7 @@
// overwritten can therefore lead to verification errors. If we could be targeting one of these
// VMs we block the receiver register throughout the method.
if ((options().canHaveThisTypeVerifierBug() || options().canHaveThisJitCodeDebuggingBug())
- && !code.method.accessFlags.isStatic()) {
+ && !code.method().accessFlags.isStatic()) {
for (Instruction instruction : code.entryBlock().getInstructions()) {
if (instruction.isArgument() && instruction.outValue().isThis()) {
Value thisValue = instruction.outValue();
@@ -2625,7 +2625,7 @@
}
}
}
- if (options.debug || code.method.getOptimizationInfo().isReachabilitySensitive()) {
+ if (options.debug || code.method().getOptimizationInfo().isReachabilitySensitive()) {
// In debug mode, or if the method is reachability sensitive, extend the live range
// to cover the full scope of a local variable (encoded as debug values).
int number = instruction.getNumber();
diff --git a/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java b/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
index f659d1c..aec1329 100644
--- a/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/TryRangeTestRunner.java
@@ -85,7 +85,7 @@
}
private void processIR(IRCode code) {
- if (!code.method.qualifiedName().equals(TryRangeTestLimitRange.class.getName() + ".main")) {
+ if (!code.method().qualifiedName().equals(TryRangeTestLimitRange.class.getName() + ".main")) {
return;
}
BasicBlock entryBlock = code.entryBlock();