Do not special-case transitioning into the null configuration in DependencyResolver.
Instead, do it in ConfigurationResolver#resolveConfigurations(). This mirrors what we do in SkyframeExecutor#getConfigurations() for top-level targets.
There are also a few ancillary wins:
- There is now a precondition check that verifies that DependencyResolver#dependentNodeMap() never returns a transition with an explicit configuration at every call site
- Null source configurations are not special-cased anymore in ConfiguredTargetFunction and PostConfiguredTargetFunction
RELNOTES: None.
PiperOrigin-RevId: 237972536
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 26cf12f..a9a3852 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
@@ -508,16 +508,14 @@
// Trim each dep's configuration so it only includes the fragments needed by its transitive
// closure.
- if (ctgValue.getConfiguration() != null) {
- depValueNames =
- ConfigurationResolver.resolveConfigurations(
- env,
- ctgValue,
- depValueNames,
- hostConfiguration,
- ruleClassProvider,
- defaultBuildOptions);
- }
+ depValueNames =
+ ConfigurationResolver.resolveConfigurations(
+ env,
+ ctgValue,
+ depValueNames,
+ hostConfiguration,
+ ruleClassProvider,
+ defaultBuildOptions);
// Return early in case packages were not loaded yet. In theory, we could start configuring
// dependent targets in loaded packages. However, that creates an artificial sync boundary