Split sandbox code from standalone module.

--
MOS_MIGRATED_REVID=97126283
diff --git a/src/main/java/BUILD b/src/main/java/BUILD
index 94e8ae0..7c547f4 100644
--- a/src/main/java/BUILD
+++ b/src/main/java/BUILD
@@ -279,17 +279,82 @@
 )
 
 java_library(
+    name = "buildtool-runtime",
+    srcs = glob([
+        "com/google/devtools/build/lib/buildtool/**/*.java",
+        "com/google/devtools/build/lib/runtime/**/*.java",
+    ]),
+    deps = [
+        ":actions",
+        ":analysis-exec-rules-skyframe",
+        ":collect",
+        ":common",
+        ":concurrent",
+        ":docgen",
+        ":events",
+        ":options",
+        ":packages",
+        ":query2",
+        ":server",
+        ":shell",
+        ":skyframe-base",
+        ":vfs",
+        "//src/main/protobuf:proto_build",
+        "//src/main/protobuf:proto_test_status",
+        "//third_party:guava",
+    ],
+)
+
+java_library(
+    name = "docgen",
+    srcs = glob([
+        "com/google/devtools/build/docgen/**/*.java",
+    ]),
+    deps = [
+        ":analysis-exec-rules-skyframe",
+        ":common",
+        ":packages",
+        ":vfs",
+        "//third_party:apache_velocity",
+        "//third_party:guava",
+    ],
+)
+
+java_library(
+    name = "server",
+    srcs = glob([
+        "com/google/devtools/build/lib/server/**/*.java",
+    ]),
+    deps = [
+        ":unix",
+        ":vfs",
+        "//third_party:guava",
+    ],
+)
+
+java_library(
+    name = "webstatusserver",
+    srcs = glob([
+        "com/google/devtools/build/lib/webstatusserver/**/*.java",
+    ]),
+    deps = [
+        ":analysis-exec-rules-skyframe",
+        ":buildtool-runtime",
+        ":events",
+        ":options",
+        ":packages",
+        ":vfs",
+        "//src/main/protobuf:proto_test_status",
+        "//third_party:gson",
+        "//third_party:guava",
+    ],
+)
+
+java_library(
     name = "bazel-core",
     srcs = glob(
         [
-            "com/google/devtools/build/docgen/**/*.java",
             "com/google/devtools/build/lib/bazel/**/*.java",
-            "com/google/devtools/build/lib/buildtool/**/*.java",
-            "com/google/devtools/build/lib/runtime/**/*.java",
-            "com/google/devtools/build/lib/server/**/*.java",
-            "com/google/devtools/build/lib/standalone/*.java",
-            "com/google/devtools/build/lib/webstatusserver/**/*.java",
-            "com/google/devtools/build/lib/worker/**",
         ],
         exclude = [
             "com/google/devtools/build/lib/bazel/repository/MavenConnector.java",
@@ -322,6 +387,7 @@
     deps = [
         ":actions",
         ":analysis-exec-rules-skyframe",
+        ":buildtool-runtime",
         ":collect",
         ":common",
         ":concurrent",
@@ -336,7 +402,11 @@
         ":skyframe-base",
         ":unix",
         ":vfs",
+        ":webstatusserver",
         "//src/java_tools/singlejar:zip",
+        "//src/main/java/com/google/devtools/build/lib/sandbox",
+        "//src/main/java/com/google/devtools/build/lib/standalone",
+        "//src/main/java/com/google/devtools/build/lib/worker",
         "//src/main/protobuf:proto_build",
         "//src/main/protobuf:proto_crosstool_config",
         "//src/main/protobuf:proto_extra_actions_base",
@@ -346,7 +416,6 @@
         "//third_party:apache_commons_pool2",
         "//third_party:apache_velocity",
         "//third_party:auto_value",
-        "//third_party:gson",
         "//third_party:guava",
         "//third_party:joda_time",
         "//third_party:jsr305",
@@ -398,7 +467,11 @@
 
 filegroup(
     name = "srcs",
-    srcs = glob(["**"]),
+    srcs = glob(["**"]) + [
+        "//src/main/java/com/google/devtools/build/lib/sandbox:srcs",
+        "//src/main/java/com/google/devtools/build/lib/standalone:srcs",
+        "//src/main/java/com/google/devtools/build/lib/worker:srcs",
+    ],
     visibility = ["//src/test/shell/bazel:__pkg__"],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java
index 318e6ac..958c7ea 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java
@@ -36,6 +36,7 @@
       com.google.devtools.build.lib.bazel.BazelDiffAwarenessModule.class,
       com.google.devtools.build.lib.bazel.BazelRepositoryModule.class,
       com.google.devtools.build.lib.bazel.rules.BazelRulesModule.class,
+      com.google.devtools.build.lib.sandbox.SandboxModule.class,
       com.google.devtools.build.lib.standalone.StandaloneModule.class,
       com.google.devtools.build.lib.runtime.BuildSummaryStatsModule.class,
       com.google.devtools.build.lib.webstatusserver.WebStatusServerModule.class,
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD
new file mode 100644
index 0000000..9b549e9
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD
@@ -0,0 +1,27 @@
+package(
+    default_visibility = [
+        "//src:__subpackages__",
+    ],
+)
+
+java_library(
+    name = "sandbox",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java:actions",
+        "//src/main/java:analysis-exec-rules-skyframe",
+        "//src/main/java:buildtool-runtime",
+        "//src/main/java:common",
+        "//src/main/java:packages",
+        "//src/main/java:shell",
+        "//src/main/java:unix",
+        "//src/main/java:vfs",
+        "//third_party:guava",
+    ],
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/main/java:__pkg__"],
+)
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/LinuxSandboxedStrategy.java b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java
similarity index 99%
rename from src/main/java/com/google/devtools/build/lib/standalone/LinuxSandboxedStrategy.java
rename to src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java
index 81c5692..4f7557c 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/LinuxSandboxedStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java
@@ -11,7 +11,7 @@
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
-package com.google.devtools.build.lib.standalone;
+package com.google.devtools.build.lib.sandbox;
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.ActionExecutionContext;
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/NamespaceSandboxRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/NamespaceSandboxRunner.java
similarity index 99%
rename from src/main/java/com/google/devtools/build/lib/standalone/NamespaceSandboxRunner.java
rename to src/main/java/com/google/devtools/build/lib/sandbox/NamespaceSandboxRunner.java
index 523fb7e..7720b78 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/NamespaceSandboxRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/NamespaceSandboxRunner.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.devtools.build.lib.standalone;
+package com.google.devtools.build.lib.sandbox;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextConsumer.java
similarity index 67%
copy from src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java
copy to src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextConsumer.java
index b975a5e..657fb8f 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextConsumer.java
@@ -1,4 +1,4 @@
-// Copyright 2014 Google Inc. All rights reserved.
+// Copyright 2015 Google Inc. All rights reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -11,20 +11,22 @@
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
-package com.google.devtools.build.lib.standalone;
+package com.google.devtools.build.lib.sandbox;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
 import com.google.devtools.build.lib.actions.ActionContextConsumer;
 import com.google.devtools.build.lib.actions.Executor.ActionContext;
 import com.google.devtools.build.lib.actions.SpawnActionContext;
+import com.google.devtools.build.lib.util.OS;
 
 import java.util.Map;
 
 /**
- * {@link ActionContextConsumer} that requests the action contexts necessary for standalone
+ * {@link ActionContextConsumer} that requests the action contexts necessary for sandboxed
  * execution.
  */
-public class StandaloneContextConsumer implements ActionContextConsumer {
+public class SandboxActionContextConsumer implements ActionContextConsumer {
 
   @Override
   public Map<String, String> getSpawnActionContexts() {
@@ -33,9 +35,13 @@
 
   @Override
   public Map<Class<? extends ActionContext>, String> getActionContexts() {
-    return ImmutableMap.<Class<? extends ActionContext>, String>builder()
-        .put(SpawnActionContext.class, "standalone")
-        .build();
+    Builder<Class<? extends ActionContext>, String> contexts = ImmutableMap.builder();
+
+    if (OS.getCurrent() == OS.LINUX) {
+      contexts.put(SpawnActionContext.class, "sandboxed");
+    }
+
+    return contexts.build();
   }
 
 }
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java
new file mode 100644
index 0000000..69b13af
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java
@@ -0,0 +1,49 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.sandbox;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
+import com.google.devtools.build.lib.actions.ActionContextProvider;
+import com.google.devtools.build.lib.actions.Executor.ActionContext;
+import com.google.devtools.build.lib.buildtool.BuildRequest;
+import com.google.devtools.build.lib.exec.ExecutionOptions;
+import com.google.devtools.build.lib.runtime.BlazeRuntime;
+import com.google.devtools.build.lib.util.OS;
+
+/**
+ * Provides the sandboxed spawn strategy.
+ */
+public class SandboxActionContextProvider extends ActionContextProvider {
+
+  @SuppressWarnings("unchecked")
+  private final ImmutableList<ActionContext> strategies;
+
+  public SandboxActionContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) {
+    boolean verboseFailures = buildRequest.getOptions(ExecutionOptions.class).verboseFailures;
+    Builder<ActionContext> strategies = ImmutableList.builder();
+
+    if (OS.getCurrent() == OS.LINUX) {
+      strategies.add(new LinuxSandboxedStrategy(runtime.getDirectories(), verboseFailures));
+    }
+
+    this.strategies = strategies.build();
+  }
+
+  @Override
+  public Iterable<ActionContext> getActionContexts() {
+    return strategies;
+  }
+
+}
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
new file mode 100644
index 0000000..65d0c15
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
@@ -0,0 +1,54 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+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.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.BlazeRuntime;
+import com.google.devtools.build.lib.runtime.Command;
+
+/**
+ * This module provides the Sandbox spawn strategy.
+ */
+public class SandboxModule extends BlazeModule {
+  private BuildRequest buildRequest;
+  private BlazeRuntime runtime;
+
+  @Override
+  public Iterable<ActionContextProvider> getActionContextProviders() {
+    return ImmutableList.<ActionContextProvider>of(
+        new SandboxActionContextProvider(runtime, buildRequest));
+  }
+
+  @Override
+  public Iterable<ActionContextConsumer> getActionContextConsumers() {
+    return ImmutableList.<ActionContextConsumer>of(new SandboxActionContextConsumer());
+  }
+
+  @Override
+  public void beforeCommand(BlazeRuntime runtime, Command command) {
+    this.runtime = runtime;
+    runtime.getEventBus().register(this);
+  }
+
+  @Subscribe
+  public void buildStarting(BuildStartingEvent event) {
+    buildRequest = event.getRequest();
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/BUILD b/src/main/java/com/google/devtools/build/lib/standalone/BUILD
new file mode 100644
index 0000000..3653e06
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/standalone/BUILD
@@ -0,0 +1,26 @@
+package(
+    default_visibility = [
+        "//src:__subpackages__",
+    ],
+)
+
+java_library(
+    name = "standalone",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java:actions",
+        "//src/main/java:analysis-exec-rules-skyframe",
+        "//src/main/java:buildtool-runtime",
+        "//src/main/java:common",
+        "//src/main/java:packages",
+        "//src/main/java:shell",
+        "//src/main/java:vfs",
+        "//third_party:guava",
+    ],
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/main/java:__pkg__"],
+)
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextConsumer.java
similarity index 94%
rename from src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java
rename to src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextConsumer.java
index b975a5e..4d87f12 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java
+++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextConsumer.java
@@ -24,7 +24,7 @@
  * {@link ActionContextConsumer} that requests the action contexts necessary for standalone
  * execution.
  */
-public class StandaloneContextConsumer implements ActionContextConsumer {
+public class StandaloneActionContextConsumer implements ActionContextConsumer {
 
   @Override
   public Map<String, String> getSpawnActionContexts() {
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java
similarity index 82%
rename from src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java
rename to src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java
index 76c2655..7fe35f6 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java
@@ -32,7 +32,6 @@
 import com.google.devtools.build.lib.rules.test.StandaloneTestStrategy;
 import com.google.devtools.build.lib.rules.test.TestActionContext;
 import com.google.devtools.build.lib.runtime.BlazeRuntime;
-import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 
 import java.io.IOException;
@@ -40,7 +39,7 @@
 /**
  * Provide a standalone, local execution context.
  */
-public class StandaloneContextProvider extends ActionContextProvider {
+public class StandaloneActionContextProvider extends ActionContextProvider {
 
   /**
    * a IncludeScanningContext that does nothing. Since local execution does not need to
@@ -61,15 +60,12 @@
     }
   }
 
-  @SuppressWarnings("unchecked")
-  private final ActionContext standaloneSpawnStrategy;
   private final ImmutableList<ActionContext> strategies;
   private final BlazeRuntime runtime;
 
-  public StandaloneContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) {
+  public StandaloneActionContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) {
     boolean verboseFailures = buildRequest.getOptions(ExecutionOptions.class).verboseFailures;
 
-    standaloneSpawnStrategy = new StandaloneSpawnStrategy(runtime.getExecRoot(), verboseFailures);
     this.runtime = runtime;
 
     TestActionContext testStrategy = new StandaloneTestStrategy(buildRequest,
@@ -77,19 +73,12 @@
         runtime.getWorkspace());
 
     Builder<ActionContext> strategiesBuilder = ImmutableList.builder();
-    // order of strategies passed to builder is significant - when there are many strategies that
+
+    // Order of strategies passed to builder is significant - when there are many strategies that
     // could potentially be used and a spawnActionContext doesn't specify which one it wants, the
     // last one from strategies list will be used
-
-    // put sandboxed strategy first, as we don't want it by default
-    if (OS.getCurrent() == OS.LINUX) {
-      LinuxSandboxedStrategy sandboxedLinuxStrategy =
-          new LinuxSandboxedStrategy(runtime.getDirectories(), verboseFailures);
-      strategiesBuilder.add(sandboxedLinuxStrategy);
-    }
-
     strategiesBuilder.add(
-        standaloneSpawnStrategy,
+        new StandaloneSpawnStrategy(runtime.getExecRoot(), verboseFailures),
         new DummyIncludeScanningContext(),
         new LocalLinkStrategy(),
         testStrategy,
@@ -104,4 +93,5 @@
   public Iterable<ActionContext> getActionContexts() {
     return strategies;
   }
+
 }
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java
index 02d6a3a..32d4f42 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java
+++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java
@@ -27,25 +27,18 @@
  * StandaloneModule provides pluggable functionality for blaze.
  */
 public class StandaloneModule extends BlazeModule {
-  private final ActionContextConsumer actionContextConsumer = new StandaloneContextConsumer();
   private BuildRequest buildRequest;
   private BlazeRuntime runtime;
 
-  /**
-   * Returns the action context provider the module contributes to Blaze, if any.
-   */
   @Override
   public Iterable<ActionContextProvider> getActionContextProviders() {
     return ImmutableList.<ActionContextProvider>of(
-        new StandaloneContextProvider(runtime, buildRequest));
+        new StandaloneActionContextProvider(runtime, buildRequest));
   }
 
-  /**
-   * Returns the action context consumer the module contributes to Blaze, if any.
-   */
   @Override
   public Iterable<ActionContextConsumer> getActionContextConsumers() {
-    return ImmutableList.of(actionContextConsumer);
+    return ImmutableList.<ActionContextConsumer>of(new StandaloneActionContextConsumer());
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/worker/BUILD b/src/main/java/com/google/devtools/build/lib/worker/BUILD
new file mode 100644
index 0000000..aee455c
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/worker/BUILD
@@ -0,0 +1,28 @@
+package(
+    default_visibility = [
+        "//src:__subpackages__",
+    ],
+)
+
+java_library(
+    name = "worker",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java:actions",
+        "//src/main/java:buildtool-runtime",
+        "//src/main/java:common",
+        "//src/main/java:concurrent",
+        "//src/main/java:options",
+        "//src/main/java:vfs",
+        "//src/main/protobuf:proto_worker_protocol",
+        "//third_party:apache_commons_pool2",
+        "//third_party:guava",
+        "//third_party:jsr305",
+    ],
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/main/java:__pkg__"],
+)
diff --git a/src/main/java/com/google/devtools/build/workspace/BUILD b/src/main/java/com/google/devtools/build/workspace/BUILD
index 57d7171..d1021b5 100644
--- a/src/main/java/com/google/devtools/build/workspace/BUILD
+++ b/src/main/java/com/google/devtools/build/workspace/BUILD
@@ -13,6 +13,7 @@
     deps = [
         "//src/main/java:analysis-exec-rules-skyframe",
         "//src/main/java:bazel-core",
+        "//src/main/java:buildtool-runtime",
         "//src/main/java:events",
         "//src/main/java:options",
         "//src/main/java:packages",
diff --git a/src/test/java/BUILD b/src/test/java/BUILD
index 77ea1e8..1ebe65c 100644
--- a/src/test/java/BUILD
+++ b/src/test/java/BUILD
@@ -241,6 +241,7 @@
         "//src/main/java:actions",
         "//src/main/java:analysis-exec-rules-skyframe",
         "//src/main/java:bazel-core",
+        "//src/main/java:buildtool-runtime",
         "//src/main/java:collect",
         "//src/main/java:concurrent",
         "//src/main/java:events",