diff --git a/src/main/java/com/android/tools/r8/L8Command.java b/src/main/java/com/android/tools/r8/L8Command.java
index 0bd58e6..1372ccb 100644
--- a/src/main/java/com/android/tools/r8/L8Command.java
+++ b/src/main/java/com/android/tools/r8/L8Command.java
@@ -387,7 +387,7 @@
         R8Command.Builder r8Builder =
             R8Command.builder(getReporter())
                 .addProgramResourceProvider((ProgramResourceProvider) l8CfConsumer)
-                .setEnableEmptyMemberRulesToDefaultInitRuleConversion(false)
+                .enableLegacyFullModeForKeepRules(false)
                 .setSynthesizedClassesPrefix(
                     desugaredLibrarySpecification.getSynthesizedLibraryClassesPackagePrefix())
                 .setMinApiLevel(getMinApiLevel())
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 52ae388..489f9e0 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -506,10 +506,15 @@
      *
      * <p>This currently defaults to true in stable versions.
      */
-    public Builder setEnableEmptyMemberRulesToDefaultInitRuleConversion(
-        boolean enableEmptyMemberRulesToDefaultInitRuleConversion) {
-      parserOptionsBuilder.setEnableEmptyMemberRulesToDefaultInitRuleConversion(
-          enableEmptyMemberRulesToDefaultInitRuleConversion);
+    public Builder enableLegacyFullModeForKeepRules(boolean enableLegacyFullModeForKeepRules) {
+      parserOptionsBuilder.setEnableLegacyFullModeForKeepRules(enableLegacyFullModeForKeepRules);
+      return this;
+    }
+
+    public Builder enableLegacyFullModeForKeepRulesWarnings(
+        boolean enableLegacyFullModeForKeepRulesWarnings) {
+      parserOptionsBuilder.setEnableLegacyFullModeForKeepRulesWarnings(
+          enableLegacyFullModeForKeepRulesWarnings);
       return this;
     }
 
diff --git a/src/main/java/com/android/tools/r8/R8Partial.java b/src/main/java/com/android/tools/r8/R8Partial.java
index 42b5b5b..2fc67d4 100644
--- a/src/main/java/com/android/tools/r8/R8Partial.java
+++ b/src/main/java/com/android/tools/r8/R8Partial.java
@@ -220,7 +220,7 @@
             .addClasspathFiles(d8Program)
             .addProgramFiles(r8Program)
             .addProguardConfigurationFiles(dump.getProguardConfigFile(), traceReferencesRules)
-            .setEnableEmptyMemberRulesToDefaultInitRuleConversion(true)
+            .enableLegacyFullModeForKeepRules(true)
             .setMode(dump.getBuildProperties().getCompilationMode())
             .setOutput(r8Output, OutputMode.DexIndexed);
     if (dump.hasDesugaredLibrary()) {
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 ceb9671..8c6aa57 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -129,7 +129,7 @@
         dexItemFactory,
         reporter,
         ProguardConfigurationParserOptions.builder()
-            .setEnableEmptyMemberRulesToDefaultInitRuleConversion(false)
+            .setEnableLegacyFullModeForKeepRules(false)
             .setEnableExperimentalCheckEnumUnboxed(false)
             .setEnableExperimentalConvertCheckNotNull(false)
             .setEnableExperimentalWhyAreYouNotInlining(false)
@@ -852,13 +852,12 @@
       Position end = getPosition();
       ProguardKeepRule rule =
           keepRuleBuilder.setSource(getSourceSnippet(contents, start, end)).setEnd(end).build();
-      if (options.isEmptyMemberRulesToDefaultInitRuleConversionEnabled(configurationBuilder)
+      if (options.isLegacyFullModeForKeepRulesEnabled(configurationBuilder)
           && rule.getMemberRules().isEmpty()
           && rule.getType() != ProguardKeepRuleType.KEEP_CLASSES_WITH_MEMBERS) {
         // If there are no member rules, a default rule for the parameterless constructor applies
         // in compatibility mode.
-        if (options.isEmptyMemberRulesToDefaultInitRuleConversionWarningsEnabled(
-            configurationBuilder)) {
+        if (options.isLegacyFullModeForKeepRulesWarningsEnabled(configurationBuilder)) {
           reporter.warning(
               EmptyMemberRulesToDefaultInitRuleConversionDiagnostic.Factory.create(rule));
         }
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 02373b6..ab5db09 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
@@ -6,20 +6,18 @@
 
 import static com.android.tools.r8.utils.SystemPropertyUtils.parseSystemPropertyOrDefault;
 
-import com.android.tools.r8.utils.OptionalBool;
-
 public class ProguardConfigurationParserOptions {
 
-  private final OptionalBool enableEmptyMemberRulesToDefaultInitRuleConversion;
-  private final boolean enableEmptyMemberRulesToDefaultInitRuleConversionWarnings;
+  private final boolean enableLegacyFullModeForKeepRules;
+  private final boolean enableLegacyFullModeForKeepRulesWarnings;
   private final boolean enableExperimentalCheckEnumUnboxed;
   private final boolean enableExperimentalConvertCheckNotNull;
   private final boolean enableExperimentalWhyAreYouNotInlining;
   private final boolean enableTestingOptions;
 
   ProguardConfigurationParserOptions(
-      OptionalBool enableEmptyMemberRulesToDefaultInitRuleConversion,
-      boolean enableEmptyMemberRulesToDefaultInitRuleConversionWarnings,
+      boolean enableLegacyFullModeForKeepRules,
+      boolean enableLegacyFullModeForKeepRulesWarnings,
       boolean enableExperimentalCheckEnumUnboxed,
       boolean enableExperimentalConvertCheckNotNull,
       boolean enableExperimentalWhyAreYouNotInlining,
@@ -28,28 +26,25 @@
     this.enableExperimentalConvertCheckNotNull = enableExperimentalConvertCheckNotNull;
     this.enableExperimentalWhyAreYouNotInlining = enableExperimentalWhyAreYouNotInlining;
     this.enableTestingOptions = enableTestingOptions;
-    this.enableEmptyMemberRulesToDefaultInitRuleConversion =
-        enableEmptyMemberRulesToDefaultInitRuleConversion;
-    this.enableEmptyMemberRulesToDefaultInitRuleConversionWarnings =
-        enableEmptyMemberRulesToDefaultInitRuleConversionWarnings;
+    this.enableLegacyFullModeForKeepRules = enableLegacyFullModeForKeepRules;
+    this.enableLegacyFullModeForKeepRulesWarnings = enableLegacyFullModeForKeepRulesWarnings;
   }
 
   public static Builder builder() {
     return new Builder();
   }
 
-  public boolean isEmptyMemberRulesToDefaultInitRuleConversionEnabled(
+  public boolean isLegacyFullModeForKeepRulesEnabled(
       ProguardConfiguration.Builder configurationBuilder) {
     // TODO(b/356344563): Disable in full mode in the next major version.
-    return configurationBuilder.isForceProguardCompatibility()
-        || enableEmptyMemberRulesToDefaultInitRuleConversion.getOrDefault(true);
+    return configurationBuilder.isForceProguardCompatibility() || enableLegacyFullModeForKeepRules;
   }
 
-  public boolean isEmptyMemberRulesToDefaultInitRuleConversionWarningsEnabled(
+  public boolean isLegacyFullModeForKeepRulesWarningsEnabled(
       ProguardConfiguration.Builder configurationBuilder) {
-    assert isEmptyMemberRulesToDefaultInitRuleConversionEnabled(configurationBuilder);
+    assert isLegacyFullModeForKeepRulesEnabled(configurationBuilder);
     return !configurationBuilder.isForceProguardCompatibility()
-        && enableEmptyMemberRulesToDefaultInitRuleConversionWarnings;
+        && enableLegacyFullModeForKeepRulesWarnings;
   }
 
   public boolean isExperimentalCheckEnumUnboxedEnabled() {
@@ -70,22 +65,20 @@
 
   public static class Builder {
 
-    private OptionalBool enableEmptyMemberRulesToDefaultInitRuleConversion = OptionalBool.UNKNOWN;
-    private boolean enableEmptyMemberRulesToDefaultInitRuleConversionWarnings = false;
+    private boolean enableLegacyFullModeForKeepRules = true;
+    private boolean enableLegacyFullModeForKeepRulesWarnings = false;
     private boolean enableExperimentalCheckEnumUnboxed;
     private boolean enableExperimentalConvertCheckNotNull;
     private boolean enableExperimentalWhyAreYouNotInlining;
     private boolean enableTestingOptions;
 
     public Builder readEnvironment() {
-      enableEmptyMemberRulesToDefaultInitRuleConversion =
+      enableLegacyFullModeForKeepRules =
           parseSystemPropertyOrDefault(
-              "com.android.tools.r8.enableEmptyMemberRulesToDefaultInitRuleConversion",
-              OptionalBool.UNKNOWN);
-      enableEmptyMemberRulesToDefaultInitRuleConversionWarnings =
+              "com.android.tools.r8.enableLegacyFullModeForKeepRules", true);
+      enableLegacyFullModeForKeepRulesWarnings =
           parseSystemPropertyOrDefault(
-              "com.android.tools.r8.enableEmptyMemberRulesToDefaultInitRuleConversionWarnings",
-              false);
+              "com.android.tools.r8.enableLegacyFullModeForKeepRulesWarnings", false);
       enableExperimentalCheckEnumUnboxed =
           parseSystemPropertyOrDefault(
               "com.android.tools.r8.experimental.enablecheckenumunboxed", false);
@@ -100,10 +93,14 @@
       return this;
     }
 
-    public Builder setEnableEmptyMemberRulesToDefaultInitRuleConversion(
-        boolean enableEmptyMemberRulesToDefaultInitRuleConversion) {
-      this.enableEmptyMemberRulesToDefaultInitRuleConversion =
-          OptionalBool.of(enableEmptyMemberRulesToDefaultInitRuleConversion);
+    public Builder setEnableLegacyFullModeForKeepRules(boolean enableLegacyFullModeForKeepRules) {
+      this.enableLegacyFullModeForKeepRules = enableLegacyFullModeForKeepRules;
+      return this;
+    }
+
+    public Builder setEnableLegacyFullModeForKeepRulesWarnings(
+        boolean enableLegacyFullModeForKeepRulesWarnings) {
+      this.enableLegacyFullModeForKeepRulesWarnings = enableLegacyFullModeForKeepRulesWarnings;
       return this;
     }
 
@@ -132,8 +129,8 @@
 
     public ProguardConfigurationParserOptions build() {
       return new ProguardConfigurationParserOptions(
-          enableEmptyMemberRulesToDefaultInitRuleConversion,
-          enableEmptyMemberRulesToDefaultInitRuleConversionWarnings,
+          enableLegacyFullModeForKeepRules,
+          enableLegacyFullModeForKeepRulesWarnings,
           enableExperimentalCheckEnumUnboxed,
           enableExperimentalConvertCheckNotNull,
           enableExperimentalWhyAreYouNotInlining,
diff --git a/src/test/java/com/android/tools/r8/compilerapi/diagnostics/ProguardKeepRuleDiagnosticsApiTest.java b/src/test/java/com/android/tools/r8/compilerapi/diagnostics/ProguardKeepRuleDiagnosticsApiTest.java
index e4ed3bb..cb50996 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/diagnostics/ProguardKeepRuleDiagnosticsApiTest.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/diagnostics/ProguardKeepRuleDiagnosticsApiTest.java
@@ -98,7 +98,7 @@
               .addProguardConfiguration(
                   Collections.singletonList("-keep class NotPresent {}"), Origin.unknown())
               .addLibraryFiles(getJava8RuntimeJar())
-              .setEnableEmptyMemberRulesToDefaultInitRuleConversion(false)
+              .enableLegacyFullModeForKeepRules(false)
               .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
               .setMinApiLevel(1)
               .build());
diff --git a/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
index 72fd0ae..51174be 100644
--- a/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
@@ -153,7 +153,7 @@
     libraryDesugaringTestConfiguration.configure(builder);
     builder.setAndroidPlatformBuild(androidPlatformBuild);
     if (!enableEmptyMemberRulesToDefaultInitRuleConversion.isUnknown()) {
-      builder.setEnableEmptyMemberRulesToDefaultInitRuleConversion(
+      builder.enableLegacyFullModeForKeepRules(
           enableEmptyMemberRulesToDefaultInitRuleConversion.toBoolean());
     }
     builder.setEnableIsolatedSplits(enableIsolatedSplits);
diff --git a/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1 b/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
index b76801c..089244c 100644
--- a/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
+++ b/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
@@ -1 +1 @@
-9c8c027ae1cd5b8768574a7fb2bb0698ef09b907
\ No newline at end of file
+aa0b23115292ec22a24d4166101c1116d264e1cb
\ No newline at end of file
