Refactor the module API to use the builder pattern for executor creation.

This significantly simplifies several of our modules.

--
MOS_MIGRATED_REVID=137713119
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
index 8334e00..a8b6713 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
@@ -15,15 +15,11 @@
 package com.google.devtools.build.lib.sandbox;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.eventbus.Subscribe;
-import com.google.devtools.build.lib.actions.ActionContextConsumer;
-import com.google.devtools.build.lib.actions.ActionContextProvider;
+import com.google.devtools.build.lib.actions.ExecutorBuilder;
 import com.google.devtools.build.lib.buildtool.BuildRequest;
-import com.google.devtools.build.lib.buildtool.buildevent.BuildStartingEvent;
 import com.google.devtools.build.lib.runtime.BlazeModule;
 import com.google.devtools.build.lib.runtime.Command;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
-import com.google.devtools.build.lib.util.Preconditions;
 import com.google.devtools.common.options.OptionsBase;
 import java.io.IOException;
 
@@ -31,28 +27,6 @@
  * This module provides the Sandbox spawn strategy.
  */
 public final class SandboxModule extends BlazeModule {
-  // Per-command state
-  private CommandEnvironment env;
-  private BuildRequest buildRequest;
-
-  @Override
-  public Iterable<ActionContextProvider> getActionContextProviders() {
-    Preconditions.checkNotNull(env);
-    Preconditions.checkNotNull(buildRequest);
-    try {
-      return ImmutableList.<ActionContextProvider>of(
-          SandboxActionContextProvider.create(env, buildRequest));
-    } catch (IOException e) {
-      throw new IllegalStateException(e);
-    }
-  }
-
-  @Override
-  public Iterable<ActionContextConsumer> getActionContextConsumers() {
-    Preconditions.checkNotNull(env);
-    return ImmutableList.<ActionContextConsumer>of(new SandboxActionContextConsumer(env));
-  }
-
   @Override
   public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
     return "build".equals(command.name())
@@ -61,19 +35,12 @@
   }
 
   @Override
-  public void beforeCommand(Command command, CommandEnvironment env) {
-    this.env = env;
-    env.getEventBus().register(this);
-  }
-
-  @Override
-  public void afterCommand() {
-    env = null;
-    buildRequest = null;
-  }
-
-  @Subscribe
-  public void buildStarting(BuildStartingEvent event) {
-    buildRequest = event.getRequest();
+  public void executorInit(CommandEnvironment env, BuildRequest request, ExecutorBuilder builder) {
+    try {
+      builder.addActionContextProvider(SandboxActionContextProvider.create(env, request));
+    } catch (IOException e) {
+      throw new IllegalStateException(e);
+    }
+    builder.addActionContextConsumer(new SandboxActionContextConsumer(env));
   }
 }