diff options
author | cparsons <cparsons@google.com> | 2017-10-11 01:21:46 +0200 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-10-11 10:58:35 +0200 |
commit | 8882192897fa3453d51fe907d19f948215a581af (patch) | |
tree | 209ba3549f34835a19a50c8689a02c33546afa65 /src/main/java/com | |
parent | 78927792c77a6468607e215034c22b0641553f77 (diff) |
SplitTransitionProvider no longer requires the attributes it uses are "Non Configurable"
RELNOTES: None.
PiperOrigin-RevId: 171751391
Diffstat (limited to 'src/main/java/com')
6 files changed, 23 insertions, 24 deletions
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 33c7531f4c..d406511d66 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 @@ public abstract class DependencyResolver { 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 @@ public abstract class DependencyResolver { * <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 @@ public abstract class DependencyResolver { 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 55e1f20879..f94ac86ca3 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 final class RuleContext extends TargetContext public Root getMiddlemanDirectory() { return getConfiguration().getMiddlemanDirectory(rule.getRepository()); } - + public Rule getRule() { return rule; } @@ -748,7 +748,8 @@ public final class RuleContext extends TargetContext 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 ebcefb6eb2..289f4453f6 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; 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 @@ public final class TransitionResolver { * {@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 @@ public final class TransitionResolver { // 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. diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java index 2fedb6a0b5..1f8313c071 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java @@ -188,7 +188,8 @@ public final class Attribute implements Comparable<Attribute> { /** * Transition to one or more configurations. To obtain the actual child configurations, - * invoke {@link Attribute#getSplitTransition(Rule)}. See {@link SplitTransition}. + * invoke {@link Attribute#getSplitTransition(ConfiguredAttributeMapper)}. + * See {@link SplitTransition}. **/ SPLIT } @@ -317,9 +318,9 @@ public final class Attribute implements Comparable<Attribute> { */ public interface SplitTransitionProvider { /** - * Returns the {@link SplitTransition} given the originating rule. + * Returns the {@link SplitTransition} given the attribute mapper of the originating rule. */ - SplitTransition<?> apply(Rule fromRule); + SplitTransition<?> apply(ConfiguredAttributeMapper attributeMap); } /** @@ -335,7 +336,7 @@ public final class Attribute implements Comparable<Attribute> { } @Override - public SplitTransition<?> apply(Rule fromRule) { + public SplitTransition<?> apply(ConfiguredAttributeMapper attributeMap) { return splitTransition; } } @@ -1954,13 +1955,13 @@ public final class Attribute implements Comparable<Attribute> { /** * Returns the split configuration transition for this attribute. * - * @param rule the originating {@link Rule} which owns this attribute + * @param attributeMapper the attribute mapper of the current {@link Rule} * @return a SplitTransition<BuildOptions> object * @throws IllegalStateException if {@link #hasSplitConfigurationTransition} is not true */ - public SplitTransition<?> getSplitTransition(Rule rule) { + public SplitTransition<?> getSplitTransition(ConfiguredAttributeMapper attributeMapper) { Preconditions.checkState(hasSplitConfigurationTransition()); - return splitTransitionProvider.apply(rule); + return splitTransitionProvider.apply(attributeMapper); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java index 60895449a0..cc80e1b76c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java @@ -26,8 +26,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; -import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; -import com.google.devtools.build.lib.packages.Rule; +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; @@ -124,8 +123,7 @@ public class MultiArchSplitTransitionProvider implements SplitTransitionProvider } @Override - public SplitTransition<?> apply(Rule fromRule) { - NonconfigurableAttributeMapper attrMapper = NonconfigurableAttributeMapper.of(fromRule); + public SplitTransition<?> apply(ConfiguredAttributeMapper attrMapper) { String platformTypeString = attrMapper.get(PlatformRule.PLATFORM_TYPE_ATTR_NAME, STRING); String minimumOsVersionString = attrMapper.get(PlatformRule.MINIMUM_OS_VERSION, STRING); PlatformType platformType; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java index f18c11f930..9278b01be3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java @@ -909,16 +909,14 @@ public class ObjcRuleClasses { <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ .add( attr(PLATFORM_TYPE_ATTR_NAME, STRING) - .mandatory() - .nonconfigurable("Determines the configuration transition on deps")) + .mandatory()) /* <!-- #BLAZE_RULE($apple_platform_rule).ATTRIBUTE(minimum_os_version) --> The minimum OS version that this target and its dependencies should be built for. This should be a dotted version string such as "7.3". <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/ .add( - attr(MINIMUM_OS_VERSION, STRING) - .nonconfigurable("Determines the configuration transition on deps")) + attr(MINIMUM_OS_VERSION, STRING)) .build(); } |