diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
index a932653..581517a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
@@ -22,7 +22,7 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.AdvertisedProviderSet;
 import com.google.devtools.build.lib.packages.AspectDefinition;
@@ -283,7 +283,7 @@
     assertThat(requiresFragments.getConfigurationFragmentPolicy()).isNotNull();
     assertThat(
         requiresFragments.getConfigurationFragmentPolicy()
-            .isLegalConfigurationFragment(TestFragment.class, ConfigurationTransitionProxy.NONE))
+            .isLegalConfigurationFragment(TestFragment.class, NoTransition.INSTANCE))
         .isTrue();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
index 6646529..fbda656 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
@@ -33,7 +33,7 @@
 import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
-import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget;
 import com.google.devtools.build.lib.analysis.configuredtargets.OutputFileConfiguredTarget;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestBase;
@@ -393,7 +393,7 @@
     Dependency innerDependency =
         Dependency.withTransitionAndAspects(
             Label.parseAbsolute("//package:inner"),
-            ConfigurationTransitionProxy.NONE,
+            NoTransition.INSTANCE,
             AspectCollection.EMPTY);
     Dependency fileDependency =
         Dependency.withNullConfiguration(
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java
index 8203f31..57f0e63 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java
@@ -22,7 +22,7 @@
 import com.google.common.testing.NullPointerTester;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
 import com.google.devtools.build.lib.analysis.util.TestAspects;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -377,30 +377,22 @@
             Dependency.withTransitionAndAspects(b, HostTransition.INSTANCE, differentAspects))
         .addEqualityGroup(
             // base set but with transition NONE
-            Dependency.withTransitionAndAspects(a, ConfigurationTransitionProxy.NONE, twoAspects),
-            Dependency.withTransitionAndAspects(
-                aExplicit, ConfigurationTransitionProxy.NONE, twoAspects),
-            Dependency.withTransitionAndAspects(a, ConfigurationTransitionProxy.NONE,
-                inverseAspects),
-            Dependency.withTransitionAndAspects(
-                aExplicit, ConfigurationTransitionProxy.NONE, inverseAspects))
+            Dependency.withTransitionAndAspects(a, NoTransition.INSTANCE, twoAspects),
+            Dependency.withTransitionAndAspects(aExplicit, NoTransition.INSTANCE, twoAspects),
+            Dependency.withTransitionAndAspects(a, NoTransition.INSTANCE, inverseAspects),
+            Dependency.withTransitionAndAspects(aExplicit, NoTransition.INSTANCE, inverseAspects))
         .addEqualityGroup(
             // base set but with transition NONE and different aspects
-            Dependency.withTransitionAndAspects(a, ConfigurationTransitionProxy.NONE,
-                differentAspects),
-            Dependency.withTransitionAndAspects(
-                aExplicit, ConfigurationTransitionProxy.NONE, differentAspects))
+            Dependency.withTransitionAndAspects(a, NoTransition.INSTANCE, differentAspects),
+            Dependency.withTransitionAndAspects(aExplicit, NoTransition.INSTANCE, differentAspects))
         .addEqualityGroup(
             // base set but with transition NONE and label //b
-            Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE, twoAspects),
-            Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE,
-                inverseAspects))
+            Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, twoAspects),
+            Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, inverseAspects))
         .addEqualityGroup(
             // inverse of base set: transition NONE, label //b, different aspects
-            Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE,
-                differentAspects),
-            Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE,
-                differentAspects))
+            Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, differentAspects),
+            Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, differentAspects))
         .testEquals();
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index d25fb6a..d7d194c 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -76,6 +76,7 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+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.Transition;
@@ -1508,7 +1509,7 @@
    */
   protected BuildConfiguration getConfiguration(BuildConfiguration fromConfig,
       Transition transition) throws InterruptedException {
-    if (transition == ConfigurationTransitionProxy.NONE) {
+    if (transition == NoTransition.INSTANCE) {
       return fromConfig;
     } else if (transition == NullTransition.INSTANCE) {
       return null;
diff --git a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
index 0e7de91..7324889 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
@@ -16,7 +16,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+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.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
@@ -92,7 +92,7 @@
 
     assertThat(policy.isLegalConfigurationFragment(Integer.class)).isTrue();
     assertThat(
-            policy.isLegalConfigurationFragment(Integer.class, ConfigurationTransitionProxy.NONE))
+            policy.isLegalConfigurationFragment(Integer.class, NoTransition.INSTANCE))
         .isTrue();
     // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was
     // specified for
@@ -102,13 +102,13 @@
     assertThat(policy.isLegalConfigurationFragment(Long.class)).isTrue();
     // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was
     // specified for
-    assertThat(policy.isLegalConfigurationFragment(Long.class, ConfigurationTransitionProxy.NONE))
+    assertThat(policy.isLegalConfigurationFragment(Long.class, NoTransition.INSTANCE))
         .isTrue();
     assertThat(policy.isLegalConfigurationFragment(Long.class, TEST_HOST_TRANSITION))
         .isTrue();
 
     assertThat(policy.isLegalConfigurationFragment(String.class)).isFalse();
-    assertThat(policy.isLegalConfigurationFragment(String.class, ConfigurationTransitionProxy.NONE))
+    assertThat(policy.isLegalConfigurationFragment(String.class, NoTransition.INSTANCE))
         .isFalse();
     assertThat(policy.isLegalConfigurationFragment(String.class, TEST_HOST_TRANSITION))
         .isFalse();
@@ -128,8 +128,7 @@
 
     assertThat(policy.isLegalConfigurationFragment(TestFragment.class)).isTrue();
     assertThat(
-            policy.isLegalConfigurationFragment(TestFragment.class,
-                ConfigurationTransitionProxy.NONE))
+            policy.isLegalConfigurationFragment(TestFragment.class, NoTransition.INSTANCE))
         .isTrue();
     assertThat(
             policy.isLegalConfigurationFragment(TestFragment.class, TEST_HOST_TRANSITION))
@@ -137,8 +136,7 @@
 
     assertThat(policy.isLegalConfigurationFragment(OtherFragment.class)).isTrue();
     assertThat(
-            policy.isLegalConfigurationFragment(OtherFragment.class,
-                ConfigurationTransitionProxy.NONE))
+            policy.isLegalConfigurationFragment(OtherFragment.class, NoTransition.INSTANCE))
         .isFalse();
     assertThat(
             policy.isLegalConfigurationFragment(OtherFragment.class, TEST_HOST_TRANSITION))
@@ -146,8 +144,7 @@
 
     assertThat(policy.isLegalConfigurationFragment(UnknownFragment.class)).isFalse();
     assertThat(
-            policy.isLegalConfigurationFragment(
-                UnknownFragment.class, ConfigurationTransitionProxy.NONE))
+            policy.isLegalConfigurationFragment(UnknownFragment.class, NoTransition.INSTANCE))
         .isFalse();
     assertThat(
             policy.isLegalConfigurationFragment(
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java
index 9d29f28..7bbd834 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.analysis.OutputGroupInfo;
 import com.google.devtools.build.lib.analysis.ViewCreationFailedException;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
-import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.TargetParsingException;
@@ -212,8 +212,7 @@
     AspectDefinition aspectDefinition = aspectValue.getAspect().getDefinition();
     assertThat(
         aspectDefinition.getConfigurationFragmentPolicy()
-            .isLegalConfigurationFragment(JavaConfiguration.class,
-                ConfigurationTransitionProxy.NONE))
+            .isLegalConfigurationFragment(JavaConfiguration.class, NoTransition.INSTANCE))
         .isTrue();
     assertThat(
         aspectDefinition.getConfigurationFragmentPolicy()
@@ -221,8 +220,7 @@
         .isFalse();
     assertThat(
         aspectDefinition.getConfigurationFragmentPolicy()
-            .isLegalConfigurationFragment(CppConfiguration.class,
-                ConfigurationTransitionProxy.NONE))
+            .isLegalConfigurationFragment(CppConfiguration.class, NoTransition.INSTANCE))
         .isFalse();
     assertThat(
         aspectDefinition.getConfigurationFragmentPolicy()
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index bcd42e8..58dfecf 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -23,6 +23,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy;
+import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkAttr;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkAttr.Descriptor;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkFileType;
@@ -545,7 +546,7 @@
   @Test
   public void testAttrCfgTarget() throws Exception {
     Attribute attr = buildAttribute("a1", "attr.label(cfg = 'target', allow_files = True)");
-    assertThat(attr.getConfigurationTransition()).isEqualTo(ConfigurationTransitionProxy.NONE);
+    assertThat(attr.getConfigurationTransition()).isEqualTo(NoTransition.INSTANCE);
   }
 
   @Test
