Create default ProguardConfiguration through the builder...
...to allow ProguardConfigurationConsumer operate on the default
configuration.
Bug:
Change-Id: Ib111555fdf8a83a278a632fa70ca58ad1610ba20
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 0af7f92..9a11817 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -211,9 +211,10 @@
throw new CompilationException(e.getMessage(), e.getCause());
}
}
- ProguardConfiguration configuration;
+
+ ProguardConfiguration.Builder configurationBuilder;
if (proguardConfigs.isEmpty()) {
- configuration = ProguardConfiguration.defaultConfiguration(factory);
+ configurationBuilder = ProguardConfiguration.builderInitializedWithDefaults(factory);
} else {
ProguardConfigurationParser parser =
new ProguardConfigurationParser(factory, getDiagnosticsHandler());
@@ -222,15 +223,16 @@
} catch (ProguardRuleParserException e) {
throw new CompilationException(e.getMessage(), e.getCause());
}
- ProguardConfiguration.Builder configurationBuilder = parser.getConfigurationBuilder();
- if (proguardConfigurationConsumer != null) {
- proguardConfigurationConsumer.accept(configurationBuilder);
- }
- configuration = configurationBuilder.build();
- getAppBuilder().addProgramFiles(configuration.getInjars());
- getAppBuilder().addLibraryFiles(configuration.getLibraryjars());
+ configurationBuilder = parser.getConfigurationBuilder();
}
+ if (proguardConfigurationConsumer != null) {
+ proguardConfigurationConsumer.accept(configurationBuilder);
+ }
+ ProguardConfiguration configuration = configurationBuilder.build();
+ getAppBuilder().addProgramFiles(configuration.getInjars());
+ getAppBuilder().addLibraryFiles(configuration.getLibraryjars());
+
// TODO(b/64802420): setProguardMapFile if configuration.hasApplyMappingFile
boolean useTreeShaking = treeShaking.orElse(configuration.isShrinking());
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 fd08f51..d23822f 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -295,12 +295,17 @@
return new Builder(dexItemFactory);
}
- public DexItemFactory getDexItemFactory() {
- return 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 boolean isDefaultConfiguration() {
- return false;
+ public DexItemFactory getDexItemFactory() {
+ return dexItemFactory;
}
public ImmutableList<FilteredClassPath> getInjars() {
@@ -404,44 +409,10 @@
}
public static ProguardConfiguration defaultConfiguration(DexItemFactory dexItemFactory) {
- return new DefaultProguardConfiguration(dexItemFactory);
- }
-
- public static class DefaultProguardConfiguration extends ProguardConfiguration {
-
- public DefaultProguardConfiguration(DexItemFactory factory) {
- super(factory,
- ImmutableList.of() /* injars */,
- ImmutableList.of() /* libraryjars */,
- PackageObfuscationMode.NONE,
- "" /* package prefix */,
- false /* allowAccessModification */,
- false /* ignoreWarnings */,
- true /* optimizing */,
- false /* obfuscating */,
- false /* shrinking */,
- false /* printUsage */,
- null /* printUsageFile */,
- false /* printMapping */,
- null /* printMappingFile */,
- null /* applyMapping */,
- false /* verbose */,
- null /* renameSourceFileAttribute */,
- KeepAttributeOptions.KEEP_ALL,
- ProguardClassNameList.emptyList(),
- ImmutableList.of(ProguardKeepRule.defaultKeepAllRule()),
- false /* printSeeds */,
- null /* seedFile */,
- ImmutableList.of() /* obfuscationDictionary */,
- ImmutableList.of() /* classObfuscationDictionary */,
- ImmutableList.of() /* packageObfuscationDictionary */,
- false /* useUniqueClassMemberNames*/,
- false /* keepParameterNames */);
- }
-
- @Override
- public boolean isDefaultConfiguration() {
- return true;
+ try {
+ return builderInitializedWithDefaults(dexItemFactory).build();
+ } catch(CompilationException e) {
+ throw new RuntimeException(); // Building a builder initialized with defaults will not throw CompilationException because DictionaryReader is called with empty lists.
}
}