Retrace: Let source-file take precedence if present
Bug: 132850880
Change-Id: Ic9939f46b3ceb111a095ec95efac95ad3e826d76
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceCore.java b/src/main/java/com/android/tools/r8/retrace/RetraceCore.java
index 8a4ef77..f783cbc 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceCore.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceCore.java
@@ -408,13 +408,13 @@
}
private String retracedFileName(String retracedClazz) {
+ if (!UNKNOWN_SOURCEFILE_NAMES.contains(fileName)) {
+ return fileName;
+ }
if (retracedClazz == null) {
// We have no new information, only rewrite filename if it is empty or SourceFile.
// PG-retrace will always rewrite the filename, but that seems a bit to harsh to do.
- if (UNKNOWN_SOURCEFILE_NAMES.contains(fileName)) {
- return getClassSimpleName(clazz) + ".java";
- }
- return fileName;
+ return getClassSimpleName(clazz) + ".java";
}
String newFileName = getClassSimpleName(retracedClazz);
String extension = Files.getFileExtension(fileName);
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 1cf135d..f1419cf 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
@@ -4,6 +4,7 @@
package com.android.tools.r8.naming.retrace;
+import static com.android.tools.r8.naming.retrace.StackTrace.isSame;
import static com.android.tools.r8.naming.retrace.StackTrace.isSameExceptForFileName;
import static com.android.tools.r8.naming.retrace.StackTrace.isSameExceptForFileNameAndLineNumber;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -63,6 +64,21 @@
assertEquals("-.java", lambdaFrames.get(0).fileName);
}
+ private void checkIsSame(StackTrace actualStackTrace, StackTrace retracedStackTrace) {
+ // Even when SourceFile is present retrace replaces the file name in the stack trace.
+ if (parameters.isCfRuntime()) {
+ assertThat(retracedStackTrace, isSame(expectedStackTrace));
+ } else {
+ // With the frame from the lambda class filtered out the stack trace is the same.
+ assertThat(
+ retracedStackTrace.filter(line -> !isSynthesizedLambdaFrame(line)),
+ isSame(expectedStackTrace));
+ // Check the frame from the lambda class.
+ checkLambdaFrame(retracedStackTrace);
+ }
+ assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
+ }
+
private void checkIsSameExceptForFileName(
StackTrace actualStackTrace, StackTrace retracedStackTrace) {
// Even when SourceFile is present retrace replaces the file name in the stack trace.
@@ -97,9 +113,7 @@
@Test
public void testSourceFileAndLineNumberTable() throws Exception {
- runTest(
- ImmutableList.of("-keepattributes SourceFile,LineNumberTable"),
- this::checkIsSameExceptForFileName);
+ runTest(ImmutableList.of("-keepattributes SourceFile,LineNumberTable"), this::checkIsSame);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
index 47a4ad7..4ffc7de 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.naming.retrace;
+import static com.android.tools.r8.naming.retrace.StackTrace.isSame;
import static com.android.tools.r8.naming.retrace.StackTrace.isSameExceptForFileName;
import static com.android.tools.r8.naming.retrace.StackTrace.isSameExceptForFileNameAndLineNumber;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -46,8 +47,7 @@
runTest(
ImmutableList.of("-keepattributes SourceFile,LineNumberTable"),
(StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
- // Even when SourceFile is present retrace replaces the file name in the stack trace.
- assertThat(retracedStackTrace, isSameExceptForFileName(expectedStackTrace));
+ assertThat(retracedStackTrace, isSame(expectedStackTrace));
assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
});
}