Finish isolated splits API

Fixes: b/318344370
Change-Id: I160554c5bfceb3f466abde412bb3d167e4351a69
diff --git a/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java b/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java
index 2ecb303..3273271 100644
--- a/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/ParseFlagInfoImpl.java
@@ -8,6 +8,7 @@
 import static com.android.tools.r8.BaseCompilerCommandParser.MIN_API_FLAG;
 import static com.android.tools.r8.BaseCompilerCommandParser.THREAD_COUNT_FLAG;
 import static com.android.tools.r8.D8CommandParser.STARTUP_PROFILE_FLAG;
+import static com.android.tools.r8.R8CommandParser.ISOLATED_SPLITS_FLAG;
 
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.google.common.collect.ImmutableList;
@@ -182,6 +183,13 @@
     return flag1(STARTUP_PROFILE_FLAG, "<file>", "Startup profile <file> to use for dex layout.");
   }
 
+  public static ParseFlagInfoImpl getIsolatedSplits() {
+    return flag0(
+        ISOLATED_SPLITS_FLAG,
+        "Specifies that the application is using isolated splits, i.e., if split APKs installed "
+            + "for this application are loaded into their own Context objects.");
+  }
+
   public static ParseFlagInfoImpl flag0(String flag, String... help) {
     return flag(flag, Collections.emptyList(), Arrays.asList(help));
   }
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 2b20068..e887576 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -54,7 +54,6 @@
 import com.android.tools.r8.utils.SetUtils;
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.SystemPropertyUtils;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableList;
@@ -133,10 +132,7 @@
     private GraphConsumer mainDexKeptGraphConsumer = null;
     private InputDependencyGraphConsumer inputDependencyGraphConsumer = null;
     private final FeatureSplitConfiguration.Builder featureSplitConfigurationBuilder =
-        FeatureSplitConfiguration.builder()
-            .setEnableIsolatedSplits(
-                SystemPropertyUtils.parseSystemPropertyOrDefault(
-                    "com.android.tools.r8.isolatedSplits", false));
+        FeatureSplitConfiguration.builder();
     private String synthesizedClassPrefix = "";
     private boolean enableMissingLibraryApiModeling = false;
     private boolean enableExperimentalKeepAnnotations =
@@ -479,11 +475,16 @@
      * <p>See also <a href="https://developer.android.com/reference/android/R.attr#isolatedSplits">
      * R.attr#isolatedSplits</a>.
      */
-    public Builder setEnableExperimentalIsolatedSplits(boolean enableIsolatedSplits) {
+    public Builder setEnableIsolatedSplits(boolean enableIsolatedSplits) {
       featureSplitConfigurationBuilder.setEnableIsolatedSplits(enableIsolatedSplits);
       return this;
     }
 
+    @Deprecated
+    public Builder setEnableExperimentalIsolatedSplits(boolean enableIsolatedSplits) {
+      return setEnableIsolatedSplits(enableIsolatedSplits);
+    }
+
     /**
      * Enable experimental/pre-release support for modeling missing library APIs.
      *
diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index d88314d..2ef79c8 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -29,6 +29,8 @@
 
 public class R8CommandParser extends BaseCompilerCommandParser<R8Command, R8Command.Builder> {
 
+  static final String ISOLATED_SPLITS_FLAG = "--isolated-splits";
+
   // Note: this must be a super-set of OPTIONS_WITH_TWO_PARAMETERS.
   private static final Set<String> OPTIONS_WITH_ONE_PARAMETER =
       ImmutableSet.of(
@@ -99,6 +101,7 @@
                 "<output>",
                 "Add feature <input> file to <output> file. Several ",
                 "occurrences can map to the same output."))
+        .add(ParseFlagInfoImpl.getIsolatedSplits())
         .add(flag1("--main-dex-list-output", "<file>", "Output the full main-dex list in <file>."))
         .addAll(ParseFlagInfoImpl.getAssertionsFlags())
         .add(ParseFlagInfoImpl.getThreadCount())
@@ -291,6 +294,8 @@
         featureSplitJars
             .computeIfAbsent(Paths.get(nextNextArg), k -> new ArrayList<>())
             .add(Paths.get(nextArg));
+      } else if (arg.equals(ISOLATED_SPLITS_FLAG)) {
+        builder.setEnableIsolatedSplits(true);
       } else if (arg.equals("--main-dex-list")) {
         builder.addMainDexListFiles(Paths.get(nextArg));
       } else if (arg.equals("--main-dex-list-output")) {
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index c9b9401..2c3ea07 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -138,7 +138,7 @@
     ToolHelper.addSyntheticProguardRulesConsumerForTesting(
         builder, rules -> box.syntheticProguardRules = rules);
     libraryDesugaringTestConfiguration.configure(builder);
-    builder.setEnableExperimentalIsolatedSplits(enableIsolatedSplits);
+    builder.setEnableIsolatedSplits(enableIsolatedSplits);
     builder.setEnableExperimentalMissingLibraryApiModeling(enableMissingLibraryApiModeling);
     builder.setEnableStartupLayoutOptimization(enableStartupLayoutOptimization);
     StringBuilder pgConfOutput = wrapProguardConfigConsumer(builder);
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 5c926b3..f167821 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -582,8 +582,6 @@
         if args.enable_test_assertions:
             cmd.append('-Dcom.android.tools.r8.enableTestAssertions=1')
         feature_jars = dump.feature_jars()
-        if determine_isolated_splits(build_properties, feature_jars):
-            cmd.append('-Dcom.android.tools.r8.isolatedSplits=1')
         if args.print_times:
             cmd.append('-Dcom.android.tools.r8.printtimes=1')
         if args.r8_flags:
@@ -625,6 +623,8 @@
                 ])
             else:
                 cmd.append(feature_jar)
+        if determine_isolated_splits(build_properties, feature_jars):
+            cmd.append('--isolated-splits')
         if dump.library_jar():
             cmd.extend(['--lib', dump.library_jar()])
         if dump.classpath_jar() and not is_l8_compiler(compiler):