Revert "Use new method lookup in trace references" This reverts commit 25bc16a93daeae952f852a03cf9121d01a3f1e72. Reason for revert: Does not work with trace references. Change-Id: Id56405b2ddb6532b2021579779b31032fb28b5f0
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 0468162..a17a299 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().unsafeResolveMethodDueToDexFormat(rewrittenMethod)); + rewrittenMethod, appInfo().unsafeResolveMethodDueToDexFormatLegacy(rewrittenMethod)); } @Override @@ -352,25 +352,23 @@ handleRewrittenMethodResolution( method, lookupResult.getType().isInterface() - ? appInfo().resolveMethodOnInterfaceHolder(method) - : appInfo().resolveMethodOnClassHolder(method)); + ? appInfo().resolveMethodOnInterfaceHolderLegacy(method) + : appInfo().resolveMethodOnClassHolderLegacy(method)); } private void handleRewrittenMethodResolution( DexMethod method, MethodResolutionResult resolutionResult) { - resolutionResult.forEachMethodResolutionResult( - result -> { - if (result.isSingleResolution()) { - handleRewrittenMethodReference(method, result.getResolutionPair()); - } else { - result - .asFailedResolution() - .forEachFailureDependency( - type -> addType(type, referencedFrom), - methodCausingFailure -> - handleRewrittenMethodReference(method, methodCausingFailure)); - } - }); + if (resolutionResult.isFailedResolution() + && resolutionResult.asFailedResolution().hasMethodsCausingError()) { + resolutionResult + .asFailedResolution() + .forEachFailureDependency( + type -> addType(type, referencedFrom), + methodCausingFailure -> + handleRewrittenMethodReference(method, methodCausingFailure)); + return; + } + handleRewrittenMethodReference(method, resolutionResult.getResolutionPair()); } 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 82661ee..4dcf1cd 100644 --- a/src/test/java/com/android/tools/r8/tracereferences/TraceMethodResolutionWithLibraryAndProgramClassTest.java +++ b/src/test/java/com/android/tools/r8/tracereferences/TraceMethodResolutionWithLibraryAndProgramClassTest.java
@@ -18,7 +18,6 @@ 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; @@ -95,11 +94,14 @@ ImmutableSet<MethodReference> foundSet = ImmutableSet.of( Reference.methodFromMethod(A.class.getMethod("foo")), - Reference.methodFromMethod(A.class.getMethod("bar")), + Reference.methodFromMethod(A.class.getMethod("bar"))); + ImmutableSet<MethodReference> missingSet = + ImmutableSet.of( Reference.methodFromMethod(B.class.getMethod("baz")), Reference.methodFromMethod(B.class.getMethod("qux"))); assertEquals(foundSet, consumer.seenMethods); - assertEquals(Collections.emptySet(), consumer.seenMissingMethods); + // TODO(b/226170842): Methods should not be missing. + assertEquals(missingSet, consumer.seenMissingMethods); } // A is added to both library and program, but the program one is missing the methods {foo,bar}