[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