diff options
author | gregce <gregce@google.com> | 2017-12-22 10:01:18 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-22 10:03:21 -0800 |
commit | b6b2eaae47ef925aba062f5db4fe69c19705e5ae (patch) | |
tree | b8021ef795684849b00574e092ba8cf98f86e769 /src/main/java/com/google | |
parent | 5892f3a08113f93c5f2570304f13c2047f24f7a5 (diff) |
Replace Attribute.Transition with config.transitions.Transition.
PiperOrigin-RevId: 179936355
Diffstat (limited to 'src/main/java/com/google')
23 files changed, 78 insertions, 61 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 6418d6d012..5ebf3384f5 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -293,6 +293,26 @@ java_library( ], ) +# Provides core configuration transition abstractions and Blaze-common (i.e not +# rule-specific) transitions. +java_library( + name = "config-transitions", + srcs = glob([ + "analysis/config/transitions/*.java", + ]) + [ + "analysis/config/BuildOptions.java", + "analysis/config/FragmentOptions.java", + ], + deps = [ + "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/common/options", + "//src/main/java/com/google/devtools/common/options:invocation_policy", + "//src/main/protobuf:invocation_policy_java_proto", + "//third_party:guava", + ], +) + java_library( name = "syntax", srcs = glob([ @@ -348,6 +368,7 @@ java_library( ], deps = [ "//src/main/java/com/google/devtools/build/lib:config-matching-provider", + "//src/main/java/com/google/devtools/build/lib:config-transitions", "//src/main/java/com/google/devtools/build/lib:events", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:syntax", @@ -424,6 +445,7 @@ java_library( "analysis/actions/*.java", "analysis/buildinfo/*.java", "analysis/config/*.java", + "analysis/config/transitions/*.java", "analysis/configuredtargets/*.java", "analysis/constraints/*.java", "analysis/extra/*.java", diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java index d8ec317c07..35ed29b55b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java @@ -35,12 +35,12 @@ import com.google.devtools.build.lib.analysis.config.DynamicTransitionMapper; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.PatchTransition; import com.google.devtools.build.lib.analysis.config.RunUnder; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.constraints.EnvironmentRule; import com.google.devtools.build.lib.analysis.test.TestConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; -import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; 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 816dba9d43..222a250b4e 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 @@ -45,6 +45,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.ConfigurationResolver; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.config.PatchTransition; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.constraints.TopLevelConstraintSemantics; import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory; import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory.CoverageReportActionsWrapper; @@ -62,7 +63,6 @@ import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; 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.Transition; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.NoSuchPackageException; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java index 2c0bd9e0f6..beb12bfa35 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java @@ -34,6 +34,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactor import com.google.devtools.build.lib.analysis.config.DefaultsPackage; import com.google.devtools.build.lib.analysis.config.DynamicTransitionMapper; import com.google.devtools.build.lib.analysis.config.FragmentOptions; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.skylark.SkylarkModules; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -213,7 +214,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { private final Map<Class<? extends RuleDefinition>, RuleClass> ruleMap = new HashMap<>(); private final Digraph<Class<? extends RuleDefinition>> dependencyGraph = new Digraph<>(); - private ImmutableMap.Builder<Attribute.Transition, Attribute.Transition> dynamicTransitionMaps + private ImmutableMap.Builder<Transition, Transition> dynamicTransitionMaps = ImmutableMap.builder(); private Class<? extends BuildConfiguration.Fragment> universalFragment; private PrerequisiteValidator prerequisiteValidator; @@ -330,7 +331,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { return this; } - public Builder addDynamicTransitionMaps(Map<Attribute.Transition, Attribute.Transition> maps) { + public Builder addDynamicTransitionMaps(Map<Transition, Transition> maps) { dynamicTransitionMaps.putAll(maps); return this; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java index a1e974b75b..318d4f5c4a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java @@ -16,9 +16,9 @@ package com.google.devtools.build.lib.analysis; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.AspectDescriptor; -import com.google.devtools.build.lib.packages.Attribute; import java.util.Map; import java.util.Objects; import javax.annotation.Nullable; @@ -103,7 +103,7 @@ public abstract class Dependency { * Creates a new {@link Dependency} with the given transition and aspects. */ public static Dependency withTransitionAndAspects( - Label label, Attribute.Transition transition, AspectCollection aspects) { + Label label, Transition transition, AspectCollection aspects) { return new ConfigurationTransitionDependency(label, transition, aspects); } @@ -141,7 +141,7 @@ public abstract class Dependency { * * @throws IllegalStateException if {@link #hasExplicitConfiguration} returns true. */ - public abstract Attribute.Transition getTransition(); + public abstract Transition getTransition(); /** * Returns the set of aspects which should be evaluated and combined with the configured target @@ -179,7 +179,7 @@ public abstract class Dependency { } @Override - public Attribute.Transition getTransition() { + public Transition getTransition() { throw new IllegalStateException( "This dependency has an explicit configuration, not a transition."); } @@ -243,7 +243,7 @@ public abstract class Dependency { } @Override - public Attribute.Transition getTransition() { + public Transition getTransition() { throw new IllegalStateException( "This dependency has an explicit configuration, not a transition."); } @@ -287,11 +287,11 @@ public abstract class Dependency { * Implementation of a dependency with a given configuration transition. */ private static final class ConfigurationTransitionDependency extends Dependency { - private final Attribute.Transition transition; + private final Transition transition; private final AspectCollection aspects; public ConfigurationTransitionDependency( - Label label, Attribute.Transition transition, AspectCollection aspects) { + Label label, Transition transition, AspectCollection aspects) { super(label); this.transition = Preconditions.checkNotNull(transition); this.aspects = Preconditions.checkNotNull(aspects); @@ -309,7 +309,7 @@ public abstract class Dependency { } @Override - public Attribute.Transition getTransition() { + public Transition getTransition() { return transition; } 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 8fbdf4bf32..7b9d60d175 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 @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.config.PatchTransition; import com.google.devtools.build.lib.analysis.config.TransitionResolver; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.events.Location; @@ -723,7 +724,7 @@ public abstract class DependencyResolver { if (toTarget == null) { return; // Skip this round: we still need to Skyframe-evaluate the dep's target. } - Attribute.Transition transition = transitionResolver.evaluateTransition( + Transition transition = transitionResolver.evaluateTransition( ruleConfig, rule, attributeAndOwner.attribute, toTarget, attributeMap); outgoingEdges.put( attributeAndOwner.attribute, 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 4462ae4bee..6abf4912a1 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 @@ -47,6 +47,7 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.FragmentCollection; import com.google.devtools.build.lib.analysis.config.PatchTransition; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.fileset.FilesetProvider; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; @@ -389,13 +390,13 @@ public final class RuleContext extends TargetContext * Returns a configuration fragment for this this target. */ @Nullable - public <T extends Fragment> T getFragment(Class<T> fragment, Attribute.Transition transition) { + public <T extends Fragment> T getFragment(Class<T> fragment, Transition transition) { return getFragment(fragment, fragment.getSimpleName(), "", transition); } @Nullable protected <T extends Fragment> T getFragment(Class<T> fragment, String name, - String additionalErrorMessage, Attribute.Transition transition) { + String additionalErrorMessage, Transition transition) { // TODO(bazel-team): The fragments can also be accessed directly through BuildConfiguration. // Can we lock that down somehow? Preconditions.checkArgument(isLegalFragment(fragment, transition), @@ -413,7 +414,7 @@ public final class RuleContext extends TargetContext } @Nullable - public Fragment getSkylarkFragment(String name, Attribute.Transition transition) { + public Fragment getSkylarkFragment(String name, Transition transition) { Class<? extends Fragment> fragmentClass = getConfiguration(transition).getSkylarkFragmentByName(name); if (fragmentClass == null) { @@ -427,12 +428,12 @@ public final class RuleContext extends TargetContext transition); } - public ImmutableCollection<String> getSkylarkFragmentNames(Attribute.Transition transition) { + public ImmutableCollection<String> getSkylarkFragmentNames(Transition transition) { return getConfiguration(transition).getSkylarkFragmentNames(); } public <T extends Fragment> boolean isLegalFragment( - Class<T> fragment, Attribute.Transition transition) { + Class<T> fragment, Transition transition) { return fragment == universalFragment || fragment == PlatformConfiguration.class || configurationFragmentPolicy.isLegalConfigurationFragment(fragment, transition); @@ -443,7 +444,7 @@ public final class RuleContext extends TargetContext return isLegalFragment(fragment, ConfigurationTransition.NONE); } - protected BuildConfiguration getConfiguration(Attribute.Transition transition) { + protected BuildConfiguration getConfiguration(Transition transition) { return transition.isHostTransition() ? hostConfiguration : getConfiguration(); } @@ -1056,7 +1057,7 @@ public final class RuleContext extends TargetContext throw new IllegalStateException(getRuleClassNameForLogging() + " attribute " + attributeName + " is not a label type attribute"); } - Attribute.Transition transition = attributeDefinition.getConfigurationTransition(); + Transition transition = attributeDefinition.getConfigurationTransition(); if (mode == Mode.HOST) { if (!(transition instanceof PatchTransition)) { throw new IllegalStateException(getRule().getLocation() + ": " diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java index d8e1c55332..a6a54a28a6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java @@ -15,7 +15,7 @@ package com.google.devtools.build.lib.analysis.config; -import com.google.devtools.build.lib.packages.Attribute; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleTransitionFactory; @@ -37,7 +37,7 @@ public class ComposingRuleTransitionFactory implements RuleTransitionFactory { } @Override - public Attribute.Transition buildTransitionFor(Rule rule) { + public Transition buildTransitionFor(Rule rule) { PatchTransition transition1 = (PatchTransition) rtf1.buildTransitionFor(rule); PatchTransition transition2 = (PatchTransition) rtf2.buildTransitionFor(rule); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java index 3241edccff..b984ee4d55 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java @@ -16,9 +16,9 @@ package com.google.devtools.build.lib.analysis.config; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; 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 java.util.List; /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java index c23d7a8b74..9a16f0b2db 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java @@ -26,6 +26,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.Dependency; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.events.Event; @@ -179,7 +180,7 @@ public final class ConfigurationResolver { } boolean sameFragments = depFragments.equals(ctgFragments); - Attribute.Transition transition = dep.getTransition(); + Transition transition = dep.getTransition(); if (sameFragments) { if (transition == Attribute.ConfigurationTransition.NONE) { @@ -291,11 +292,11 @@ public final class ConfigurationResolver { // Treat this as immutable. The only reason this isn't an ImmutableSet is because it // gets bound to a NestedSet.toSet() reference, which returns a Set interface. final Set<Class<? extends BuildConfiguration.Fragment>> fragments; - final Attribute.Transition transition; + final Transition transition; private final int hashCode; FragmentsAndTransition(Set<Class<? extends BuildConfiguration.Fragment>> fragments, - Attribute.Transition transition) { + Transition transition) { this.fragments = fragments; this.transition = transition; hashCode = Objects.hash(this.fragments, this.transition); @@ -407,7 +408,7 @@ public final class ConfigurationResolver { */ @VisibleForTesting public static List<BuildOptions> applyTransition(BuildOptions fromOptions, - Attribute.Transition transition, + Transition transition, Iterable<Class<? extends BuildConfiguration.Fragment>> requiredFragments, RuleClassProvider ruleClassProvider, boolean trimResults) { List<BuildOptions> result; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java b/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java index 5166cb677c..0ccb19a40a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java @@ -14,8 +14,8 @@ package com.google.devtools.build.lib.analysis.config; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.packages.Attribute; -import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.packages.RuleClass; /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java index cdadf22a85..d0a779c1c7 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentCollection.java @@ -16,12 +16,11 @@ package com.google.devtools.build.lib.analysis.config; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableCollection; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.ClassObject; - import javax.annotation.Nullable; /** @@ -40,9 +39,9 @@ import javax.annotation.Nullable; + "(see <a href=\"../rules.md#fragments\">here</a>).") public class FragmentCollection implements ClassObject { private final RuleContext ruleContext; - private final Attribute.Transition transition; + private final Transition transition; - public FragmentCollection(RuleContext ruleContext, Attribute.Transition transition) { + public FragmentCollection(RuleContext ruleContext, Transition transition) { this.ruleContext = ruleContext; this.transition = transition; } @@ -71,7 +70,7 @@ public class FragmentCollection implements ClassObject { return String.format("'%s'", Joiner.on("', '").join(getKeys())); } - public static String getConfigurationName(Attribute.Transition config) { + public static String getConfigurationName(Transition config) { return config.isHostTransition() ? "host" : "target"; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/PatchTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/PatchTransition.java index 80091e05b9..fea95bac6a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/PatchTransition.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/PatchTransition.java @@ -13,7 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.analysis.config; -import com.google.devtools.build.lib.packages.Attribute; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; /** * Interface for a configuration transition. @@ -48,7 +48,7 @@ import com.google.devtools.build.lib.packages.Attribute; * {@link com.google.devtools.build.lib.analysis.config.BuildOptions} doesn't currently * enforce immutability. So care must be taken not to modify the wrong instance. */ -public interface PatchTransition extends Attribute.Transition { +public interface PatchTransition extends Transition { /** * Applies the transition. 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 e9c4b9bd7d..b84c5dbfbd 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 @@ -17,10 +17,10 @@ package com.google.devtools.build.lib.analysis.config; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; 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; @@ -29,7 +29,7 @@ import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; /** - * Tool for evaluating which {@link Attribute.Transition}(s) should be applied to given targets. + * Tool for evaluating which {@link Transition}(s) should be applied to given targets. * * <p>For the work of turning these transitions into actual configurations, see {@link * ConfigurationResolver}. @@ -130,7 +130,7 @@ public final class TransitionResolver { * Same as evaluateTransition except does not check for transitions coming from parents and * enables support for rule-triggered top-level configuration hooks. */ - public static Attribute.Transition evaluateTopLevelTransition( + public static Transition evaluateTopLevelTransition( TargetAndConfiguration targetAndConfig, DynamicTransitionMapper dynamicTransitionMapper) { Target target = targetAndConfig.getTarget(); BuildConfiguration fromConfig = targetAndConfig.getConfiguration(); diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java index 773001e004..da5dcc5fe9 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java @@ -22,9 +22,9 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.SetMultimap; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.syntax.Type.LabelClass; 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 3f68f6beb0..b736613863 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 @@ -29,6 +29,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Ordering; import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.Location; @@ -147,18 +148,6 @@ public final class Attribute implements Comparable<Attribute> { } /** - * A configuration transition. - */ - public interface Transition { - /** - * Does this transition switch to a "host" configuration? - */ - default boolean isHostTransition() { - return false; - } - } - - /** * A configuration split transition; this should be used to transition to multiple configurations * simultaneously. Note that the corresponding rule implementations must have special support to * handle this. diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java b/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java index ee44b6427b..fdc6061a99 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.SetMultimap; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; -import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import java.util.Collection; import java.util.Set; @@ -93,7 +93,7 @@ public final class ConfigurationFragmentPolicy { * * <p>The value is inherited by subclasses. */ - public Builder requiresConfigurationFragments(Attribute.Transition transition, + public Builder requiresConfigurationFragments(Transition transition, Collection<Class<?>> configurationFragments) { // We can relax this assumption if needed. But it's already sketchy to let a rule see more // than its own configuration. So we don't want to casually proliferate this pattern. diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java index e76339dc7b..a12c08f9c2 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; @@ -38,7 +39,6 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate; import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate.CannotPrecomputeDefaultsException; -import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.packages.BuildType.SelectorList; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; import com.google.devtools.build.lib.packages.RuleFactory.AttributeValues; diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java index 215461fa3d..94613ab5dc 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java @@ -14,7 +14,7 @@ package com.google.devtools.build.lib.packages; -import com.google.devtools.build.lib.packages.Attribute.Transition; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import javax.annotation.Nullable; /** diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java index 15851545ad..3391ccc9f4 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkDefinedAspect.java @@ -18,6 +18,7 @@ import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; @@ -37,7 +38,7 @@ public class SkylarkDefinedAspect implements SkylarkExportable, SkylarkAspect { private final ImmutableSet<SkylarkProviderIdentifier> provides; private final ImmutableSet<String> paramAttributes; private final ImmutableSet<String> fragments; - private final Attribute.Transition hostTransition; + private final Transition hostTransition; private final ImmutableSet<String> hostFragments; private final ImmutableList<Label> requiredToolchains; @@ -53,7 +54,7 @@ public class SkylarkDefinedAspect implements SkylarkExportable, SkylarkAspect { ImmutableSet<String> paramAttributes, ImmutableSet<String> fragments, // The host transition is in lib.analysis, so we can't reference it directly here. - Attribute.Transition hostTransition, + Transition hostTransition, ImmutableSet<String> hostFragments, ImmutableList<Label> requiredToolchains, Environment funcallEnv) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index f57d4891eb..6a8a0a9eb2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.HostTransition; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.Attribute; @@ -301,7 +302,7 @@ public final class AndroidRuleClasses { ImmutableSet.of("android_binary", "android_library"); @Override - public Attribute.Transition buildTransitionFor(Rule depRule) { + public Transition buildTransitionFor(Rule depRule) { return keepFilterRuleClasses.contains(depRule.getRuleClass()) ? null : ResourceFilterFactory.REMOVE_DYNAMICALLY_CONFIGURED_RESOURCE_FILTERING_TRANSITION; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java index af37c28c56..90cca62ef2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java @@ -34,11 +34,11 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.LanguageDependentFragment.LibraryLanguage; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.analysis.config.PatchTransition; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector.InstrumentationSpec; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; -import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.rules.cpp.transitions.DisableLipoTransition; 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 6e5bb27b1a..c2295c4b60 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 @@ -73,6 +73,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationResolver; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.config.PatchTransition; +import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget; import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget.DuplicateException; import com.google.devtools.build.lib.cmdline.Label; @@ -1120,7 +1121,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { // The host configuration inherits the data, not target options. This is so host tools don't // apply LIPO. BuildConfiguration firstTargetConfig = topLevelTargetConfigs.get(0); - Attribute.Transition dataTransition = + Transition dataTransition = ((ConfiguredRuleClassProvider) ruleClassProvider) .getDynamicTransitionMapper() .map(Attribute.ConfigurationTransition.DATA); @@ -1604,7 +1605,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { ExtendedEventHandler eventHandler, Label label, BuildConfiguration configuration, - Attribute.Transition transition) { + Transition transition) { return Iterables.getFirst( getConfiguredTargets( eventHandler, |