Update isEligible methods in InlineCandidateProcessor to return a boolean
Change-Id: I33d33af3f583751bb338d6a6552b6e6565cfa028
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 530af5d..c8e86ee 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
@@ -757,24 +757,28 @@
return null;
}
}
- return isEligibleVirtualMethodCall(
+
+ if (!isEligibleVirtualMethodCall(
invoke,
invoke.getInvokedMethod(),
singleTarget,
- eligibility -> isEligibleInvokeWithAllUsersAsReceivers(eligibility, invoke, indirectUsers));
+ eligibility ->
+ isEligibleInvokeWithAllUsersAsReceivers(eligibility, invoke, indirectUsers))) {
+ return null;
+ }
+
+ return new InliningInfo(singleTarget, eligibleClass.type);
}
- private InliningInfo isEligibleIndirectVirtualMethodCall(DexMethod callee) {
+ private boolean isEligibleIndirectVirtualMethodCall(DexMethod callee) {
DexEncodedMethod singleTarget =
appView.appInfo().resolveMethod(eligibleClass, callee).getSingleTarget();
- if (isEligibleSingleTarget(singleTarget)) {
- return isEligibleVirtualMethodCall(
- null, callee, singleTarget, eligibility -> eligibility.returnsReceiver.isFalse());
- }
- return null;
+ return isEligibleSingleTarget(singleTarget)
+ && isEligibleVirtualMethodCall(
+ null, callee, singleTarget, eligibility -> eligibility.returnsReceiver.isFalse());
}
- private InliningInfo isEligibleVirtualMethodCall(
+ private boolean isEligibleVirtualMethodCall(
InvokeMethodWithReceiver invoke,
DexMethod callee,
DexEncodedMethod singleTarget,
@@ -787,20 +791,20 @@
ResolutionResult resolutionResult = appView.appInfo().resolveMethod(callee.holder, callee);
if (resolutionResult.isSingleResolution()
&& !resolutionResult.getSingleTarget().isNonPrivateVirtualMethod()) {
- return null;
+ return false;
}
if (!singleTarget.isNonPrivateVirtualMethod()) {
- return null;
+ return false;
}
if (method == singleTarget) {
- return null; // Don't inline itself.
+ return false; // Don't inline itself.
}
MethodOptimizationInfo optimizationInfo = singleTarget.getOptimizationInfo();
ClassInlinerEligibilityInfo eligibility = optimizationInfo.getClassInlinerEligibility();
if (eligibility == null || !eligibility.callsReceiver.isEmpty()) {
- return null;
+ return false;
}
if (root.isStaticGet()) {
@@ -808,7 +812,7 @@
// value of the fields.
ParameterUsage receiverUsage = optimizationInfo.getParameterUsages(0);
if (receiverUsage == null || receiverUsage.hasFieldRead) {
- return null;
+ return false;
}
if (eligibility.hasMonitorOnReceiver) {
// We will not be able to remove the monitor instruction afterwards.
@@ -819,11 +823,11 @@
// If the method returns receiver and the return value is actually
// used in the code we need to make some additional checks.
if (!eligibilityAcceptanceCheck.test(eligibility)) {
- return null;
+ return false;
}
markSizeForInlining(invoke, singleTarget);
- return new InliningInfo(singleTarget, eligibleClass.type);
+ return true;
}
private boolean isExtraMethodCall(InvokeMethod invoke) {
@@ -981,8 +985,7 @@
if (type == Type.VIRTUAL || type == Type.INTERFACE) {
// Is the method called indirectly still eligible?
- InliningInfo potentialInliningInfo = isEligibleIndirectVirtualMethodCall(target);
- if (potentialInliningInfo == null) {
+ if (!isEligibleIndirectVirtualMethodCall(target)) {
return false;
}
} else if (type == Type.DIRECT) {