Fix incorrect source file when no map consumer is set
Bug: b/427244528
Change-Id: Ia94c7597b272c9fa6a9335422587fd0dcb88d812
diff --git a/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java b/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java
index d2d29ee..375fb45 100644
--- a/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java
+++ b/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java
@@ -24,7 +24,10 @@
if (!options.forceProguardCompatibility
|| !options.getProguardConfiguration().getKeepAttributes().sourceFile) {
if (options.isMinifying() || options.isOptimizing()) {
- return env -> "r8-map-id-" + env.getMapId();
+ return env ->
+ env.getMapId() != null
+ ? "r8-map-id-" + env.getMapId()
+ : options.dexItemFactory().defaultSourceFileAttributeString;
}
}
}
diff --git a/src/test/java/com/android/tools/r8/naming/DefaultSourceFileWithoutMapOutputTest.java b/src/test/java/com/android/tools/r8/naming/DefaultSourceFileWithoutMapOutputTest.java
index f1473f3..c492e46 100644
--- a/src/test/java/com/android/tools/r8/naming/DefaultSourceFileWithoutMapOutputTest.java
+++ b/src/test/java/com/android/tools/r8/naming/DefaultSourceFileWithoutMapOutputTest.java
@@ -3,6 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.naming;
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assert.assertEquals;
@@ -51,7 +53,7 @@
(stackTrace, inspector) -> {
assertEquals(1, stackTrace.getStackTraceLines().size());
StackTraceLine stackTraceLine = stackTrace.getStackTraceLines().get(0);
- assertEquals("r8-map-id-null", stackTraceLine.fileName);
+ assertEquals("SourceFile", stackTraceLine.fileName);
});
}
@@ -74,7 +76,8 @@
ConsumerUtils.emptyConsumer(),
parameters.getRuntime().asDex().getVm());
assertNotEquals(0, artResult.exitCode);
- assertThat(artResult.stderr, containsString("r8-map-id-null"));
+ assertThat(
+ artResult.stderr, allOf(containsString("SourceFile"), not(containsString("r8-map-id"))));
}
static class Main {