Factor out BuildConfigurationCollection.Transitions.getDynamicTransition.
This is a legacy dependency on the configuration transition table, which is
only needed for static configurations. Dynamic configurations didn't actually
use anything in that table: this was just a convenience interface that could
have equally been defined somewhere else. So this cl defines it somewhere else.
There's still one last dependency: Transitions.configurationHook. We'll tackle
that in a followup cl.
PiperOrigin-RevId: 161141650
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
index b515fd7..be1354b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
@@ -39,15 +39,14 @@
public class BuildConfigurationFunction implements SkyFunction {
private final BlazeDirectories directories;
- private final RuleClassProvider ruleClassProvider;
+ private final ConfiguredRuleClassProvider ruleClassProvider;
private final ConfigurationCollectionFactory collectionFactory;
public BuildConfigurationFunction(BlazeDirectories directories,
RuleClassProvider ruleClassProvider) {
this.directories = directories;
- this.ruleClassProvider = ruleClassProvider;
- collectionFactory =
- ((ConfiguredRuleClassProvider) ruleClassProvider).getConfigurationCollectionFactory();
+ this.ruleClassProvider = (ConfiguredRuleClassProvider) ruleClassProvider;
+ collectionFactory = this.ruleClassProvider.getConfigurationCollectionFactory();
}
@Override
@@ -75,14 +74,17 @@
fragmentsMap.put(fragment.getClass(), fragment);
}
- BuildConfiguration config = new BuildConfiguration(directories, fragmentsMap,
- key.getBuildOptions(), workspaceNameValue.getName());
+ BuildConfiguration config =
+ new BuildConfiguration(
+ directories,
+ fragmentsMap,
+ key.getBuildOptions(),
+ workspaceNameValue.getName(),
+ ruleClassProvider.getDynamicTransitionMapper());
// Unlike static configurations, dynamic configurations don't need to embed transition logic
- // within the configuration itself. However we still use this interface to provide a mapping
- // between Transition types (e.g. HOST) and the dynamic transitions that apply those
- // transitions. Once static configurations are cleaned out we won't need this interface
- // any more (all the centralized logic that maintains the transition logic can be distributed
- // to the actual rule code that uses it).
+ // in the configuration itself. However we still use this interface to supply
+ // BuildConfigurationCollection.Transitions.configurationHook. Once we remove that dependency
+ // we can remove the below completely.
config.setConfigurationTransitions(collectionFactory.getDynamicTransitionLogic(config));
return new BuildConfigurationValue(config);