[Retrace] Consider the same signature in method results as unambiguous

Bug: b/221855899
Change-Id: Ic3ff408d3671ecb05bfb23bd46dd66c1bb370990
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
index ea58acd..e9fe6b6 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
@@ -19,8 +19,10 @@
 import com.android.tools.r8.utils.ListUtils;
 import com.android.tools.r8.utils.Pair;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.OptionalInt;
+import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Stream;
 
@@ -51,7 +53,16 @@
       return true;
     }
     List<MemberNamingWithMappedRangesOfName> mappedRangesOfNames = mappedRanges.get(0).getSecond();
-    return mappedRangesOfNames != null && mappedRangesOfNames.size() > 1;
+    if (mappedRangesOfNames == null || mappedRanges.size() < 2) {
+      return false;
+    }
+    MethodSignature outermostSignature = getMethodSignatureFromMapping(mappedRangesOfNames.get(0));
+    for (int i = 1; i < mappedRangesOfNames.size(); i++) {
+      if (!outermostSignature.equals(getMethodSignatureFromMapping(mappedRangesOfNames.get(i)))) {
+        return true;
+      }
+    }
+    return false;
   }
 
   @Override
@@ -181,30 +192,39 @@
                                 classElement.getRetracedClass().getClassReference())),
                         null));
               }
-              return ListUtils.map(
-                  memberNamingsWithMappedRange,
+              Set<MethodSignature> seen = new HashSet<>();
+              List<ElementImpl> newElements = new ArrayList<>(memberNamingsWithMappedRange.size());
+              memberNamingsWithMappedRange.forEach(
                   memberNamingWithMappedRangesOfName -> {
-                    MemberNaming memberNaming =
-                        memberNamingWithMappedRangesOfName.getMemberNaming();
                     MethodSignature originalSignature =
-                        memberNaming != null
-                            ? memberNaming.getOriginalSignature().asMethodSignature()
-                            : ListUtils.last(memberNamingWithMappedRangesOfName.getMappedRanges())
-                                .getOriginalSignature()
-                                .asMethodSignature();
-                    MethodReference methodReference =
-                        RetraceUtils.methodReferenceFromMethodSignature(
-                            originalSignature, classElement.getRetracedClass().getClassReference());
-                    return new ElementImpl(
-                        this,
-                        classElement,
-                        RetracedMethodReferenceImpl.create(methodReference),
-                        memberNamingWithMappedRangesOfName);
-                  })
-                  .stream();
+                        getMethodSignatureFromMapping(memberNamingWithMappedRangesOfName);
+                    if (seen.add(originalSignature)) {
+                      MethodReference methodReference =
+                          RetraceUtils.methodReferenceFromMethodSignature(
+                              originalSignature,
+                              classElement.getRetracedClass().getClassReference());
+                      newElements.add(
+                          new ElementImpl(
+                              this,
+                              classElement,
+                              RetracedMethodReferenceImpl.create(methodReference),
+                              memberNamingWithMappedRangesOfName));
+                    }
+                  });
+              return newElements.stream();
             });
   }
 
+  private MethodSignature getMethodSignatureFromMapping(
+      MemberNamingWithMappedRangesOfName memberNamingWithMappedRanges) {
+    MemberNaming memberNaming = memberNamingWithMappedRanges.getMemberNaming();
+    return memberNaming != null
+        ? memberNaming.getOriginalSignature().asMethodSignature()
+        : ListUtils.last(memberNamingWithMappedRanges.getMappedRanges())
+            .getOriginalSignature()
+            .asMethodSignature();
+  }
+
   public static class ElementImpl implements RetraceMethodElement {
 
     private final RetracedMethodReferenceImpl methodReference;