Rewrite StandaloneSpawnStrategy to use LocalSpawnRunner

PiperOrigin-RevId: 159221067
diff --git a/src/main/java/com/google/devtools/build/lib/exec/ActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/exec/ActionContextProvider.java
index 2362fcc..bcf7287 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/ActionContextProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/ActionContextProvider.java
@@ -31,7 +31,7 @@
    * <p>These may or may not actually end up in the executor depending on the command line options
    * and other factors influencing how the executor is set up.
    */
-  public abstract Iterable<ActionContext> getActionContexts();
+  public abstract Iterable<? extends ActionContext> getActionContexts();
 
   /**
    * Two-phase initialization. The input file cache and the input prefetcher usually come from a
diff --git a/src/main/java/com/google/devtools/build/lib/exec/FilesetActionContextImpl.java b/src/main/java/com/google/devtools/build/lib/exec/FilesetActionContextImpl.java
index 0be6549..a234e8f 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/FilesetActionContextImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/FilesetActionContextImpl.java
@@ -57,8 +57,8 @@
     }
 
     @Override
-    public Iterable<ActionContext> getActionContexts() {
-      return ImmutableList.<ActionContext>of(impl);
+    public Iterable<? extends ActionContext> getActionContexts() {
+      return ImmutableList.of(impl);
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/exec/SimpleActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/exec/SimpleActionContextProvider.java
index a0f8aae..a459ba5 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/SimpleActionContextProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/SimpleActionContextProvider.java
@@ -28,7 +28,7 @@
   }
 
   @Override
-  public Iterable<ActionContext> getActionContexts() {
+  public Iterable<? extends ActionContext> getActionContexts() {
     return actionContexts;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java b/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java
index ef538a0..dc0fde0 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java
@@ -198,7 +198,10 @@
       FilesetActionContext filesetContext)
           throws IOException {
     return getInputMapping(
-        spawn, artifactExpander, actionInputFileCache, filesetContext.getWorkspaceName());
+        spawn,
+        artifactExpander,
+        actionInputFileCache,
+        filesetContext == null ? null : filesetContext.getWorkspaceName());
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
index 51aeabd..cbbabe4 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
@@ -46,7 +46,6 @@
 import com.google.devtools.build.lib.view.test.TestStatus.TestCase;
 import com.google.devtools.build.lib.view.test.TestStatus.TestResultData;
 import com.google.devtools.build.lib.view.test.TestStatus.TestResultData.Builder;
-import com.google.devtools.common.options.OptionsClassProvider;
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.HashMap;
@@ -80,10 +79,8 @@
   protected final Path tmpDirRoot;
 
   public StandaloneTestStrategy(
-      OptionsClassProvider requestOptions,
-      BinTools binTools,
-      Path tmpDirRoot) {
-    super(requestOptions, binTools);
+      ExecutionOptions executionOptions, BinTools binTools, Path tmpDirRoot) {
+    super(executionOptions, binTools);
     this.tmpDirRoot = tmpDirRoot;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
index 3e860a9..8b0450a 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
@@ -44,7 +44,6 @@
 import com.google.devtools.build.lib.view.test.TestStatus.TestCase;
 import com.google.devtools.common.options.Converters.RangeConverter;
 import com.google.devtools.common.options.EnumConverter;
-import com.google.devtools.common.options.OptionsClassProvider;
 import com.google.devtools.common.options.OptionsParsingException;
 import java.io.Closeable;
 import java.io.IOException;
@@ -137,8 +136,8 @@
   protected final ExecutionOptions executionOptions;
   protected final BinTools binTools;
 
-  public TestStrategy(OptionsClassProvider requestOptionsProvider, BinTools binTools) {
-    this.executionOptions = requestOptionsProvider.getOptions(ExecutionOptions.class);
+  public TestStrategy(ExecutionOptions executionOptions, BinTools binTools) {
+    this.executionOptions = executionOptions;
     this.binTools = binTools;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/BUILD b/src/main/java/com/google/devtools/build/lib/exec/local/BUILD
index 79e5dbf..74f4f7b 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/local/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/exec/local/BUILD
@@ -14,7 +14,6 @@
         "//src/main/java/com/google/devtools/build/lib:io",
         "//src/main/java/com/google/devtools/build/lib:packages-internal",
         "//src/main/java/com/google/devtools/build/lib:process_util",
-        "//src/main/java/com/google/devtools/build/lib:runtime",
         "//src/main/java/com/google/devtools/build/lib:shell",
         "//src/main/java/com/google/devtools/build/lib:util",
         "//src/main/java/com/google/devtools/build/lib:vfs",
diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
index acbb578..5cd191b 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
@@ -36,6 +36,8 @@
 import com.google.devtools.build.lib.shell.CommandException;
 import com.google.devtools.build.lib.shell.CommandResult;
 import com.google.devtools.build.lib.util.NetUtil;
+import com.google.devtools.build.lib.util.OS;
+import com.google.devtools.build.lib.util.OsUtils;
 import com.google.devtools.build.lib.util.Preconditions;
 import com.google.devtools.build.lib.util.io.FileOutErr;
 import com.google.devtools.build.lib.vfs.Path;
@@ -87,13 +89,17 @@
       LocalExecutionOptions localExecutionOptions,
       ResourceManager resourceManager,
       boolean useProcessWrapper,
+      OS localOs,
       String productName,
       LocalEnvProvider localEnvProvider) {
     this.logger = logger;
     this.execRoot = execRoot;
     this.actionInputPrefetcher = Preconditions.checkNotNull(actionInputPrefetcher);
-    this.processWrapper = execRoot.getRelative("_bin/process-wrapper").getPathString();
-    this.localExecutionOptions = localExecutionOptions;
+    this.processWrapper =
+        execRoot
+            .getRelative("_bin/process-wrapper" + OsUtils.executableExtension(localOs))
+            .getPathString();
+    this.localExecutionOptions = Preconditions.checkNotNull(localExecutionOptions);
     this.hostName = NetUtil.findShortHostName();
     this.execCount = execCount;
     this.resourceManager = resourceManager;
@@ -102,6 +108,26 @@
     this.localEnvProvider = localEnvProvider;
   }
 
+  public LocalSpawnRunner(
+      Path execRoot,
+      ActionInputPrefetcher actionInputPrefetcher,
+      LocalExecutionOptions localExecutionOptions,
+      ResourceManager resourceManager,
+      String productName,
+      LocalEnvProvider localEnvProvider) {
+    this(
+        Logger.getLogger(LocalSpawnRunner.class.getName()),
+        new AtomicInteger(),
+        execRoot,
+        actionInputPrefetcher,
+        localExecutionOptions,
+        resourceManager,
+        /*useProcessWrapper=*/OS.getCurrent() != OS.WINDOWS,
+        OS.getCurrent(),
+        productName,
+        localEnvProvider);
+  }
+
   @Override
   public SpawnResult exec(
       Spawn spawn,