Merge "Allow to run test with a custom java"
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
index 5caa704..9d7478d 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
@@ -68,7 +68,7 @@
* Add proguard configuration for automatic main dex list calculation.
*/
public GenerateMainDexListCommand.Builder addMainDexRules(List<String> lines) {
- mainDexRules.add(new ProguardConfigurationSourceStrings(lines));
+ mainDexRules.add(new ProguardConfigurationSourceStrings(Paths.get("."), lines));
return self();
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 564aa9c..8d9eff6 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -105,7 +105,7 @@
* Add proguard configuration for automatic main dex list calculation.
*/
public Builder addMainDexRules(List<String> lines) {
- mainDexRules.add(new ProguardConfigurationSourceStrings(lines));
+ mainDexRules.add(new ProguardConfigurationSourceStrings(Paths.get("."), lines));
return self();
}
@@ -138,7 +138,7 @@
* Add proguard configuration.
*/
public Builder addProguardConfiguration(List<String> lines) {
- proguardConfigs.add(new ProguardConfigurationSourceStrings(lines));
+ proguardConfigs.add(new ProguardConfigurationSourceStrings(Paths.get("."), lines));
return self();
}
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
index a4c89e0..44b3393 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.shaking;
+import com.google.common.annotations.VisibleForTesting;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -11,20 +12,37 @@
import joptsimple.internal.Strings;
public class ProguardConfigurationSourceStrings implements ProguardConfigurationSource {
+ private final Path basePath;
private final List<String> config;
- public ProguardConfigurationSourceStrings(List<String> config) {
+ /**
+ * Creates {@link ProguardConfigurationSource} with raw {@param config}, along with
+ * {@param basePath}, which allows all other options that use a relative path to reach out
+ * to desired paths appropriately.
+ */
+ public ProguardConfigurationSourceStrings(Path basePath, List<String> config) {
+ this.basePath = basePath;
this.config = config;
}
+ private ProguardConfigurationSourceStrings(List<String> config) {
+ this(Paths.get("."), config);
+ }
+
+ @VisibleForTesting
+ static ProguardConfigurationSourceStrings createConfigurationForTesting(
+ List<String> config) {
+ return new ProguardConfigurationSourceStrings(config);
+ }
+
@Override
public String get() throws IOException{
- return Strings.join(config, "\n");
+ return Strings.join(config, System.lineSeparator());
}
@Override
public Path getBaseDirectory() {
- return Paths.get(".");
+ return basePath;
}
@Override
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index fb3c88a..00777fa 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking;
+import static com.android.tools.r8.shaking.ProguardConfigurationSourceStrings.createConfigurationForTesting;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -122,7 +123,7 @@
// Parse from strings.
parser = new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
List<String> lines = FileUtils.readTextFile(Paths.get(PROGUARD_SPEC_FILE));
- parser.parse(new ProguardConfigurationSourceStrings(lines));
+ parser.parse(createConfigurationForTesting(lines));
rules = parser.getConfig().getRules();
assertEquals(24, rules.size());
assertEquals(1, rules.get(0).getMemberRules().size());
@@ -155,7 +156,7 @@
ProguardConfigurationParser parser =
new ProguardConfigurationParser(dexItemFactory, diagnosticsHandler);
String dontwarn = "-dontwarn !foobar,*bar";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(dontwarn)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(dontwarn)));
ProguardConfiguration config = parser.getConfig();
assertFalse(
config.getDontWarnPatterns().matches(dexItemFactory.createType("Lboobaz;")));
@@ -171,7 +172,7 @@
ProguardConfigurationParser parser =
new ProguardConfigurationParser(dexItemFactory, diagnosticsHandler);
String dontwarnAll = "-dontwarn *";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(dontwarnAll)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(dontwarnAll)));
ProguardConfiguration config = parser.getConfig();
assertTrue(
config.getDontWarnPatterns().matches(dexItemFactory.createType("Lboobaz;")));
@@ -187,7 +188,7 @@
ProguardConfigurationParser parser =
new ProguardConfigurationParser(dexItemFactory, diagnosticsHandler);
String dontwarnAll = "-dontwarn";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(dontwarnAll)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(dontwarnAll)));
ProguardConfiguration config = parser.getConfig();
assertTrue(
config.getDontWarnPatterns().matches(dexItemFactory.createType("Lboobaz;")));
@@ -348,7 +349,7 @@
ProguardConfigurationParser parser =
new ProguardConfigurationParser(dexItemFactory, diagnosticsHandler);
String adaptClassStrings = "-adaptclassstrings !foobar,*bar";
- parser.parse( new ProguardConfigurationSourceStrings(ImmutableList.of(adaptClassStrings)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(adaptClassStrings)));
ProguardConfiguration config = parser.getConfig();
assertFalse(
config.getAdaptClassStrings().matches(dexItemFactory.createType("Lboobaz;")));
@@ -364,7 +365,7 @@
ProguardConfigurationParser parser =
new ProguardConfigurationParser(dexItemFactory, diagnosticsHandler);
String adaptAll = "-adaptclassstrings *";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(adaptAll)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(adaptAll)));
ProguardConfiguration config = parser.getConfig();
assertTrue(
config.getAdaptClassStrings().matches(dexItemFactory.createType("Lboobaz;")));
@@ -380,7 +381,7 @@
ProguardConfigurationParser parser =
new ProguardConfigurationParser(dexItemFactory, diagnosticsHandler);
String adaptAll = "-adaptclassstrings";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(adaptAll)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(adaptAll)));
ProguardConfiguration config = parser.getConfig();
assertTrue(
config.getAdaptClassStrings().matches(dexItemFactory.createType("Lboobaz;")));
@@ -406,8 +407,7 @@
"-identifiernamestring class * {\n"
+ " @my.annotations.IdentifierNameString *;\n"
+ "}";
- parser.parse(
- new ProguardConfigurationSourceStrings(ImmutableList.of(config1, config2, config3)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(config1, config2, config3)));
ProguardConfiguration config = parser.getConfig();
List<ProguardConfigurationRule> identifierNameStrings = config.getRules();
assertEquals(3, identifierNameStrings.size());
@@ -583,7 +583,7 @@
try {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(
+ parser.parse(createConfigurationForTesting(
Collections.singletonList("-injars abc.jar(*.zip;*.class)")));
} catch (ProguardRuleParserException e) {
return;
@@ -774,7 +774,7 @@
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
String config1 = "-renamesourcefileattribute PG\n";
String config2 = "-keepattributes SourceFile,SourceDir\n";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(config1, config2)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(config1, config2)));
ProguardConfiguration config = parser.getConfig();
assertEquals("PG", config.getRenameSourceFileAttribute());
assertTrue(config.getKeepAttributesPatterns().contains(KeepAttributeOptions.SOURCE_FILE));
@@ -787,7 +787,7 @@
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
String config1 = "-renamesourcefileattribute\n";
String config2 = "-keepattributes SourceFile\n";
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(config1, config2)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(config1, config2)));
ProguardConfiguration config = parser.getConfig();
assertEquals("", config.getRenameSourceFileAttribute());
assertTrue(config.getKeepAttributesPatterns().contains(KeepAttributeOptions.SOURCE_FILE));
@@ -796,7 +796,7 @@
private void testKeepattributes(List<String> expected, String config) throws Exception {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(config)));
+ parser.parse(createConfigurationForTesting(ImmutableList.of(config)));
assertEquals(expected, parser.getConfig().getKeepAttributesPatterns());
}
@@ -821,7 +821,7 @@
try {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of("-keepattributes xxx,")));
+ parser.parse(createConfigurationForTesting(ImmutableList.of("-keepattributes xxx,")));
fail();
} catch (ProguardRuleParserException e) {
assertTrue(e.getMessage().contains("Expected list element at "));
@@ -832,7 +832,7 @@
public void parseUseUniqueClassMemberNames() throws Exception {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(
+ parser.parse(createConfigurationForTesting(ImmutableList.of(
"-useuniqueclassmembernames"
)));
ProguardConfiguration config = parser.getConfig();
@@ -844,7 +844,7 @@
try {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(
+ parser.parse(createConfigurationForTesting(ImmutableList.of(
"-keepparameternames"
)));
parser.getConfig();
@@ -859,7 +859,7 @@
public void parseKeepParameterNamesWithoutMinification() throws Exception {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(
+ parser.parse(createConfigurationForTesting(ImmutableList.of(
"-keepparameternames",
"-dontobfuscate"
)));
@@ -867,10 +867,10 @@
assertTrue(config.isKeepParameterNames());
parser = new ProguardConfigurationParser(new DexItemFactory(), diagnosticsHandler);
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(
+ parser.parse(createConfigurationForTesting(ImmutableList.of(
"-keepparameternames"
)));
- parser.parse(new ProguardConfigurationSourceStrings(ImmutableList.of(
+ parser.parse(createConfigurationForTesting(ImmutableList.of(
"-dontobfuscate"
)));
config = parser.getConfig();