Add origin to the printconfigurations output
Bug: 134372926
Change-Id: I2f63d751cd3889a6d8e15171ae7701813d42d8b7
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index 4778c35..2dc865b 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -214,8 +214,14 @@
do {
skipWhitespace();
} while (parseOption());
+ // This may be unknown, but we want to always ensure that we don't attribute lines to the
+ // wrong configuration.
+ configurationBuilder.addParsedConfiguration(
+ "# The proguard configuration file for the following section is " + origin.toString());
+
// Collect the parsed configuration.
configurationBuilder.addParsedConfiguration(contents.substring(positionAfterInclude));
+ configurationBuilder.addParsedConfiguration("# End of content from " + origin.toString());
}
private boolean parseOption() throws ProguardRuleParserException {
diff --git a/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java b/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java
index 4ea48cb..df33e06 100644
--- a/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java
@@ -17,6 +17,7 @@
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
+import java.util.stream.Collectors;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -52,7 +53,23 @@
.addProgramClasses(PrintConfigurationTestClass.class)
.addKeepRules(proguardConfig)
.compile();
- assertEquals(proguardConfig, FileUtils.readTextFile(printConfigurationFile, Charsets.UTF_8));
+ assertEqualsStripOrigin(proguardConfig,
+ FileUtils.readTextFile(printConfigurationFile, Charsets.UTF_8));
+ }
+
+ private String removeOriginComments(String s) {
+ return StringUtils.lines(
+ StringUtils.splitLines(s)
+ .stream()
+ .filter(line -> !line.startsWith("# The proguard"))
+ .filter(line -> !line.startsWith("# End of content"))
+ .filter(line -> !line.equals(""))
+ .collect(Collectors.toList()));
+ }
+
+ private void assertEqualsStripOrigin(String a, String b) {
+ String expected = removeOriginComments(a);
+ assertEquals(expected, removeOriginComments(b));
}
@Test
@@ -72,7 +89,12 @@
.addKeepRuleFiles(proguardConfigFile)
.compile();
- assertEquals(proguardConfig, FileUtils.readTextFile(proguardConfigOutFile, Charsets.UTF_8));
+ String outFileContent = FileUtils.readTextFile(proguardConfigOutFile, Charsets.UTF_8);
+ assertEqualsStripOrigin(proguardConfig, outFileContent);
+ // We should have added the proguard-config.txt file as the origin in the config output
+
+ String firstLine = StringUtils.splitLines(outFileContent).get(0);
+ assertThat(outFileContent, containsString(proguardConfigFile.toString()));
}
@Test
@@ -129,6 +151,7 @@
"-printconfiguration " + printConfigurationFile.toString()
));
compileWithR8(ImmutableList.of(mainClass), proguardConfig);
- assertEquals(expected, FileUtils.readTextFile(printConfigurationFile, Charsets.UTF_8));
+ assertEqualsStripOrigin(expected,
+ FileUtils.readTextFile(printConfigurationFile, Charsets.UTF_8));
}
}