Implement a Starlark-specific SpawnAction subclass.
This refactoring will help isolate Starlark specific implementation without impacting other classes derived from SpawnAction.
RELNOTES:
PiperOrigin-RevId: 242645209
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java
new file mode 100644
index 0000000..d620d58
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java
@@ -0,0 +1,131 @@
+// Copyright 2019 The Bazel Authors. 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.analysis.actions;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.actions.ActionEnvironment;
+import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.CommandLines;
+import com.google.devtools.build.lib.actions.CommandLines.CommandLineLimits;
+import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.actions.RunfilesSupplier;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+
+/**
+ * A Starlark specific SpawnAction.
+ *
+ * <p>Note: current implementation is empty: StarlarkAction is equivalent to SpawnAction. This
+ * refactoring will help isolate Starlark specific implementation without impacting other classes
+ * derived from SpawnAction.
+ */
+public final class StarlarkAction extends SpawnAction {
+
+ /**
+ * Constructs a StarlarkAction using direct initialization arguments.
+ *
+ * <p>All collections provided must not be subsequently modified.
+ *
+ * @param owner the owner of the Action
+ * @param tools the set of files comprising the tool that does the work (e.g. compiler). This is a
+ * subset of "inputs" and is only used by the WorkerSpawnStrategy
+ * @param inputs the set of all files potentially read by this action; must not be subsequently
+ * modified
+ * @param outputs the set of all files written by this action; must not be subsequently modified.
+ * @param primaryOutput the primary output of this action
+ * @param resourceSet the resources consumed by executing this Action
+ * @param commandLines the command lines to execute. This includes the main argv vector and any
+ * param file-backed command lines.
+ * @param commandLineLimits the command line limits, from the build configuration
+ * @param isShellCommand Whether the command line represents a shell command with the given shell
+ * executable. This is used to give better error messages.
+ * @param env the action's environment
+ * @param executionInfo out-of-band information for scheduling the spawn
+ * @param progressMessage the message printed during the progression of the build
+ * @param runfilesSupplier {@link RunfilesSupplier}s describing the runfiles for the action
+ * @param mnemonic the mnemonic that is reported in the master log
+ */
+ public StarlarkAction(
+ ActionOwner owner,
+ Iterable<Artifact> tools,
+ Iterable<Artifact> inputs,
+ Iterable<Artifact> outputs,
+ Artifact primaryOutput,
+ ResourceSet resourceSet,
+ CommandLines commandLines,
+ CommandLineLimits commandLineLimits,
+ boolean isShellCommand,
+ ActionEnvironment env,
+ ImmutableMap<String, String> executionInfo,
+ CharSequence progressMessage,
+ RunfilesSupplier runfilesSupplier,
+ String mnemonic) {
+ super(
+ owner,
+ tools,
+ inputs,
+ outputs,
+ primaryOutput,
+ resourceSet,
+ commandLines,
+ commandLineLimits,
+ isShellCommand,
+ env,
+ executionInfo,
+ progressMessage,
+ runfilesSupplier,
+ mnemonic,
+ /* executeUnconditionally */ false,
+ /* extraActionInfoSupplier */ null);
+ }
+
+ /** Builder class to construct {@link StarlarkAction} instances. */
+ public static class Builder extends SpawnAction.Builder {
+
+ /** Creates a SpawnAction. */
+ @Override
+ protected SpawnAction createSpawnAction(
+ ActionOwner owner,
+ NestedSet<Artifact> tools,
+ NestedSet<Artifact> inputsAndTools,
+ ImmutableList<Artifact> outputs,
+ Artifact primaryOutput,
+ ResourceSet resourceSet,
+ CommandLines commandLines,
+ CommandLineLimits commandLineLimits,
+ boolean isShellCommand,
+ ActionEnvironment env,
+ ImmutableMap<String, String> executionInfo,
+ CharSequence progressMessage,
+ RunfilesSupplier runfilesSupplier,
+ String mnemonic) {
+ return new StarlarkAction(
+ owner,
+ tools,
+ inputsAndTools,
+ outputs,
+ primaryOutput,
+ resourceSet,
+ commandLines,
+ commandLineLimits,
+ isShellCommand,
+ env,
+ executionInfo,
+ progressMessage,
+ runfilesSupplier,
+ mnemonic);
+ }
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index 01e0da3..ca701c9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -43,6 +43,7 @@
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
+import com.google.devtools.build.lib.analysis.actions.StarlarkAction;
import com.google.devtools.build.lib.analysis.actions.Substitution;
import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction;
import com.google.devtools.build.lib.analysis.skylark.SkylarkCustomCommandLine.ScalarArg;
@@ -225,7 +226,7 @@
Location location)
throws EvalException {
context.checkMutable("actions.run");
- SpawnAction.Builder builder = new SpawnAction.Builder();
+ StarlarkAction.Builder builder = new StarlarkAction.Builder();
SkylarkList argumentsList = ((SkylarkList) arguments);
buildCommandLine(builder, argumentsList);
@@ -245,7 +246,7 @@
// Should have been verified by Starlark before this function is called
throw new IllegalStateException();
}
- registerSpawnAction(
+ registerStarlarkAction(
outputs,
inputs,
toolsUnchecked,
@@ -307,7 +308,7 @@
context.checkMutable("actions.run_shell");
SkylarkList argumentList = (SkylarkList) arguments;
- SpawnAction.Builder builder = new SpawnAction.Builder();
+ StarlarkAction.Builder builder = new StarlarkAction.Builder();
buildCommandLine(builder, argumentList);
if (commandUnchecked instanceof String) {
@@ -351,7 +352,7 @@
// arg1 and arg2 will be $1 and $2, as a user expects.
builder.addExecutableArguments("");
}
- registerSpawnAction(
+ registerStarlarkAction(
outputs,
inputs,
toolsUnchecked,
@@ -404,7 +405,7 @@
*
* <p>{@code builder} should have either executable or a command set.
*/
- private void registerSpawnAction(
+ private void registerStarlarkAction(
SkylarkList outputs,
Object inputs,
Object toolsUnchecked,
@@ -415,7 +416,7 @@
Object executionRequirementsUnchecked,
Object inputManifestsUnchecked,
Location location,
- SpawnAction.Builder builder)
+ StarlarkAction.Builder builder)
throws EvalException {
Iterable<Artifact> inputArtifacts;
if (inputs instanceof SkylarkList) {