Remove lookupDirect/Static without context
- Removed everywhere but from LambdaDescriptor
Bug:147578480
Change-Id: Ibfe6847bb6605e5e938714b60b51c76989e13b7f
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfo.java b/src/main/java/com/android/tools/r8/graph/AppInfo.java
index 7ffcf30..7acefcd 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfo.java
@@ -285,6 +285,7 @@
* @param method the method to lookup
* @return The actual target for {@code method} or {@code null} if none found.
*/
+ @Deprecated // TODO(b/147578480): Remove
public DexEncodedMethod lookupDirectTarget(DexMethod method) {
assert checkIfObsolete();
ResolutionResult resolutionResult = resolveMethod(method.holder, method);
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 8682fc1..c2fe04f 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
@@ -4,7 +4,6 @@
package com.android.tools.r8.ir.optimize.staticizer;
-import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexClass;
@@ -458,7 +457,7 @@
// Check constructor.
InvokeDirect invoke = instruction.asInvokeDirect();
DexEncodedMethod methodInvoked =
- appView.appInfo().lookupDirectTarget(invoke.getInvokedMethod());
+ appView.appInfo().lookupDirectTarget(invoke.getInvokedMethod(), info.candidate);
List<Value> values = invoke.inValues();
if (ListUtils.lastIndexMatching(values, v -> v.getAliasedValue() == candidateValue) != 0
@@ -599,10 +598,11 @@
}
return candidateInfo.invalidate();
}
- AppInfo appInfo = appView.appInfo();
- DexEncodedMethod methodInvoked = user.isInvokeDirect()
- ? appInfo.lookupDirectTarget(methodReferenced)
- : appInfo.lookupVirtualTarget(methodReferenced.holder, methodReferenced);
+ AppInfoWithLiveness appInfo = appView.appInfo();
+ DexEncodedMethod methodInvoked =
+ user.isInvokeDirect()
+ ? appInfo.lookupDirectTarget(methodReferenced, candidateInfo.candidate)
+ : appInfo.lookupVirtualTarget(methodReferenced.holder, methodReferenced);
if (ListUtils.lastIndexMatching(invoke.inValues(), isAliasedValue) == 0
&& methodInvoked != null
&& methodInvoked.method.holder == candidateInfo.candidate.type) {
diff --git a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
index 8ea3d93..b95f778 100644
--- a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
+++ b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
@@ -16,6 +16,7 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.graph.ResolutionResult;
+import com.android.tools.r8.graph.ResolutionResult.SingleResolutionResult;
import com.android.tools.r8.naming.ClassNameMinifier.ClassRenaming;
import com.android.tools.r8.naming.FieldNameMinifier.FieldRenaming;
import com.android.tools.r8.naming.MethodNameMinifier.MethodRenaming;
@@ -175,24 +176,11 @@
if (holder == null || holder.isNotProgramClass()) {
return true;
}
- // We don't know which invoke type this method is used for, so checks that it has been
- // rebound either way.
- DexEncodedMethod staticTarget = appView.appInfo().lookupStaticTarget(item);
- DexEncodedMethod directTarget = appView.appInfo().lookupDirectTarget(item);
- DexEncodedMethod virtualTarget = appView.appInfo().lookupVirtualTarget(item.holder, item);
- DexClass staticTargetHolder =
- staticTarget != null ? appView.definitionFor(staticTarget.method.holder) : null;
- DexClass directTargetHolder =
- directTarget != null ? appView.definitionFor(directTarget.method.holder) : null;
- DexClass virtualTargetHolder =
- virtualTarget != null ? appView.definitionFor(virtualTarget.method.holder) : null;
- assert (directTarget == null && staticTarget == null && virtualTarget == null)
- || (virtualTarget != null && virtualTarget.method == item)
- || (directTarget != null && directTarget.method == item)
- || (staticTarget != null && staticTarget.method == item)
- || (directTargetHolder != null && directTargetHolder.isNotProgramClass())
- || (virtualTargetHolder != null && virtualTargetHolder.isNotProgramClass())
- || (staticTargetHolder != null && staticTargetHolder.isNotProgramClass())
+ SingleResolutionResult resolution =
+ appView.appInfo().resolveMethod(item.holder, item).asSingleResolution();
+ // The resolution is either unknown or resolved to the item or a visibility bridge.
+ assert resolution == null
+ || resolution.getResolvedMethod().method == item
|| appView.unneededVisibilityBridgeMethods().contains(item);
return true;
}
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 e49d9a5..b38dd21 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -77,13 +77,13 @@
);
AndroidApp application = buildApplication(builder);
- AppInfo appInfo = computeAppInfo(application);
+ AppInfoWithClassHierarchy appInfo = computeAppInfoWithClassHierarchy(application);
CodeInspector inspector = new CodeInspector(appInfo.app());
DexEncodedMethod method = getMethod(inspector, DEFAULT_CLASS_NAME, "int", "x",
ImmutableList.of());
assertNull(appInfo.lookupVirtualTarget(method.method.holder, method.method));
- assertNull(appInfo.lookupDirectTarget(method.method));
- assertNotNull(appInfo.lookupStaticTarget(method.method));
+ assertNull(appInfo.lookupDirectTarget(method.method, method.method.holder));
+ assertNotNull(appInfo.lookupStaticTarget(method.method, method.method.holder));
if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(DexVm.Version.V4_4_4)) {
// Dalvik rejects at verification time instead of producing the
@@ -147,7 +147,7 @@
);
AndroidApp application = buildApplication(builder);
- AppInfo appInfo = computeAppInfo(application);
+ AppInfoWithClassHierarchy appInfo = computeAppInfoWithClassHierarchy(application);
CodeInspector inspector = new CodeInspector(appInfo.app());
DexMethod methodXOnTestSuper =
@@ -166,12 +166,12 @@
assertNull(appInfo.lookupVirtualTarget(classTest, methodXOnTestSuper));
assertNull(appInfo.lookupVirtualTarget(classTest, methodXOnTest));
- assertNull(appInfo.lookupDirectTarget(methodXOnTestSuper));
- assertNull(appInfo.lookupDirectTarget(methodXOnTest));
+ assertNull(appInfo.lookupDirectTarget(methodXOnTestSuper, methodXOnTestSuper.holder));
+ assertNull(appInfo.lookupDirectTarget(methodXOnTest, methodXOnTest.holder));
- assertNotNull(appInfo.lookupStaticTarget(methodXOnTestSuper));
+ assertNotNull(appInfo.lookupStaticTarget(methodXOnTestSuper, methodXOnTestSuper.holder));
// Accessing a private target on a different type will fail resolution outright.
- assertNull(appInfo.lookupStaticTarget(methodXOnTest));
+ assertNull(appInfo.lookupStaticTarget(methodXOnTest, methodXOnTest.holder));
assertEquals("OK", runArt(application));
}