Property to enable compat configuration parsing
Change-Id: Ic5562c69e2219ab9d6fd3406b9e035c439ee9e56
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 d59e2ef..8cffa28 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -847,20 +847,23 @@
parseRuleTypeAndModifiers(keepRuleBuilder);
parseClassSpec(keepRuleBuilder);
if (configurationBuilder.isForceProguardCompatibility()
- && keepRuleBuilder.getMemberRules().isEmpty()
- && keepRuleBuilder.getKeepRuleType() != ProguardKeepRuleType.KEEP_CLASSES_WITH_MEMBERS) {
- // If there are no member rules, a default rule for the parameterless constructor applies in
- // compatibility mode.
- keepRuleBuilder
- .getMemberRules()
- .add(
- ProguardMemberRule.builder()
- .setName(
- IdentifierPatternWithWildcards.withoutWildcards(
- Constants.INSTANCE_INITIALIZER_NAME))
- .setRuleType(ProguardMemberType.INIT)
- .setArguments(Collections.emptyList())
- .build());
+ || options.isForceEmptyMemberRulesToDefaultInitRuleConversionEnabled()) {
+ if (keepRuleBuilder.getMemberRules().isEmpty()
+ && keepRuleBuilder.getKeepRuleType()
+ != ProguardKeepRuleType.KEEP_CLASSES_WITH_MEMBERS) {
+ // If there are no member rules, a default rule for the parameterless constructor applies
+ // in compatibility mode.
+ keepRuleBuilder
+ .getMemberRules()
+ .add(
+ ProguardMemberRule.builder()
+ .setName(
+ IdentifierPatternWithWildcards.withoutWildcards(
+ Constants.INSTANCE_INITIALIZER_NAME))
+ .setRuleType(ProguardMemberType.INIT)
+ .setArguments(Collections.emptyList())
+ .build());
+ }
}
Position end = getPosition();
keepRuleBuilder.setSource(getSourceSnippet(contents, start, end));
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
index 8811df7..acdd37c 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
@@ -12,16 +12,20 @@
private final boolean enableExperimentalConvertCheckNotNull;
private final boolean enableExperimentalWhyAreYouNotInlining;
private final boolean enableTestingOptions;
+ private final boolean forceEnableEmptyMemberRulesToDefaultInitRuleConversion;
ProguardConfigurationParserOptions(
boolean enableExperimentalCheckEnumUnboxed,
boolean enableExperimentalConvertCheckNotNull,
boolean enableExperimentalWhyAreYouNotInlining,
- boolean enableTestingOptions) {
+ boolean enableTestingOptions,
+ boolean forceEnableEmptyMemberRulesToDefaultInitRuleConversion) {
this.enableExperimentalCheckEnumUnboxed = enableExperimentalCheckEnumUnboxed;
this.enableExperimentalConvertCheckNotNull = enableExperimentalConvertCheckNotNull;
this.enableExperimentalWhyAreYouNotInlining = enableExperimentalWhyAreYouNotInlining;
this.enableTestingOptions = enableTestingOptions;
+ this.forceEnableEmptyMemberRulesToDefaultInitRuleConversion =
+ forceEnableEmptyMemberRulesToDefaultInitRuleConversion;
}
public static Builder builder() {
@@ -40,6 +44,10 @@
return enableExperimentalWhyAreYouNotInlining;
}
+ public boolean isForceEmptyMemberRulesToDefaultInitRuleConversionEnabled() {
+ return forceEnableEmptyMemberRulesToDefaultInitRuleConversion;
+ }
+
public boolean isTestingOptionsEnabled() {
return enableTestingOptions;
}
@@ -50,6 +58,7 @@
private boolean enableExperimentalConvertCheckNotNull;
private boolean enableExperimentalWhyAreYouNotInlining;
private boolean enableTestingOptions;
+ private boolean forceEnableEmptyMemberRulesToDefaultInitRuleConversion;
public Builder readEnvironment() {
enableExperimentalCheckEnumUnboxed =
@@ -63,6 +72,9 @@
"com.android.tools.r8.experimental.enablewhyareyounotinlining", false);
enableTestingOptions =
parseSystemPropertyOrDefault("com.android.tools.r8.allowTestProguardOptions", false);
+ forceEnableEmptyMemberRulesToDefaultInitRuleConversion =
+ parseSystemPropertyOrDefault(
+ "com.android.tools.r8.enableEmptyMemberRulesToDefaultInitRuleConversion", false);
return this;
}
@@ -94,7 +106,8 @@
enableExperimentalCheckEnumUnboxed,
enableExperimentalConvertCheckNotNull,
enableExperimentalWhyAreYouNotInlining,
- enableTestingOptions);
+ enableTestingOptions,
+ forceEnableEmptyMemberRulesToDefaultInitRuleConversion);
}
}
}