Add @AutoCodec to SpawnAction. Refactor the SpawnAction API for extra actions so that it is non-generic and does not persist a GeneratedExtension, which is hard to serialize.
PiperOrigin-RevId: 186627440
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupplierImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupplierImpl.java
index c609d3d..89c6741 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupplierImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupplierImpl.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.BaseSpawn;
import com.google.devtools.build.lib.actions.RunfilesSupplier;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.util.Map;
@@ -28,6 +29,7 @@
/** {@link RunfilesSupplier} implementation wrapping a single {@link Runfiles} directory mapping. */
// TODO(bazel-team): Consider renaming to SingleRunfilesSupplierImpl.
+@AutoCodec
public class RunfilesSupplierImpl implements RunfilesSupplier {
private final PathFragment runfilesDir;
private final Runfiles runfiles;
@@ -60,10 +62,9 @@
* @param runfiles the runfiles for runilesDir.
* @param manifest runfiles' associated runfiles manifest artifact, if present.
*/
+ @AutoCodec.Instantiator
public RunfilesSupplierImpl(
- PathFragment runfilesDir,
- Runfiles runfiles,
- @Nullable Artifact manifest) {
+ PathFragment runfilesDir, Runfiles runfiles, @Nullable Artifact manifest) {
Preconditions.checkArgument(!runfilesDir.isAbsolute());
this.runfilesDir = Preconditions.checkNotNull(runfilesDir);
this.runfiles = Preconditions.checkNotNull(runfiles);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index badf8ef..23005b7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -60,6 +60,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LazyString;
@@ -68,7 +69,6 @@
import com.google.errorprone.annotations.CompileTimeConstant;
import com.google.errorprone.annotations.FormatMethod;
import com.google.errorprone.annotations.FormatString;
-import com.google.protobuf.GeneratedMessage.GeneratedExtension;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
@@ -79,22 +79,12 @@
import javax.annotation.Nullable;
/** An Action representing an arbitrary subprocess to be forked and exec'd. */
+@AutoCodec
public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifier, CommandAction {
-
- /** Sets extensions on ExtraActionInfo **/
- protected static class ExtraActionInfoSupplier<T> {
- private final GeneratedExtension<ExtraActionInfo, T> extension;
- private final T value;
-
- protected ExtraActionInfoSupplier(GeneratedExtension<ExtraActionInfo, T> extension, T value) {
- this.extension = extension;
- this.value = value;
- }
-
- void extend(ExtraActionInfo.Builder builder) {
- builder.setExtension(extension, value);
- }
+ /** Sets extensions on {@link ExtraActionInfo}. */
+ public interface ExtraActionInfoSupplier {
+ void extend(ExtraActionInfo.Builder builder);
}
private static final String GUID = "ebd6fce3-093e-45ee-adb6-bf513b602f0d";
@@ -109,7 +99,7 @@
private final ResourceSet resourceSet;
private final ImmutableMap<String, String> executionInfo;
- private final ExtraActionInfoSupplier<?> extraActionInfoSupplier;
+ private final ExtraActionInfoSupplier extraActionInfoSupplier;
/**
* Constructs a SpawnAction using direct initialization arguments.
@@ -131,6 +121,7 @@
* @param progressMessage the message printed during the progression of the build.
* @param mnemonic the mnemonic that is reported in the master log.
*/
+ @AutoCodec.Instantiator
public SpawnAction(
ActionOwner owner,
Iterable<Artifact> tools,
@@ -197,7 +188,7 @@
RunfilesSupplier runfilesSupplier,
String mnemonic,
boolean executeUnconditionally,
- ExtraActionInfoSupplier<?> extraActionInfoSupplier) {
+ ExtraActionInfoSupplier extraActionInfoSupplier) {
super(owner, tools, inputs, runfilesSupplier, outputs, env);
this.resourceSet = resourceSet;
this.executionInfo = executionInfo;
@@ -611,7 +602,7 @@
private CharSequence progressMessage;
private String mnemonic = "Unknown";
- protected ExtraActionInfoSupplier<?> extraActionInfoSupplier = null;
+ protected ExtraActionInfoSupplier extraActionInfoSupplier = null;
private boolean disableSandboxing = false;
/**
@@ -1346,9 +1337,8 @@
return this;
}
- public <T> Builder setExtraActionInfo(
- GeneratedExtension<ExtraActionInfo, T> extension, T value) {
- this.extraActionInfoSupplier = new ExtraActionInfoSupplier<>(extension, value);
+ public <T> Builder setExtraActionInfo(ExtraActionInfoSupplier extraActionInfoSupplier) {
+ this.extraActionInfoSupplier = extraActionInfoSupplier;
return this;
}
@@ -1362,7 +1352,8 @@
* Command line implementation that optimises for containing executable args, command lines, and
* command lines spilled to param files.
*/
- private static class SpawnActionCommandLine extends CommandLine {
+ @AutoCodec
+ static class SpawnActionCommandLine extends CommandLine {
private final Object[] values;
SpawnActionCommandLine(Object[] values) {