[Retrace] Disambiguate stack traces by putting <OR> on the same line

Change-Id: I0a0bafadc6864db6900cc1809e21416ebd423a39
diff --git a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
index 0296d71..ff5b970 100644
--- a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.Keep;
 import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
 import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.StringUtils;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -78,21 +79,27 @@
     List<String> retracedStrings = new ArrayList<>();
     List<List<String>> retracedStackTraces =
         removeDuplicateStackTraces(retraceStackTrace(stackTrace));
-    if (retracedStackTraces.size() > 1) {
-      retracedStrings.add(
-          "There are "
-              + retracedStackTraces.size()
-              + " ambiguous stack traces."
-              + (isVerbose ? "" : " Use --verbose to have all listed."));
+    if (retracedStackTraces.size() > 1 && isVerbose) {
+      retracedStrings.add("There are " + retracedStackTraces.size() + " ambiguous stack traces.");
     }
     for (int i = 0; i < retracedStackTraces.size(); i++) {
-      if (i > 0) {
-        retracedStrings.add("< OR >");
+      List<String> result = retracedStackTraces.get(i);
+      if (i > 0 && !result.isEmpty()) {
+        // We are reporting an ambiguous frame. To support retracing tools that retrace line by line
+        // we have to emit <OR> at the point of the first ' at ' if we can find it.
+        String firstLine = result.get(0);
+        int indexToInsertOr = firstLine.indexOf(" at ");
+        boolean hasSpace = indexToInsertOr >= 0;
+        if (indexToInsertOr < 0) {
+          indexToInsertOr = Math.max(StringUtils.firstNonWhitespaceCharacter(firstLine), 0);
+        }
+        result.set(
+            0,
+            firstLine.substring(0, indexToInsertOr)
+                + (hasSpace ? "<OR>" : "<OR> ")
+                + firstLine.substring(indexToInsertOr));
       }
-      retracedStrings.addAll(retracedStackTraces.get(i));
-      if (!isVerbose) {
-        break;
-      }
+      retracedStrings.addAll(result);
     }
     return retracedStrings;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java
index 5ce9e89..3facf5f 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMethodVerboseStackTrace.java
@@ -47,8 +47,7 @@
             + " main(java.lang.String[])(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.com.android.Foo"
             + " main(java.lang.String[],com.android.Bar)(Main.java)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.c(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(com.android.Bar)(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.com.android.Foo"
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java
index 3442711..484fb5f 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousMissingLineStackTrace.java
@@ -25,13 +25,61 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 8 ambiguous stack traces. Use --verbose to have all listed.",
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java:7)",
         "    at com.android.tools.r8.R8.bar(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java:7)",
+        "    at com.android.tools.r8.R8.bar(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java:7)",
+        "    at com.android.tools.r8.R8.foo(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java:7)",
+        "    at com.android.tools.r8.R8.foo(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:7)",
+        "    at com.android.tools.r8.R8.bar(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:7)",
+        "    at com.android.tools.r8.R8.bar(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:7)",
+        "    at com.android.tools.r8.R8.foo(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java:9)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:7)",
+        "    at com.android.tools.r8.R8.foo(R8.java:8)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java:9)",
         "    ... 42 more");
   }
 
@@ -46,56 +94,49 @@
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:9)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:7)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java:8)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java
index 989868f..f6704a4 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousStackTrace.java
@@ -25,13 +25,61 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 8 ambiguous stack traces. Use --verbose to have all listed.",
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
         "    ... 42 more");
   }
 
@@ -46,56 +94,49 @@
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureNonVerboseStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureNonVerboseStackTrace.java
index 97f2162..7c0c0c2 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureNonVerboseStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureNonVerboseStackTrace.java
@@ -43,16 +43,13 @@
         "java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.boolean foo(int,int)(Internal.java)",
-        "< OR >",
-        "java.lang.IndexOutOfBoundsException",
+        "<OR> java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java)",
-        "< OR >",
-        "java.lang.IndexOutOfBoundsException",
+        "<OR> java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int,boolean)(Internal.java)",
-        "< OR >",
-        "java.lang.IndexOutOfBoundsException",
+        "<OR> java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int,int)(Internal.java)");
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureVerboseStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureVerboseStackTrace.java
index 23991fb..a00b7bf 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureVerboseStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithSignatureVerboseStackTrace.java
@@ -43,16 +43,13 @@
         "java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.boolean foo(int,int)(Internal.java)",
-        "< OR >",
-        "java.lang.IndexOutOfBoundsException",
+        "<OR> java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java)",
-        "< OR >",
-        "java.lang.IndexOutOfBoundsException",
+        "<OR> java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int,boolean)(Internal.java)",
-        "< OR >",
-        "java.lang.IndexOutOfBoundsException",
+        "<OR> java.lang.IndexOutOfBoundsException",
         "\tat java.util.ArrayList.get(ArrayList.java:411)",
         "\tat com.android.tools.r8.Internal.void foo(int,int)(Internal.java)");
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java
index 004b7d5..6df2b28 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleLinesNoLineNumberStackTrace.java
@@ -29,8 +29,10 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 2 ambiguous stack traces. Use --verbose to have all listed.",
         "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java)");
   }
 
@@ -40,8 +42,7 @@
         "There are 2 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void method1(java.lang.String)(Main.java)",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java)");
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java
index 858c06b..2e57740 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscatedLineNumberWithOverrideTest.java
@@ -35,11 +35,25 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 4 ambiguous stack traces. Use --verbose to have all listed.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:3)",
         "\tat com.android.tools.r8.naming.retrace.Main.overload1(Main.java:7)",
         "\tat com.android.tools.r8.naming.retrace.Main.definedOverload(Main.java:7)",
+        "\tat com.android.tools.r8.naming.retrace.Main.mainPC(Main.java:42)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:3)",
+        "\tat com.android.tools.r8.naming.retrace.Main.overload1(Main.java:7)",
+        "\tat com.android.tools.r8.naming.retrace.Main.definedOverload(Main.java:11)",
+        "\tat com.android.tools.r8.naming.retrace.Main.mainPC(Main.java:42)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:3)",
+        "\tat com.android.tools.r8.naming.retrace.Main.overload2(Main.java:11)",
+        "\tat com.android.tools.r8.naming.retrace.Main.definedOverload(Main.java:7)",
+        "\tat com.android.tools.r8.naming.retrace.Main.mainPC(Main.java:42)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:3)",
+        "\tat com.android.tools.r8.naming.retrace.Main.overload2(Main.java:11)",
+        "\tat com.android.tools.r8.naming.retrace.Main.definedOverload(Main.java:11)",
         "\tat com.android.tools.r8.naming.retrace.Main.mainPC(Main.java:42)");
   }
 
@@ -53,24 +67,21 @@
         "\tat com.android.tools.r8.naming.retrace.Main.void definedOverload()(Main.java:7)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " mainPC(java.lang.String[])(Main.java:42)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
         "\tat com.android.tools.r8.naming.retrace.Main.void overload1()(Main.java:7)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " definedOverload(java.lang.String)(Main.java:11)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " mainPC(java.lang.String[])(Main.java:42)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " overload2(java.lang.String)(Main.java:11)",
         "\tat com.android.tools.r8.naming.retrace.Main.void definedOverload()(Main.java:7)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " mainPC(java.lang.String[])(Main.java:42)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String)(Main.java:3)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " overload2(java.lang.String)(Main.java:11)",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/OverloadSameLineTest.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/OverloadSameLineTest.java
index c5fe164..277e4b3 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/OverloadSameLineTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/OverloadSameLineTest.java
@@ -29,9 +29,12 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 3 ambiguous stack traces. Use --verbose to have all listed.",
         "Exception in thread \"main\" java.lang.NullPointerException",
-        "\tat com.android.tools.r8.naming.retrace.Main.overload(Main.java:7)");
+        "\tat com.android.tools.r8.naming.retrace.Main.overload(Main.java:7)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.overload(Main.java:15)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.overload(Main.java:13)");
   }
 
   @Override
@@ -40,11 +43,9 @@
         "There are 3 ambiguous stack traces.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void overload()(Main.java:7)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void overload(int)(Main.java:15)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " overload(java.lang.String)(Main.java:13)");
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java
index 120cd8e..8f6e183 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SingleLineNoLineNumberStackTrace.java
@@ -36,13 +36,19 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 2 ambiguous stack traces. Use --verbose to have all listed.",
         "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java:42)",
         "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:28)",
         "\tat com.android.tools.r8.naming.retrace.Main.method2(Main.java:42)",
         "\tat com.android.tools.r8.naming.retrace.Main.main2(Main.java:29)",
         "\tat com.android.tools.r8.naming.retrace.Main.main3(Main.java:30)",
+        "\tat com.android.tools.r8.naming.retrace.Main.main4(Main.java:153)",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.method1(Main.java:42)",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:28)",
+        "\tat com.android.tools.r8.naming.retrace.Main.method2(Main.java:42)",
+        "\tat com.android.tools.r8.naming.retrace.Main.main2(Main.java:29)",
+        "\tat com.android.tools.r8.naming.retrace.Main.method3(Main.java:72)",
         "\tat com.android.tools.r8.naming.retrace.Main.main4(Main.java:153)");
   }
 
@@ -62,8 +68,7 @@
             + " main3(java.lang.String[])(Main.java:30)",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " main4(java.lang.String[])(Main.java:153)",
-        "< OR >",
-        "Exception in thread \"main\" java.lang.NullPointerException",
+        "<OR> Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.void"
             + " method1(java.lang.String)(Main.java:42)",
         "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:28)",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java
index 2f946f8..3697b0c 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/UnknownSourceStackTrace.java
@@ -25,13 +25,61 @@
   @Override
   public List<String> retracedStackTrace() {
     return Arrays.asList(
-        "There are 8 ambiguous stack traces. Use --verbose to have all listed.",
         "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.bar(R8.java)",
+        "    ... 42 more",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
+        "    at com.android.tools.r8.R8.main(Unknown Source)",
+        "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.foo(R8.java)",
         "    ... 42 more");
   }
 
@@ -46,56 +94,49 @@
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",
         "Caused by: com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
         "    ... 42 more",
-        "< OR >",
-        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "<OR> com.android.tools.r8.CompilationException: foo[parens](Source:3)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.void foo(int)(R8.java)",
         "    at com.android.tools.r8.R8.main(Unknown Source)",