Tags some more non-serializable classes (for serialization).

PiperOrigin-RevId: 188930446
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index f1833dc..af0b5ed 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -641,6 +641,7 @@
         "//src/main/java/com/google/devtools/build/lib/remote",
         "//src/main/java/com/google/devtools/build/lib/sandbox",
         "//src/main/java/com/google/devtools/build/lib/shell",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
         "//src/main/java/com/google/devtools/build/lib/ssd",
         "//src/main/java/com/google/devtools/build/lib/standalone",
         "//src/main/java/com/google/devtools/build/lib/vfs",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
index f02185b..08b0c6d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.Maps;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.ArrayList;
@@ -30,7 +31,7 @@
  */
 public abstract class ActionLookupValue implements SkyValue {
 
-  private final boolean removeActionsAfterEvaluation;
+  @AutoCodec.VisibleForSerialization protected final boolean removeActionsAfterEvaluation;
 
   public ActionLookupValue(boolean removeActionsAfterEvaluation) {
     this.removeActionsAfterEvaluation = removeActionsAfterEvaluation;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
index ce3957e..3633fd2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
@@ -19,10 +19,10 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
-/**
- * A provider that gives information about the aliases a rule was resolved through.
- */
+/** A provider that gives information about the aliases a rule was resolved through. */
+@AutoCodec
 @Immutable
 public final class AliasProvider implements TransitiveInfoProvider {
   // We don't expect long alias chains, so it's better to have a list instead of a nested set
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/WorkspaceStatusAction.java b/src/main/java/com/google/devtools/build/lib/analysis/WorkspaceStatusAction.java
index ae70deb..547c6c7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/WorkspaceStatusAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/WorkspaceStatusAction.java
@@ -23,6 +23,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactFactory;
 import com.google.devtools.build.lib.actions.ArtifactOwner;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.OptionsUtils;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
@@ -53,9 +54,8 @@
  */
 public abstract class WorkspaceStatusAction extends AbstractAction {
 
-  /**
-   * Options controlling the workspace status command.
-   */
+  /** Options controlling the workspace status command. */
+  @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS)
   public static class Options extends OptionsBase {
     @Option(
       name = "embed_label",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java
index 258c463..a35e884 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java
@@ -16,12 +16,11 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
-
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import java.util.List;
 
-/**
- * A collection of build-info files for both stamped and unstamped modes.
- */
+/** A collection of build-info files for both stamped and unstamped modes. */
+@AutoCodec
 public final class BuildInfoCollection {
   private final ImmutableList<ActionAnalysisMetadata> actions;
   private final ImmutableList<Artifact> stampedBuildInfo;
@@ -29,9 +28,21 @@
 
   public BuildInfoCollection(List<? extends ActionAnalysisMetadata> actions,
       List<Artifact> stampedBuildInfo, List<Artifact> redactedBuildInfo) {
-    this.actions = ImmutableList.copyOf(actions);
-    this.stampedBuildInfo = ImmutableList.copyOf(stampedBuildInfo);
-    this.redactedBuildInfo = ImmutableList.copyOf(redactedBuildInfo);
+    this(
+        ImmutableList.copyOf(actions),
+        ImmutableList.copyOf(stampedBuildInfo),
+        ImmutableList.copyOf(redactedBuildInfo));
+  }
+
+  @AutoCodec.Instantiator
+  @AutoCodec.VisibleForSerialization
+  BuildInfoCollection(
+      ImmutableList<ActionAnalysisMetadata> actions,
+      ImmutableList<Artifact> stampedBuildInfo,
+      ImmutableList<Artifact> redactedBuildInfo) {
+    this.actions = actions;
+    this.stampedBuildInfo = stampedBuildInfo;
+    this.redactedBuildInfo = redactedBuildInfo;
   }
 
   public ImmutableList<ActionAnalysisMetadata> getActions() {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
index c3fc499..bf7d4b1 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -50,6 +50,7 @@
 import com.google.devtools.build.lib.shell.BadExitStatusException;
 import com.google.devtools.build.lib.shell.CommandException;
 import com.google.devtools.build.lib.shell.CommandResult;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.CommandBuilder;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.NetUtil;
@@ -73,18 +74,24 @@
  * invalidate the node representing the workspace status action.
  */
 public class BazelWorkspaceStatusModule extends BlazeModule {
-  private static class BazelWorkspaceStatusAction extends WorkspaceStatusAction {
+  @AutoCodec
+  @AutoCodec.VisibleForSerialization
+  static class BazelWorkspaceStatusAction extends WorkspaceStatusAction {
     private final Artifact stableStatus;
     private final Artifact volatileStatus;
     private final Options options;
     private final String username;
     private final String hostname;
     private final com.google.devtools.build.lib.shell.Command getWorkspaceStatusCommand;
-    private final Map<String, String> clientEnv;
+    private final ImmutableMap<String, String> clientEnv;
 
-    private BazelWorkspaceStatusAction(
+    @SuppressWarnings("unused") // Read by serialization.
+    private final Path workspace;
+
+    @AutoCodec.VisibleForSerialization
+    BazelWorkspaceStatusAction(
         WorkspaceStatusAction.Options options,
-        Map<String, String> clientEnv,
+        ImmutableMap<String, String> clientEnv,
         Path workspace,
         Artifact stableStatus,
         Artifact volatileStatus,
@@ -111,6 +118,7 @@
                   .setWorkingDir(workspace)
                   .useShell(true)
                   .build();
+      this.workspace = workspace;
     }
 
     private String getAdditionalWorkspaceStatus(ActionExecutionContext actionExecutionContext)
@@ -314,8 +322,13 @@
       Artifact volatileArtifact = factory.getConstantMetadataArtifact(
           PathFragment.create("volatile-status.txt"), root, artifactOwner);
 
-      return new BazelWorkspaceStatusAction(options, env.getClientEnv(),
-          env.getDirectories().getWorkspace(), stableArtifact, volatileArtifact, getHostname());
+      return new BazelWorkspaceStatusAction(
+          options,
+          ImmutableMap.copyOf(env.getClientEnv()),
+          env.getDirectories().getWorkspace(),
+          stableArtifact,
+          volatileArtifact,
+          getHostname());
     }
 
     /**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java
index d7a3f4b..c6aef5d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBuildInfoFactory.java
@@ -19,42 +19,47 @@
 import com.google.devtools.build.lib.rules.java.BuildInfoPropertiesTranslator;
 import com.google.devtools.build.lib.rules.java.GenericBuildInfoPropertiesTranslator;
 import com.google.devtools.build.lib.rules.java.JavaBuildInfoFactory;
-
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
 /**
  * BuildInfoFactory for Java.
  */
 public class BazelJavaBuildInfoFactory extends JavaBuildInfoFactory {
-  private static final ImmutableMap<String, String> VOLATILE_KEYS =
-      ImmutableMap.<String, String>builder()
-          .put("build.time", "%BUILD_TIME%")
-          .put("build.timestamp.as.int", "%BUILD_TIMESTAMP%")
-          .put("build.timestamp", "%BUILD_TIMESTAMP%")
-          .build();
+  @AutoCodec @AutoCodec.VisibleForSerialization
+  static final GenericBuildInfoPropertiesTranslator VOLATILE_KEYS =
+      new GenericBuildInfoPropertiesTranslator(
+          ImmutableMap.<String, String>builder()
+              .put("build.time", "%BUILD_TIME%")
+              .put("build.timestamp.as.int", "%BUILD_TIMESTAMP%")
+              .put("build.timestamp", "%BUILD_TIMESTAMP%")
+              .build());
 
-  private static final ImmutableMap<String, String> NONVOLATILE_KEYS =
-      ImmutableMap.of("build.label", "%" + BuildInfo.BUILD_EMBED_LABEL + "|%");
+  @AutoCodec @AutoCodec.VisibleForSerialization
+  static final GenericBuildInfoPropertiesTranslator NONVOLATILE_KEYS =
+      new GenericBuildInfoPropertiesTranslator(
+          ImmutableMap.of("build.label", "%" + BuildInfo.BUILD_EMBED_LABEL + "|%"));
 
-  private static final ImmutableMap<String, String> REDACTED_KEYS =
-      ImmutableMap.<String, String>builder()
-          .put("build.time", "Thu Jan 01 00:00:00 1970 (0)")
-          .put("build.timestamp.as.int", "0")
-          .put("build.timestamp", "Thu Jan 01 00:00:00 1970 (0)")
-          .build();
+  @AutoCodec @AutoCodec.VisibleForSerialization
+  static final GenericBuildInfoPropertiesTranslator REDACTED_KEYS =
+      new GenericBuildInfoPropertiesTranslator(
+          ImmutableMap.<String, String>builder()
+              .put("build.time", "Thu Jan 01 00:00:00 1970 (0)")
+              .put("build.timestamp.as.int", "0")
+              .put("build.timestamp", "Thu Jan 01 00:00:00 1970 (0)")
+              .build());
 
   @Override
   protected BuildInfoPropertiesTranslator createVolatileTranslator() {
-    return new GenericBuildInfoPropertiesTranslator(VOLATILE_KEYS);
+    return VOLATILE_KEYS;
   }
 
   @Override
   protected BuildInfoPropertiesTranslator createNonVolatileTranslator() {
-    return new GenericBuildInfoPropertiesTranslator(NONVOLATILE_KEYS);
+    return NONVOLATILE_KEYS;
   }
 
   @Override
   protected BuildInfoPropertiesTranslator createRedactedTranslator() {
-    return new GenericBuildInfoPropertiesTranslator(REDACTED_KEYS);
+    return REDACTED_KEYS;
   }
-
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
index 439cbd5..c5a55f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
@@ -135,8 +135,6 @@
 @Immutable
 @AutoCodec
 public class FdoSupport {
-  public static final ObjectCodec<FdoSupport> CODEC = new FdoSupport_AutoCodec();
-
   /**
    * The FDO mode we are operating in.
    *
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
index 7938c99..1422cc5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
@@ -35,6 +35,7 @@
  * <p>The eventual plan is to migrate FDO functionality to the execution phase once directory
  * artifacts work better, so this may not be worth it.
  */
+@AutoCodec
 @Immutable
 public class FdoSupportValue implements SkyValue {
   public static final SkyFunctionName SKYFUNCTION = SkyFunctionName.create("FDO_SUPPORT");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java
index 62c4936..a346c26 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesAction.java
@@ -26,20 +26,19 @@
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Key;
 import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.Fingerprint;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Properties;
 
-/**
- * An action that creates a Java properties file containing the build informations.
- */
+/** An action that creates a Java properties file containing the build informations. */
+@AutoCodec
 public class WriteBuildInfoPropertiesAction extends AbstractFileWriteAction {
   private static final String GUID = "19e543c2-3ce4-4aef-80f5-4f8abf4b064f";
 
@@ -123,7 +122,7 @@
    * @param timestampFormatter formats dates printed in the properties file
    */
   public WriteBuildInfoPropertiesAction(
-      Collection<Artifact> inputs,
+      Iterable<Artifact> inputs,
       Artifact primaryOutput,
       BuildInfoPropertiesTranslator keyTranslations,
       boolean includeVolatile,
@@ -135,13 +134,13 @@
     this.includeNonVolatile = includeNonVolatile;
     this.timestampFormatter = timestampFormatter;
 
-    if (!inputs.isEmpty()) {
+    if (!Iterables.isEmpty(inputs)) {
       // With non-empty inputs we should not generate both volatile and non-volatile data
       // in the same properties file.
       Preconditions.checkState(includeVolatile ^ includeNonVolatile);
     }
     Preconditions.checkState(
-        primaryOutput.isConstantMetadata() == (includeVolatile && !inputs.isEmpty()));
+        primaryOutput.isConstantMetadata() == (includeVolatile && !Iterables.isEmpty(inputs)));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
index 9232f7a..fcaa762 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
@@ -14,8 +14,11 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Interner;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Actions.GeneratingActions;
+import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.BasicActionLookupValue;
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection;
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
@@ -24,12 +27,14 @@
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.skyframe.SkyFunctionName;
+import java.util.ArrayList;
 import java.util.Objects;
 
 /**
  * Value that stores {@link BuildInfoCollection}s generated by {@link BuildInfoFactory} instances.
  * These collections are used during analysis (see {@code CachingAnalysisEnvironment}).
  */
+@AutoCodec
 public class BuildInfoCollectionValue extends BasicActionLookupValue {
   private final BuildInfoCollection collection;
 
@@ -41,6 +46,17 @@
     this.collection = collection;
   }
 
+  @AutoCodec.Instantiator
+  @AutoCodec.VisibleForSerialization
+  BuildInfoCollectionValue(
+      ArrayList<ActionAnalysisMetadata> actions,
+      ImmutableMap<Artifact, Integer> generatingActionIndex,
+      BuildInfoCollection collection,
+      boolean removeActionsAfterEvaluation) {
+    super(actions, generatingActionIndex, removeActionsAfterEvaluation);
+    this.collection = collection;
+  }
+
   public BuildInfoCollection getCollection() {
     return collection;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java
index 1f6023d..0796a56 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java
@@ -28,6 +28,7 @@
 /**
  * A value which represents every toolchain known to Bazel and available for toolchain resolution.
  */
+@AutoCodec
 @AutoValue
 public abstract class RegisteredToolchainsValue implements SkyValue {
 
@@ -77,9 +78,10 @@
     }
   }
 
+  @AutoCodec.Instantiator
   public static RegisteredToolchainsValue create(
-      Iterable<DeclaredToolchainInfo> registeredToolchains) {
-    return new AutoValue_RegisteredToolchainsValue(ImmutableList.copyOf(registeredToolchains));
+      ImmutableList<DeclaredToolchainInfo> registeredToolchains) {
+    return new AutoValue_RegisteredToolchainsValue(registeredToolchains);
   }
 
   public abstract ImmutableList<DeclaredToolchainInfo> registeredToolchains();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionValue.java
index de8d329..abaa41f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionValue.java
@@ -30,6 +30,7 @@
  * type. Callers will need to consider all toolchain types that are required and merge the results
  * together appropriately.
  */
+@AutoCodec
 @AutoValue
 public abstract class ToolchainResolutionValue implements SkyValue {
 
@@ -76,6 +77,7 @@
     }
   }
 
+  @AutoCodec.Instantiator
   public static ToolchainResolutionValue create(
       ImmutableMap<ConfiguredTargetKey, Label> availableToolchainLabels) {
     return new AutoValue_ToolchainResolutionValue(availableToolchainLabels);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
index 0a748f9..20ef47d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
@@ -26,19 +26,20 @@
  */
 // TODO(bazel-team): This seems to be superfluous now, but it cannot be removed without making
 // PrecomputedValue public instead of package-private
+@AutoCodec
 public class WorkspaceStatusValue extends BasicActionLookupValue {
   private final Artifact stableArtifact;
   private final Artifact volatileArtifact;
 
   // There should only ever be one BuildInfo value in the graph.
-  public static final BuildInfoKey BUILD_INFO_KEY = BuildInfoKey.INSTANCE;
+  @AutoCodec public static final BuildInfoKey BUILD_INFO_KEY = new BuildInfoKey();
 
   WorkspaceStatusValue(
       Artifact stableArtifact,
       Artifact volatileArtifact,
-      WorkspaceStatusAction action,
-      boolean removeActionAfterEvaluation) {
-    super(action, removeActionAfterEvaluation);
+      WorkspaceStatusAction workspaceStatusAction,
+      boolean removeActionsAfterEvaluation) {
+    super(workspaceStatusAction, removeActionsAfterEvaluation);
     this.stableArtifact = stableArtifact;
     this.volatileArtifact = volatileArtifact;
   }
@@ -51,11 +52,13 @@
     return volatileArtifact;
   }
 
+  @AutoCodec.VisibleForSerialization
+  WorkspaceStatusAction getWorkspaceStatusAction() {
+    return (WorkspaceStatusAction) getAction(0);
+  }
+
   /** {@link SkyKey} for {@link WorkspaceStatusValue}. */
   public static class BuildInfoKey extends ActionLookupKey {
-    @AutoCodec @AutoCodec.VisibleForSerialization
-    static final BuildInfoKey INSTANCE = new BuildInfoKey();
-
     private BuildInfoKey() {}
 
     @Override