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);
     }
   }
 }