diff options
author | Tamas Kenez <tamaskenez@google.com> | 2017-10-24 11:48:33 +0200 |
---|---|---|
committer | Tamas Kenez <tamaskenez@google.com> | 2017-10-24 11:48:33 +0200 |
commit | ad41f3f7a62832034b9bc90aef4ee23e31ce03c0 (patch) | |
tree | 373172a931bef7f97cada1904f073e03182857aa | |
parent | 478befe3cc9a846d3897b23db0e8b893a8e2858e (diff) | |
download | r8-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
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()); } |