Use new method lookup in trace references
Bug: b/226170842
Bug: b/214382176
Change-Id: I8d50ce7866772910578a69eff69a1963b0d9b4f3
diff --git a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
index a17a299..0468162 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -314,7 +314,7 @@
assert lookupResult.getType().isStatic();
DexMethod rewrittenMethod = lookupResult.getReference();
handleRewrittenMethodResolution(
- rewrittenMethod, appInfo().unsafeResolveMethodDueToDexFormatLegacy(rewrittenMethod));
+ rewrittenMethod, appInfo().unsafeResolveMethodDueToDexFormat(rewrittenMethod));
}
@Override
@@ -352,23 +352,25 @@
handleRewrittenMethodResolution(
method,
lookupResult.getType().isInterface()
- ? appInfo().resolveMethodOnInterfaceHolderLegacy(method)
- : appInfo().resolveMethodOnClassHolderLegacy(method));
+ ? appInfo().resolveMethodOnInterfaceHolder(method)
+ : appInfo().resolveMethodOnClassHolder(method));
}
private void handleRewrittenMethodResolution(
DexMethod method, MethodResolutionResult resolutionResult) {
- if (resolutionResult.isFailedResolution()
- && resolutionResult.asFailedResolution().hasMethodsCausingError()) {
- resolutionResult
- .asFailedResolution()
- .forEachFailureDependency(
- type -> addType(type, referencedFrom),
- methodCausingFailure ->
- handleRewrittenMethodReference(method, methodCausingFailure));
- return;
- }
- handleRewrittenMethodReference(method, resolutionResult.getResolutionPair());
+ resolutionResult.forEachMethodResolutionResult(
+ result -> {
+ if (result.isSingleResolution()) {
+ handleRewrittenMethodReference(method, result.getResolutionPair());
+ } else {
+ result
+ .asFailedResolution()
+ .forEachFailureDependency(
+ type -> addType(type, referencedFrom),
+ methodCausingFailure ->
+ handleRewrittenMethodReference(method, methodCausingFailure));
+ }
+ });
}
private void handleRewrittenMethodReference(
diff --git a/src/test/java/com/android/tools/r8/tracereferences/TraceMethodResolutionWithLibraryAndProgramClassTest.java b/src/test/java/com/android/tools/r8/tracereferences/TraceMethodResolutionWithLibraryAndProgramClassTest.java
index 4dcf1cd..82661ee 100644
--- a/src/test/java/com/android/tools/r8/tracereferences/TraceMethodResolutionWithLibraryAndProgramClassTest.java
+++ b/src/test/java/com/android/tools/r8/tracereferences/TraceMethodResolutionWithLibraryAndProgramClassTest.java
@@ -18,6 +18,7 @@
import com.android.tools.r8.utils.ZipUtils.ZipBuilder;
import com.google.common.collect.ImmutableSet;
import java.nio.file.Path;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
@@ -94,14 +95,11 @@
ImmutableSet<MethodReference> foundSet =
ImmutableSet.of(
Reference.methodFromMethod(A.class.getMethod("foo")),
- Reference.methodFromMethod(A.class.getMethod("bar")));
- ImmutableSet<MethodReference> missingSet =
- ImmutableSet.of(
+ Reference.methodFromMethod(A.class.getMethod("bar")),
Reference.methodFromMethod(B.class.getMethod("baz")),
Reference.methodFromMethod(B.class.getMethod("qux")));
assertEquals(foundSet, consumer.seenMethods);
- // TODO(b/226170842): Methods should not be missing.
- assertEquals(missingSet, consumer.seenMissingMethods);
+ assertEquals(Collections.emptySet(), consumer.seenMissingMethods);
}
// A is added to both library and program, but the program one is missing the methods {foo,bar}