[Retrace] Allow all characters in source file not colliding with line
Bug: 176851728
Change-Id: I6e57710125c6d398f5274b29168b286dce38dbca
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java b/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java
index 9272f58..a632f1c 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/PlainStackTraceVisitor.java
@@ -123,8 +123,8 @@
if (parensStart >= line.length()) {
return null;
}
- int parensEnd = firstCharFromIndex(line, parensStart, ')');
- if (parensEnd >= line.length()) {
+ int parensEnd = line.lastIndexOf(')');
+ if (parensEnd <= parensStart) {
return null;
}
if (firstNonWhiteSpaceCharacterFromIndex(line, parensEnd) == line.length()) {
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java
index fb79984..5790d52 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceRegularExpression.java
@@ -276,10 +276,10 @@
@Override
String subExpression() {
- String anyNonDigitSourceFileChar = anyNonDigitLetterCharWithMarkers + "_ \\.";
- String anyChar = anyNonDigitSourceFileChar + anyDigit;
- String colonWithNonDigitSuffix = ":[" + anyNonDigitSourceFileChar + ":" + "]";
- return "((?:(?:(?:" + colonWithNonDigitSuffix + "))|(?:[" + anyChar + "]))+)?";
+ String anyNonDigitNonColonChar = "^\\d:";
+ String anyNonColonChar = "^:";
+ String colonWithNonDigitSuffix = ":+[" + anyNonDigitNonColonChar + "]";
+ return "((?:(?:(?:" + colonWithNonDigitSuffix + "))|(?:[" + anyNonColonChar + "]))+)?";
}
@Override
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
index cd3e12d..02166f9 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
@@ -116,7 +116,7 @@
if (newFileName.endsWith("Kt") && (extension.isEmpty() || extension.equals("kt"))) {
newFileName = newFileName.substring(0, newFileName.length() - 2);
extension = "kt";
- } else if (extension.isEmpty()) {
+ } else if (!extension.equals("kt")) {
extension = "java";
}
return newFileName + "." + extension;
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceRegularExpressionTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceRegularExpressionTests.java
index 878a91d..4f79193 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceRegularExpressionTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceRegularExpressionTests.java
@@ -297,7 +297,7 @@
@Override
public List<String> retracedStackTrace() {
- return Collections.singletonList("foo.Bar$Baz.baz(Bar.dummy)");
+ return Collections.singletonList("foo.Bar$Baz.baz(Bar.java)");
}
@Override
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 e8e09aa..34d4b0f 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -22,6 +22,7 @@
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.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;
@@ -235,6 +236,11 @@
runRetraceTest(new SourceFileNameSynthesizeStackTrace());
}
+ @Test
+ public void testAutoStackTrace() {
+ runRetraceTest(new AutoStackTrace());
+ }
+
private void inspectRetraceTest(
StackTraceForTest stackTraceForTest, Consumer<Retracer> inspection) {
inspection.accept(
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
new file mode 100644
index 0000000..0504b58
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AutoStackTrace.java
@@ -0,0 +1,41 @@
+// Copyright (c) 2021, 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.stacktraces;
+
+import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+
+public class AutoStackTrace implements StackTraceForTest {
+
+ @Override
+ public List<String> obfuscatedStackTrace() {
+ return ImmutableList.of(
+ "java.io.IOException: INVALID_SENDER",
+ "\tat qtr.a(:com.google.android.gms@203915081@20.39.15 (060808-335085812):46)",
+ "\tat qtr.a(:com.google.android.gms@203915081@20.39.15 (060808-335085812):18)");
+ }
+
+ @Override
+ public String mapping() {
+ return StringUtils.lines(
+ "com.android.tools.r8.AutoTest -> qtr:",
+ " 46:46:void foo(int):200:200 -> a",
+ " 17:19:void foo(int,int):23:25 -> a");
+ }
+
+ @Override
+ public List<String> retracedStackTrace() {
+ return ImmutableList.of(
+ "java.io.IOException: INVALID_SENDER",
+ "\tat com.android.tools.r8.AutoTest.foo(AutoTest.java:200)",
+ "\tat com.android.tools.r8.AutoTest.foo(AutoTest.java:24)");
+ }
+
+ @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 ae9e0ff..dc77ca6 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
@@ -41,7 +41,7 @@
" at R8.main(Native Method)",
" at R8.main(R8.java:)",
" at R8.main(R8.kt:1)",
- " at R8.main(R8.foo)",
+ " at R8.main(R8.java)",
" at R8.main(R8.java)",
" at R8.main(R8.java)",
" at R8.main(R8.java)",
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 65f9824..ebc23a1 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
@@ -21,10 +21,10 @@
public List<String> retracedStackTrace() {
return Arrays.asList(
"Exception in thread \"main\" java.lang.NullPointerException",
- "\tat foo.Bar$Baz.baz(Bar.dummy:0)",
- "\tat Foo$Bar.bar(Foo.dummy:2)",
- "\tat com.android.tools.r8.naming.retrace.Main$Foo.method1(Main.dummy:8)",
- "\tat com.android.tools.r8.naming.retrace.Main.main(Main.dummy:7)");
+ "\tat foo.Bar$Baz.baz(Bar.java:0)",
+ "\tat Foo$Bar.bar(Foo.java:2)",
+ "\tat com.android.tools.r8.naming.retrace.Main$Foo.method1(Main.java:8)",
+ "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:7)");
}
@Override
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 20ed6ec..8d7551a 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
@@ -21,8 +21,8 @@
public List<String> retracedStackTrace() {
return Arrays.asList(
"Exception in thread \"main\" java.lang.NullPointerException",
- "\tat foo.Bar$Baz$Qux.baz(Bar.dummy:0)",
- "\tat com.android.tools.r8.naming.retrace.Main.main(Main.dummy:7)");
+ "\tat foo.Bar$Baz$Qux.baz(Bar.java:0)",
+ "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:7)");
}
@Override
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 4057a91..3f944e2 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
@@ -24,10 +24,10 @@
public List<String> retracedStackTrace() {
return Arrays.asList(
"Exception in thread \"main\" java.lang.NullPointerException",
- "\tat com.android.tools.r8.naming.retrace.Main.foo(Main.dummy:1)",
- "\tat com.android.tools.r8.naming.retrace.Main.bar(Main.dummy:3)",
- "\tat com.android.tools.r8.naming.retrace.Main.baz(Main.dummy:8)",
- "\tat com.android.tools.r8.naming.retrace.Main.main(Main.dummy:7)");
+ "\tat com.android.tools.r8.naming.retrace.Main.foo(Main.java:1)",
+ "\tat com.android.tools.r8.naming.retrace.Main.bar(Main.java:3)",
+ "\tat com.android.tools.r8.naming.retrace.Main.baz(Main.java:8)",
+ "\tat com.android.tools.r8.naming.retrace.Main.main(Main.java:7)");
}
@Override