Add @AutoCodec to some PatchTransitions.

PiperOrigin-RevId: 187230702
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index 4b44be7..14b7dcc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -49,6 +49,8 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
@@ -776,10 +778,10 @@
     }
   }
 
-  /**
-   * A patch transition that returns a fixed set of options regardless of the input.
-   */
-  private static class FixedTransition implements PatchTransition {
+  /** A patch transition that returns a fixed set of options regardless of the input. */
+  @AutoCodec
+  @VisibleForSerialization
+  static class FixedTransition implements PatchTransition {
     private final BuildOptions toOptions;
 
     FixedTransition(BuildOptions toOptions) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/HostTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/HostTransition.java
index 08fd609..b62ce78 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/HostTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/HostTransition.java
@@ -14,12 +14,12 @@
 package com.google.devtools.build.lib.analysis.config;
 
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
-/**
- * Dynamic transition to the host configuration.
- */
+/** Dynamic transition to the host configuration. */
 public final class HostTransition implements PatchTransition {
-  public static final HostTransition INSTANCE = new HostTransition();
+
+  @AutoCodec public static final HostTransition INSTANCE = new HostTransition();
 
   private HostTransition() {}
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java
index d5581e5..793edaf 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java
@@ -14,12 +14,12 @@
 package com.google.devtools.build.lib.analysis.config.transitions;
 
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
-/**
- * No-op configuration transition.
- */
+/** No-op configuration transition. */
 public final class NoTransition implements PatchTransition {
-  public static final NoTransition INSTANCE = new NoTransition();
+
+  @AutoCodec public static final NoTransition INSTANCE = new NoTransition();
 
   private NoTransition() {}
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NullTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NullTransition.java
index 2edbb9f..0d7156b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NullTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NullTransition.java
@@ -14,13 +14,12 @@
 package com.google.devtools.build.lib.analysis.config.transitions;
 
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
-/**
- * A {@link PatchTransition} to a null configuration.
- */
+/** A {@link PatchTransition} to a null configuration. */
 public class NullTransition implements PatchTransition {
 
-  public static final NullTransition INSTANCE = new NullTransition();
+  @AutoCodec public static final NullTransition INSTANCE = new NullTransition();
 
   private NullTransition() {
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
index 704ead9..a5201d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
@@ -23,6 +23,8 @@
 import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleTransitionFactory;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import java.util.Map;
 
 /**
@@ -34,13 +36,21 @@
 public class ConfigFeatureFlagTransitionFactory implements RuleTransitionFactory {
 
   /** Transition which resets the set of flag-value pairs to the map it was constructed with. */
-  private static final class ConfigFeatureFlagValuesTransition implements PatchTransition {
+  @AutoCodec
+  @VisibleForSerialization
+  static final class ConfigFeatureFlagValuesTransition implements PatchTransition {
     private final ImmutableSortedMap<Label, String> flagValues;
     private final int cachedHashCode;
 
     public ConfigFeatureFlagValuesTransition(Map<Label, String> flagValues) {
+      this(ImmutableSortedMap.copyOf(flagValues), flagValues.hashCode());
+    }
+
+    @AutoCodec.Instantiator
+    ConfigFeatureFlagValuesTransition(
+        ImmutableSortedMap<Label, String> flagValues, int cachedHashCode) {
       this.flagValues = ImmutableSortedMap.copyOf(flagValues);
-      this.cachedHashCode = this.flagValues.hashCode();
+      this.cachedHashCode = cachedHashCode;
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java
index 3958974..a13f319 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java
@@ -19,10 +19,11 @@
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.rules.cpp.CppOptions;
 import com.google.devtools.build.lib.rules.cpp.CppOptions.LipoConfigurationState;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
 /**
- * Configuration transition that creates the "artifact owner" configuration from the LIPO
- * context collector configuration.
+ * Configuration transition that creates the "artifact owner" configuration from the LIPO context
+ * collector configuration.
  *
  * <p>The context collector creates C++ output artifacts but doesn't create the actions that
  * generate those artifacts (this is what {@link BuildConfiguration#isActionsEnabled()} means).
@@ -33,6 +34,8 @@
  * <p>This is a no-op for all configurations but the context collector.
  */
 public class ContextCollectorOwnerTransition implements PatchTransition {
+
+  @AutoCodec
   public static final ContextCollectorOwnerTransition INSTANCE =
       new ContextCollectorOwnerTransition();
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/DisableLipoTransition.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/DisableLipoTransition.java
index 3284a1b..111207e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/DisableLipoTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/DisableLipoTransition.java
@@ -17,17 +17,17 @@
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.rules.cpp.CppOptions;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode;
 
 /**
  * Configuration transition that turns off LIPO/FDO settings.
  *
- * <p>Has no effect on non-LIPO-enabled configurations or the LIPO context collector
- * configuration.
- *
+ * <p>Has no effect on non-LIPO-enabled configurations or the LIPO context collector configuration.
  */
 public final class DisableLipoTransition implements PatchTransition {
-  public static final DisableLipoTransition INSTANCE = new DisableLipoTransition();
+
+  @AutoCodec public static final DisableLipoTransition INSTANCE = new DisableLipoTransition();
 
   private DisableLipoTransition() {}
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java
index 0d1295c..883d59c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java
@@ -20,6 +20,8 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.rules.cpp.CppOptions;
 import com.google.devtools.build.lib.rules.cpp.CppOptions.LipoConfigurationState;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import java.util.Objects;
 
 /**
@@ -27,6 +29,7 @@
  * disabled.
  */
 @Immutable
+@AutoCodec
 public class EnableLipoTransition implements PatchTransition {
   private final Label ruleLabel;
   private final int hashCode;
@@ -36,8 +39,14 @@
    * restricting this transition to the LIPO context binary.
    */
   public EnableLipoTransition(Label ruleLabel) {
+    this(ruleLabel, Objects.hashCode(ruleLabel));
+  }
+
+  @VisibleForSerialization
+  @AutoCodec.Instantiator
+  EnableLipoTransition(Label ruleLabel, int hashCode) {
     this.ruleLabel = ruleLabel;
-    this.hashCode = Objects.hashCode(ruleLabel);
+    this.hashCode = hashCode;
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonVersionTransition.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonVersionTransition.java
index cc0eb47..01ce26a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonVersionTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonVersionTransition.java
@@ -16,11 +16,13 @@
 
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 
 /**
- * A configuration transition that sets the Python version by setting
- * {@link PythonOptions#forcePython}.
+ * A configuration transition that sets the Python version by setting {@link
+ * PythonOptions#forcePython}.
  */
+@AutoCodec
 public class PythonVersionTransition implements PatchTransition {
   private final PythonVersion defaultVersion;
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java b/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java
index 2dcad7e..ac9629c 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java
@@ -25,6 +25,7 @@
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 
 /**
  * Grab bag file for test configuration fragments and fragment factories.
@@ -34,7 +35,9 @@
    * A {@link PatchTransition} that appends a given value to {@link
    * BuildConfiguration.Options#hostCpu}.
    */
-  private static class HostCpuTransition implements PatchTransition {
+  @AutoCodec
+  @VisibleForSerialization
+  static class HostCpuTransition implements PatchTransition {
 
     private final String patchMessage;