Use other lookupVirtualDispatchTargets() when upper-bound-type is library
Change-Id: I5fabd9ca8b5ca5cb4adf909016381c0f3dae0dad
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 9bf5391..f356690 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
@@ -12,7 +12,8 @@
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.LookupResult.LookupResultSuccess;
+import com.android.tools.r8.graph.LookupResult;
+import com.android.tools.r8.graph.ResolutionResult;
import com.android.tools.r8.ir.analysis.ClassInitializationAnalysis;
import com.android.tools.r8.ir.analysis.fieldvalueanalysis.AbstractFieldSet;
import com.android.tools.r8.ir.analysis.modeling.LibraryMethodReadSetModeling;
@@ -98,17 +99,22 @@
refinedReceiverLowerBound =
asProgramClassOrNull(appView.definitionFor(refinedReceiverLowerBoundType.getClassType()));
}
- LookupResultSuccess lookupResult =
- appView
- .appInfo()
- .resolveMethod(method.holder, method)
- .lookupVirtualDispatchTargets(
- appView.definitionForProgramType(invocationContext),
- appView.withLiveness().appInfo(),
- refinedReceiverUpperBound,
- refinedReceiverLowerBound)
- .asLookupResultSuccess();
- if (lookupResult == null) {
+ ResolutionResult resolutionResult = appView.appInfo().resolveMethod(method.holder, method);
+ LookupResult lookupResult;
+ if (refinedReceiverUpperBound != null) {
+ lookupResult =
+ resolutionResult.lookupVirtualDispatchTargets(
+ appView.definitionForProgramType(invocationContext),
+ appView.withLiveness().appInfo(),
+ refinedReceiverUpperBound,
+ refinedReceiverLowerBound);
+ } else {
+ lookupResult =
+ resolutionResult.lookupVirtualDispatchTargets(
+ appView.definitionForProgramType(invocationContext),
+ appView.withLiveness().appInfo());
+ }
+ if (lookupResult.isLookupResultFailure()) {
return null;
}
Set<DexEncodedMethod> result = Sets.newIdentityHashSet();