Account for non-rebound constructor calls in trace reference

Bug: b/274904746
Change-Id: I97e5e2d4e169262a67cf466ba355ffd8abd823e2
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 b430854..8715d7d 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -278,19 +278,26 @@
         MethodLookupResult lookupResult = graphLens().lookupInvokeDirect(method, getContext());
         assert lookupResult.getType().isDirect();
         DexMethod rewrittenMethod = lookupResult.getReference();
-        BooleanBox seenMethod = new BooleanBox();
-        appView
-            .contextIndependentDefinitionForWithResolutionResult(rewrittenMethod.getHolderType())
-            .forEachClassResolutionResult(
-                holder -> {
-                  DexClassAndMethod target = rewrittenMethod.lookupMemberOnClass(holder);
-                  if (target != null) {
-                    handleRewrittenMethodReference(rewrittenMethod, target);
-                    seenMethod.set();
-                  }
-                });
-        if (seenMethod.isFalse()) {
-          handleRewrittenMethodReference(rewrittenMethod, (DexClassAndMethod) null);
+        if (getContext().getHolder().originatesFromDexResource()) {
+          handleRewrittenMethodResolution(
+              rewrittenMethod,
+              appInfo().unsafeResolveMethodDueToDexFormat(rewrittenMethod),
+              SingleResolutionResult::getResolutionPair);
+        } else {
+          BooleanBox seenMethod = new BooleanBox();
+          appView
+              .contextIndependentDefinitionForWithResolutionResult(rewrittenMethod.getHolderType())
+              .forEachClassResolutionResult(
+                  holder -> {
+                    DexClassAndMethod target = rewrittenMethod.lookupMemberOnClass(holder);
+                    if (target != null) {
+                      handleRewrittenMethodReference(rewrittenMethod, target);
+                      seenMethod.set();
+                    }
+                  });
+          if (seenMethod.isFalse()) {
+            handleRewrittenMethodReference(rewrittenMethod, (DexClassAndMethod) null);
+          }
         }
       }
 
diff --git a/src/test/java/com/android/tools/r8/tracereferences/TraceReferenceNonReboundConstructorCallTest.java b/src/test/java/com/android/tools/r8/tracereferences/TraceReferenceNonReboundConstructorCallTest.java
index 06e3858..2332d17 100644
--- a/src/test/java/com/android/tools/r8/tracereferences/TraceReferenceNonReboundConstructorCallTest.java
+++ b/src/test/java/com/android/tools/r8/tracereferences/TraceReferenceNonReboundConstructorCallTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.tracereferences;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
 
 import com.android.tools.r8.DiagnosticsChecker;
 import com.android.tools.r8.DiagnosticsHandler;
@@ -88,10 +87,8 @@
     ImmutableSet<MethodReference> expectedFoundMethods =
         ImmutableSet.of(MethodReferenceUtils.instanceConstructor(SuperClass.class));
     ImmutableSet<MethodReference> expectedMissingMethods = ImmutableSet.of();
-    // TODO(b/274904746): Should be equals.
-    assertNotEquals(expectedFoundMethods, consumer.foundMethods);
-    // TODO(b/274904746): Should be equals.
-    assertNotEquals(expectedMissingMethods, consumer.missingMethods);
+    assertEquals(expectedFoundMethods, consumer.foundMethods);
+    assertEquals(expectedMissingMethods, consumer.missingMethods);
   }
 
   private MissingReferencesConsumer runTest(Path sourceFile) throws Throwable {