From 5f9e26c7209dcf6595472df3d246ccf9ce0daacd Mon Sep 17 00:00:00 2001 From: John Cater Date: Mon, 25 Mar 2019 12:36:35 -0400 Subject: [PATCH] Change uses of SplitTransitionProvider to TransitionFactory. Removed SplitTransitionProvider. Part of #7814. --- .../lib/analysis/skylark/SkylarkAttr.java | 8 +- .../StarlarkAttributeTransitionProvider.java | 18 +-- .../build/lib/packages/Attribute.java | 110 +++++++----------- .../lib/rules/objc/AppleSkylarkCommon.java | 4 +- .../MultiArchSplitTransitionProvider.java | 19 +-- .../lib/analysis/CircularDependencyTest.java | 14 +-- .../build/lib/packages/AttributeTest.java | 16 ++- 7 files changed, 83 insertions(+), 106 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java index ee191676a61c47..ef7e2d5f4782db 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java @@ -22,12 +22,12 @@ import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.StarlarkDefinedConfigTransition; import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet; import com.google.devtools.build.lib.packages.Attribute.ImmutableAttributeFactory; import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate; -import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; import com.google.devtools.build.lib.packages.AttributeValueSource; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.Provider; @@ -252,7 +252,7 @@ && containsNonNoneKey(arguments, ALLOW_SINGLE_FILE_ARG)) { Object trans = arguments.get(CONFIGURATION_ARG); boolean isSplit = trans instanceof SplitTransition - || trans instanceof SplitTransitionProvider + || trans instanceof TransitionFactory || trans instanceof StarlarkDefinedConfigTransition; if (isSplit && defaultValue instanceof SkylarkLateBoundDefault) { throw new EvalException( @@ -273,8 +273,8 @@ && containsNonNoneKey(arguments, ALLOW_SINGLE_FILE_ARG)) { builder.cfg(HostTransition.INSTANCE); } else if (trans instanceof SplitTransition) { builder.cfg((SplitTransition) trans); - } else if (trans instanceof SplitTransitionProvider) { - builder.cfg((SplitTransitionProvider) trans); + } else if (trans instanceof TransitionFactory) { + builder.cfg((TransitionFactory) trans); } else if (trans instanceof StarlarkDefinedConfigTransition) { StarlarkDefinedConfigTransition starlarkDefinedTransition = (StarlarkDefinedConfigTransition) trans; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttributeTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttributeTransitionProvider.java index b2c831fb7923ff..d9cd1bde96d626 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttributeTransitionProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttributeTransitionProvider.java @@ -23,13 +23,15 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.StarlarkDefinedConfigTransition; import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.Attribute; -import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; +import com.google.devtools.build.lib.packages.RuleTransitionData; import com.google.devtools.build.lib.packages.StructImpl; import com.google.devtools.build.lib.packages.StructProvider; +import com.google.devtools.build.lib.skylarkbuildapi.SplitTransitionProviderApi; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; @@ -39,17 +41,18 @@ import java.util.List; /** - * This class implements a {@link SplitTransitionProvider} to provide a starlark-defined transition - * that rules can apply to their dependencies' configurations. This transition has access to (1) the - * a map of the current configuration's build settings and (2) the configured attributes of the - * given rule (not its dependencies'). + * This class implements a {@link TransitionFactory} to provide a starlark-defined transition that + * rules can apply to their dependencies' configurations. This transition has access to (1) the a + * map of the current configuration's build settings and (2) the configured attributes of the given + * rule (not its dependencies'). * *

For starlark defined rule class transitions, see {@link StarlarkRuleTransitionProvider}. * *

TODO(bazel-team): Consider allowing dependency-typed attributes to actually return providers * instead of just labels (see {@link SkylarkAttributesCollection#addAttribute}). */ -public class StarlarkAttributeTransitionProvider implements SplitTransitionProvider { +public class StarlarkAttributeTransitionProvider + implements TransitionFactory, SplitTransitionProviderApi { private final StarlarkDefinedConfigTransition starlarkDefinedConfigTransition; StarlarkAttributeTransitionProvider( @@ -63,7 +66,8 @@ public StarlarkDefinedConfigTransition getStarlarkDefinedConfigTransitionForTest } @Override - public SplitTransition apply(AttributeMap attributeMap) { + public SplitTransition create(RuleTransitionData data) { + AttributeMap attributeMap = data.attributes(); Preconditions.checkArgument(attributeMap instanceof ConfiguredAttributeMapper); return new FunctionSplitTransition( starlarkDefinedConfigTransition, (ConfiguredAttributeMapper) attributeMap); 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 87dd882d596a2d..53fd8fc05cffb9 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 @@ -35,14 +35,13 @@ import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; -import com.google.devtools.build.lib.skylarkbuildapi.SplitTransitionProviderApi; -import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.ClassObject; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; @@ -287,44 +286,6 @@ public String checkValid(Rule from, Rule to) { } }; - /** - * Provides a {@link SplitTransition} given the originating target {@link Rule}. The split - * transition may be constant for all instances of the originating rule, or it may differ - * based on attributes of that rule. For instance, a split transition on a rule's deps may differ - * depending on the 'platform' attribute of the rule. - */ - public interface SplitTransitionProvider extends SplitTransitionProviderApi { - /** - * Returns the {@link SplitTransition} given the attribute mapper of the originating rule. - */ - SplitTransition apply(AttributeMap attributeMap); - } - - /** - * Implementation of {@link SplitTransitionProvider} that returns a single {@link SplitTransition} - * regardless of the originating rule. - */ - @AutoCodec.VisibleForSerialization - @AutoCodec - static class BasicSplitTransitionProvider implements SplitTransitionProvider { - private final SplitTransition splitTransition; - - @AutoCodec.VisibleForSerialization - BasicSplitTransitionProvider(SplitTransition splitTransition) { - this.splitTransition = splitTransition; - } - - @Override - public SplitTransition apply(AttributeMap attributeMap) { - return splitTransition; - } - - @Override - public void repr(SkylarkPrinter printer) { - printer.append(""); - } - } - /** A predicate class to check if the value of the attribute comes from a predefined set. */ @AutoCodec public static class AllowedValueSet implements PredicateWithMessage { @@ -393,7 +354,8 @@ public static class ImmutableAttributeFactory { private final ConfigurationTransition configTransition; private final RuleClassNamePredicate allowedRuleClassesForLabels; private final RuleClassNamePredicate allowedRuleClassesForLabelsWarning; - private final SplitTransitionProvider splitTransitionProvider; + // TODO(https://github.com/bazelbuild/bazel/issues/7814): Merge this with configTransition. + private final TransitionFactory splitTransitionFactory; private final FileTypeSet allowedFileTypesForLabels; private final ValidityPredicate validityPredicate; private final Object value; @@ -414,7 +376,7 @@ public static class ImmutableAttributeFactory { ConfigurationTransition configTransition, RuleClassNamePredicate allowedRuleClassesForLabels, RuleClassNamePredicate allowedRuleClassesForLabelsWarning, - SplitTransitionProvider splitTransitionProvider, + TransitionFactory splitTransitionFactory, FileTypeSet allowedFileTypesForLabels, ValidityPredicate validityPredicate, AttributeValueSource valueSource, @@ -428,7 +390,7 @@ public static class ImmutableAttributeFactory { this.configTransition = configTransition; this.allowedRuleClassesForLabels = allowedRuleClassesForLabels; this.allowedRuleClassesForLabelsWarning = allowedRuleClassesForLabelsWarning; - this.splitTransitionProvider = splitTransitionProvider; + this.splitTransitionFactory = splitTransitionFactory; this.allowedFileTypesForLabels = allowedFileTypesForLabels; this.validityPredicate = validityPredicate; this.value = value; @@ -453,7 +415,7 @@ public Attribute build(String name) { Preconditions.checkState(!name.isEmpty(), "name has not been set"); if (valueSource == AttributeValueSource.LATE_BOUND) { Preconditions.checkState(isLateBound(name)); - Preconditions.checkState(splitTransitionProvider == null); + Preconditions.checkState(splitTransitionFactory == null); } // TODO(bazel-team): Set the default to be no file type, then remove this check, and also // remove all allowedFileTypes() calls without parameters. @@ -480,7 +442,7 @@ public Attribute build(String name) { propertyFlags, value, configTransition, - splitTransitionProvider, + splitTransitionFactory, allowedRuleClassesForLabels, allowedRuleClassesForLabelsWarning, allowedFileTypesForLabels, @@ -504,7 +466,8 @@ public static class Builder { private ConfigurationTransition configTransition = NoTransition.INSTANCE; private RuleClassNamePredicate allowedRuleClassesForLabels = ANY_RULE; private RuleClassNamePredicate allowedRuleClassesForLabelsWarning = NO_RULE; - private SplitTransitionProvider splitTransitionProvider; + // TODO(https://github.com/bazelbuild/bazel/issues/7814): Merge this with configTransition. + private TransitionFactory splitTransitionFactory; private FileTypeSet allowedFileTypesForLabels; private ValidityPredicate validityPredicate = ANY_EDGE; private Object value; @@ -637,14 +600,13 @@ public Builder hasAnalysisTestTransition() { "analysis-test split transition"); } - /** - * Defines the configuration transition for this attribute. - */ - public Builder cfg(SplitTransitionProvider splitTransitionProvider) { + /** Defines the configuration transition for this attribute. */ + // TODO(https://github.com/bazelbuild/bazel/issues/7814): Currently only for split transitions. + public Builder cfg(TransitionFactory splitTransitionFactory) { Preconditions.checkState(this.configTransition == NoTransition.INSTANCE, "the configuration transition is already set"); - this.splitTransitionProvider = Preconditions.checkNotNull(splitTransitionProvider); + this.splitTransitionFactory = Preconditions.checkNotNull(splitTransitionFactory); return this; } @@ -657,7 +619,18 @@ public Builder cfg(ConfigurationTransition configTransition) { Preconditions.checkState(this.configTransition == NoTransition.INSTANCE, "the configuration transition is already set"); if (configTransition instanceof SplitTransition) { - return cfg(new BasicSplitTransitionProvider((SplitTransition) configTransition)); + return cfg( + new TransitionFactory() { + @Override + public ConfigurationTransition create(RuleTransitionData data) { + return configTransition; + } + + @Override + public boolean isSplit() { + return true; + } + }); } else { this.configTransition = configTransition; return this; @@ -1200,7 +1173,7 @@ public ImmutableAttributeFactory buildPartial() { configTransition, allowedRuleClassesForLabels, allowedRuleClassesForLabelsWarning, - splitTransitionProvider, + splitTransitionFactory, allowedFileTypesForLabels, validityPredicate, valueSource, @@ -1951,7 +1924,8 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( private final ConfigurationTransition configTransition; - private final SplitTransitionProvider splitTransitionProvider; + // TODO(https://github.com/bazelbuild/bazel/issues/7814): Merge this with configTransition. + private final TransitionFactory splitTransitionFactory; /** * For label or label-list attributes, this predicate returns which rule @@ -2009,7 +1983,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( Set propertyFlags, Object defaultValue, ConfigurationTransition configTransition, - SplitTransitionProvider splitTransitionProvider, + TransitionFactory splitTransitionFactory, RuleClassNamePredicate allowedRuleClassesForLabels, RuleClassNamePredicate allowedRuleClassesForLabelsWarning, FileTypeSet allowedFileTypesForLabels, @@ -2041,7 +2015,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( this.propertyFlags = propertyFlags; this.defaultValue = defaultValue; this.configTransition = configTransition; - this.splitTransitionProvider = splitTransitionProvider; + this.splitTransitionFactory = splitTransitionFactory; this.allowedRuleClassesForLabels = allowedRuleClassesForLabels; this.allowedRuleClassesForLabelsWarning = allowedRuleClassesForLabelsWarning; this.allowedFileTypesForLabels = allowedFileTypesForLabels; @@ -2058,7 +2032,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( propertyFlags, defaultValue, configTransition, - splitTransitionProvider, + splitTransitionFactory, allowedRuleClassesForLabels, allowedRuleClassesForLabelsWarning, allowedFileTypesForLabels, @@ -2187,12 +2161,14 @@ public ConfigurationTransition getConfigurationTransition() { */ public SplitTransition getSplitTransition(AttributeMap attributeMapper) { Preconditions.checkState(hasSplitConfigurationTransition()); - return splitTransitionProvider.apply(attributeMapper); + return (SplitTransition) + splitTransitionFactory.create(RuleTransitionData.create(attributeMapper)); } + // TODO(https://github.com/bazelbuild/bazel/issues/7814): Remove this. @VisibleForTesting - public SplitTransitionProvider getSplitTransitionProviderForTesting() { - return splitTransitionProvider; + public TransitionFactory getSplitTransitionProviderForTesting() { + return splitTransitionFactory; } /** @@ -2200,7 +2176,7 @@ public SplitTransitionProvider getSplitTransitionProviderForTesting() { * See {@link SplitTransition}. */ public boolean hasSplitConfigurationTransition() { - return (splitTransitionProvider != null); + return (splitTransitionFactory != null); } /** @@ -2279,11 +2255,11 @@ public Predicate getAllowedRuleClassesPredicate() { } /** - * Returns a predicate that evaluates to true for rule classes that are - * allowed labels in this attribute. If this is not a label or label-list - * attribute, the returned predicate always evaluates to true. + * Returns a predicate that evaluates to true for rule classes that are allowed labels in this + * attribute. If this is not a label or label-list attribute, the returned predicate always + * evaluates to true. */ - // TODO(b/69917891) Remove these methods once checkbuilddeps no longer depends on them. + // TODO(b/69917891): Remove these methods once checkbuilddeps no longer depends on them. public Predicate getAllowedRuleClassNamesPredicate() { return allowedRuleClassesForLabels.asPredicateOfRuleClassName(); } @@ -2467,7 +2443,7 @@ public boolean equals(Object o) { && Objects.equals(propertyFlags, attribute.propertyFlags) && Objects.equals(defaultValue, attribute.defaultValue) && Objects.equals(configTransition, attribute.configTransition) - && Objects.equals(splitTransitionProvider, attribute.splitTransitionProvider) + && Objects.equals(splitTransitionFactory, attribute.splitTransitionFactory) && Objects.equals(allowedRuleClassesForLabels, attribute.allowedRuleClassesForLabels) && Objects.equals( allowedRuleClassesForLabelsWarning, attribute.allowedRuleClassesForLabelsWarning) @@ -2498,7 +2474,7 @@ public Attribute.Builder cloneBuilder(Type tp) { builder.validityPredicate = validityPredicate; builder.condition = condition; builder.configTransition = configTransition; - builder.splitTransitionProvider = splitTransitionProvider; + builder.splitTransitionFactory = splitTransitionFactory; builder.propertyFlags = newEnumSet(propertyFlags, PropertyFlag.class); builder.value = defaultValue; builder.valueSet = false; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index e77c445a135dee..6b5411b84bf084 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -26,7 +26,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.events.Location; -import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; @@ -44,6 +43,7 @@ import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; import com.google.devtools.build.lib.skylarkbuildapi.FileApi; import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi; +import com.google.devtools.build.lib.skylarkbuildapi.SplitTransitionProviderApi; import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleCommonApi; import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.Environment; @@ -175,7 +175,7 @@ public ImmutableMap getTargetAppleEnvironment( } @Override - public SplitTransitionProvider getMultiArchSplitProvider() { + public SplitTransitionProviderApi getMultiArchSplitProvider() { return new MultiArchSplitTransitionProvider(); } 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 4c6db535055faa..19829b4ea38c3c 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 @@ -25,9 +25,9 @@ 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.analysis.config.transitions.SplitTransition; -import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; -import com.google.devtools.build.lib.packages.AttributeMap; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.packages.RuleTransitionData; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher; @@ -36,16 +36,19 @@ import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PlatformRule; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skylarkbuildapi.SplitTransitionProviderApi; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import java.util.List; import java.util.stream.Collectors; /** - * {@link SplitTransitionProvider} implementation for multi-architecture apple rules which can - * accept different apple platform types (such as ios or watchos). + * {@link TransitionFactory} implementation for multi-architecture apple rules which can accept + * different apple platform types (such as ios or watchos). */ -public class MultiArchSplitTransitionProvider implements SplitTransitionProvider, SkylarkValue { +// TODO(https://github.com/bazelbuild/bazel/pull/7825): Rename to MultiArchTransitionFactory. +public class MultiArchSplitTransitionProvider + implements TransitionFactory, SplitTransitionProviderApi, SkylarkValue { @VisibleForTesting static final String UNSUPPORTED_PLATFORM_TYPE_ERROR_FORMAT = @@ -126,9 +129,9 @@ public static void validateMinimumOs(RuleContext ruleContext) throws RuleErrorEx } @Override - public SplitTransition apply(AttributeMap attrMapper) { - String platformTypeString = attrMapper.get(PlatformRule.PLATFORM_TYPE_ATTR_NAME, STRING); - String minimumOsVersionString = attrMapper.get(PlatformRule.MINIMUM_OS_VERSION, STRING); + public SplitTransition create(RuleTransitionData data) { + String platformTypeString = data.attributes().get(PlatformRule.PLATFORM_TYPE_ATTR_NAME, STRING); + String minimumOsVersionString = data.attributes().get(PlatformRule.MINIMUM_OS_VERSION, STRING); PlatformType platformType; Optional minimumOsVersion; try { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java b/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java index 8ee5c84f37d140..a35cb2d9f33c89 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java @@ -26,16 +26,15 @@ 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.transitions.SplitTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.analysis.util.MockRule; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault; -import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; -import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; -import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.packages.RuleTransitionData; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import org.junit.Test; import org.junit.runner.RunWith; @@ -270,14 +269,11 @@ public void testAspectCycle() throws Exception { .mandatory() .allowedFileTypes() .cfg( - new SplitTransitionProvider() { + new TransitionFactory() { @Override - public void repr(SkylarkPrinter printer) {} - - @Override - public SplitTransition apply(AttributeMap map) { + public SplitTransition create(RuleTransitionData data) { return (BuildOptions options) -> { - String define = map.get("define", STRING); + String define = data.attributes().get("define", STRING); BuildOptions newOptions = options.clone(); BuildConfiguration.Options optionsFragment = newOptions.get(BuildConfiguration.Options.class); diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java index 8ce3e892635d44..d52a8f92a7b6ed 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java @@ -28,12 +28,12 @@ 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.SplitTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate; -import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.Type; +import com.google.devtools.build.lib.testutil.FakeAttributeMapper; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; import java.util.Arrays; @@ -279,7 +279,7 @@ public void testSplitTransition() throws Exception { TestSplitTransition splitTransition = new TestSplitTransition(); Attribute attr = attr("foo", LABEL).cfg(splitTransition).allowedFileTypes().build(); assertThat(attr.hasSplitConfigurationTransition()).isTrue(); - assertThat(attr.getSplitTransition(null)).isEqualTo(splitTransition); + assertThat(attr.getSplitTransition(FakeAttributeMapper.empty())).isEqualTo(splitTransition); } @Test @@ -288,7 +288,7 @@ public void testSplitTransitionProvider() throws Exception { Attribute attr = attr("foo", LABEL).cfg(splitTransitionProvider).allowedFileTypes().build(); assertThat(attr.hasSplitConfigurationTransition()).isTrue(); - assertThat(attr.getSplitTransition(null) instanceof TestSplitTransition).isTrue(); + assertThat(attr.getSplitTransition(FakeAttributeMapper.empty()) instanceof TestSplitTransition).isTrue(); } @Test @@ -305,14 +305,12 @@ public List split(BuildOptions buildOptions) { } } - private static class TestSplitTransitionProvider implements SplitTransitionProvider { + private static class TestSplitTransitionProvider + implements TransitionFactory { @Override - public SplitTransition apply(AttributeMap attrMapper) { + public SplitTransition create(RuleTransitionData data) { return new TestSplitTransition(); } - - @Override - public void repr(SkylarkPrinter printer) {} } @Test