[Retrace] Extend all retrace tests with verbose output

Change-Id: Ic6fdc424d03e73e0c8033d617d39b9d5d33028db
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
index 441fd68..d283ee6 100644
--- a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
@@ -88,6 +88,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return null;
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -123,6 +128,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return null;
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -162,6 +172,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return null;
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java
index e4005de..978e33a 100644
--- a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java
+++ b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java
@@ -57,6 +57,11 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    throw new RuntimeException("Do not test");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index 8cc0883..50e8e34 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -19,14 +19,17 @@
 import com.android.tools.r8.retrace.stacktraces.ActualBotStackTraceBase;
 import com.android.tools.r8.retrace.stacktraces.ActualIdentityStackTrace;
 import com.android.tools.r8.retrace.stacktraces.ActualRetraceBotStackTrace;
+import com.android.tools.r8.retrace.stacktraces.AmbiguousMethodVerboseStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousMissingLineStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousWithMultipleLineMappingsStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AmbiguousWithSignatureNonVerboseStackTrace;
+import com.android.tools.r8.retrace.stacktraces.AmbiguousWithSignatureVerboseStackTrace;
 import com.android.tools.r8.retrace.stacktraces.AutoStackTrace;
 import com.android.tools.r8.retrace.stacktraces.CircularReferenceStackTrace;
 import com.android.tools.r8.retrace.stacktraces.ColonInFileNameStackTrace;
 import com.android.tools.r8.retrace.stacktraces.FileNameExtensionStackTrace;
+import com.android.tools.r8.retrace.stacktraces.FoundMethodVerboseStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineFileNameStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineFileNameWithInnerClassesStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineNoLineNumberStackTrace;
@@ -53,6 +56,7 @@
 import com.android.tools.r8.retrace.stacktraces.SyntheticLambdaMethodWithInliningStackTrace;
 import com.android.tools.r8.retrace.stacktraces.UnicodeInFileNameStackTrace;
 import com.android.tools.r8.retrace.stacktraces.UnknownSourceStackTrace;
+import com.android.tools.r8.retrace.stacktraces.VerboseUnknownStackTrace;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
@@ -71,17 +75,20 @@
 @RunWith(Parameterized.class)
 public class RetraceTests extends TestBase {
 
-  @Parameters(name = "{0}, external: {1}")
+  @Parameters(name = "{0}, external: {1}, verbose: {2}")
   public static Collection<Object[]> data() {
-    return buildParameters(getTestParameters().withCfRuntimes().build(), BooleanUtils.values());
+    return buildParameters(
+        getTestParameters().withCfRuntimes().build(), BooleanUtils.values(), BooleanUtils.values());
   }
 
   private final TestParameters testParameters;
   private final boolean external;
+  private final boolean verbose;
 
-  public RetraceTests(TestParameters parameters, boolean external) {
+  public RetraceTests(TestParameters parameters, boolean external, boolean verbose) {
     this.testParameters = parameters;
     this.external = external;
+    this.verbose = verbose;
   }
 
   @Test
@@ -282,6 +289,27 @@
     runRetraceTest(new MultipleLinesNoLineNumberStackTrace());
   }
 
+  @Test
+  public void testFoundMethod() throws Exception {
+    runRetraceTest(new FoundMethodVerboseStackTrace());
+  }
+
+  @Test
+  public void testUnknownMethod() throws Exception {
+    runRetraceTest(new AmbiguousMethodVerboseStackTrace());
+  }
+
+  @Test
+  public void testVerboseUnknownMethod() throws Exception {
+    runRetraceTest(new VerboseUnknownStackTrace());
+  }
+
+  @Test
+  public void testAmbiguousMissingLineVerbose() throws Exception {
+    assumeTrue("b/169346455", false);
+    runRetraceTest(new AmbiguousWithSignatureVerboseStackTrace());
+  }
+
   private void inspectRetraceTest(
       StackTraceForTest stackTraceForTest, Consumer<Retracer> inspection) {
     inspection.accept(
@@ -302,6 +330,11 @@
 
   private TestDiagnosticMessagesImpl runRetraceTest(
       StackTraceForTest stackTraceForTest, boolean allowExperimentalMapping) throws Exception {
+    String expectedStackTrace =
+        StringUtils.joinLines(
+            verbose
+                ? stackTraceForTest.retraceVerboseStackTrace()
+                : stackTraceForTest.retracedStackTrace());
     if (external) {
       assumeTrue(testParameters.isCfRuntime());
       // The external dependency is built on top of R8Lib. If test.py is run with
@@ -327,13 +360,13 @@
       command.add("com.android.tools.r8.retrace.Retrace");
       command.add(mappingFile.toString());
       command.add(stackTraceFile.toString());
+      if (verbose) {
+        command.add("-verbose");
+      }
       command.add("-quiet");
       ProcessBuilder builder = new ProcessBuilder(command);
       ProcessResult processResult = ToolHelper.runProcess(builder);
-      assertEquals(
-          StringUtils.joinLines(stackTraceForTest.retracedStackTrace())
-              + StringUtils.LINE_SEPARATOR,
-          processResult.stdout);
+      assertEquals(expectedStackTrace + StringUtils.LINE_SEPARATOR, processResult.stdout);
       // TODO(b/177204438): Parse diagnostics from stdErr
       return new TestDiagnosticMessagesImpl();
     } else {
@@ -343,10 +376,8 @@
               .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
               .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
               .setRetracedStackTraceConsumer(
-                  retraced ->
-                      assertEquals(
-                          StringUtils.joinLines(stackTraceForTest.retracedStackTrace()),
-                          StringUtils.joinLines(retraced)))
+                  retraced -> assertEquals(expectedStackTrace, StringUtils.joinLines(retraced)))
+              .setVerbose(verbose)
               .build();
       Retrace.runForTesting(retraceCommand, allowExperimentalMapping);
       return diagnosticsHandler;
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java
deleted file mode 100644
index 8f8e049..0000000
--- a/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.retrace;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assume.assumeTrue;
-
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestDiagnosticMessagesImpl;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.retrace.stacktraces.AmbiguousMethodVerboseStackTrace;
-import com.android.tools.r8.retrace.stacktraces.AmbiguousWithSignatureVerboseStackTrace;
-import com.android.tools.r8.retrace.stacktraces.FoundMethodVerboseStackTrace;
-import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
-import com.android.tools.r8.retrace.stacktraces.VerboseUnknownStackTrace;
-import java.util.Collection;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public class RetraceVerboseTests extends TestBase {
-
-  @Parameters(name = "{0}")
-  public static Collection<Object[]> data() {
-    return buildParameters(getTestParameters().withNoneRuntime().build());
-  }
-
-  public RetraceVerboseTests(TestParameters parameters) {}
-
-  @Test
-  public void testFoundMethod() {
-    runRetraceTest(new FoundMethodVerboseStackTrace());
-  }
-
-  @Test
-  public void testUnknownMethod() {
-    runRetraceTest(new AmbiguousMethodVerboseStackTrace());
-  }
-
-  @Test
-  public void testVerboseUnknownMethod() {
-    runRetraceTest(new VerboseUnknownStackTrace());
-  }
-
-  @Test
-  public void testAmbiguousMissingLineVerbose() {
-    assumeTrue("b/169346455", false);
-    runRetraceTest(new AmbiguousWithSignatureVerboseStackTrace());
-  }
-
-  private void runRetraceTest(StackTraceForTest stackTraceForTest) {
-    TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
-    RetraceCommand retraceCommand =
-        RetraceCommand.builder(diagnosticsHandler)
-            .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
-            .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
-            .setVerbose(true)
-            .setRetracedStackTraceConsumer(
-                retraced -> assertEquals(stackTraceForTest.retracedStackTrace(), retraced))
-            .build();
-    Retrace.run(retraceCommand);
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
index f74fcda..9af1378 100644
--- a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
@@ -10,10 +10,10 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestDiagnosticMessagesImpl;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.retrace.stacktraces.InlineFileNameStackTrace;
 import com.android.tools.r8.retrace.stacktraces.RetraceAssertionErrorStackTrace;
 import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
 import java.util.Collections;
@@ -27,13 +27,16 @@
 @RunWith(Parameterized.class)
 public class StackTraceRegularExpressionParserTests extends TestBase {
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withNoneRuntime().build();
+  @Parameters(name = "{0}, verbose: {1}")
+  public static List<Object[]> data() {
+    return buildParameters(getTestParameters().withNoneRuntime().build(), BooleanUtils.values());
   }
 
-  public StackTraceRegularExpressionParserTests(TestParameters parameters) {
+  private final boolean verbose;
+
+  public StackTraceRegularExpressionParserTests(TestParameters parameters, boolean verbose) {
     parameters.assertNoneRuntime();
+    this.verbose = verbose;
   }
 
   @Test
@@ -57,6 +60,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("foocom.android.tools.r8.a");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -86,6 +94,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("AA.AA.AA b.b.b c.c.c");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -114,6 +127,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("AA/AA b/b/b c/c/c");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -141,6 +159,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("a.b.c.a");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -168,6 +191,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.void foo()");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -195,6 +223,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.a");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -227,6 +260,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("a.b.c.a");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -254,6 +292,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.int foo");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -281,6 +324,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.a");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -303,6 +351,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return Collections.singletonList("foo.Bar$Baz.int baz(Bar.java)");
+          }
+
+          @Override
           public String mapping() {
             return StringUtils.lines(
                 "com.android.tools.r8.naming.retrace.Main -> a.b.c:",
@@ -337,6 +390,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8(R8.java)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -364,6 +422,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("a.b.d(SourceFile)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -392,6 +455,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.boolean foo()(7)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -420,6 +488,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.boolean foo()(7)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -448,6 +521,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.boolean foo()(42)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -475,6 +553,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.boolean foo()(4)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -505,6 +588,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.boolean foo()(7)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -532,6 +620,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("void", "a.a.a[]", "a.a.a[][][]");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -565,6 +658,15 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            // TODO(b/199919195): Consider not writing full method description.
+            return ImmutableList.of(
+                "void com.android.tools.r8.R8.void foo()",
+                "com.android.tools.r8.D8[] com.android.tools.r8.R8.com.android.tools.r8.D8[]"
+                    + " bar()");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -601,6 +703,13 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of(
+                "void com.android.tools.r8.R8.foo",
+                "com.android.tools.r8.D8[] com.android.tools.r8.R8.bar");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -628,6 +737,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("void");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -659,6 +773,13 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of(
+                "com.android.tools.r8.R8.void foo(int,com.android.tools.r8.D8[],boolean)"
+                    + "(int,com.android.tools.r8.D8[],boolean)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -689,6 +810,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.void foo()()");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -721,6 +847,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("com.android.tools.r8.R8.bar(com.android.tools.r8.D8)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -759,6 +890,14 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of(
+                "com.android.tools.r8.R8: foo bar baz",
+                "  at com.android.tools.r8.Bar.void foo()(Bar.java)",
+                "  at com.android.tools.r8.Baz.void bar()(Baz.java)");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -794,6 +933,11 @@
           }
 
           @Override
+          public List<String> retraceVerboseStackTrace() {
+            return ImmutableList.of("%c\\com.android.tools.r8.Bar\\%c.void m()(\\Bar.java:13)\\%S");
+          }
+
+          @Override
           public int expectedWarnings() {
             return 0;
           }
@@ -809,9 +953,14 @@
             .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
             .setRetracedStackTraceConsumer(
                 retraced -> {
-                  assertEquals(stackTraceForTest.retracedStackTrace(), retraced);
+                  assertEquals(
+                      verbose
+                          ? stackTraceForTest.retraceVerboseStackTrace()
+                          : stackTraceForTest.retracedStackTrace(),
+                      retraced);
                 })
             .setRegularExpression(regularExpression)
+            .setVerbose(verbose)
             .build();
     Retrace.run(retraceCommand);
     return diagnosticsHandler;
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualIdentityStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualIdentityStackTrace.java
index 9ac7068..1b78928 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualIdentityStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualIdentityStackTrace.java
@@ -55,6 +55,11 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return obfuscatedStackTrace();
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTrace.java
index 0e38636..8ffd732 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTrace.java
@@ -67,6 +67,38 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "com.android.tools.r8.CompilationFailedException: Compilation failed to complete",
+        "\tat com.android.tools.r8.BaseCommand$Builder."
+            + "com.android.tools.r8.BaseCommand build()(BaseCommand.java:143)",
+        "\tat com.android.tools.r8.R8TestBuilder.internalCompile(R8TestBuilder.java:104)",
+        "\tat com.android.tools.r8.R8TestBuilder.internalCompile(R8TestBuilder.java:29)",
+        "\tat com.android.tools.r8.TestCompilerBuilder.compile(TestCompilerBuilder.java:89)",
+        "\tat com.android.tools.r8.TestCompilerBuilder.run(TestCompilerBuilder.java:113)",
+        "\tat com.android.tools.r8.TestBuilder.run(TestBuilder.java:49)",
+        "\tat com.android.tools.r8.ir.optimize.classinliner.ClassInlinerTest.testCodeSample(ClassInlinerTest.java:289)",
+        "",
+        "Caused by:",
+        "com.android.tools.r8.utils.AbortException: Error: offset: 158, line: 2, column: 33,"
+            + " Unexpected attribute at <no file>:2:33",
+        "-keepattributes -keepattributes LineNumberTable",
+        "                                ^",
+        "\tat com.android.tools.r8.utils.Reporter.void failIfPendingErrors()(Reporter.java:101)",
+        "\tat com.android.tools.r8.shaking.ProguardConfigurationParser."
+            + "void parse(java.util.List)(ProguardConfigurationParser.java:187)",
+        "\tat com.android.tools.r8.R8Command$Builder."
+            + "com.android.tools.r8.R8Command makeR8Command()(R8Command.java:432)",
+        "\tat com.android.tools.r8.R8Command$Builder."
+            + "com.android.tools.r8.R8Command makeCommand()(R8Command.java:413)",
+        "\tat com.android.tools.r8.R8Command$Builder."
+            + "com.android.tools.r8.BaseCommand makeCommand()(R8Command.java:61)",
+        "\tat com.android.tools.r8.BaseCommand$Builder."
+            + "com.android.tools.r8.BaseCommand build()(BaseCommand.java:139)",
+        "\t... 6 more");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTraceWithInfo.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTraceWithInfo.java
index d57b024..ce0441d 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTraceWithInfo.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/ActualRetraceBotStackTraceWithInfo.java
@@ -69,6 +69,32 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "com.android.tools.r8.CompilationFailedException: Compilation failed to complete",
+        "\tat com.android.tools.r8.BaseCommand$Builder.build(BaseCommand.java:143)",
+        "\tat com.android.tools.r8.R8TestBuilder.internalCompile(R8TestBuilder.java:104)",
+        "\tat com.android.tools.r8.R8TestBuilder.internalCompile(R8TestBuilder.java:29)",
+        "\tat com.android.tools.r8.TestCompilerBuilder.compile(TestCompilerBuilder.java:89)",
+        "\tat com.android.tools.r8.TestCompilerBuilder.run(TestCompilerBuilder.java:113)",
+        "\tat com.android.tools.r8.TestBuilder.run(TestBuilder.java:49)",
+        "\tat com.android.tools.r8.ir.optimize.classinliner.ClassInlinerTest.testCodeSample(ClassInlinerTest.java:289)",
+        "",
+        "Caused by:",
+        "com.android.tools.r8.utils.AbortException: Error: offset: 158, line: 2, column: 33,"
+            + " Unexpected attribute at <no file>:2:33",
+        "-keepattributes -keepattributes LineNumberTable",
+        "                                ^",
+        "\tat com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:101)",
+        "\tat com.android.tools.r8.shaking.ProguardConfigurationParser.parse(ProguardConfigurationParser.java:187)",
+        "\tat com.android.tools.r8.R8Command$Builder.makeR8Command(R8Command.java:432)",
+        "\tat com.android.tools.r8.R8Command$Builder.makeCommand(R8Command.java:413)",
+        "\tat com.android.tools.r8.R8Command$Builder.makeCommand(R8Command.java:61)",
+        "\tat com.android.tools.r8.BaseCommand$Builder.build(BaseCommand.java:139)",
+        "\t... 6 more");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 1;
   }
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 3d3a1ee..017a6b8 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
@@ -33,6 +33,15 @@
     return Arrays.asList(
         "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.main(Main.java)",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java)");
+  }
+
+  @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "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.com.android.Foo main("
             + "java.lang.String[])(Main.java)",
         "\t<OR #1> at com.android.tools.r8.naming.retrace.Main.void main("
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 310390c..e3cab8a 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
@@ -38,6 +38,21 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java:7)",
+        "    <OR #1> 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)",
+        "    <OR #1> 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)",
+        "    <OR #1> at com.android.tools.r8.R8.void foo(int)(R8.java:9)",
+        "    ... 42 more");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.R8 -> a.a:", "  void foo(int) -> a", "  void bar(int, int) -> a");
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 38fbb08..9692fa2 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
@@ -65,6 +65,21 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR #1> at com.android.tools.r8.R8.void foo(int)(R8.java)",
+        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR #1> 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)",
+        "    <OR #1> at com.android.tools.r8.R8.void foo(int)(R8.java)",
+        "    ... 42 more");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.R8 -> a.a:", "  void foo(int) -> a", "  void bar(int, int) -> a");
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java
index 4543fab..1041ace 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousWithMultipleLineMappingsStackTrace.java
@@ -36,6 +36,14 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException",
+        "\tat java.util.ArrayList.get(ArrayList.java:411)",
+        "\tat com.android.tools.r8.Internal.void foo(int)(Internal.java)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
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 e4dc987..dbfe5f8 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
@@ -37,6 +37,17 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException",
+        "\tat java.util.ArrayList.get(ArrayList.java:411)",
+        "\tat com.android.tools.r8.Internal.boolean foo(int,int)(Internal.java)",
+        "\t<OR #1> at com.android.tools.r8.Internal.void foo(int)(Internal.java)",
+        "\t<OR #2> at com.android.tools.r8.Internal.void foo(int,boolean)(Internal.java)",
+        "\t<OR #3> at com.android.tools.r8.Internal.void foo(int,int)(Internal.java)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
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 45c103f..9c08875 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
@@ -40,6 +40,17 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException",
+        "\tat java.util.ArrayList.get(ArrayList.java:411)",
+        "\tat com.android.tools.r8.Internal.boolean foo(int,int)(Internal.java)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int)(Internal.java)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int,boolean)(Internal.java)",
+        "\t<OR> at com.android.tools.r8.Internal.void foo(int,int)(Internal.java)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AutoStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AutoStackTrace.java
index 0504b58..ab7f261 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/AutoStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AutoStackTrace.java
@@ -35,6 +35,14 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return ImmutableList.of(
+        "java.io.IOException: INVALID_SENDER",
+        "\tat com.android.tools.r8.AutoTest.void foo(int)(AutoTest.java:200)",
+        "\tat com.android.tools.r8.AutoTest.void foo(int,int)(AutoTest.java:24)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/CircularReferenceStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/CircularReferenceStackTrace.java
index 5df37f8..c0b1977 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/CircularReferenceStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/CircularReferenceStackTrace.java
@@ -43,6 +43,19 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "        [CIRCULAR REFERENCE:foo.bar.Baz]",
+        " [CIRCULAR REFERENCE:foo.bar.Qux]",
+        "        [CIRCULAR REFERENCE:None.existing.class]",
+        "        [CIRCULAR REFERENCE:foo.bar.Baz] ",
+        "        [CIRCU:AA]",
+        "        [CIRCULAR REFERENCE:A.A",
+        "        [CIRCULAR REFERENCE:]",
+        "        [CIRCULAR REFERENCE:None existing class]");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 5;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/ColonInFileNameStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/ColonInFileNameStackTrace.java
index 0bdb870..618b83f 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/ColonInFileNameStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/ColonInFileNameStackTrace.java
@@ -29,6 +29,11 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return ImmutableList.of("  at some.Class.int strawberry(int)(Class.kt:99)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/FileNameExtensionStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/FileNameExtensionStackTrace.java
index dc77ca6..06cc043 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/FileNameExtensionStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/FileNameExtensionStackTrace.java
@@ -52,6 +52,24 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "foo.bar.baz: Problem when compiling program",
+        "    at R8.main(R8.java:800)",
+        "    at R8.main(Native Method)",
+        "    at R8.main(R8.java:)",
+        "    at R8.main(R8.kt:1)",
+        "    at R8.main(R8.java)",
+        "    at R8.main(R8.java)",
+        "    at R8.main(R8.java)",
+        "    at R8.main(R8.java)",
+        "    at R8.main(R8.java:1)",
+        "Suppressed: foo.bar.baz: You have to write the program first",
+        "    at R8.retrace(R8.java:184)",
+        "    ... 7 more");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/FoundMethodVerboseStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/FoundMethodVerboseStackTrace.java
index ce7a8f5..b4812a5 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/FoundMethodVerboseStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/FoundMethodVerboseStackTrace.java
@@ -27,6 +27,13 @@
   public List<String> retracedStackTrace() {
     return Arrays.asList(
         "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:102)");
+  }
+
+  @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
         "\tat com.android.tools.r8.naming.retrace.Main.com.android.Foo main(java.lang.String[],"
             + "com.android.Bar)(Main.java:102)");
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameStackTrace.java
index ef36965..048b941 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameStackTrace.java
@@ -28,6 +28,17 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat foo.Bar$Baz.void baz(long)(Bar.java:0)",
+        "\tat Foo$Bar.void bar(int)(Foo.java:2)",
+        "\tat com.android.tools.r8.naming.retrace.Main$Foo"
+            + ".void method1(java.lang.String)(Main.java:8)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:7)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.naming.retrace.Main -> com.android.tools.r8.naming.retrace.Main:",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameWithInnerClassesStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameWithInnerClassesStackTrace.java
index 8d7551a..177eb8a 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameWithInnerClassesStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineFileNameWithInnerClassesStackTrace.java
@@ -26,6 +26,14 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat foo.Bar$Baz$Qux.void baz(long)(Bar.java:0)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:7)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.naming.retrace.Main -> com.android.tools.r8.naming.retrace.Main:",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineNoLineNumberStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineNoLineNumberStackTrace.java
index dda09dd..763ec80 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineNoLineNumberStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineNoLineNumberStackTrace.java
@@ -28,6 +28,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.void method3(long)(Main.java:0)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void method2(int)(Main.java:0)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void method1(java.lang.String)(Main.java:0)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:0)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.naming.retrace.Main -> com.android.tools.r8.naming.retrace.Main:",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineSourceFileContextStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineSourceFileContextStackTrace.java
index 3c22097..f5943b5 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineSourceFileContextStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineSourceFileContextStackTrace.java
@@ -48,6 +48,17 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "  at com.google.appreduce.remapper.KotlinJavaSourceFileTestLibrary"
+            + ".void throwsException()(KotlinJavaSourceFileTestLibrary.kt:22)",
+        "  at com.google.appreduce.remapper.KotlinJavaSourceFileTestLibrary"
+            + ".void callsThrowsException()(KotlinJavaSourceFileTestLibrary.kt:19)",
+        "  at com.google.appreduce.remapper.KotlinJavaSourceFileTestObject"
+            + ".void main(java.lang.String[])(KotlinJavaSourceFileTestObject.java:32)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineWithLineNumbersStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineWithLineNumbersStackTrace.java
index 59c9693..eb1144e 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineWithLineNumbersStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineWithLineNumbersStackTrace.java
@@ -44,6 +44,18 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.void method3(long)(Main.java:81)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void method2(int)(Main.java:88)",
+        "\tat com.android.tools.r8.naming.retrace.Main."
+            + "void method1(java.lang.String)(Main.java:96)",
+        "\tat com.android.tools.r8.naming.retrace.Main."
+            + "void main(java.lang.String[])(Main.java:102)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InvalidStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InvalidStackTrace.java
index 87d30d5..737a32a 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/InvalidStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InvalidStackTrace.java
@@ -35,6 +35,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "  hulubulu",
+        "  XXX, where are you",
+        "foo.bar.baz: Problem when compiling program",
+        " . . . 7 more",
+        "  ... 7 more");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 1;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/MemberFieldOverlapStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/MemberFieldOverlapStackTrace.java
index 9b5ba56..ca6b1c9 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/MemberFieldOverlapStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/MemberFieldOverlapStackTrace.java
@@ -38,6 +38,13 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat foo.Bar.int method()(Bar.java:5)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 1;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleDotsInFileNameStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleDotsInFileNameStackTrace.java
index a67335f..43ac3ab 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleDotsInFileNameStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/MultipleDotsInFileNameStackTrace.java
@@ -29,6 +29,11 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return ImmutableList.of("  at some.Class.int strawberry(int)(Class.kt:99)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
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 54ef0bf..5638f88 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
@@ -36,6 +36,17 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java)",
+        "\t<OR #1> at com.android.tools.r8.naming.retrace.Main."
+            + "void method1(java.lang.String)(Main.java)",
+        "\t<OR #1> at com.android.tools.r8.naming.retrace.Main."
+            + "void main(java.lang.String[])(Main.java)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/NamedModuleStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/NamedModuleStackTrace.java
index 8bd402f..1866585 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/NamedModuleStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/NamedModuleStackTrace.java
@@ -50,6 +50,17 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "SomeFakeException: this is a fake exception",
+        "\tat com.android.tools.r8.Classloader/named_module@9.0/com.android.tools.r8.Main.main(Main.java:1)",
+        "\tat com.android.tools.r8.Classloader//com.android.tools.r8.Main.foo(Main.java:2)",
+        "\tat named_module@2.1/com.android.tools.r8.Main.bar(Main.java:3)",
+        "\tat named_module/com.android.tools.r8.Main.baz(Main.java:4)",
+        "\tat com.android.tools.r8.Main.qux(Main.java:5)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
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 23c5652..b8c106b 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
@@ -45,6 +45,21 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "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)",
+        "\t<OR #1> at 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)",
+        "\t<OR #1> at 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)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscationRangeMappingWithStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscationRangeMappingWithStackTrace.java
index 3f944e2..579541f 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscationRangeMappingWithStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/NoObfuscationRangeMappingWithStackTrace.java
@@ -31,6 +31,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.void foo(long)(Main.java:1)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void bar(int)(Main.java:3)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void baz()(Main.java:8)",
+        "\tat com.android.tools.r8.naming.retrace.Main.void main(java.lang.String[])(Main.java:7)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.naming.retrace.Main -> foo:",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/NullStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/NullStackTrace.java
index 99aa584..9cd0c45 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/NullStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/NullStackTrace.java
@@ -34,6 +34,12 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    fail();
+    return null;
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfucatedExceptionClassStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfucatedExceptionClassStackTrace.java
index 707874d..de7673b 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfucatedExceptionClassStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfucatedExceptionClassStackTrace.java
@@ -35,6 +35,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "foo.bar.baz: Problem when compiling program",
+        "    at r8.main(App:800)",
+        "Caused by: foo.bar.baz: You have to write the program first",
+        "    at r8.retrace(App:184)",
+        "    ... 7 more");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfuscatedRangeToSingleLineStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfuscatedRangeToSingleLineStackTrace.java
index 1579756..e87126f 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfuscatedRangeToSingleLineStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/ObfuscatedRangeToSingleLineStackTrace.java
@@ -40,6 +40,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "UnknownException: This is just a fake exception",
+        "  at foo.bar.Baz.void qux()(Baz.java:27)",
+        "  at foo.bar.Baz.void qux()(Baz.java:42)",
+        "  at foo.bar.Baz.void quux()(Baz.java:113)",
+        "  at foo.bar.Baz.void quuz()(Baz.java:72)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
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 f1fbedb..ccd73f3 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
@@ -30,13 +30,22 @@
   public List<String> retracedStackTrace() {
     return Arrays.asList(
         "Exception in thread \"main\" java.lang.NullPointerException",
-        // TODO(b/199058242): Should be ambiguous and not inline frames
         "\tat com.android.tools.r8.naming.retrace.Main.overload(Main.java:7)",
         "\t<OR #1> at com.android.tools.r8.naming.retrace.Main.overload(Main.java:15)",
         "\t<OR #2> at com.android.tools.r8.naming.retrace.Main.overload(Main.java:13)");
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "\tat com.android.tools.r8.naming.retrace.Main.void overload()(Main.java:7)",
+        "\t<OR #1> at com.android.tools.r8.naming.retrace.Main.void overload(int)(Main.java:15)",
+        "\t<OR #2> at com.android.tools.r8.naming.retrace.Main."
+            + "void overload(java.lang.String)(Main.java:13)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/PGStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/PGStackTrace.java
index 8698ac9..2a3a63a 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/PGStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/PGStackTrace.java
@@ -45,6 +45,19 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "09-16 15:43:01.249 23316 23316 E AndroidRuntime: java.lang.NullPointerException: Attempt"
+            + " to invoke virtual method 'boolean"
+            + " com.google.android.foo(com.google.android.foo.Data$Key)' on a null object"
+            + " reference",
+        "09-16 15:43:01.249 23316 23316 E AndroidRuntime:        at"
+            + " com.google.apps.sectionheader.SectionHeaderListController.onToolbarStateChanged(SectionHeaderListController.java:586)",
+        "09-16 15:43:01.249 23316 23316 E AndroidRuntime:        at"
+            + " com.google.apps.Controller.onToolbarStateChanged(Controller.java:1087)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/RetraceAssertionErrorStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/RetraceAssertionErrorStackTrace.java
index d6bcacc..11d2669 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/RetraceAssertionErrorStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/RetraceAssertionErrorStackTrace.java
@@ -36,6 +36,23 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.AssertionError",
+        "        at com.android.tools.r8.retrace.RetraceCore$StackTraceNode."
+            + "void <init>(java.util.List)(RetraceCore.java:31)",
+        "        at com.android.tools.r8.retrace.RetraceCore."
+            + "void retraceLine(java.util.List,int,java.util.List)(RetraceCore.java:117)",
+        "        at com.android.tools.r8.retrace.RetraceCore."
+            + "com.android.tools.r8.retrace."
+            + "RetraceCore$RetraceResult retrace()(RetraceCore.java:107)",
+        "        at com.android.tools.r8.retrace.Retrace."
+            + "void run(com.android.tools.r8.retrace.RetraceCommand)(Retrace.java:116)",
+        "        at com.android.tools.r8.retrace.RetraceTests."
+            + "testNullLineTrace(RetraceTests.java:73)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.retrace.Retrace -> com.android.tools.r8.retrace.Retrace:",
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 0b0c7ef..770b2f8 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
@@ -47,6 +47,25 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "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)",
+        "\tat com.android.tools.r8.naming.retrace.Main."
+            + "void method2(java.lang.String)(Main.java:42)",
+        "\tat com.android.tools.r8.naming.retrace.Main."
+            + "void main2(java.lang.String[])(Main.java:29)",
+        "\tat com.android.tools.r8.naming.retrace.Main."
+            + "void main3(java.lang.String[])(Main.java:30)",
+        "\t<OR #1> at com.android.tools.r8.naming.retrace.Main."
+            + "void method3(java.lang.String)(Main.java:72)",
+        "\tat com.android.tools.r8.naming.retrace.Main."
+            + "void main4(java.lang.String[])(Main.java:153)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileNameSynthesizeStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileNameSynthesizeStackTrace.java
index 0315fc0..9e15a2d 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileNameSynthesizeStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileNameSynthesizeStackTrace.java
@@ -36,6 +36,14 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "\tat android.support.v7.widget.ActionMenuView.void invokeItem()(ActionMenuView.java:624)",
+        "\tat noMappingKt.noMapping(AW779999992:21)",
+        "\tat android.support.v7.widget.ActionMenuViewKt.void invokeItem()(ActionMenuView.kt:624)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileWithNumberAndEmptyStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileWithNumberAndEmptyStackTrace.java
index 1522918..fd20517 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileWithNumberAndEmptyStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SourceFileWithNumberAndEmptyStackTrace.java
@@ -39,6 +39,23 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "  at com.android.tools.r8.utils.ExceptionUtils.void withR8CompilationHandler("
+            + "com.android.tools.r8.utils.Reporter,"
+            + "com.android.tools.r8.utils.ExceptionUtils$CompileAction)(ExceptionUtils.java:59)",
+        "  at com.android.tools.r8.R8.void runForTesting("
+            + "com.android.tools.r8.utils.AndroidApp,"
+            + "com.android.tools.r8.utils.InternalOptions)(R8.java:261)",
+        "  at com.android.tools.r8.utils.ExceptionUtils.void withR8CompilationHandler("
+            + "com.android.tools.r8.utils.Reporter,"
+            + "com.android.tools.r8.utils.ExceptionUtils$CompileAction)(ExceptionUtils.java:59)",
+        "  at com.android.tools.r8.R8.void runForTesting("
+            + "com.android.tools.r8.utils.AndroidApp,"
+            + "com.android.tools.r8.utils.InternalOptions)(R8.java:261)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/StackTraceForTest.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/StackTraceForTest.java
index e9783e6..29baca3 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/StackTraceForTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/StackTraceForTest.java
@@ -14,5 +14,7 @@
 
   List<String> retracedStackTrace();
 
+  List<String> retraceVerboseStackTrace();
+
   int expectedWarnings();
 }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SuppressedStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SuppressedStackTrace.java
index eb44d96..e0cd74c 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SuppressedStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SuppressedStackTrace.java
@@ -35,6 +35,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "foo.bar.baz: Problem when compiling program",
+        "    at r8.main(App:800)",
+        "Suppressed: foo.bar.baz: You have to write the program first",
+        "    at r8.retrace(App:184)",
+        "    ... 7 more");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodStackTrace.java
index 793fc0c..6beaba4 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodStackTrace.java
@@ -32,6 +32,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "  at example.Foo.void lambda$main$0()(Foo.java:225)",
+        "  at example.Foo.void runIt()(Foo.java:218)",
+        "  at example.Foo.void main()(Foo.java:223)",
+        "  at example.Main.void main(java.lang.String[])(Main.java:123)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "# {'id':'com.android.tools.r8.mapping','version':'experimental'}",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodWithInliningStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodWithInliningStackTrace.java
index c132733..201700d 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodWithInliningStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/SyntheticLambdaMethodWithInliningStackTrace.java
@@ -31,6 +31,16 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "Exception in thread \"main\" java.lang.NullPointerException",
+        "  at example.Foo.void lambda$main$0()(Foo.java:225)",
+        "  at example.Foo.void runIt()(Foo.java:218)",
+        "  at example.Foo.void main()(Foo.java:223)",
+        "  at example.Main.void main(java.lang.String[])(Main.java:123)");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "# {'id':'com.android.tools.r8.mapping','version':'experimental'}",
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/UnicodeInFileNameStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/UnicodeInFileNameStackTrace.java
index 5090c39..1b3c0eb 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/UnicodeInFileNameStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/UnicodeInFileNameStackTrace.java
@@ -29,6 +29,11 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return ImmutableList.of("  at some.Class.int strawberry(int)(Class.kt:99)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }
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 13b8bdd..e6481ac 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
@@ -38,6 +38,21 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "com.android.tools.r8.CompilationException: foo[parens](Source:3)",
+        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR #1> at com.android.tools.r8.R8.void foo(int)(R8.java)",
+        "    at com.android.tools.r8.R8.void bar(int,int)(R8.java)",
+        "    <OR #1> 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)",
+        "    <OR #1> at com.android.tools.r8.R8.void foo(int)(R8.java)",
+        "    ... 42 more");
+  }
+
+  @Override
   public String mapping() {
     return StringUtils.lines(
         "com.android.tools.r8.R8 -> a.a:", "  void foo(int) -> a", "  void bar(int, int) -> a");
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/VerboseUnknownStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/VerboseUnknownStackTrace.java
index 3cb6808..24e773c 100644
--- a/src/test/java/com/android/tools/r8/retrace/stacktraces/VerboseUnknownStackTrace.java
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/VerboseUnknownStackTrace.java
@@ -27,6 +27,12 @@
   }
 
   @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.IndexOutOfBoundsException", "\tat java.util.ArrayList.get(ArrayList.java:411)");
+  }
+
+  @Override
   public int expectedWarnings() {
     return 0;
   }