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 6120737f3b8431..9fa240c34b8558 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 @@ -45,6 +45,7 @@ import com.google.devtools.build.lib.packages.PackageGroup; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; +import com.google.devtools.build.lib.packages.RuleTransitionData; import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.syntax.EvalException; @@ -342,12 +343,8 @@ public final OrderedSetMultimap dependentNodeMap( collectPropagatingAspects( aspects, attribute.getName(), entry.getKey().getOwningAspect(), propagatingAspects); - // TODO(https://github.com/bazelbuild/bazel/issues/7814): Unify this and get rid of the - // check for splits, to directly use TransitionFactory. ConfigurationTransition attributeTransition = - attribute.hasSplitConfigurationTransition() - ? attribute.getSplitTransition(attributeMap) - : attribute.getConfigurationTransition(attributeMap); + attribute.getTransitionFactory().create(RuleTransitionData.create(attributeMap)); partiallyResolvedDeps.put( entry.getKey(), PartiallyResolvedDependency.of(toLabel, attributeTransition, propagatingAspects.build())); 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 c60143bd31a5f8..7ec4b3ea408230 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 @@ -52,8 +52,8 @@ import com.google.devtools.build.lib.analysis.config.FragmentCollection; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition; 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.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; @@ -88,6 +88,7 @@ import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleErrorConsumer; +import com.google.devtools.build.lib.packages.RuleTransitionData; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; @@ -823,9 +824,14 @@ public List getPrerequisiteConfiguredTargetAndTargets( getSplitPrerequisiteConfiguredTargetAndTargets(String attributeName) { checkAttribute(attributeName, Mode.SPLIT); Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName); + Preconditions.checkState(attributeDefinition.hasSplitConfigurationTransition()); SplitTransition transition = - attributeDefinition.getSplitTransition( - ConfiguredAttributeMapper.of(rule, configConditions)); + (SplitTransition) + attributeDefinition + .getTransitionFactory() + .create( + RuleTransitionData.create( + ConfiguredAttributeMapper.of(rule, configConditions))); BuildOptions fromOptions = getConfiguration().getOptions(); List splitOptions = transition.split(fromOptions); List deps = getConfiguredTargetAndTargetDeps(attributeName); @@ -1154,17 +1160,16 @@ private void checkAttribute(String attributeName, Mode mode) { throw new IllegalStateException(getRuleClassNameForLogging() + " attribute " + attributeName + " is not a label type attribute"); } - // TODO(https://github.com/bazelbuild/bazel/issues/7814): Refactor this to be more clear and - // not require a specific ConfigurationTransition. - ConfigurationTransition transition = attributeDefinition.getConfigurationTransition(null); + TransitionFactory transitionFactory = + attributeDefinition.getTransitionFactory(); if (mode == Mode.HOST) { - if (!(transition instanceof PatchTransition)) { + if (transitionFactory.isSplit()) { throw new IllegalStateException(getRule().getLocation() + ": " + getRuleClassNameForLogging() + " attribute " + attributeName + " is not configured for the host configuration"); } } else if (mode == Mode.TARGET) { - if (!(transition instanceof PatchTransition) && transition != NoTransition.INSTANCE) { + if (transitionFactory.isSplit() && !NoTransition.isInstance(transitionFactory)) { throw new IllegalStateException(getRule().getLocation() + ": " + getRuleClassNameForLogging() + " attribute " + attributeName + " is not configured for the target configuration"); 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 2455c25a2b4acc..22005e726542d1 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 @@ -16,6 +16,7 @@ import static com.google.common.collect.Sets.newEnumSet; +import com.google.auto.value.AutoValue; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.Preconditions; @@ -81,6 +82,33 @@ public final class Attribute implements Comparable { public static final RuleClassNamePredicate NO_RULE = RuleClassNamePredicate.only(); + /** Wrapper for a single configuration transition. */ + // TODO(https://github.com/bazelbuild/bazel/issues/7814): Remove this, have callers create + // factories. + @AutoValue + abstract static class TransitionFactoryWrapper implements TransitionFactory { + abstract ConfigurationTransition transition(); + + @Override + public ConfigurationTransition create(RuleTransitionData unused) { + return transition(); + } + + @Override + public boolean isHost() { + return transition().isHostTransition(); + } + + @Override + public boolean isSplit() { + return transition() instanceof SplitTransition; + } + + static TransitionFactory of(ConfigurationTransition transition) { + return new AutoValue_Attribute_TransitionFactoryWrapper(transition); + } + } + /** Wraps the information necessary to construct an Aspect. */ @VisibleForSerialization abstract static class RuleAspect { @@ -351,11 +379,9 @@ public static Attribute.Builder attr(String name, Type type) public static class ImmutableAttributeFactory { private final Type type; private final String doc; - private final ConfigurationTransition configTransition; + private final TransitionFactory transitionFactory; private final RuleClassNamePredicate allowedRuleClassesForLabels; private final RuleClassNamePredicate allowedRuleClassesForLabelsWarning; - // 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; @@ -373,10 +399,9 @@ public static class ImmutableAttributeFactory { String doc, ImmutableSet propertyFlags, Object value, - ConfigurationTransition configTransition, + TransitionFactory transitionFactory, RuleClassNamePredicate allowedRuleClassesForLabels, RuleClassNamePredicate allowedRuleClassesForLabelsWarning, - TransitionFactory splitTransitionFactory, FileTypeSet allowedFileTypesForLabels, ValidityPredicate validityPredicate, AttributeValueSource valueSource, @@ -387,10 +412,9 @@ public static class ImmutableAttributeFactory { ImmutableList> aspects) { this.type = type; this.doc = doc; - this.configTransition = configTransition; + this.transitionFactory = transitionFactory; this.allowedRuleClassesForLabels = allowedRuleClassesForLabels; this.allowedRuleClassesForLabelsWarning = allowedRuleClassesForLabelsWarning; - this.splitTransitionFactory = splitTransitionFactory; this.allowedFileTypesForLabels = allowedFileTypesForLabels; this.validityPredicate = validityPredicate; this.value = value; @@ -415,7 +439,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(splitTransitionFactory == null); + Preconditions.checkState(!transitionFactory.isSplit()); } // TODO(bazel-team): Set the default to be no file type, then remove this check, and also // remove all allowedFileTypes() calls without parameters. @@ -441,8 +465,7 @@ public Attribute build(String name) { type, propertyFlags, value, - configTransition, - splitTransitionFactory, + transitionFactory, allowedRuleClassesForLabels, allowedRuleClassesForLabelsWarning, allowedFileTypesForLabels, @@ -463,11 +486,9 @@ public Attribute build(String name) { public static class Builder { private final String name; private final Type type; - private ConfigurationTransition configTransition = NoTransition.INSTANCE; + private TransitionFactory transitionFactory = NoTransition.createFactory(); private RuleClassNamePredicate allowedRuleClassesForLabels = ANY_RULE; private RuleClassNamePredicate allowedRuleClassesForLabelsWarning = NO_RULE; - // 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; @@ -601,15 +622,12 @@ public Builder hasAnalysisTestTransition() { } /** 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"); + public Builder cfg(TransitionFactory transitionFactory) { + Preconditions.checkNotNull(transitionFactory); Preconditions.checkState( - splitTransitionFactory.isSplit(), - "cfg(TransitionFactory) is only valid for split transitions at this time."); - - this.splitTransitionFactory = Preconditions.checkNotNull(splitTransitionFactory); + NoTransition.isInstance(this.transitionFactory), + "the configuration transition is already set"); + this.transitionFactory = transitionFactory; return this; } @@ -619,25 +637,7 @@ public Builder cfg(TransitionFactory splitTransitionFa */ public Builder cfg(ConfigurationTransition configTransition) { Preconditions.checkNotNull(configTransition); - Preconditions.checkState(this.configTransition == NoTransition.INSTANCE, - "the configuration transition is already set"); - if (configTransition instanceof SplitTransition) { - return cfg( - new TransitionFactory() { - @Override - public ConfigurationTransition create(RuleTransitionData data) { - return configTransition; - } - - @Override - public boolean isSplit() { - return true; - } - }); - } else { - this.configTransition = configTransition; - return this; - } + return cfg(TransitionFactoryWrapper.of(configTransition)); } /** @@ -848,16 +848,16 @@ public Builder dontCheckConstraints() { * If this is a label or label-list attribute, then this sets the allowed rule types for the * labels occurring in the attribute. * - *

If the attribute contains Labels of any other rule type, then if they're in - * {@link #allowedRuleClassesForLabelsWarning}, the build continues with a warning. Else if - * they fulfill {@link #getMandatoryNativeProvidersList()}, the build continues without error. - * Else the build fails during analysis. + *

If the attribute contains Labels of any other rule type, then if they're in {@link + * #allowedRuleClassesForLabelsWarning}, the build continues with a warning. Else if they + * fulfill {@link #mandatoryNativeProvidersList}, the build continues without error. Else the + * build fails during analysis. * *

If neither this nor {@link #allowedRuleClassesForLabelsWarning} is set, only rules that - * fulfill {@link #getMandatoryNativeProvidersList()} build without error. + * fulfill {@link #mandatoryNativeProvidersList} build without error. * - *

This only works on a per-target basis, not on a per-file basis; with other words, it - * works for 'deps' attributes, but not 'srcs' attributes. + *

This only works on a per-target basis, not on a per-file basis; with other words, it works + * for 'deps' attributes, but not 'srcs' attributes. */ public Builder allowedRuleClasses(Iterable allowedRuleClasses) { return allowedRuleClasses( @@ -868,16 +868,16 @@ public Builder allowedRuleClasses(Iterable allowedRuleClasses) { * If this is a label or label-list attribute, then this sets the allowed rule types for the * labels occurring in the attribute. * - *

If the attribute contains Labels of any other rule type, then if they're in - * {@link #allowedRuleClassesForLabelsWarning}, the build continues with a warning. Else if - * they fulfill {@link #getMandatoryNativeProvidersList()}, the build continues without error. - * Else the build fails during analysis. + *

If the attribute contains Labels of any other rule type, then if they're in {@link + * #allowedRuleClassesForLabelsWarning}, the build continues with a warning. Else if they + * fulfill {@link #mandatoryNativeProvidersList}, the build continues without error. Else the + * build fails during analysis. * *

If neither this nor {@link #allowedRuleClassesForLabelsWarning} is set, only rules that - * fulfill {@link #getMandatoryNativeProvidersList()} build without error. + * fulfill {@link #mandatoryNativeProvidersList} build without error. * - *

This only works on a per-target basis, not on a per-file basis; with other words, it - * works for 'deps' attributes, but not 'srcs' attributes. + *

This only works on a per-target basis, not on a per-file basis; with other words, it works + * for 'deps' attributes, but not 'srcs' attributes. */ public Builder allowedRuleClasses(RuleClassNamePredicate allowedRuleClasses) { Preconditions.checkState(type.getLabelClass() == LabelClass.DEPENDENCY, @@ -891,16 +891,16 @@ public Builder allowedRuleClasses(RuleClassNamePredicate allowedRuleClasse * If this is a label or label-list attribute, then this sets the allowed rule types for the * labels occurring in the attribute. * - *

If the attribute contains Labels of any other rule type, then if they're in - * {@link #allowedRuleClassesForLabelsWarning}, the build continues with a warning. Else if - * they fulfill {@link #getMandatoryNativeProvidersList()}, the build continues without error. - * Else the build fails during analysis. + *

If the attribute contains Labels of any other rule type, then if they're in {@link + * #allowedRuleClassesForLabelsWarning}, the build continues with a warning. Else if they + * fulfill {@link #mandatoryNativeProvidersList}, the build continues without error. Else the + * build fails during analysis. * *

If neither this nor {@link #allowedRuleClassesForLabelsWarning} is set, only rules that - * fulfill {@link #getMandatoryNativeProvidersList()} build without error. + * fulfill {@link #mandatoryNativeProvidersList} build without error. * - *

This only works on a per-target basis, not on a per-file basis; with other words, it - * works for 'deps' attributes, but not 'srcs' attributes. + *

This only works on a per-target basis, not on a per-file basis; with other words, it works + * for 'deps' attributes, but not 'srcs' attributes. */ public Builder allowedRuleClasses(String... allowedRuleClasses) { return allowedRuleClasses(ImmutableSet.copyOf(allowedRuleClasses)); @@ -1173,10 +1173,9 @@ public ImmutableAttributeFactory buildPartial() { doc, Sets.immutableEnumSet(propertyFlags), valueSet ? value : type.getDefaultValue(), - configTransition, + transitionFactory, allowedRuleClassesForLabels, allowedRuleClassesForLabelsWarning, - splitTransitionFactory, allowedFileTypesForLabels, validityPredicate, valueSource, @@ -1925,10 +1924,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( // (We assume a hypothetical Type.isValid(Object) predicate.) private final Object defaultValue; - private final ConfigurationTransition configTransition; - - // TODO(https://github.com/bazelbuild/bazel/issues/7814): Merge this with configTransition. - private final TransitionFactory splitTransitionFactory; + private final TransitionFactory transitionFactory; /** * For label or label-list attributes, this predicate returns which rule @@ -1975,7 +1971,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( * declaration in the BUILD file. Must be null, or of type "type". May be an instance of * ComputedDefault, in which case its getDefault() method must return an instance of "type", * or null. Must be immutable. - * @param configTransition the configuration transition for this attribute (which must be of type + * @param transitionFactory the configuration transition for this attribute (which must be of type * LABEL, LABEL_LIST, NODEP_LABEL or NODEP_LABEL_LIST). */ @VisibleForSerialization @@ -1985,8 +1981,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( Type type, Set propertyFlags, Object defaultValue, - ConfigurationTransition configTransition, - TransitionFactory splitTransitionFactory, + TransitionFactory transitionFactory, RuleClassNamePredicate allowedRuleClassesForLabels, RuleClassNamePredicate allowedRuleClassesForLabelsWarning, FileTypeSet allowedFileTypesForLabels, @@ -1995,11 +1990,10 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( PredicateWithMessage allowedValues, RequiredProviders requiredProviders, ImmutableList> aspects) { - Preconditions.checkNotNull(configTransition); Preconditions.checkArgument( - (configTransition == NoTransition.INSTANCE) - || type.getLabelClass() == LabelClass.DEPENDENCY - || type.getLabelClass() == LabelClass.NONDEP_REFERENCE, + (NoTransition.isInstance(transitionFactory)) + || type.getLabelClass() == LabelClass.DEPENDENCY + || type.getLabelClass() == LabelClass.NONDEP_REFERENCE, "Configuration transitions can only be specified for label or label list attributes"); Preconditions.checkArgument( isLateBound(name) == (defaultValue instanceof LateBoundDefault), @@ -2008,7 +2002,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( if (isLateBound(name)) { LateBoundDefault lateBoundDefault = (LateBoundDefault) defaultValue; Preconditions.checkArgument( - !lateBoundDefault.useHostConfiguration() || configTransition.isHostTransition(), + !lateBoundDefault.useHostConfiguration() || transitionFactory.isHost(), "a late bound default value using the host configuration must use the host transition"); } @@ -2017,8 +2011,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( this.type = type; this.propertyFlags = propertyFlags; this.defaultValue = defaultValue; - this.configTransition = configTransition; - this.splitTransitionFactory = splitTransitionFactory; + this.transitionFactory = transitionFactory; this.allowedRuleClassesForLabels = allowedRuleClassesForLabels; this.allowedRuleClassesForLabelsWarning = allowedRuleClassesForLabelsWarning; this.allowedFileTypesForLabels = allowedFileTypesForLabels; @@ -2034,8 +2027,7 @@ public static LabelListLateBoundDefault fromRuleAndAttributesOnly( type, propertyFlags, defaultValue, - configTransition, - splitTransitionFactory, + transitionFactory, allowedRuleClassesForLabels, allowedRuleClassesForLabelsWarning, allowedFileTypesForLabels, @@ -2132,8 +2124,8 @@ public boolean useOutputLicenses() { /** * Returns true if this attribute uses a starlark-defined, non analysis-test configuration - * transition. See {@link FunctionSplitTransitionProvider}. Starlark-defined analysis-test - * configuration transitions are handled separately. See {@link #hasAnalysisTestTransition}. + * transition. Starlark-defined analysis-test configuration transitions are handled separately. + * See {@link #hasAnalysisTestTransition}. */ public boolean hasStarlarkDefinedTransition() { return getPropertyFlag(PropertyFlag.HAS_STARLARK_DEFINED_TRANSITION); @@ -2148,30 +2140,11 @@ public boolean hasAnalysisTestTransition() { } /** - * Returns the configuration transition for this attribute for label or label list attributes. For - * other attributes it will always return {@code NONE}. + * Returns the configuration transition factory for this attribute for label or label list + * attributes. For other attributes it will always return {@code NONE}. */ - public ConfigurationTransition getConfigurationTransition(AttributeMap usused) { - return configTransition; - } - - /** - * Returns the split configuration transition for this attribute. - * - * @param attributeMapper the attribute mapper of the current {@link Rule} - * @return a SplitTransition object - * @throws IllegalStateException if {@link #hasSplitConfigurationTransition} is not true - */ - public SplitTransition getSplitTransition(AttributeMap attributeMapper) { - Preconditions.checkState(hasSplitConfigurationTransition()); - return (SplitTransition) - splitTransitionFactory.create(RuleTransitionData.create(attributeMapper)); - } - - // TODO(https://github.com/bazelbuild/bazel/issues/7814): Remove this. - @VisibleForTesting - public TransitionFactory getSplitTransitionProviderForTesting() { - return splitTransitionFactory; + public TransitionFactory getTransitionFactory() { + return transitionFactory; } /** @@ -2179,7 +2152,7 @@ public TransitionFactory getSplitTransitionProviderForTestin */ // TODO(https://github.com/bazelbuild/bazel/issues/7814) Remove this. public boolean hasSplitConfigurationTransition() { - return (splitTransitionFactory != null); + return transitionFactory.isSplit(); } /** @@ -2188,7 +2161,7 @@ public boolean hasSplitConfigurationTransition() { */ // TODO(https://github.com/bazelbuild/bazel/issues/7814) Remove this. public boolean hasHostConfigurationTransition() { - return configTransition.isHostTransition(); + return transitionFactory.isHost(); } /** @@ -2454,8 +2427,7 @@ public boolean equals(Object o) { && Objects.equals(type, attribute.type) && Objects.equals(propertyFlags, attribute.propertyFlags) && Objects.equals(defaultValue, attribute.defaultValue) - && Objects.equals(configTransition, attribute.configTransition) - && Objects.equals(splitTransitionFactory, attribute.splitTransitionFactory) + && Objects.equals(transitionFactory, attribute.transitionFactory) && Objects.equals(allowedRuleClassesForLabels, attribute.allowedRuleClassesForLabels) && Objects.equals( allowedRuleClassesForLabelsWarning, attribute.allowedRuleClassesForLabelsWarning) @@ -2485,8 +2457,7 @@ public Attribute.Builder cloneBuilder(Type tp) { builder.requiredProvidersBuilder = requiredProviders.copyAsBuilder(); builder.validityPredicate = validityPredicate; builder.condition = condition; - builder.configTransition = configTransition; - builder.splitTransitionFactory = splitTransitionFactory; + builder.transitionFactory = transitionFactory; builder.propertyFlags = newEnumSet(propertyFlags, PropertyFlag.class); builder.value = defaultValue; builder.valueSet = false; 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 85c0dcc0aa3149..2211e5736f0f1d 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 @@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableMap; 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.ConfigurationTransition; 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; @@ -279,7 +280,9 @@ 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(FakeAttributeMapper.empty())).isEqualTo(splitTransition); + ConfigurationTransition transition = + attr.getTransitionFactory().create(RuleTransitionData.create(FakeAttributeMapper.empty())); + assertThat(transition).isEqualTo(splitTransition); } @Test @@ -288,8 +291,9 @@ public void testSplitTransitionProvider() throws Exception { Attribute attr = attr("foo", LABEL).cfg(splitTransitionProvider).allowedFileTypes().build(); assertThat(attr.hasSplitConfigurationTransition()).isTrue(); - assertThat(attr.getSplitTransition(FakeAttributeMapper.empty()) instanceof TestSplitTransition) - .isTrue(); + ConfigurationTransition transition = + attr.getTransitionFactory().create(RuleTransitionData.create(FakeAttributeMapper.empty())); + assertThat(transition).isInstanceOf(TestSplitTransition.class); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java index 4f3be6a042c79a..eed8c0208389dd 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java @@ -2750,7 +2750,7 @@ public void testTransitionEquality() throws Exception { .getAssociatedRule() .getRuleClassObject() .getAttributeByName("dep") - .getSplitTransitionProviderForTesting()) + .getTransitionFactory()) .getStarlarkDefinedConfigTransitionForTesting(); StarlarkDefinedConfigTransition attrTransition = diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java index 382c7bb8618559..95ff987951550b 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java @@ -58,7 +58,6 @@ import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import com.google.devtools.build.lib.syntax.StarlarkSemantics; import com.google.devtools.build.lib.syntax.Type; -import com.google.devtools.build.lib.testutil.FakeAttributeMapper; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.util.FileTypeSet; import java.util.Collection; @@ -588,8 +587,7 @@ public void testAttrCfg() throws Exception { @Test public void testAttrCfgTarget() throws Exception { Attribute attr = buildAttribute("a1", "attr.label(cfg = 'target', allow_files = True)"); - assertThat(attr.getConfigurationTransition(FakeAttributeMapper.empty())) - .isEqualTo(NoTransition.INSTANCE); + assertThat(NoTransition.isInstance(attr.getTransitionFactory())).isTrue(); } @Test