Update DynamicExecutionModule to use registry methods instead of executorInit where possible.

Part of the roll-forward of https://github.com/bazelbuild/bazel/commit/37aeabcd39fe326d1c4e55693d8d207f9f7ac6c4.

PiperOrigin-RevId: 303951192
diff --git a/src/main/java/com/google/devtools/build/lib/dynamic/DynamicExecutionModule.java b/src/main/java/com/google/devtools/build/lib/dynamic/DynamicExecutionModule.java
index d7126c8..6f3bc93 100644
--- a/src/main/java/com/google/devtools/build/lib/dynamic/DynamicExecutionModule.java
+++ b/src/main/java/com/google/devtools/build/lib/dynamic/DynamicExecutionModule.java
@@ -24,10 +24,9 @@
 import com.google.devtools.build.lib.actions.Spawn;
 import com.google.devtools.build.lib.actions.SpawnStrategy;
 import com.google.devtools.build.lib.actions.Spawns;
-import com.google.devtools.build.lib.buildtool.BuildRequest;
 import com.google.devtools.build.lib.concurrent.ExecutorUtil;
 import com.google.devtools.build.lib.exec.ExecutionPolicy;
-import com.google.devtools.build.lib.exec.ExecutorBuilder;
+import com.google.devtools.build.lib.exec.SpawnStrategyRegistry;
 import com.google.devtools.build.lib.runtime.BlazeModule;
 import com.google.devtools.build.lib.runtime.Command;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
@@ -42,9 +41,6 @@
  */
 public class DynamicExecutionModule extends BlazeModule {
 
-  /** Strings that can be used to select this strategy in flags. */
-  private static final String[] COMMANDLINE_IDENTIFIERS = {"dynamic", "dynamic_worker"};
-
   private ExecutorService executorService;
 
   public DynamicExecutionModule() {}
@@ -105,47 +101,46 @@
         : options.dynamicRemoteStrategy;
   }
 
+  @Override
+  public void registerSpawnStrategies(
+      SpawnStrategyRegistry.Builder registryBuilder, CommandEnvironment env)
+      throws ExecutorInitException {
+    registerSpawnStrategies(
+        registryBuilder, env.getOptions().getOptions(DynamicExecutionOptions.class));
+  }
+
+  // CommandEnvironment is difficult to access in tests, so use this method for testing.
   @VisibleForTesting
-  void initStrategies(ExecutorBuilder builder, DynamicExecutionOptions options)
+  final void registerSpawnStrategies(
+      SpawnStrategyRegistry.Builder registryBuilder, DynamicExecutionOptions options)
       throws ExecutorInitException {
     if (!options.internalSpawnScheduler) {
       return;
     }
 
+    SpawnStrategy strategy;
     if (options.legacySpawnScheduler) {
-      builder.addActionContext(
-          SpawnStrategy.class,
-          new LegacyDynamicSpawnStrategy(executorService, options, this::getExecutionPolicy),
-          COMMANDLINE_IDENTIFIERS);
+      strategy = new LegacyDynamicSpawnStrategy(executorService, options, this::getExecutionPolicy);
     } else {
-      builder.addActionContext(
-          SpawnStrategy.class,
-          new DynamicSpawnStrategy(executorService, options, this::getExecutionPolicy),
-          COMMANDLINE_IDENTIFIERS);
+      strategy = new DynamicSpawnStrategy(executorService, options, this::getExecutionPolicy);
     }
-    builder.addStrategyByContext(SpawnStrategy.class, "dynamic");
+    registryBuilder.registerStrategy(strategy, "dynamic", "dynamic_worker");
 
     for (Map.Entry<String, List<String>> mnemonicToStrategies : getLocalStrategies(options)) {
       throwIfContainsDynamic(mnemonicToStrategies.getValue(), "--dynamic_local_strategy");
-      builder.addDynamicLocalStrategiesByMnemonic(
+      registryBuilder.addDynamicLocalStrategiesByMnemonic(
           mnemonicToStrategies.getKey(), mnemonicToStrategies.getValue());
     }
     for (Map.Entry<String, List<String>> mnemonicToStrategies : getRemoteStrategies(options)) {
       throwIfContainsDynamic(mnemonicToStrategies.getValue(), "--dynamic_remote_strategy");
-      builder.addDynamicRemoteStrategiesByMnemonic(
+      registryBuilder.addDynamicRemoteStrategiesByMnemonic(
           mnemonicToStrategies.getKey(), mnemonicToStrategies.getValue());
     }
   }
 
-  @Override
-  public void executorInit(CommandEnvironment env, BuildRequest request, ExecutorBuilder builder)
-      throws ExecutorInitException {
-    initStrategies(builder, env.getOptions().getOptions(DynamicExecutionOptions.class));
-  }
-
   private void throwIfContainsDynamic(List<String> strategies, String flagName)
       throws ExecutorInitException {
-    ImmutableSet<String> identifiers = ImmutableSet.copyOf(COMMANDLINE_IDENTIFIERS);
+    ImmutableSet<String> identifiers = ImmutableSet.of("dynamic", "dynamic_worker");
     if (!Sets.intersection(identifiers, ImmutableSet.copyOf(strategies)).isEmpty()) {
       throw new ExecutorInitException(
           "Cannot use strategy "
@@ -158,6 +153,7 @@
 
   /**
    * Use the {@link Spawn} metadata to determine if it can be executed locally, remotely, or both.
+   *
    * @param spawn the {@link Spawn} action
    * @return the {@link ExecutionPolicy} containing local/remote execution policies
    */
diff --git a/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyTest.java
index 78aa053..39a2f6f 100644
--- a/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyTest.java
@@ -48,6 +48,7 @@
 import com.google.devtools.build.lib.exec.ExecutionOptions;
 import com.google.devtools.build.lib.exec.ExecutorBuilder;
 import com.google.devtools.build.lib.exec.SpawnActionContextMaps;
+import com.google.devtools.build.lib.exec.SpawnStrategyRegistry;
 import com.google.devtools.build.lib.testutil.TestThread;
 import com.google.devtools.build.lib.testutil.TestUtils;
 import com.google.devtools.build.lib.util.io.FileOutErr;
@@ -316,16 +317,22 @@
     checkState(executorServiceForCleanup == null);
     executorServiceForCleanup = executorService;
 
-    ExecutorBuilder executorBuilder =
-        new ExecutorBuilder()
-            .addActionContext(SpawnStrategy.class, localStrategy, "mock-local")
-            .addActionContext(SpawnStrategy.class, remoteStrategy, "mock-remote");
+    ExecutorBuilder executorBuilder = new ExecutorBuilder();
+    SpawnStrategyRegistry.Builder spawnStrategyRegistryBuilder =
+        executorBuilder.asSpawnStrategyRegistryBuilder();
+
+    spawnStrategyRegistryBuilder.registerStrategy(localStrategy, "mock-local");
+    spawnStrategyRegistryBuilder.registerStrategy(remoteStrategy, "mock-remote");
 
     if (sandboxedStrategy != null) {
-      executorBuilder.addActionContext(SpawnStrategy.class, sandboxedStrategy, "mock-sandboxed");
+      spawnStrategyRegistryBuilder.registerStrategy(sandboxedStrategy, "mock-sandboxed");
     }
 
-    new DynamicExecutionModule(executorService).initStrategies(executorBuilder, options);
+    DynamicExecutionModule dynamicExecutionModule = new DynamicExecutionModule(executorService);
+    // TODO(b/63987502): This only exists during the migration to SpawnStrategyRegistry.
+    executorBuilder.addStrategyByContext(SpawnStrategy.class, "dynamic");
+    dynamicExecutionModule.registerSpawnStrategies(spawnStrategyRegistryBuilder, options);
+
     SpawnActionContextMaps spawnActionContextMaps = executorBuilder.getSpawnActionContextMaps();
 
     Executor executor =