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);