[Retrace] Change regexp to match more characters
Bug: b/145731185
Bug: b/170293908
Change-Id: I3d6baf5e7505742a76c6e1145d94d943a8454310
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java
index b88958e..b7bdf62 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementStringProxy.java
@@ -168,7 +168,15 @@
public enum ClassNameType {
BINARY,
- TYPENAME
+ TYPENAME;
+
+ public boolean isBinary() {
+ return this == BINARY;
+ }
+
+ public boolean isTypeName() {
+ return this == TYPENAME;
+ }
}
public static class StackTraceElementStringProxyBuilder {
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceRegularExpressionParser.java b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceRegularExpressionParser.java
index 64f42e6..720562d 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceRegularExpressionParser.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceRegularExpressionParser.java
@@ -158,13 +158,10 @@
}
}
- // TODO(b/145731185): Extend support for identifiers with strings inside back ticks.
- // Should we relax this to be something like: [^\\s\\[;/<]+
- private static final String javaIdentifierSegment =
- "[-\\p{javaJavaIdentifierStart}][-\\p{javaJavaIdentifierPart}]*";
+ private static final String identifierSegment = "[^\\s\\[;(<]+";
private static final String METHOD_NAME_REGULAR_EXPRESSION =
- "(?:(" + javaIdentifierSegment + "|\\<init\\>|\\<clinit\\>))";
+ "(?:(" + identifierSegment + "|\\<init\\>|\\<clinit\\>))";
abstract static class ClassNameGroup extends RegularExpressionGroup {
@@ -181,9 +178,15 @@
}
String typeName = matcher.group(captureGroup);
if (typeName.equals("Suppressed")) {
- // Ensure we do not map supressed.
+ // Ensure we do not map suppressed.
return false;
}
+ // Printing stack traces on the jvm can include classloader and/or module + version.
+ // These are separated by a '/', so if one is present always take the last entry since
+ // this contains the class name.
+ if (getClassNameType().isTypeName()) {
+ startOfGroup += typeName.lastIndexOf('/') + 1;
+ }
builder.registerClassName(startOfGroup, matcher.end(captureGroup), getClassNameType());
return true;
}
@@ -200,7 +203,7 @@
@Override
String subExpression() {
- return "(" + javaIdentifierSegment + "\\.)*" + javaIdentifierSegment;
+ return "(" + identifierSegment + "\\.)*" + identifierSegment;
}
@Override
@@ -213,7 +216,7 @@
@Override
String subExpression() {
- return "(?:" + javaIdentifierSegment + "\\/)*" + javaIdentifierSegment;
+ return "(?:" + identifierSegment + "\\/)*" + identifierSegment;
}
@Override
@@ -246,7 +249,7 @@
@Override
String subExpression() {
- return javaIdentifierSegment;
+ return identifierSegment;
}
@Override
@@ -357,7 +360,7 @@
}
private static final String JAVA_TYPE_REGULAR_EXPRESSION =
- "(" + javaIdentifierSegment + "\\.)*" + javaIdentifierSegment + "[\\[\\]]*";
+ "(" + identifierSegment + "\\.)*" + identifierSegment + "[\\[\\]]*";
private static class FieldOrReturnTypeGroup extends RegularExpressionGroup {
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 3c5aa5b..57ede60 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -292,7 +292,6 @@
@Test
public void testBootLoaderAndNamedModulesStackTrace() throws Exception {
- assumeTrue("b/170293908", false);
runRetraceTest(new NamedModuleStackTrace());
}
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 1866585..10c73c4 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
@@ -42,8 +42,8 @@
public List<String> retracedStackTrace() {
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 classloader.a.b.a/named_module@9.0/com.android.tools.r8.Main.main(Main.java:1)",
+ "\tat classloader.a.b.a//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)");
@@ -53,11 +53,13 @@
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)");
+ "\tat classloader.a.b.a/named_module@9.0/com.android.tools.r8.Main.void"
+ + " main(java.lang.String[])(Main.java:1)",
+ "\tat classloader.a.b.a//com.android.tools.r8.Main.void"
+ + " foo(java.lang.String[])(Main.java:2)",
+ "\tat named_module@2.1/com.android.tools.r8.Main.void bar(java.lang.String[])(Main.java:3)",
+ "\tat named_module/com.android.tools.r8.Main.void baz(java.lang.String[])(Main.java:4)",
+ "\tat com.android.tools.r8.Main.void qux(java.lang.String[])(Main.java:5)");
}
@Override