Rename Transition to ConfigurationTransition.

PiperOrigin-RevId: 183859414
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 0b27d13..a3835d8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -45,8 +45,8 @@
 import com.google.devtools.build.lib.analysis.config.ConfigurationResolver;
 import com.google.devtools.build.lib.analysis.config.FragmentClassSet;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.analysis.constraints.TopLevelConstraintSemantics;
 import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory;
 import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory.CoverageReportActionsWrapper;
@@ -1092,7 +1092,8 @@
     return result;
   }
 
-  private Transition getTopLevelTransitionForTarget(Label label, ExtendedEventHandler handler) {
+  private ConfigurationTransition getTopLevelTransitionForTarget(Label label,
+      ExtendedEventHandler handler) {
     Rule rule;
     try {
       rule = skyframeExecutor
@@ -1114,7 +1115,7 @@
     if (factory == null) {
       return NoTransition.INSTANCE;
     }
-    Transition transition = factory.buildTransitionFor(rule);
+    ConfigurationTransition transition = factory.buildTransitionFor(rule);
     return (transition == null) ? NoTransition.INSTANCE : transition;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
index 318d4f5..5ed5883 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
@@ -16,7 +16,7 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.AspectDescriptor;
 import java.util.Map;
@@ -103,7 +103,7 @@
    * Creates a new {@link Dependency} with the given transition and aspects.
    */
   public static Dependency withTransitionAndAspects(
-      Label label, Transition transition, AspectCollection aspects) {
+      Label label, ConfigurationTransition transition, AspectCollection aspects) {
     return new ConfigurationTransitionDependency(label, transition, aspects);
   }
 
@@ -141,7 +141,7 @@
    *
    * @throws IllegalStateException if {@link #hasExplicitConfiguration} returns true.
    */
-  public abstract Transition getTransition();
+  public abstract ConfigurationTransition getTransition();
 
   /**
    * Returns the set of aspects which should be evaluated and combined with the configured target
@@ -179,7 +179,7 @@
     }
 
     @Override
-    public Transition getTransition() {
+    public ConfigurationTransition getTransition() {
       throw new IllegalStateException(
           "This dependency has an explicit configuration, not a transition.");
     }
@@ -243,7 +243,7 @@
     }
 
     @Override
-    public Transition getTransition() {
+    public ConfigurationTransition getTransition() {
       throw new IllegalStateException(
           "This dependency has an explicit configuration, not a transition.");
     }
@@ -287,11 +287,11 @@
    * Implementation of a dependency with a given configuration transition.
    */
   private static final class ConfigurationTransitionDependency extends Dependency {
-    private final Transition transition;
+    private final ConfigurationTransition transition;
     private final AspectCollection aspects;
 
     public ConfigurationTransitionDependency(
-        Label label, Transition transition, AspectCollection aspects) {
+        Label label, ConfigurationTransition transition, AspectCollection aspects) {
       super(label);
       this.transition = Preconditions.checkNotNull(transition);
       this.aspects = Preconditions.checkNotNull(aspects);
@@ -309,7 +309,7 @@
     }
 
     @Override
-    public Transition getTransition() {
+    public ConfigurationTransition getTransition() {
       return transition;
     }
 
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 9290168..4b44be7 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
@@ -26,10 +26,10 @@
 import com.google.devtools.build.lib.analysis.config.HostTransition;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
 import com.google.devtools.build.lib.analysis.config.TransitionResolver;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NullTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.events.Location;
@@ -718,7 +718,7 @@
       if (toTarget == null) {
         return; // Skip this round: we still need to Skyframe-evaluate the dep's target.
       }
-      Transition transition = TransitionResolver.evaluateTransition(
+      ConfigurationTransition transition = TransitionResolver.evaluateTransition(
           ruleConfig, rule, attributeAndOwner.attribute, toTarget, attributeMap);
       outgoingEdges.put(
           attributeAndOwner.attribute,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 1fac30b..ff93d76 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -47,10 +47,10 @@
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
 import com.google.devtools.build.lib.analysis.config.FragmentCollection;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
 import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
@@ -399,13 +399,13 @@
    * Returns a configuration fragment for this this target.
    */
   @Nullable
-  public <T extends Fragment> T getFragment(Class<T> fragment, Transition transition) {
+  public <T extends Fragment> T getFragment(Class<T> fragment, ConfigurationTransition transition) {
     return getFragment(fragment, fragment.getSimpleName(), "", transition);
   }
 
   @Nullable
   protected <T extends Fragment> T getFragment(Class<T> fragment, String name,
-      String additionalErrorMessage, Transition transition) {
+      String additionalErrorMessage, ConfigurationTransition transition) {
     // TODO(bazel-team): The fragments can also be accessed directly through BuildConfiguration.
     // Can we lock that down somehow?
     Preconditions.checkArgument(isLegalFragment(fragment, transition),
@@ -423,7 +423,7 @@
   }
 
   @Nullable
-  public Fragment getSkylarkFragment(String name, Transition transition) {
+  public Fragment getSkylarkFragment(String name, ConfigurationTransition transition) {
     Class<? extends Fragment> fragmentClass =
         getConfiguration(transition).getSkylarkFragmentByName(name);
     if (fragmentClass == null) {
@@ -437,12 +437,12 @@
         transition);
   }
 
-  public ImmutableCollection<String> getSkylarkFragmentNames(Transition transition) {
+  public ImmutableCollection<String> getSkylarkFragmentNames(ConfigurationTransition transition) {
     return getConfiguration(transition).getSkylarkFragmentNames();
   }
 
   public <T extends Fragment> boolean isLegalFragment(
-      Class<T> fragment, Transition transition) {
+      Class<T> fragment, ConfigurationTransition transition) {
     return fragment == universalFragment
         || fragment == PlatformConfiguration.class
         || configurationFragmentPolicy.isLegalConfigurationFragment(fragment, transition);
@@ -453,7 +453,7 @@
     return isLegalFragment(fragment, NoTransition.INSTANCE);
   }
 
-  protected BuildConfiguration getConfiguration(Transition transition) {
+  protected BuildConfiguration getConfiguration(ConfigurationTransition transition) {
     return transition.isHostTransition() ? hostConfiguration : getConfiguration();
   }
 
@@ -1066,7 +1066,7 @@
       throw new IllegalStateException(getRuleClassNameForLogging() + " attribute " + attributeName
         + " is not a label type attribute");
     }
-    Transition transition = attributeDefinition.getConfigurationTransition();
+    ConfigurationTransition transition = attributeDefinition.getConfigurationTransition();
     if (mode == Mode.HOST) {
       if (!(transition instanceof PatchTransition)) {
         throw new IllegalStateException(getRule().getLocation() + ": "
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
index f5f489f..8f6d2b5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
@@ -16,8 +16,8 @@
 package com.google.devtools.build.lib.analysis.config;
 
 import com.google.devtools.build.lib.analysis.config.transitions.ComposingPatchTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleTransitionFactory;
 
@@ -39,7 +39,7 @@
   }
 
   @Override
-  public Transition buildTransitionFor(Rule rule) {
+  public ConfigurationTransition buildTransitionFor(Rule rule) {
     PatchTransition transition1 = (PatchTransition) rtf1.buildTransitionFor(rule);
     PatchTransition transition2 = (PatchTransition) rtf2.buildTransitionFor(rule);
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
index 57cf02b..fd0a933 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
@@ -26,10 +26,10 @@
 import com.google.common.collect.Sets;
 import com.google.devtools.build.lib.analysis.Dependency;
 import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety;
 import com.google.devtools.build.lib.events.Event;
@@ -182,7 +182,7 @@
       }
 
       boolean sameFragments = depFragments.equals(ctgFragments.fragmentClasses());
-      Transition transition = dep.getTransition();
+      ConfigurationTransition transition = dep.getTransition();
 
       if (sameFragments) {
         if (transition == NoTransition.INSTANCE) {
@@ -299,11 +299,11 @@
     // Treat this as immutable. The only reason this isn't an ImmutableSet is because it
     // gets bound to a NestedSet.toSet() reference, which returns a Set interface.
     final Set<Class<? extends BuildConfiguration.Fragment>> fragments;
-    final Transition transition;
+    final ConfigurationTransition transition;
     private final int hashCode;
 
     FragmentsAndTransition(Set<Class<? extends BuildConfiguration.Fragment>> fragments,
-        Transition transition) {
+        ConfigurationTransition transition) {
       this.fragments = fragments;
       this.transition = transition;
       hashCode = Objects.hash(this.fragments, this.transition);
@@ -415,7 +415,7 @@
    */
   @VisibleForTesting
   public static List<BuildOptions> applyTransition(BuildOptions fromOptions,
-      Transition transition,
+      ConfigurationTransition transition,
       Iterable<Class<? extends BuildConfiguration.Fragment>> requiredFragments,
       RuleClassProvider ruleClassProvider, boolean trimResults) {
     List<BuildOptions> result;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
index d11e3bd..bd053f4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java
@@ -16,7 +16,7 @@
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableCollection;
 import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -39,9 +39,9 @@
     + "(see <a href=\"../rules.md#fragments\">here</a>).")
 public class FragmentCollection implements ClassObject {
   private final RuleContext ruleContext;
-  private final Transition transition;
+  private final ConfigurationTransition transition;
 
-  public FragmentCollection(RuleContext ruleContext, Transition transition) {
+  public FragmentCollection(RuleContext ruleContext, ConfigurationTransition transition) {
     this.ruleContext = ruleContext;
     this.transition = transition;
   }
@@ -70,7 +70,7 @@
     return String.format("'%s'", Joiner.on("', '").join(getFieldNames()));
   }
 
-  public static String getConfigurationName(Transition config) {
+  public static String getConfigurationName(ConfigurationTransition config) {
     return config.isHostTransition() ? "host" : "target";
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
index 6287e74..b78fceb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
@@ -18,11 +18,11 @@
 import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
 import com.google.devtools.build.lib.analysis.config.transitions.ComposingSplitTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NullTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
 import com.google.devtools.build.lib.packages.InputFile;
@@ -32,7 +32,7 @@
 import com.google.devtools.build.lib.packages.Target;
 
 /**
- * Tool for evaluating which {@link Transition}(s) should be applied to given targets.
+ * Tool for evaluating which {@link ConfigurationTransition}(s) should be applied to given targets.
  *
  * <p>For the work of turning these transitions into actual configurations, see {@link
  * ConfigurationResolver}.
@@ -55,8 +55,12 @@
    * @return the child's configuration, expressed as a diff from the parent's configuration. This
    *     is either a {@link PatchTransition} or {@link SplitTransition}.
    */
-  public static Transition evaluateTransition(BuildConfiguration fromConfig, final Rule fromRule,
-      final Attribute attribute, final Target toTarget, ConfiguredAttributeMapper attributeMap) {
+  public static ConfigurationTransition evaluateTransition(
+      BuildConfiguration fromConfig,
+      final Rule fromRule,
+      final Attribute attribute,
+      final Target toTarget,
+      ConfiguredAttributeMapper attributeMap) {
 
     // I. Input files and package groups have no configurations. We don't want to duplicate them.
     if (usesNullConfiguration(toTarget)) {
@@ -89,13 +93,14 @@
     // The current transition to apply. When multiple transitions are requested, this is a
     // ComposingSplitTransition, which encapsulates them into a single object so calling code
     // doesn't need special logic for combinations.
-    Transition currentTransition = NoTransition.INSTANCE;
+    ConfigurationTransition currentTransition = NoTransition.INSTANCE;
 
     // Apply the parent rule's outgoing transition if it has one.
     RuleTransitionFactory transitionFactory =
         fromRule.getRuleClassObject().getOutgoingTransitionFactory();
     if (transitionFactory != null) {
-      Transition transition = transitionFactory.buildTransitionFor(toTarget.getAssociatedRule());
+      ConfigurationTransition transition =
+          transitionFactory.buildTransitionFor(toTarget.getAssociatedRule());
       if (transition != null) {
         currentTransition = composeTransitions(currentTransition, transition);
       }
@@ -121,12 +126,13 @@
    * Same as evaluateTransition except does not check for transitions coming from parents and
    * enables support for rule-triggered top-level configuration hooks.
    */
-  public static Transition evaluateTopLevelTransition(TargetAndConfiguration targetAndConfig) {
+  public static ConfigurationTransition evaluateTopLevelTransition(
+      TargetAndConfiguration targetAndConfig) {
     Target target = targetAndConfig.getTarget();
     BuildConfiguration fromConfig = targetAndConfig.getConfiguration();
 
     // Top-level transitions (chosen by configuration fragments):
-    Transition topLevelTransition = fromConfig.topLevelConfigurationHook(target);
+    ConfigurationTransition topLevelTransition = fromConfig.topLevelConfigurationHook(target);
     if (topLevelTransition == null) {
       topLevelTransition = NoTransition.INSTANCE;
     }
@@ -150,7 +156,8 @@
    * Composes two transitions together efficiently.
    */
   @VisibleForTesting
-  public static Transition composeTransitions(Transition transition1, Transition transition2) {
+  public static ConfigurationTransition composeTransitions(ConfigurationTransition transition1,
+      ConfigurationTransition transition2) {
     if (isFinal(transition1) || transition2 == NoTransition.INSTANCE) {
       return transition1;
     } else if (isFinal(transition2) || transition1 == NoTransition.INSTANCE) {
@@ -168,7 +175,7 @@
    * Returns true if once the given transition is applied to a dep no followup transitions should
    * be composed after it.
    */
-  private static boolean isFinal(Transition transition) {
+  private static boolean isFinal(ConfigurationTransition transition) {
     return (transition == NullTransition.INSTANCE
         || transition == HostTransition.INSTANCE);
   }
@@ -176,7 +183,8 @@
   /**
    * Applies the given split and composes it after an existing transition.
    */
-  private static Transition split(Transition currentTransition, SplitTransition split) {
+  private static ConfigurationTransition split(ConfigurationTransition currentTransition,
+      SplitTransition split) {
     Preconditions.checkState(currentTransition != NullTransition.INSTANCE,
         "cannot apply splits after null transitions (null transitions are expected to be final)");
     Preconditions.checkState(currentTransition != HostTransition.INSTANCE,
@@ -190,7 +198,8 @@
    * @param currentTransition a pre-existing transition to be composed with
    * @param toTarget rule to examine for transitions
    */
-  private static Transition applyRuleTransition(Transition currentTransition, Target toTarget) {
+  private static ConfigurationTransition applyRuleTransition(
+      ConfigurationTransition currentTransition, Target toTarget) {
     if (isFinal(currentTransition)) {
       return currentTransition;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java
index d36968c..1bcbebc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java
@@ -34,14 +34,15 @@
  * captures all possible combinations.
  */
 public class ComposingSplitTransition implements SplitTransition {
-  private Transition transition1;
-  private Transition transition2;
+  private ConfigurationTransition transition1;
+  private ConfigurationTransition transition2;
 
   /**
    * Creates a {@link ComposingSplitTransition} that applies the sequence:
    * {@code fromOptions -> transition1 -> transition2 -> toOptions  }.
    */
-  public ComposingSplitTransition(Transition transition1, Transition transition2) {
+  public ComposingSplitTransition(ConfigurationTransition transition1,
+      ConfigurationTransition transition2) {
     this.transition1 = verifySupported(transition1);
     this.transition2 = verifySupported(transition2);
   }
@@ -59,7 +60,7 @@
    * Verifies support for the given transition type. Throws an {@link IllegalArgumentException} if
    * unsupported.
    */
-  private Transition verifySupported(Transition transition) {
+  private ConfigurationTransition verifySupported(ConfigurationTransition transition) {
     Preconditions.checkArgument(transition instanceof PatchTransition
         || transition instanceof SplitTransition);
     return transition;
@@ -69,7 +70,7 @@
    * Applies the given transition over the given {@link BuildOptions}, returns the result.
    */
   // TODO(gregce): move this somewhere more general. This isn't intrinsic to composed splits.
-  static List<BuildOptions> apply(BuildOptions fromOptions, Transition transition) {
+  static List<BuildOptions> apply(BuildOptions fromOptions, ConfigurationTransition transition) {
     if (transition instanceof PatchTransition) {
       return ImmutableList.<BuildOptions>of(((PatchTransition) transition).apply(fromOptions));
     } else if (transition instanceof SplitTransition) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java
similarity index 95%
rename from src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java
rename to src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java
index cf647fd..7fb3a66 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/Transition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransition.java
@@ -17,7 +17,7 @@
 /**
  * A configuration transition.
  */
-public interface Transition {
+public interface ConfigurationTransition {
   /**
    * Does this transition switch to a "host" configuration?
    */
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/PatchTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/PatchTransition.java
index 3fd096e..451148e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/PatchTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/PatchTransition.java
@@ -48,7 +48,7 @@
  * {@link com.google.devtools.build.lib.analysis.config.BuildOptions} doesn't currently
  * enforce immutability. So care must be taken not to modify the wrong instance.
  */
-public interface PatchTransition extends Transition {
+public interface PatchTransition extends ConfigurationTransition {
 
   /**
    * Applies the transition.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
index dd1cea1..05ecfaa 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
@@ -25,7 +25,7 @@
  */
 @ThreadSafety.Immutable
 @FunctionalInterface
-public interface SplitTransition extends Transition {
+public interface SplitTransition extends ConfigurationTransition {
   /**
    * Return the list of {@code BuildOptions} after splitting; empty if not applicable.
    */
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index da5dcc5f..3036a68 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -22,7 +22,7 @@
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.SetMultimap;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
@@ -428,7 +428,7 @@
      *
      * <p>The value is inherited by subclasses.
      */
-    public Builder requiresConfigurationFragments(Transition transition,
+    public Builder requiresConfigurationFragments(ConfigurationTransition transition,
         Class<?>... configurationFragments) {
       configurationFragmentPolicy.requiresConfigurationFragments(transition,
           ImmutableSet.copyOf(configurationFragments));
@@ -454,15 +454,15 @@
      * fragments to be present in the given configuration that isn't the aspect's configuration but
      * is also readable by the aspect.
      *
-     * <p>In contrast to {@link #requiresConfigurationFragments(Transition, Class...)}, this method
-     * takes the Skylark module names of fragments instead of their classes.
+     * <p>In contrast to {@link #requiresConfigurationFragments(ConfigurationTransition, Class...)},
+     * this method takes the Skylark module names of fragments instead of their classes.
      *
      * <p>You probably don't want to use this, because aspects generally shouldn't read
      * configurations other than their own. If you want to declare host config fragments, see
      * {@link com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder}.
      */
-    public Builder requiresConfigurationFragmentsBySkylarkModuleName(Transition transition,
-        Collection<String> configurationFragmentNames) {
+    public Builder requiresConfigurationFragmentsBySkylarkModuleName(
+        ConfigurationTransition transition, Collection<String> configurationFragmentNames) {
       configurationFragmentPolicy.requiresConfigurationFragmentsBySkylarkModuleName(transition,
           configurationFragmentNames);
       return this;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 22d39ee..d6b1ceb 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -29,9 +29,9 @@
 import com.google.common.collect.Ordering;
 import com.google.common.collect.Sets;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate;
@@ -359,7 +359,7 @@
   public static class Builder <TYPE> {
     private final String name;
     private final Type<TYPE> type;
-    private Transition configTransition = NoTransition.INSTANCE;
+    private ConfigurationTransition configTransition = NoTransition.INSTANCE;
     private RuleClassNamePredicate allowedRuleClassesForLabels = ANY_RULE;
     private RuleClassNamePredicate allowedRuleClassesForLabelsWarning = NO_RULE;
     private SplitTransitionProvider splitTransitionProvider;
@@ -498,7 +498,7 @@
      * Defines the configuration transition for this attribute. Defaults to
      * {@code NONE}.
      */
-    public Builder<TYPE> cfg(Transition configTransition) {
+    public Builder<TYPE> cfg(ConfigurationTransition configTransition) {
       Preconditions.checkState(this.configTransition == NoTransition.INSTANCE,
           "the configuration transition is already set");
       if (configTransition instanceof SplitTransition) {
@@ -1734,7 +1734,7 @@
   // (We assume a hypothetical Type.isValid(Object) predicate.)
   private final Object defaultValue;
 
-  private final Transition configTransition;
+  private final ConfigurationTransition configTransition;
 
   private final SplitTransitionProvider splitTransitionProvider;
 
@@ -1789,7 +1789,7 @@
       Type<?> type,
       Set<PropertyFlag> propertyFlags,
       Object defaultValue,
-      Transition configTransition,
+      ConfigurationTransition configTransition,
       SplitTransitionProvider splitTransitionProvider,
       RuleClassNamePredicate allowedRuleClassesForLabels,
       RuleClassNamePredicate allowedRuleClassesForLabelsWarning,
@@ -1915,7 +1915,7 @@
    * Returns the configuration transition for this attribute for label or label
    * list attributes. For other attributes it will always return {@code NONE}.
    */
-  public Transition getConfigurationTransition() {
+  public ConfigurationTransition getConfigurationTransition() {
     return configTransition;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java b/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java
index 83d5aa3..0dabcab 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java
@@ -18,8 +18,8 @@
 import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.SetMultimap;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import java.util.Collection;
 import java.util.Set;
@@ -65,13 +65,13 @@
      * Sets of configuration fragment classes required by this rule, a set for each configuration.
      * Duplicate entries will automatically be ignored by the SetMultimap.
      */
-    private final SetMultimap<Transition, Class<?>> requiredConfigurationFragments
+    private final SetMultimap<ConfigurationTransition, Class<?>> requiredConfigurationFragments
         = LinkedHashMultimap.create();
     /**
      * Sets of configuration fragment names required by this rule, a set for each configuration.
      * Duplicate entries will automatically be ignored by the SetMultimap.
      */
-    private final SetMultimap<Transition, String> requiredConfigurationFragmentNames
+    private final SetMultimap<ConfigurationTransition, String> requiredConfigurationFragmentNames
         = LinkedHashMultimap.create();
     private MissingFragmentPolicy missingFragmentPolicy = MissingFragmentPolicy.FAIL_ANALYSIS;
 
@@ -93,7 +93,7 @@
      *
      * <p>The value is inherited by subclasses.
      */
-    public Builder requiresConfigurationFragments(Transition transition,
+    public Builder requiresConfigurationFragments(ConfigurationTransition transition,
         Collection<Class<?>> configurationFragments) {
       // We can relax this assumption if needed. But it's already sketchy to let a rule see more
       // than its own configuration. So we don't want to casually proliferate this pattern.
@@ -126,13 +126,13 @@
      * configuration. Valid transition values are HOST for the host configuration and NONE for
      * the target configuration.
      *
-     * <p>In contrast to {@link #requiresConfigurationFragments(Transition,
+     * <p>In contrast to {@link #requiresConfigurationFragments(ConfigurationTransition,
      * Collection)}, this method takes the names of fragments (as determined by
      * {@link SkylarkModule.Resolver}) instead of their
      * classes.
      */
-    public Builder requiresConfigurationFragmentsBySkylarkModuleName(Transition transition,
-        Collection<String> configurationFragmentNames) {
+    public Builder requiresConfigurationFragmentsBySkylarkModuleName(
+        ConfigurationTransition transition, Collection<String> configurationFragmentNames) {
       // We can relax this assumption if needed. But it's already sketchy to let a rule see more
       // than its own configuration. So we don't want to casually proliferate this pattern.
       Preconditions.checkArgument(
@@ -173,14 +173,14 @@
    * A dictionary that maps configurations (NONE for target configuration, HOST for host
    * configuration) to required configuration fragments.
    */
-  private final ImmutableSetMultimap<Transition, Class<?>>
+  private final ImmutableSetMultimap<ConfigurationTransition, Class<?>>
       requiredConfigurationFragments;
 
   /**
    * A dictionary that maps configurations (NONE for target configuration, HOST for host
    * configuration) to lists of Skylark module names of required configuration fragments.
    */
-  private final ImmutableSetMultimap<Transition, String>
+  private final ImmutableSetMultimap<ConfigurationTransition, String>
       requiredConfigurationFragmentNames;
 
   /**
@@ -189,8 +189,8 @@
   private final MissingFragmentPolicy missingFragmentPolicy;
 
   private ConfigurationFragmentPolicy(
-      ImmutableSetMultimap<Transition, Class<?>> requiredConfigurationFragments,
-      ImmutableSetMultimap<Transition, String> requiredConfigurationFragmentNames,
+      ImmutableSetMultimap<ConfigurationTransition, Class<?>> requiredConfigurationFragments,
+      ImmutableSetMultimap<ConfigurationTransition, String> requiredConfigurationFragmentNames,
       MissingFragmentPolicy missingFragmentPolicy) {
     this.requiredConfigurationFragments = requiredConfigurationFragments;
     this.requiredConfigurationFragmentNames = requiredConfigurationFragmentNames;
@@ -213,7 +213,7 @@
    * specified in the same configuration that was passed.
    */
   public boolean isLegalConfigurationFragment(
-      Class<?> configurationFragment, Transition config) {
+      Class<?> configurationFragment, ConfigurationTransition config) {
     return requiredConfigurationFragments.containsValue(configurationFragment)
         || hasLegalFragmentName(configurationFragment, config);
   }
@@ -232,7 +232,7 @@
    * specified configuration (target or host).
    */
   private boolean hasLegalFragmentName(
-      Class<?> configurationFragment, Transition transition) {
+      Class<?> configurationFragment, ConfigurationTransition transition) {
     return requiredConfigurationFragmentNames
         .containsEntry(transition, SkylarkModule.Resolver.resolveName(configurationFragment));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index a12c08f..2d0cd74 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -30,7 +30,7 @@
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Ordering;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -516,14 +516,14 @@
      * A RuleTransitionFactory which always returns the same transition.
      */
     private static final class FixedTransitionFactory implements RuleTransitionFactory {
-      private final Transition transition;
+      private final ConfigurationTransition transition;
 
-      private FixedTransitionFactory(Transition transition) {
+      private FixedTransitionFactory(ConfigurationTransition transition) {
         this.transition = transition;
       }
 
       @Override
-      public Transition buildTransitionFor(Rule rule) {
+      public ConfigurationTransition buildTransitionFor(Rule rule) {
         return transition;
       }
     }
@@ -716,7 +716,7 @@
      *
      * <p>The value is inherited by subclasses.
      */
-    public Builder requiresConfigurationFragments(Transition transition,
+    public Builder requiresConfigurationFragments(ConfigurationTransition transition,
         Class<?>... configurationFragments) {
       configurationFragmentPolicy.requiresConfigurationFragments(
           transition,
@@ -748,8 +748,8 @@
      * fragments to be present in the given configuration that isn't the rule's configuration but
      * is also readable by the rule.
      *
-     * <p>In contrast to {@link #requiresConfigurationFragments(Transition, Class...)}, this method
-     * takes Skylark module names of fragments instead of their classes.
+     * <p>In contrast to {@link #requiresConfigurationFragments(ConfigurationTransition, Class...)},
+     * this method takes Skylark module names of fragments instead of their classes.
      * *
      * <p>You probably don't want to use this, because rules generally shouldn't read configurations
      * other than their own. If you want to declare host config fragments, see
@@ -757,8 +757,8 @@
      *
      * <p>The value is inherited by subclasses.
      */
-    public Builder requiresConfigurationFragmentsBySkylarkModuleName(Transition transition,
-        Collection<String> configurationFragmentNames) {
+    public Builder requiresConfigurationFragmentsBySkylarkModuleName(
+        ConfigurationTransition transition, Collection<String> configurationFragmentNames) {
       configurationFragmentPolicy.requiresConfigurationFragmentsBySkylarkModuleName(transition,
           configurationFragmentNames);
       return this;
@@ -838,7 +838,7 @@
      * <p>If you need the transition to depend on the rule it's being applied to, use
      * {@link #cfg(RuleTransitionFactory)}.
      */
-    public Builder cfg(Transition transition) {
+    public Builder cfg(ConfigurationTransition transition) {
       Preconditions.checkState(type != RuleClassType.ABSTRACT,
           "Setting not inherited property (cfg) of abstract rule class '%s'", name);
       Preconditions.checkState(this.transitionFactory == null,
@@ -851,8 +851,8 @@
     /**
      * Applies the given transition factory to all incoming edges for this rule class.
      *
-     * <p>Unlike{@link #cfg(Transition)}, the factory can examine the rule when deciding what
-     * transition to use.
+     * <p>Unlike{@link #cfg(ConfigurationTransition)}, the factory can examine the rule when
+     * deciding what transition to use.
      */
     public Builder cfg(RuleTransitionFactory transitionFactory) {
       Preconditions.checkState(type != RuleClassType.ABSTRACT,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java
index 94613ab..7875a34 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java
@@ -14,7 +14,7 @@
 
 package com.google.devtools.build.lib.packages;
 
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import javax.annotation.Nullable;
 
 /**
@@ -28,5 +28,5 @@
    * If this class determines that no transition should be performed, it should return {@code null}.
    */
   @Nullable
-  Transition buildTransitionFor(Rule rule);
+  ConfigurationTransition buildTransitionFor(Rule rule);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java
index 3391ccc..35d38c6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java
@@ -18,7 +18,7 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -38,7 +38,7 @@
   private final ImmutableSet<SkylarkProviderIdentifier> provides;
   private final ImmutableSet<String> paramAttributes;
   private final ImmutableSet<String> fragments;
-  private final Transition hostTransition;
+  private final ConfigurationTransition hostTransition;
   private final ImmutableSet<String> hostFragments;
   private final ImmutableList<Label> requiredToolchains;
 
@@ -54,7 +54,7 @@
       ImmutableSet<String> paramAttributes,
       ImmutableSet<String> fragments,
       // The host transition is in lib.analysis, so we can't reference it directly here.
-      Transition hostTransition,
+      ConfigurationTransition hostTransition,
       ImmutableSet<String> hostFragments,
       ImmutableList<Label> requiredToolchains,
       Environment funcallEnv) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 937dee2..81cc6d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -37,8 +37,8 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.Attribute;
@@ -300,7 +300,7 @@
             ImmutableSet.of("android_binary", "android_library");
 
         @Override
-        public Transition buildTransitionFor(Rule depRule) {
+        public ConfigurationTransition buildTransitionFor(Rule depRule) {
           return keepFilterRuleClasses.contains(depRule.getRuleClass())
               ? null
               : ResourceFilterFactory.REMOVE_DYNAMICALLY_CONFIGURED_RESOURCE_FILTERING_TRANSITION;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 7c123ff..7ae5ac5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -74,9 +74,9 @@
 import com.google.devtools.build.lib.analysis.config.FragmentClassSet;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.Transition;
 import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget;
 import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget.DuplicateException;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -1132,7 +1132,7 @@
     // The host configuration inherits the data, not target options. This is so host tools don't
     // apply LIPO.
     BuildConfiguration firstTargetConfig = topLevelTargetConfigs.get(0);
-    Transition dataTransition =
+    ConfigurationTransition dataTransition =
         ((ConfiguredRuleClassProvider) ruleClassProvider).getLipoDataTransition();
     BuildOptions dataOptions = dataTransition != NoTransition.INSTANCE
         ? ((PatchTransition) dataTransition).apply(firstTargetConfig.getOptions())
@@ -1649,7 +1649,7 @@
       ExtendedEventHandler eventHandler,
       Label label,
       BuildConfiguration configuration,
-      Transition transition) {
+      ConfigurationTransition transition) {
     ConfiguredTargetAndTarget configuredTargetAndTarget =
         Iterables.getFirst(
             getConfiguredTargetsForTesting(