SplitTransitionProvider no longer requires the attributes it uses are "Non Configurable"
RELNOTES: None.
PiperOrigin-RevId: 171751391
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 33c7531..d406511 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
@@ -371,8 +371,7 @@
LateBoundDefault<?, ?> lateBoundDefault = attribute.getLateBoundDefault();
- Collection<BuildOptions> splitOptions =
- getSplitOptions(depResolver.rule, attribute, ruleConfig);
+ Collection<BuildOptions> splitOptions = getSplitOptions(attributeMap, attribute, ruleConfig);
if (!splitOptions.isEmpty() && !ruleConfig.isHostConfiguration()) {
// Late-bound attribute with a split transition:
// Since we want to get the same results as TransitionResolver.evaluateTransition (but
@@ -425,14 +424,15 @@
* <p>Even though the attribute may have a split, splits don't have to apply in every
* configuration (see {@link Attribute.SplitTransition#split}).
*/
- private static Collection<BuildOptions> getSplitOptions(Rule rule, Attribute attribute,
+ private static Collection<BuildOptions> getSplitOptions(ConfiguredAttributeMapper attributeMap,
+ Attribute attribute,
BuildConfiguration ruleConfig) {
if (!attribute.hasSplitConfigurationTransition()) {
return ImmutableList.<BuildOptions>of();
}
@SuppressWarnings("unchecked") // Attribute.java doesn't have the BuildOptions symbol.
Attribute.SplitTransition<BuildOptions> transition =
- (Attribute.SplitTransition<BuildOptions>) attribute.getSplitTransition(rule);
+ (Attribute.SplitTransition<BuildOptions>) attribute.getSplitTransition(attributeMap);
return transition.split(ruleConfig.getOptions());
}
@@ -716,7 +716,7 @@
return; // Skip this round: we still need to Skyframe-evaluate the dep's target.
}
Attribute.Transition transition = transitionResolver.evaluateTransition(
- ruleConfig, rule, attributeAndOwner.attribute, toTarget);
+ ruleConfig, rule, attributeAndOwner.attribute, toTarget, attributeMap);
outgoingEdges.put(
attributeAndOwner.attribute,
transition == Attribute.ConfigurationTransition.NULL
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 55e1f20..f94ac86 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
@@ -251,7 +251,7 @@
public Root getMiddlemanDirectory() {
return getConfiguration().getMiddlemanDirectory(rule.getRepository());
}
-
+
public Rule getRule() {
return rule;
}
@@ -748,7 +748,8 @@
Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName);
@SuppressWarnings("unchecked") // Attribute.java doesn't have the BuildOptions symbol.
SplitTransition<BuildOptions> transition =
- (SplitTransition<BuildOptions>) attributeDefinition.getSplitTransition(rule);
+ (SplitTransition<BuildOptions>) attributeDefinition.getSplitTransition(
+ ConfiguredAttributeMapper.of(rule, configConditions));
List<ConfiguredTarget> deps = targetMap.get(attributeName);
List<BuildOptions> splitOptions = transition.split(getConfiguration().getOptions());
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 ebcefb6..289f445 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
@@ -19,6 +19,7 @@
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.Attribute.Transition;
+import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.PackageGroup;
import com.google.devtools.build.lib.packages.Rule;
@@ -63,7 +64,7 @@
* {@link Attribute.ConfigurationTransition}).
*/
public Transition evaluateTransition(BuildConfiguration fromConfig, final Rule fromRule,
- final Attribute attribute, final Target toTarget) {
+ 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)) {
@@ -112,7 +113,7 @@
// The "else" is a legacy restriction from static configurations.
if (attribute.hasSplitConfigurationTransition()) {
currentTransition = split(currentTransition,
- (SplitTransition<BuildOptions>) attribute.getSplitTransition(fromRule));
+ (SplitTransition<BuildOptions>) attribute.getSplitTransition(attributeMap));
} else {
// III. Attributes determine configurations. The configuration of a prerequisite is determined
// by the attribute.