[Retrace] Only stream over unique method references

Fixes: 201981983
Change-Id: I6f69211fb5a431bd5999632d2b839ecf1383e443
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 54740b7..10ce889 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
@@ -18,8 +18,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.stream.Stream;
 
 public class RetraceMethodResultImpl implements RetraceMethodResult {
@@ -134,17 +136,19 @@
                             methodDefinition.substituteHolder(
                                 classElement.getRetracedClass().getClassReference()))));
               }
-              return mappedRanges.stream()
-                  .map(
-                      mappedRange -> {
-                        MethodReference methodReference =
-                            RetraceUtils.methodReferenceFromMappedRange(
-                                mappedRange, classElement.getRetracedClass().getClassReference());
-                        return new ElementImpl(
-                            this,
-                            classElement,
-                            RetracedMethodReferenceImpl.create(methodReference));
-                      });
+              List<ElementImpl> results = new ArrayList<>();
+              Set<MethodReference> seenMethodReferences = new HashSet<>();
+              for (MappedRange mappedRange : mappedRanges) {
+                MethodReference methodReference =
+                    RetraceUtils.methodReferenceFromMappedRange(
+                        mappedRange, classElement.getRetracedClass().getClassReference());
+                if (seenMethodReferences.add(methodReference)) {
+                  results.add(
+                      new ElementImpl(
+                          this, classElement, RetracedMethodReferenceImpl.create(methodReference)));
+                }
+              }
+              return results.stream();
             });
   }
 
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutsideLineRangeTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutsideLineRangeTest.java
index 0d0db4c..714719a 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutsideLineRangeTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiOutsideLineRangeTest.java
@@ -52,16 +52,17 @@
             + someClassRenamed.getTypeName()
             + ":\n"
             + "  1:3:void method2():11:13 -> a\n"
-            + "  4:4:void method2():10:10 -> a\n";
+            + "  4:4:void method2():10:10 -> a\n"
+            + "  28:28:void foo.bar.inlinee():92:92 -> a\n"
+            + "  5:5:void method2():14 -> a\n";
 
     @Test
     public void testNoLine() {
       Retracer retracer =
           Retracer.createDefault(
               ProguardMapProducer.fromString(mapping), new DiagnosticsHandler() {});
-      // TODO(b/201981983): Should only give rise to method2 once.
       // TODO(b/201982044): Should be the empty set.
-      retraceClassMethodAndPosition(retracer, someClassRenamed, someClassOriginal, 2, 2);
+      retraceClassMethodAndPosition(retracer, someClassRenamed, someClassOriginal, 2, 4);
       retraceClassMethodAndPosition(retracer, someOtherClassRenamed, someOtherClassOriginal, 1, 1);
     }
 
diff --git a/third_party/retrace/binary_compatibility.tar.gz.sha1 b/third_party/retrace/binary_compatibility.tar.gz.sha1
index 178a0d1..67554d1 100644
--- a/third_party/retrace/binary_compatibility.tar.gz.sha1
+++ b/third_party/retrace/binary_compatibility.tar.gz.sha1
@@ -1 +1 @@
-ccdf1c5f352d7642e50445f39c22ba207945db24
\ No newline at end of file
+ef1d22b8680bd9bc362c017a5641524ffef4d22e
\ No newline at end of file