aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamas Kenez <tamaskenez@google.com>2017-10-24 11:48:33 +0200
committerTamas Kenez <tamaskenez@google.com>2017-10-24 11:48:33 +0200
commitad41f3f7a62832034b9bc90aef4ee23e31ce03c0 (patch)
tree373172a931bef7f97cada1904f073e03182857aa
parent478befe3cc9a846d3897b23db0e8b893a8e2858e (diff)
downloadr8-ad41f3f7a62832034b9bc90aef4ee23e31ce03c0.tar.gz
Automatically (not explicitly) control Proguard-related default options
This CL re-applies 30ebba3 which has been reverted in 12bcf4f because of these failures: http://storage.googleapis.com/r8-test-results/c0ff09e6-bac6-4ded-b776-b5b15342d83b/test/index.html Certain options (minification/shrinking/keeprules/attrs) have different defaults with and without a Proguard config file. Originally it has been decided automatically, based on the presence of Proguard options. This has been changed to explicit decision in 5e8f1ba because of complications from handling a ProguardConsumer. It has been suggested to restore the automatic choice but the first attempt 30ebba3 broke some tests. This CL restores the original, automatic choice. Bug: Change-Id: I7e0e7b96354e376829cd548b9a76e1efcdfbcf63
-rw-r--r--src/main/java/com/android/tools/r8/R8Command.java2
-rw-r--r--src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java61
-rw-r--r--src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java8
-rw-r--r--src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java2
-rw-r--r--src/test/java/com/android/tools/r8/utils/R8CommandTest.java2
5 files changed, 20 insertions, 55 deletions
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 7eff6faf9..3cecbe2fe 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -214,7 +214,7 @@ public class R8Command extends BaseCompilerCommand {
ProguardConfiguration.Builder configurationBuilder;
if (proguardConfigs.isEmpty()) {
- configurationBuilder = ProguardConfiguration.builderInitializedWithDefaults(factory);
+ configurationBuilder = ProguardConfiguration.builder(factory);
} else {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(factory, getDiagnosticsHandler());
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
index dc800a3ee..5fa3d7272 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -19,13 +19,13 @@ public class ProguardConfiguration {
private final List<FilteredClassPath> injars = new ArrayList<>();
private final List<FilteredClassPath> libraryjars = new ArrayList<>();
- private PackageObfuscationMode packageObfuscationMode;
- private String packagePrefix;
+ private PackageObfuscationMode packageObfuscationMode = PackageObfuscationMode.NONE;
+ private String packagePrefix = "";
private boolean allowAccessModification;
private boolean ignoreWarnings;
- private boolean optimizing;
- private boolean obfuscating;
- private boolean shrinking;
+ private boolean optimizing = true;
+ private boolean obfuscating = true;
+ private boolean shrinking = true;
private boolean printUsage;
private Path printUsageFile;
private boolean printMapping;
@@ -34,7 +34,7 @@ public class ProguardConfiguration {
private boolean verbose;
private String renameSourceFileAttribute;
private final List<String> keepAttributePatterns = new ArrayList<>();
- private ProguardClassNameList dontWarnPatterns;
+ private ProguardClassNameList dontWarnPatterns = ProguardClassNameList.emptyList();
protected final List<ProguardConfigurationRule> rules = new ArrayList<>();
private final DexItemFactory dexItemFactory;
private boolean printSeeds;
@@ -48,36 +48,6 @@ public class ProguardConfiguration {
private Builder(DexItemFactory dexItemFactory) {
this.dexItemFactory = dexItemFactory;
- resetProguardDefaults();
- }
-
- public void resetProguardDefaults() {
- injars.clear();
- libraryjars.clear();
- packageObfuscationMode = PackageObfuscationMode.NONE;
- packagePrefix = "";
- allowAccessModification = false;
- ignoreWarnings = false;
- optimizing = true;
- obfuscating = true;
- shrinking = true;
- printUsage = false;
- printUsageFile = null;
- printMapping = false;
- printMappingFile = null;
- applyMappingFile = null;
- verbose = false;
- renameSourceFileAttribute = null;
- keepAttributePatterns.clear();
- dontWarnPatterns = ProguardClassNameList.emptyList();
- rules.clear();
- printSeeds = false;
- seedFile = null;
- obfuscationDictionary = null;
- classObfuscationDictionary = null;
- packageObfuscationDictionary = null;
- useUniqueClassMemberNames = false;
- keepParameterNames = false;
}
public void addInjars(List<FilteredClassPath> injars) {
@@ -207,6 +177,14 @@ public class ProguardConfiguration {
}
public ProguardConfiguration build() throws CompilationException {
+ if (rules.isEmpty()) {
+ setObfuscating(false);
+ setShrinking(false);
+ addRule(ProguardKeepRule.defaultKeepAllRule());
+ if (keepAttributePatterns.isEmpty()) {
+ addKeepAttributePatterns(KeepAttributeOptions.KEEP_ALL);
+ }
+ }
return new ProguardConfiguration(
dexItemFactory,
injars,
@@ -334,15 +312,6 @@ public class ProguardConfiguration {
return new Builder(dexItemFactory);
}
- public static Builder builderInitializedWithDefaults(DexItemFactory dexItemFactory) {
- Builder builder = new Builder(dexItemFactory);
- builder.setObfuscating(false);
- builder.setShrinking(false);
- builder.addKeepAttributePatterns(KeepAttributeOptions.KEEP_ALL);
- builder.addRule(ProguardKeepRule.defaultKeepAllRule());
- return builder;
- }
-
public DexItemFactory getDexItemFactory() {
return dexItemFactory;
}
@@ -453,7 +422,7 @@ public class ProguardConfiguration {
public static ProguardConfiguration defaultConfiguration(DexItemFactory dexItemFactory) {
try {
- return builderInitializedWithDefaults(dexItemFactory).build();
+ return builder(dexItemFactory).build();
} catch(CompilationException e) {
// Building a builder initialized with defaults will not throw CompilationException because
// DictionaryReader is called with empty lists.
diff --git a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
index c4af25c06..6306f91b9 100644
--- a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
+++ b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
@@ -91,11 +91,9 @@ public class JSR45Tests {
checkAnnotationContent(INPUT_PATH, result);
}
- /**
- * Check that when dontshrink and dontobfuscate is used the annotation is transmitted.
- */
+ /** Check that when dontshrink and dontobfuscate is used the annotation is transmitted. */
@Test
- public void testSourceDebugExtensionWithShriking1()
+ public void testSourceDebugExtensionWithShrinking1()
throws IOException, CompilationException, ExecutionException {
Path outputPath = tmpOutputDir.newFolder().toPath();
AndroidApp result = compileWithR8(INPUT_PATH, outputPath, DONT_SHRINK_DONT_OBFUSCATE_CONFIG);
@@ -125,7 +123,7 @@ public class JSR45Tests {
}
/**
- * Check that the annotation is removed when shriking is enabled and that there is not
+ * Check that the annotation is removed when shrinking is enabled and that there is not
* keepattributes option.
*/
@Test
diff --git a/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java b/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
index 427c25321..029e083be 100644
--- a/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
+++ b/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
@@ -21,8 +21,6 @@ public class RenameSourceFileDebugTest extends DebugTestBase {
setUp(
null,
pg -> {
- pg.resetProguardDefaults();
- pg.addRule(ProguardKeepRule.defaultKeepAllRule());
pg.setRenameSourceFileAttribute(TEST_FILE);
pg.addKeepAttributePatterns(ImmutableList.of("SourceFile", "LineNumberTable"));
});
diff --git a/src/test/java/com/android/tools/r8/utils/R8CommandTest.java b/src/test/java/com/android/tools/r8/utils/R8CommandTest.java
index 2054b22a7..6dda185a8 100644
--- a/src/test/java/com/android/tools/r8/utils/R8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/utils/R8CommandTest.java
@@ -229,7 +229,7 @@ public class R8CommandTest {
R8Command command = parse("@" + argsFile.toString());
assertEquals(CompilationMode.DEBUG, command.getMode());
assertFalse(command.useMinification());
- assertTrue(command.useTreeShaking());
+ assertFalse(command.useTreeShaking()); // We have no keep rules (proguard config file is empty).
assertEquals(1, ToolHelper.getApp(command).getDexProgramResources().size());
}