Report single target as lookup disregarding implementation method
diff --git a/src/main/java/com/android/tools/r8/graph/LookupResult.java b/src/main/java/com/android/tools/r8/graph/LookupResult.java
index e5c9381..9351618 100644
--- a/src/main/java/com/android/tools/r8/graph/LookupResult.java
+++ b/src/main/java/com/android/tools/r8/graph/LookupResult.java
@@ -118,26 +118,18 @@
state = LookupResultCollectionState.Incomplete;
}
- public DexEncodedMethod getSingleLookupTarget() {
- if (isIncomplete() || methodTargets.size() > 1) {
+ public LookupTarget getSingleLookupTarget() {
+ if (isIncomplete() || methodTargets.size() + lambdaTargets.size() > 1) {
return null;
}
if (methodTargets.size() == 0 && lambdaTargets.size() == 0) {
return null;
}
- DexEncodedMethod singleTarget = DexEncodedMethod.SENTINEL;
if (methodTargets.size() == 1) {
- singleTarget = methodTargets.keySet().iterator().next();
+ return methodTargets.values().iterator().next();
+ } else {
+ return lambdaTargets.get(0);
}
- for (LookupLambdaTarget lambdaTarget : lambdaTargets) {
- DexEncodedMethod implementationMethod = lambdaTarget.getImplementationMethod().getMethod();
- if (singleTarget != DexEncodedMethod.SENTINEL && implementationMethod != singleTarget) {
- return null;
- }
- singleTarget = implementationMethod;
- }
- assert singleTarget != DexEncodedMethod.SENTINEL;
- return singleTarget;
}
public enum LookupResultCollectionState {
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 4234043..087f88c 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -31,6 +31,7 @@
import com.android.tools.r8.graph.GraphLense.NestedGraphLense;
import com.android.tools.r8.graph.InstantiatedSubTypeInfo;
import com.android.tools.r8.graph.LookupResult.LookupResultSuccess;
+import com.android.tools.r8.graph.LookupTarget;
import com.android.tools.r8.graph.ObjectAllocationInfoCollection;
import com.android.tools.r8.graph.ObjectAllocationInfoCollectionImpl;
import com.android.tools.r8.graph.PresortedComparable;
@@ -1229,9 +1230,13 @@
return null;
}
- DexEncodedMethod singleTargetMethod = lookupResult.getSingleLookupTarget();
- method.setSingleVirtualMethodCache(refinedReceiverType, singleTargetMethod);
- return singleTargetMethod;
+ LookupTarget singleTarget = lookupResult.getSingleLookupTarget();
+ DexEncodedMethod singleMethodTarget = null;
+ if (singleTarget.isMethodTarget()) {
+ singleMethodTarget = singleTarget.asMethodTarget().getMethod();
+ }
+ method.setSingleVirtualMethodCache(refinedReceiverType, singleMethodTarget);
+ return singleMethodTarget;
}
public AppInfoWithLiveness withSwitchMaps(Map<DexField, Int2ReferenceMap<DexField>> switchMaps) {