Fix DesugarLambdaRetraceTest for older VMs
Bug: 117815862
Change-Id: I268783b250b1966680998597da55915e34f69bdd
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
index fa0a393..1868940 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
@@ -63,7 +63,9 @@
// Check the frame from the lambda class.
StackTrace lambdaFrames = retracedStackTrace.filter(this::isSynthesizedLambdaFrame);
assertEquals(1, lambdaFrames.size());
- assertEquals(mode == CompilationMode.RELEASE ? 0 : 2, lambdaFrames.get(0).lineNumber);
+ if (lambdaFrames.get(0).hasLineNumber()) {
+ assertEquals(mode == CompilationMode.RELEASE ? 0 : 2, lambdaFrames.get(0).lineNumber);
+ }
// Proguard retrace will take the class name until the first $ to construct the file
// name, so for "-$$Lambda$...", the file name becomes "-.java".
assertEquals("-.java", lambdaFrames.get(0).fileName);
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java b/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
index 13115f4..9876c95 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
@@ -45,6 +45,10 @@
this.lineNumber = lineNumber;
}
+ public boolean hasLineNumber() {
+ return lineNumber >= 0;
+ }
+
public static StackTraceLine parse(String line) {
String originalLine = line;
@@ -53,7 +57,7 @@
line = line.substring(AT_PREFIX.length());
}
- // Expect only one '(', and only one ')' with a ':' in between.
+ // Expect only one '(', and only one ')' with an optional ':' in between.
int parenBeginIndex = line.indexOf('(');
assertTrue(parenBeginIndex > 0);
assertEquals(parenBeginIndex, line.lastIndexOf('('));
@@ -61,15 +65,17 @@
assertTrue(parenBeginIndex < parenEndIndex);
assertEquals(parenEndIndex, line.lastIndexOf(')'));
int colonIndex = line.indexOf(':');
- assertTrue(parenBeginIndex < colonIndex && colonIndex < parenEndIndex);
+ assertTrue(colonIndex == -1 || (parenBeginIndex < colonIndex && colonIndex < parenEndIndex));
assertEquals(parenEndIndex, line.lastIndexOf(')'));
String classAndMethod = line.substring(0, parenBeginIndex);
int lastDotIndex = classAndMethod.lastIndexOf('.');
assertTrue(lastDotIndex > 0);
String className = classAndMethod.substring(0, lastDotIndex);
- String methodName = classAndMethod.substring(lastDotIndex + 1, classAndMethod.length());
- String fileName = line.substring(parenBeginIndex + 1, colonIndex);
- int lineNumber = Integer.parseInt(line.substring(colonIndex + 1, parenEndIndex));
+ String methodName = classAndMethod.substring(lastDotIndex + 1);
+ int fileNameEnd = colonIndex > 0 ? colonIndex : parenEndIndex;
+ String fileName = line.substring(parenBeginIndex + 1, fileNameEnd);
+ int lineNumber =
+ colonIndex > 0 ? Integer.parseInt(line.substring(colonIndex + 1, parenEndIndex)) : -1;
StackTraceLine result =
new StackTraceLine(originalLine, className, methodName, fileName, lineNumber);
assertEquals(line, result.toString());
@@ -101,7 +107,8 @@
@Override
public String toString() {
- return className + '.' + methodName + '(' + fileName + ':' + lineNumber + ')';
+ String lineNumberPart = lineNumber >= 0 ? ":" + lineNumber : "";
+ return className + '.' + methodName + '(' + fileName + lineNumberPart + ')';
}
}