Remove BuildConfiguration.useDynamicConfigurations.

This is always true.

Part of the static config cleanup effort.

PiperOrigin-RevId: 165628823
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 3ae5a8a..2644780 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
@@ -875,10 +875,7 @@
         nodes.add(new TargetAndConfiguration(target, target.isConfigurable() ? config : null));
       }
     }
-    return ImmutableList.copyOf(
-        configurations.useDynamicConfigurations()
-            ? getDynamicConfigurations(nodes, eventHandler)
-            : nodes);
+    return ImmutableList.copyOf(getDynamicConfigurations(nodes, eventHandler));
   }
 
   /**
@@ -960,7 +957,6 @@
       DynamicTransitionMapper dynamicTransitionMapper) {
     Target target = targetAndConfig.getTarget();
     BuildConfiguration fromConfig = targetAndConfig.getConfiguration();
-    Preconditions.checkArgument(fromConfig.useDynamicConfigurations());
 
     // Top-level transitions (chosen by configuration fragments):
     Transition topLevelTransition = fromConfig.topLevelConfigurationHook(target);
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 c6f56b8..ee6e256 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
@@ -769,7 +769,7 @@
       AspectCollection aspects =
           requiredAspects(this.aspects, attributeAndOwner, toTarget, rule);
       Dependency dep;
-      if (config.useDynamicConfigurations() && !applyNullTransition) {
+      if (!applyNullTransition) {
         // Pass a transition rather than directly feeding the configuration so deps get trimmed.
         dep = Dependency.withTransitionAndAspects(
             depLabel, new FixedTransition(config.getOptions()), aspects);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index c5f59d6..5165403 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -86,12 +86,9 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Queue;
 import java.util.Set;
 import java.util.TreeMap;
 import javax.annotation.Nullable;
@@ -1094,8 +1091,6 @@
 
   private final String checksum;
 
-  private Set<BuildConfiguration> allReachableConfigurations;
-
   private final ImmutableMap<Class<? extends Fragment>, Fragment> fragments;
   private final ImmutableMap<String, Class<? extends Fragment>> skylarkVisibleFragments;
   private final RepositoryName mainRepositoryName;
@@ -1266,20 +1261,6 @@
     if (this == other) {
       return true;
     }
-    if (!useDynamicConfigurations()) {
-      // Static configurations aren't safe for value equality because they include transition
-      // references to other configurations (see setConfigurationTransitions). For example, imagine
-      // in one build target config A has a reference to data config B. Now imagine a second build
-      // where target config C has a reference to data config D. If A and B are value-equal, that
-      // means a call to ConfiguredTargetKey("//foo", C) might return the SkyKey for ("//foo", A).
-      // This is not just possible but *likely* due to SkyKey interning (see
-      // SkyKey.SKY_KEY_INTERNER). This means a data transition on that config could incorrectly
-      // return B, which is not safe because B is not necessarily value-equal to D.
-      //
-      // This becomes safe with dynamic configurations: transitions are completely triggered by
-      // external logic and configs have no awareness of them at all.
-      return false;
-    }
     if (!(other instanceof BuildConfiguration)) {
       return false;
     }
@@ -1295,9 +1276,6 @@
 
   @Override
   public int hashCode() {
-    if (!useDynamicConfigurations()) {
-      return BuildConfiguration.super.hashCode();
-    }
     return hashCode;
   }
 
@@ -1596,38 +1574,6 @@
   }
 
   /**
-   * For static configurations, returns all configurations that can be reached from this one through
-   * any kind of configuration transition.
-   *
-   * <p>For dynamic configurations, returns the current configuration (since configurations aren't
-   * reached through other configurations).
-   */
-  public synchronized Collection<BuildConfiguration> getAllReachableConfigurations() {
-    if (allReachableConfigurations == null) {
-      // This is needed for every configured target in skyframe m2, so we cache it.
-      // We could alternatively make the corresponding dependencies into a skyframe node.
-      this.allReachableConfigurations = computeAllReachableConfigurations();
-    }
-    return allReachableConfigurations;
-  }
-
-  private Set<BuildConfiguration> computeAllReachableConfigurations() {
-    if (useDynamicConfigurations()) {
-      return ImmutableSet.of(this);
-    }
-    Set<BuildConfiguration> result = new LinkedHashSet<>();
-    Queue<BuildConfiguration> queue = new LinkedList<>();
-    queue.add(this);
-    while (!queue.isEmpty()) {
-      BuildConfiguration config = queue.remove();
-      if (!result.add(config)) {
-        continue;
-      }
-    }
-    return result;
-  }
-
-  /**
    * A common interface for static vs. dynamic configuration implementations that allows
    * common configuration and transition-selection logic to seamlessly work with either.
    *
@@ -1893,9 +1839,7 @@
    * Returns the {@link TransitionApplier} that should be passed to {#evaluateTransition} calls.
    */
   public TransitionApplier getTransitionApplier() {
-    return useDynamicConfigurations()
-        ? new DynamicTransitionApplier(dynamicTransitionMapper)
-        : new StaticTransitionApplier(this);
+    return new DynamicTransitionApplier(dynamicTransitionMapper);
   }
 
   /**
@@ -2409,17 +2353,6 @@
   }
 
   /**
-   * Returns whether we should use dynamically instantiated build configurations vs. static
-   * configurations (e.g. predefined in {@link
-   * com.google.devtools.build.lib.analysis.ConfigurationCollectionFactory}).
-   */
-  @Deprecated
-  public boolean useDynamicConfigurations() {
-    // TODO(gregce): remove this interface, which is now redundant.
-    return true;
-  }
-
-  /**
    * Returns whether we should trim dynamic configurations to only include the fragments needed
    * to correctly analyze a rule.
    */
@@ -2516,7 +2449,6 @@
    */
   @Nullable
   public PatchTransition getArtifactOwnerTransition() {
-    Preconditions.checkState(useDynamicConfigurations());
     PatchTransition ownerTransition = null;
     for (Fragment fragment : fragments.values()) {
       PatchTransition fragmentTransition = fragment.getArtifactOwnerTransition();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java
index 72a9e3d..3f0d4b2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java
@@ -17,12 +17,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import java.io.Serializable;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Objects;
-import java.util.Set;
 
 /**
  * The primary container for all main {@link BuildConfiguration} instances,
@@ -51,7 +48,7 @@
     // Except for the host configuration (which may be identical across target configs), the other
     // configurations must all have different cache keys or we will end up with problems.
     HashMap<String, BuildConfiguration> cacheKeyConflictDetector = new HashMap<>();
-    for (BuildConfiguration config : getAllConfigurations()) {
+    for (BuildConfiguration config : targetConfigurations) {
       String cacheKey = config.checksum();
       if (cacheKeyConflictDetector.containsKey(cacheKey)) {
         throw new InvalidConfigurationException("Conflicting configurations: " + config + " & "
@@ -77,28 +74,6 @@
     return hostConfiguration;
   }
 
-  /**
-   * For static configurations, returns all configurations that can be reached from the target
-   * configurations through any kind of configuration transition.
-   *
-   * <p>For dynamic configurations, returns the target configurations (since configurations aren't
-   * reached through other configurations).
-   */
-  public Collection<BuildConfiguration> getAllConfigurations() {
-    Set<BuildConfiguration> result = new LinkedHashSet<>();
-    for (BuildConfiguration config : targetConfigurations) {
-      result.addAll(config.getAllReachableConfigurations());
-    }
-    return result;
-  }
-
-  /**
-   * Returns whether this build uses dynamic configurations.
-   */
-  public boolean useDynamicConfigurations() {
-    return getTargetConfigurations().get(0).useDynamicConfigurations();
-  }
-
   @Override
   public boolean equals(Object obj) {
     if (this == obj) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 87de6cf..214aa02 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -148,10 +148,6 @@
     this.removeActionsAfterEvaluation = Preconditions.checkNotNull(removeActionsAfterEvaluation);
   }
 
-  private static boolean useDynamicConfigurations(BuildConfiguration config) {
-    return config != null && config.useDynamicConfigurations();
-  }
-
   @Override
   public SkyValue compute(SkyKey key, Environment env) throws ConfiguredTargetFunctionException,
       InterruptedException {
@@ -197,7 +193,7 @@
     // associates the corresponding error with this target, as expected. Without this line,
     // the first TransitiveTargetValue call happens on its dep (in trimConfigurations), so Bazel
     // associates the error with the dep, which is misleading.
-    if (useDynamicConfigurations(configuration) && configuration.trimConfigurations()
+    if (configuration != null && configuration.trimConfigurations()
         && env.getValue(TransitiveTargetValue.key(lc.getLabel())) == null) {
       return null;
     }
@@ -402,8 +398,8 @@
     }
 
     // Trim each dep's configuration so it only includes the fragments needed by its transitive
-    // closure (only dynamic configurations support this).
-    if (useDynamicConfigurations(ctgValue.getConfiguration())) {
+    // closure.
+    if (ctgValue.getConfiguration() != null) {
       depValueNames = getDynamicConfigurations(env, ctgValue, depValueNames, hostConfiguration,
           ruleClassProvider);
       // It's important that we don't use "if (env.missingValues()) { return null }" here (or
@@ -754,7 +750,6 @@
   @Nullable
   private static Set<Class<? extends BuildConfiguration.Fragment>> getTransitiveFragments(
       Environment env, Label dep, BuildConfiguration parentConfig) throws InterruptedException {
-    Preconditions.checkArgument(parentConfig.useDynamicConfigurations());
     if (!parentConfig.trimConfigurations()) {
       return parentConfig.getAllFragments().keySet();
     }
@@ -1067,20 +1062,16 @@
       return null;
     }
 
-
     // No need to get new configs from Skyframe - config_setting rules always use the current
     // target's config.
     // TODO(bazel-team): remove the need for this special transformation. We can probably do this by
     // simply passing this through trimConfigurations.
-    BuildConfiguration targetConfig = ctgValue.getConfiguration();
-    if (useDynamicConfigurations(targetConfig)) {
-      ImmutableList.Builder<Dependency> staticConfigs = ImmutableList.builder();
-      for (Dependency dep : configValueNames) {
-        staticConfigs.add(
-            Dependency.withConfigurationAndAspects(dep.getLabel(), targetConfig, dep.getAspects()));
-      }
-      configValueNames = staticConfigs.build();
+    ImmutableList.Builder<Dependency> staticConfigs = ImmutableList.builder();
+    for (Dependency dep : configValueNames) {
+      staticConfigs.add(Dependency.withConfigurationAndAspects(dep.getLabel(),
+          ctgValue.getConfiguration(), dep.getAspects()));
     }
+    configValueNames = staticConfigs.build();
 
     Map<SkyKey, ConfiguredTarget> configValues = resolveConfiguredTargetDependencies(
         env, configValueNames, transitivePackages, transitiveLoadingRootCauses);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
index 7789164..b064b5b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
@@ -108,7 +108,7 @@
       deps =
           resolver.dependentNodeMap(
               ctgValue, hostConfiguration, /*aspect=*/ null, configConditions);
-      if (ct.getConfiguration() != null && ct.getConfiguration().useDynamicConfigurations()) {
+      if (ct.getConfiguration() != null) {
         deps = ConfiguredTargetFunction.getDynamicConfigurations(env, ctgValue, deps,
             hostConfiguration, ruleClassProvider);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index 4f1d96e..90773dc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -512,7 +512,7 @@
    * correct host configuration at the top-level.
    */
   public BuildConfiguration getHostConfiguration(BuildConfiguration config) {
-    if (config == null || !config.useDynamicConfigurations()) {
+    if (config == null) {
       return topLevelHostConfiguration;
     }
     // TODO(bazel-team): have the fragment classes be those required by the consuming target's
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 f119ecc..f61ba9c 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
@@ -1571,8 +1571,7 @@
   }
 
   /**
-   * Returns a particular configured target. If dynamic configurations are active, applies the given
-   * configuration transition.
+   * Returns a particular configured target after applying the given transition.
    */
   @VisibleForTesting
   @Nullable
@@ -1581,35 +1580,19 @@
       Label label,
       BuildConfiguration configuration,
       Attribute.Transition transition) {
-
-    if (configuration != null && !configuration.useDynamicConfigurations()
-        && transition != ConfigurationTransition.NONE) {
-      // It's illegal to apply this transition over a statically configured build. But C++ LIPO
-      // support works by applying a rule configurator for static configurations and a rule
-      // transition applier for dynamic configurations. Dynamically configured builds skip
-      // the configurator and this code makes statically configured builds skip the rule transition
-      // applier.
-      //
-      // This will all get a lot simpler once static configurations are removed entirely.
-      transition = ConfigurationTransition.NONE;
-    }
-
     if (memoizingEvaluator.getExistingValueForTesting(
         PrecomputedValue.WORKSPACE_STATUS_KEY.getKeyForTesting()) == null) {
       injectWorkspaceStatusData(label.getWorkspaceRoot());
     }
 
-    Dependency dep;
-    if (configuration == null) {
-      dep = Dependency.withNullConfiguration(label);
-    } else if (configuration.useDynamicConfigurations()) {
-      dep = Dependency.withTransitionAndAspects(label, transition, AspectCollection.EMPTY);
-    } else {
-      dep = Dependency.withConfiguration(label, configuration);
-    }
-
     return Iterables.getFirst(
-        getConfiguredTargets(eventHandler, configuration, ImmutableList.of(dep), false),
+        getConfiguredTargets(
+            eventHandler,
+            configuration,
+            ImmutableList.of(configuration == null
+                ? Dependency.withNullConfiguration(label)
+                : Dependency.withTransitionAndAspects(label, transition, AspectCollection.EMPTY)),
+            false),
         null);
   }
 
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 72c18f2..183c8c0 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
@@ -17,7 +17,6 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 import static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCount;
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCountAtLeast;
 import static org.junit.Assert.fail;
 
@@ -393,21 +392,12 @@
     Iterable<Dependency> targets = getView().getDirectPrerequisiteDependenciesForTesting(
         reporter, top, getBuildConfigurationCollection()).values();
 
-    Dependency innerDependency;
-    Dependency fileDependency;
-    if (top.getConfiguration().useDynamicConfigurations()) {
-      innerDependency =
-          Dependency.withTransitionAndAspects(
-              Label.parseAbsolute("//package:inner"),
-              Attribute.ConfigurationTransition.NONE,
-              AspectCollection.EMPTY);
-    } else {
-      innerDependency =
-          Dependency.withConfiguration(
-              Label.parseAbsolute("//package:inner"),
-              getTargetConfiguration());
-    }
-    fileDependency =
+    Dependency innerDependency =
+        Dependency.withTransitionAndAspects(
+            Label.parseAbsolute("//package:inner"),
+            Attribute.ConfigurationTransition.NONE,
+            AspectCollection.EMPTY);
+    Dependency fileDependency =
         Dependency.withNullConfiguration(
             Label.parseAbsolute("//package:file"));
 
@@ -541,11 +531,9 @@
     // the transitive target closure) and in the normal configured target cycle detection path.
     // So we get an additional instance of this check (which varies depending on whether Skyframe
     // loading phase is enabled).
-    // TODO(gregce): refactor away this variation. Note that the duplicate doesn't make it into
+    // TODO(gregce): Fix above and uncomment the below. Note that the duplicate doesn't make it into
     // real user output (it only affects tests).
-    if (!getTargetConfiguration().useDynamicConfigurations()) {
-      assertEventCount(3, eventCollector);
-    }
+    //  assertEventCount(3, eventCollector);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index ff655ba..5c88265 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -286,7 +286,7 @@
     throws InterruptedException {
     BuildConfiguration targetConfig =
         Iterables.getOnlyElement(masterConfig.getTargetConfigurations());
-    if (useDynamicVersionIfEnabled && targetConfig.useDynamicConfigurations()) {
+    if (useDynamicVersionIfEnabled) {
       return skyframeExecutor.getConfigurationForTesting(
           reporter, targetConfig.fragmentClasses(), targetConfig.getOptions());
     } else {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
index e04eae3..7e2400d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
@@ -432,20 +432,17 @@
         hostConfiguration.getMiddlemanDirectory(RepositoryName.MAIN).getPath().toString(),
         "internal(host)");
 
-    if (targetConfiguration.useDynamicConfigurations()) {
-      // With dynamic configurations, the output paths that bin, genfiles, etc. refer to may
-      // or may not include the C++-contributed pieces. e.g. they may be
-      // bazel-out/gcc-X-glibc-Y-k8-fastbuild/ or they may be bazel-out/fastbuild/. This code
-      // adds support for the non-C++ case, too.
-      Map<String, String> prunedRootMap = new HashMap<>();
-      for (Map.Entry<String, String> root : rootMap.entrySet()) {
-        prunedRootMap.put(
-            OUTPUT_PATH_CPP_PREFIX_PATTERN.matcher(root.getKey()).replaceFirst(""),
-            root.getValue()
-        );
-      }
-      rootMap.putAll(prunedRootMap);
+    // The output paths that bin, genfiles, etc. refer to may or may not include the C++-contributed
+    // pieces. e.g. they may be bazel-out/gcc-X-glibc-Y-k8-fastbuild/ or they may be
+    // bazel-out/fastbuild/. This code adds support for the non-C++ case, too.
+    Map<String, String> prunedRootMap = new HashMap<>();
+    for (Map.Entry<String, String> root : rootMap.entrySet()) {
+      prunedRootMap.put(
+          OUTPUT_PATH_CPP_PREFIX_PATTERN.matcher(root.getKey()).replaceFirst(""),
+          root.getValue()
+      );
     }
+    rootMap.putAll(prunedRootMap);
 
     Set<String> files = new LinkedHashSet<>();
     for (Artifact artifact : artifacts) {
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 1f0a7a4..c00b06e 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
@@ -1304,16 +1304,12 @@
     BuildConfiguration config;
     try {
       config = getConfiguredTarget(label).getConfiguration();
+      config = view.getDynamicConfigurationForTesting(getTarget(label), config, reporter);
     } catch (LabelSyntaxException e) {
       throw new IllegalArgumentException(e);
-    }
-    if (targetConfig.useDynamicConfigurations()) {
-      try {
-        config = view.getDynamicConfigurationForTesting(getTarget(label), config, reporter);
-      } catch (Exception e) {
-        //TODO(b/36585204): Clean this up
-        throw new RuntimeException(e);
-      }
+    } catch (Exception e) {
+      //TODO(b/36585204): Clean this up
+      throw new RuntimeException(e);
     }
     return new ConfiguredTargetKey(makeLabel(label), config);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
index f01405e..c2c4c30 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
@@ -56,7 +56,6 @@
 import com.google.devtools.common.options.Options;
 import com.google.devtools.common.options.OptionsBase;
 import com.google.devtools.common.options.OptionsParser;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -196,9 +195,8 @@
 
   public void assertConfigurationsHaveUniqueOutputDirectories(
       BuildConfigurationCollection configCollection) throws Exception {
-    Collection<BuildConfiguration> allConfigs = configCollection.getAllConfigurations();
     Map<Root, BuildConfiguration> outputPaths = new HashMap<>();
-    for (BuildConfiguration config : allConfigs) {
+    for (BuildConfiguration config : configCollection.getTargetConfigurations()) {
       if (config.isActionsEnabled()) {
         BuildConfiguration otherConfig = outputPaths.get(
             config.getOutputDirectory(RepositoryName.MAIN));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
index 46c1cf9..0ea4339 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
@@ -315,20 +315,12 @@
               dep1.getConfiguration().getCpu(),
               dep2.getConfiguration().getCpu()))
           .containsExactly("armeabi-v7a", "k8");
-      // We don't care what order split deps are listed, but it must be deterministic. Static and
-      // dynamic configurations happen to apply different orders (static: same order as the split
-      // transition definition, dynamic: ConfiguredTargetFunction.DYNAMIC_SPLIT_DEP_ORDERING).
-      // That's okay because of the "we don't care what order" principle. The primary value of this
-      // test is to check against the new dynamic code, which will soon replace the static code
-      // anyway. And the static code is already well-tested through all other Blaze tests. And
-      // checking its order would be a lot uglier. So we only worry about the dynamic case here.
-      if (getTargetConfiguration().useDynamicConfigurations()) {
-        assertThat(
-            ConfiguredTargetFunction.DYNAMIC_SPLIT_DEP_ORDERING.compare(
-                Dependency.withConfiguration(dep1.getLabel(), dep1.getConfiguration()),
-                Dependency.withConfiguration(dep2.getLabel(), dep2.getConfiguration())))
-            .isLessThan(0);
-      }
+      // We don't care what order split deps are listed, but it must be deterministic.
+      assertThat(
+          ConfiguredTargetFunction.DYNAMIC_SPLIT_DEP_ORDERING.compare(
+              Dependency.withConfiguration(dep1.getLabel(), dep1.getConfiguration()),
+              Dependency.withConfiguration(dep2.getLabel(), dep2.getConfiguration())))
+          .isLessThan(0);
     }
   }
 }