Convert uses of RuleTransitionFactory to TransitionFactory. Part of #7814. Closes #7922. PiperOrigin-RevId: 241744479
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 2e8c096..8d96baf 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
@@ -29,9 +29,10 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment; import com.google.devtools.build.lib.analysis.config.BuildOptions; -import com.google.devtools.build.lib.analysis.config.ComposingRuleTransitionFactory; import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory; import com.google.devtools.build.lib.analysis.config.FragmentOptions; +import com.google.devtools.build.lib.analysis.config.transitions.ComposingTransitionFactory; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics; import com.google.devtools.build.lib.analysis.skylark.BazelStarlarkContext; import com.google.devtools.build.lib.analysis.skylark.SkylarkModules; @@ -52,7 +53,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.ThirdPartyLicenseExistencePolicy; import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.packages.RuleErrorConsumer; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.skylarkbuildapi.Bootstrap; @@ -252,7 +252,7 @@ new Digraph<>(); private List<Class<? extends BuildConfiguration.Fragment>> universalFragments = new ArrayList<>(); - @Nullable private RuleTransitionFactory trimmingTransitionFactory; + @Nullable private TransitionFactory<Rule> trimmingTransitionFactory; private OptionsDiffPredicate shouldInvalidateCacheForOptionDiff = OptionsDiffPredicate.ALWAYS_INVALIDATE; private PrerequisiteValidator prerequisiteValidator; @@ -410,12 +410,14 @@ * feature flags, and support for this transition factory will likely be removed at some point * in the future (whenever automatic trimming is sufficiently workable). */ - public Builder addTrimmingTransitionFactory(RuleTransitionFactory factory) { + public Builder addTrimmingTransitionFactory(TransitionFactory<Rule> factory) { + Preconditions.checkNotNull(factory); + Preconditions.checkArgument(!factory.isSplit()); if (trimmingTransitionFactory == null) { - trimmingTransitionFactory = Preconditions.checkNotNull(factory); + trimmingTransitionFactory = factory; } else { - trimmingTransitionFactory = new ComposingRuleTransitionFactory( - trimmingTransitionFactory, Preconditions.checkNotNull(factory)); + trimmingTransitionFactory = + ComposingTransitionFactory.of(trimmingTransitionFactory, factory); } return this; } @@ -423,10 +425,10 @@ /** * Overrides the transition factory run over all targets. * - * @see {@link #addTrimmingTransitionFactory(RuleTransitionFactory)} + * @see {@link #addTrimmingTransitionFactory(TransitionFactory<Rule>)} */ @VisibleForTesting(/* for testing trimming transition factories without relying on prod use */ ) - public Builder overrideTrimmingTransitionFactoryForTesting(RuleTransitionFactory factory) { + public Builder overrideTrimmingTransitionFactoryForTesting(TransitionFactory<Rule> factory) { trimmingTransitionFactory = null; return this.addTrimmingTransitionFactory(factory); } @@ -609,7 +611,7 @@ private final Map<String, Class<? extends Fragment>> optionsToFragmentMap; /** The transition factory used to produce the transition that will trim targets. */ - @Nullable private final RuleTransitionFactory trimmingTransitionFactory; + @Nullable private final TransitionFactory<Rule> trimmingTransitionFactory; /** The predicate used to determine whether a diff requires the cache to be invalidated. */ private final OptionsDiffPredicate shouldInvalidateCacheForOptionDiff; @@ -649,7 +651,7 @@ ImmutableList<Class<? extends FragmentOptions>> configurationOptions, ImmutableList<ConfigurationFragmentFactory> configurationFragments, ImmutableList<Class<? extends BuildConfiguration.Fragment>> universalFragments, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory<Rule> trimmingTransitionFactory, OptionsDiffPredicate shouldInvalidateCacheForOptionDiff, PrerequisiteValidator prerequisiteValidator, ImmutableMap<String, Object> skylarkAccessibleJavaClasses, @@ -769,12 +771,12 @@ /** * Returns the transition factory used to produce the transition to trim targets. * - * <p>This is a temporary measure for supporting manual trimming of feature flags, and support - * for this transition factory will likely be removed at some point in the future (whenever - * automatic trimming is sufficiently workable + * <p>This is a temporary measure for supporting manual trimming of feature flags, and support for + * this transition factory will likely be removed at some point in the future (whenever automatic + * trimming is sufficiently workable */ @Nullable - public RuleTransitionFactory getTrimmingTransitionFactory() { + public TransitionFactory<Rule> getTrimmingTransitionFactory() { return trimmingTransitionFactory; }
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 8b572a0..eb57e3f 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.transitions.ConfigurationTransition; import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.NullTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.causes.Cause; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -46,7 +47,6 @@ 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.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.util.OrderedSetMultimap; @@ -188,7 +188,7 @@ @Nullable Aspect aspect, ImmutableMap<Label, ConfigMatchingProvider> configConditions, ImmutableSet<Label> toolchainLabels, - @Nullable RuleTransitionFactory trimmingTransitionFactory) + @Nullable TransitionFactory<Rule> trimmingTransitionFactory) throws EvalException, InterruptedException, InconsistentAspectOrderException { NestedSetBuilder<Cause> rootCauses = NestedSetBuilder.stableOrder(); OrderedSetMultimap<DependencyKind, Dependency> outgoingEdges = @@ -244,7 +244,7 @@ ImmutableMap<Label, ConfigMatchingProvider> configConditions, ImmutableSet<Label> toolchainLabels, NestedSetBuilder<Cause> rootCauses, - @Nullable RuleTransitionFactory trimmingTransitionFactory) + @Nullable TransitionFactory<Rule> trimmingTransitionFactory) throws EvalException, InterruptedException, InconsistentAspectOrderException { Target target = node.getTarget(); BuildConfiguration config = node.getConfiguration(); @@ -366,7 +366,7 @@ OrderedSetMultimap<DependencyKind, PartiallyResolvedDependency> partiallyResolvedDeps, Map<Label, Target> targetMap, BuildConfiguration originalConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory) + @Nullable TransitionFactory<Rule> trimmingTransitionFactory) throws InconsistentAspectOrderException { OrderedSetMultimap<DependencyKind, Dependency> outgoingEdges = OrderedSetMultimap.create();
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 deleted file mode 100644 index bf6ad58..0000000 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java +++ /dev/null
@@ -1,82 +0,0 @@ -// Copyright 2017 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.devtools.build.lib.analysis.config; - -import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.analysis.config.transitions.ComposingTransition; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition; -import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; -import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; -import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; - -/** A {@link RuleTransitionFactory} that composes other {@link RuleTransitionFactory}s. */ -// TODO(https://github.com/bazelbuild/bazel/issues/7814): Replace with ComposingTransitionFactory. -@AutoCodec -public class ComposingRuleTransitionFactory implements RuleTransitionFactory { - - private final RuleTransitionFactory rtf1; - private final RuleTransitionFactory rtf2; - - /** - * Creates a factory that applies the given factories in-order ({@code rtf1} first, - * {@code rtf2} second). - */ - public ComposingRuleTransitionFactory(RuleTransitionFactory rtf1, RuleTransitionFactory rtf2) { - this.rtf1 = rtf1; - this.rtf2 = rtf2; - } - - @Override - public PatchTransition buildTransitionFor(Rule rule) { - ConfigurationTransition composed = - ComposingTransition.of(rtf1.buildTransitionFor(rule), rtf2.buildTransitionFor(rule)); - if (composed instanceof PatchTransition) { - // This is one of the two input transitions. Especially if it's a NoTransition or - // HostTransition, we should give it back so it can be specially identified as described - // in composeTransitions. - return (PatchTransition) composed; - } else { - // This is a composed transition, but we need a composed transition which is both a - // PatchTransition and can be registered as equal to another instance of the same composed - // transition. - return new AsPatchTransition(composed); - } - } - - private static final class AsPatchTransition implements PatchTransition { - private final ConfigurationTransition wrapped; - - private AsPatchTransition(ConfigurationTransition wrapped) { - this.wrapped = wrapped; - } - - @Override - public BuildOptions patch(BuildOptions options) { - return Iterables.getOnlyElement(wrapped.apply(options)); - } - - @Override - public int hashCode() { - return wrapped.hashCode(); - } - - @Override - public boolean equals(Object other) { - return other instanceof AsPatchTransition - && this.wrapped.equals(((AsPatchTransition) other).wrapped); - } - } -}
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 a4599ba..af1b663 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
@@ -41,7 +41,6 @@ import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.RuleClassProvider; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.skyframe.BuildConfigurationValue; import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction; @@ -575,7 +574,9 @@ * * <ol> * <li>Apply the per-target transitions specified in {@code asDeps}. This can be used, e.g., to - * apply {@link RuleTransitionFactory}s over global top-level configurations. + * apply {@link + * com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory}s over global + * top-level configurations. * <li>(Optionally) trim configurations to only the fragments the targets actually need. This is * triggered by {@link BuildConfiguration.Options#trimConfigurations}. * </ol>
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 2e71ee7..207d2ae 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
@@ -19,8 +19,8 @@ import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.NullTransition; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; import javax.annotation.Nullable; @@ -53,7 +53,7 @@ BuildConfiguration fromConfig, ConfigurationTransition baseTransition, Target toTarget, - @Nullable RuleTransitionFactory trimmingTransitionFactory) { + @Nullable TransitionFactory<Rule> trimmingTransitionFactory) { // I. The null configuration always remains the null configuration. We could fold this into // (III), but NoTransition doesn't work if the source is the null configuration. @@ -94,7 +94,7 @@ private static ConfigurationTransition applyRuleTransition( ConfigurationTransition currentTransition, Target toTarget) { Rule associatedRule = toTarget.getAssociatedRule(); - RuleTransitionFactory transitionFactory = + TransitionFactory<Rule> transitionFactory = associatedRule.getRuleClassObject().getTransitionFactory(); return applyTransitionFromFactory(currentTransition, toTarget, transitionFactory); } @@ -107,10 +107,10 @@ private static ConfigurationTransition applyTransitionFromFactory( ConfigurationTransition currentTransition, Target toTarget, - @Nullable RuleTransitionFactory transitionFactory) { + @Nullable TransitionFactory<Rule> transitionFactory) { if (transitionFactory != null) { return ComposingTransition.of( - currentTransition, transitionFactory.buildTransitionFor(toTarget.getAssociatedRule())); + currentTransition, transitionFactory.create(toTarget.getAssociatedRule())); } return currentTransition; }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java index 0bfcbc5..f165629 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java
@@ -37,11 +37,12 @@ @Override public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) { return builder - .cfg(HostTransition.INSTANCE) - .override(attr("tags", Type.STRING_LIST) - // No need to show up in ":all", etc. target patterns. - .value(ImmutableList.of("manual")) - .nonconfigurable("low-level attribute, used in TargetUtils without configurations")) + .cfg(HostTransition.createFactory()) + .override( + attr("tags", Type.STRING_LIST) + // No need to show up in ":all", etc. target patterns. + .value(ImmutableList.of("manual")) + .nonconfigurable("low-level attribute, used in TargetUtils without configurations")) /* <!-- #BLAZE_RULE(environment).ATTRIBUTE(fulfills) --> The set of environments this one is considered a valid "standin" for. <p> @@ -55,10 +56,12 @@ Environments may only fulfill other environments in the same environment group. </p> <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ - .add(attr(FULFILLS_ATTRIBUTE, BuildType.LABEL_LIST) - .allowedRuleClasses(EnvironmentRule.RULE_NAME) - .allowedFileTypes(FileTypeSet.NO_FILE) - .nonconfigurable("used for defining constraint models - this shouldn't be configured")) + .add( + attr(FULFILLS_ATTRIBUTE, BuildType.LABEL_LIST) + .allowedRuleClasses(EnvironmentRule.RULE_NAME) + .allowedFileTypes(FileTypeSet.NO_FILE) + .nonconfigurable( + "used for defining constraint models - this shouldn't be configured")) .exemptFromConstraintChecking("this rule *defines* a constraint") .setUndocumented() .build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkRuleTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkRuleTransitionProvider.java index 858c098..bf7db5a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkRuleTransitionProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkRuleTransitionProvider.java
@@ -21,12 +21,12 @@ 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.PatchTransition; +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.BuildType; import com.google.devtools.build.lib.packages.RawAttributeMapper; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.StructImpl; import com.google.devtools.build.lib.packages.StructProvider; import com.google.devtools.build.lib.syntax.Environment; @@ -37,7 +37,7 @@ import java.util.List; /** - * This class implements {@link RuleTransitionFactory} to provide a starlark-defined transition that + * This class implements {@link TransitionFactory} to provide a starlark-defined transition that * rules can apply to their own configuration. 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'). @@ -48,7 +48,7 @@ * * <p>For starlark-defined attribute transitions, see {@link StarlarkAttributeTransitionProvider}. */ -public class StarlarkRuleTransitionProvider implements RuleTransitionFactory { +public class StarlarkRuleTransitionProvider implements TransitionFactory<Rule> { private final StarlarkDefinedConfigTransition starlarkDefinedConfigTransition; @@ -62,10 +62,17 @@ } @Override - public PatchTransition buildTransitionFor(Rule rule) { + public PatchTransition create(Rule rule) { return new FunctionPatchTransition(starlarkDefinedConfigTransition, rule); } + @Override + public boolean isSplit() { + // The transitions returned by this factory are guaranteed not to be splits. + return false; + } + + /** The actual transition used by the rule. */ class FunctionPatchTransition extends StarlarkTransition implements PatchTransition { private final StructImpl attrObject;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestTrimmingTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestTrimmingTransitionFactory.java index 956a645..b94a91c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestTrimmingTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestTrimmingTransitionFactory.java
@@ -18,10 +18,10 @@ import com.google.devtools.build.lib.analysis.config.FragmentOptions; 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.TransitionFactory; import com.google.devtools.build.lib.analysis.test.TestConfiguration.TestOptions; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.common.options.Options; import java.util.LinkedHashSet; import java.util.Set; @@ -29,7 +29,7 @@ /** * Trimming transition factory which removes the test config fragment when entering a non-test rule. */ -public final class TestTrimmingTransitionFactory implements RuleTransitionFactory { +public final class TestTrimmingTransitionFactory implements TransitionFactory<Rule> { private static final Set<String> TEST_OPTIONS = ImmutableSet.copyOf(Options.getDefaults(TestOptions.class).asMap().keySet()); @@ -37,7 +37,7 @@ /** * Trimming transition which removes the test config fragment if --trim_test_configuration is on. */ - public static enum TestTrimmingTransition implements PatchTransition { + public enum TestTrimmingTransition implements PatchTransition { INSTANCE; @Override @@ -62,7 +62,7 @@ } @Override - public PatchTransition buildTransitionFor(Rule rule) { + public PatchTransition create(Rule rule) { RuleClass ruleClass = rule.getRuleClassObject(); if (ruleClass .getConfigurationFragmentPolicy()
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeTransitionData.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeTransitionData.java index a43c760..de6199e 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AttributeTransitionData.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeTransitionData.java
@@ -18,7 +18,7 @@ /** * Helper class which contains data used by a {@link TransitionFactory} to create a transition for - * rules and attributes. + * attributes. */ // This class is in lib.packages in order to access AttributeMap, which is not available to // the lib.analysis.config.transitions package.
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 b46bce6..328a840 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
@@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition; 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.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; @@ -624,23 +625,6 @@ } } - /** A RuleTransitionFactory which always returns the same transition. */ - @AutoCodec.VisibleForSerialization - @AutoCodec - static final class FixedTransitionFactory implements RuleTransitionFactory { - private final PatchTransition transition; - - @AutoCodec.VisibleForSerialization - FixedTransitionFactory(PatchTransition transition) { - this.transition = transition; - } - - @Override - public PatchTransition buildTransitionFor(Rule rule) { - return transition; - } - } - /** * Name of default attribute implicitly added to all Skylark RuleClasses that are {@code * build_setting}s. @@ -679,7 +663,7 @@ private boolean hasStarlarkRuleTransition = false; private boolean ignorePackageLicenses = false; private ImplicitOutputsFunction implicitOutputsFunction = ImplicitOutputsFunction.NONE; - private RuleTransitionFactory transitionFactory; + private TransitionFactory<Rule> transitionFactory; private ConfiguredTargetFactory<?, ?, ?> configuredTargetFactory = null; private PredicateWithMessage<Rule> validityPredicate = PredicatesWithMessage.<Rule>alwaysTrue(); @@ -1049,15 +1033,14 @@ * Applies the given transition to all incoming edges for this rule class. * * <p>This cannot be a {@link SplitTransition} because that requires coordination with the - * rule's parent: use {@link - * Attribute.Builder#cfg(com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory)} - * on the parent to declare splits. + * rule's parent: use {@link Attribute.Builder#cfg(TransitionFactory)} on the parent to declare + * splits. * * <p>If you need the transition to depend on the rule it's being applied to, use {@link - * #cfg(RuleTransitionFactory)}. + * #cfg(TransitionFactory)}. */ public Builder cfg(PatchTransition transition) { - return cfg(new FixedTransitionFactory(transition)); + return cfg((TransitionFactory<Rule>) (unused) -> (transition)); } /** @@ -1066,12 +1049,13 @@ * <p>Unlike {@link #cfg(PatchTransition)}, the factory can examine the rule when deciding what * transition to use. */ - public Builder cfg(RuleTransitionFactory transitionFactory) { + public Builder cfg(TransitionFactory<Rule> transitionFactory) { Preconditions.checkState(type != RuleClassType.ABSTRACT, "Setting not inherited property (cfg) of abstract rule class '%s'", name); Preconditions.checkState(this.transitionFactory == null, "Property cfg has already been set"); Preconditions.checkNotNull(transitionFactory); + Preconditions.checkArgument(!transitionFactory.isSplit()); this.transitionFactory = transitionFactory; return this; } @@ -1491,7 +1475,7 @@ * A factory which will produce a configuration transition that should be applied on any edge of * the configured target graph that leads into a target of this rule class. */ - private final RuleTransitionFactory transitionFactory; + private final TransitionFactory<Rule> transitionFactory; /** The factory that creates configured targets from this rule. */ private final ConfiguredTargetFactory<?, ?, ?> configuredTargetFactory; @@ -1597,7 +1581,7 @@ boolean hasFunctionTransitionWhitelist, boolean ignorePackageLicenses, ImplicitOutputsFunction implicitOutputsFunction, - RuleTransitionFactory transitionFactory, + TransitionFactory<Rule> transitionFactory, ConfiguredTargetFactory<?, ?, ?> configuredTargetFactory, PredicateWithMessage<Rule> validityPredicate, Predicate<String> preferredDependencyPredicate, @@ -1704,7 +1688,7 @@ return implicitOutputsFunction; } - public RuleTransitionFactory getTransitionFactory() { + public TransitionFactory<Rule> getTransitionFactory() { return transitionFactory; }
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 deleted file mode 100644 index 7fe079c..0000000 --- a/src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2017 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.devtools.build.lib.packages; - -import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; - -/** - * Customizable transition which accepts the rule it will be executing on. - */ -public interface RuleTransitionFactory { - /** - * Generates a transition to be used when entering the given rule. - * - * <p>This cannot be a {@link - * com.google.devtools.build.lib.analysis.config.transitions.SplitTransition} because splits are - * conceptually a property of the <i>parent<i> rule. In other words, it makes sense for a parent - * to say "build my deps in configurations A and B". But it doesn't make sense for a dep to say - * "build myself in configurations A and B" if its parent doesn't know how to intelligently handle - * the results. - * - * <p>If this class determines that no transition should be performed, it should return {@code - * NoTransition.INSTANCE}. - */ - // TODO(bazel-team): Refactor to only take an AttributeMap. Currently the entire Rule is consumed - // by StarlarkRuleTransitionProvider and TestTrimmingTransitionFactory. - PatchTransition buildTransitionFor(Rule rule); -}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ActionGraphQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/ActionGraphQueryEnvironment.java index 68ff864..593157b 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/ActionGraphQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/ActionGraphQueryEnvironment.java
@@ -20,12 +20,13 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.TargetParsingException; import com.google.devtools.build.lib.cmdline.TargetPattern; import com.google.devtools.build.lib.events.ExtendedEventHandler; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.PackageManager; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; @@ -153,7 +154,7 @@ OutputStream out, SkyframeExecutor skyframeExecutor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory<Rule> trimmingTransitionFactory, PackageManager packageManager) { return ImmutableList.of( new ActionGraphProtoOutputFormatterCallback(
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java index e41357d..fcbc15f0 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
@@ -20,12 +20,13 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.TargetParsingException; import com.google.devtools.build.lib.cmdline.TargetPattern; import com.google.devtools.build.lib.events.ExtendedEventHandler; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.PackageManager; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; @@ -159,7 +160,7 @@ OutputStream out, SkyframeExecutor skyframeExecutor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory<Rule> trimmingTransitionFactory, PackageManager packageManager) { AspectResolver aspectResolver = cqueryOptions.aspectDeps.createResolver(packageManager, eventHandler);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java index c193b1a..dff58a5 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.TargetParsingException; @@ -34,7 +35,6 @@ import com.google.devtools.build.lib.packages.DependencyFilter; import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.FilteringPolicies; import com.google.devtools.build.lib.pkgcache.PackageManager; @@ -143,7 +143,7 @@ OutputStream outputStream, SkyframeExecutor skyframeExecutor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory<Rule> trimmingTransitionFactory, PackageManager packageManager); public abstract String getOutputFormat();
diff --git a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java index 1259cfc..5c642cf 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
@@ -31,6 +31,7 @@ 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.NullTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.causes.Cause; import com.google.devtools.build.lib.cmdline.Label; @@ -39,7 +40,7 @@ import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor; @@ -65,7 +66,7 @@ protected final BuildConfiguration hostConfiguration; private final HashMap<Label, Target> partialResultMap; - @Nullable private final RuleTransitionFactory trimmingTransitionFactory; + @Nullable private final TransitionFactory<Rule> trimmingTransitionFactory; @Override public String getName() { @@ -83,7 +84,7 @@ SkyframeExecutor skyframeExecutor, TargetAccessor<ConfiguredTarget> accessor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory) { + @Nullable TransitionFactory<Rule> trimmingTransitionFactory) { super(eventHandler, options, out, skyframeExecutor, accessor); this.hostConfiguration = hostConfiguration; this.trimmingTransitionFactory = trimmingTransitionFactory; @@ -187,15 +188,11 @@ private String getRuleClassTransition(ConfiguredTarget ct, Target target) { String output = ""; if (ct instanceof RuleConfiguredTarget) { - RuleTransitionFactory factory = + TransitionFactory<Rule> factory = target.getAssociatedRule().getRuleClassObject().getTransitionFactory(); if (factory != null) { output = - factory - .buildTransitionFor(target.getAssociatedRule()) - .getClass() - .getSimpleName() - .concat(" -> "); + factory.create(target.getAssociatedRule()).getClass().getSimpleName().concat(" -> "); } } return output;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java index 155da06..35f9aa4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java
@@ -22,17 +22,17 @@ 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.PatchTransition; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; /** * A transition factory for trimming feature flags manually via an attribute which specifies the * feature flags used by transitive dependencies. */ -public class ConfigFeatureFlagTaggedTrimmingTransitionFactory implements RuleTransitionFactory { +public class ConfigFeatureFlagTaggedTrimmingTransitionFactory implements TransitionFactory<Rule> { private static final class ConfigFeatureFlagTaggedTrimmingTransition implements PatchTransition { public static final ConfigFeatureFlagTaggedTrimmingTransition EMPTY = @@ -81,7 +81,7 @@ } @Override - public PatchTransition buildTransitionFor(Rule rule) { + public PatchTransition create(Rule rule) { NonconfigurableAttributeMapper attrs = NonconfigurableAttributeMapper.of(rule); RuleClass ruleClass = rule.getRuleClassObject(); if (ruleClass.getName().equals(ConfigRuleClasses.ConfigFeatureFlagRule.RULE_NAME)) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java index b68366d..b482729 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
@@ -20,21 +20,21 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; 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.TransitionFactory; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import java.util.Map; /** - * Transition factory which allows for setting the values of config_feature_flags below the rule - * it is attached to based on one of that rule's attributes. + * Transition factory which allows for setting the values of config_feature_flags below the rule it + * is attached to based on one of that rule's attributes. * * <p>Currently, this is only intended for use by android_binary and other Android top-level rules. */ -public class ConfigFeatureFlagTransitionFactory implements RuleTransitionFactory { +public class ConfigFeatureFlagTransitionFactory implements TransitionFactory<Rule> { /** Transition which resets the set of flag-value pairs to the map it was constructed with. */ @AutoCodec @@ -93,7 +93,7 @@ } @Override - public PatchTransition buildTransitionFor(Rule rule) { + public PatchTransition create(Rule rule) { NonconfigurableAttributeMapper attrs = NonconfigurableAttributeMapper.of(rule); if (attrs.isAttributeValueExplicitlySpecified(attributeName)) { return new ConfigFeatureFlagValuesTransition(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java index 62f5b67..c0dd02f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinaryRule.java
@@ -24,7 +24,7 @@ import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; -import com.google.devtools.build.lib.analysis.config.ComposingRuleTransitionFactory; +import com.google.devtools.build.lib.analysis.config.transitions.ComposingTransitionFactory; import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.RuleClass; @@ -149,7 +149,7 @@ .setImplicitOutputsFunction( ImplicitOutputsFunction.fromFunctions(ObjcRuleClasses.LIPOBIN_OUTPUT)) .cfg( - new ComposingRuleTransitionFactory( + ComposingTransitionFactory.of( (rule) -> AppleCrosstoolTransition.APPLE_CROSSTOOL_TRANSITION, new ConfigFeatureFlagTransitionFactory("feature_flags"))) .addRequiredToolchains(CppRuleClasses.ccToolchainTypeAttribute(env))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java index 609f6df..fc3ea65 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
@@ -23,7 +23,7 @@ import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; -import com.google.devtools.build.lib.analysis.config.ComposingRuleTransitionFactory; +import com.google.devtools.build.lib.analysis.config.transitions.ComposingTransitionFactory; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; import com.google.devtools.build.lib.packages.RuleClass; @@ -63,7 +63,9 @@ return builder .requiresConfigurationFragments( - ObjcConfiguration.class, J2ObjcConfiguration.class, AppleConfiguration.class, + ObjcConfiguration.class, + J2ObjcConfiguration.class, + AppleConfiguration.class, CppConfiguration.class) /* <!-- #BLAZE_RULE(apple_static_library).ATTRIBUTE(avoid_deps) --> <p>A list of targets which should not be included (nor their transitive dependencies @@ -73,7 +75,7 @@ <p>This attribute effectively serves to remove portions of the dependency tree from a static library, and is useful most commonly in scenarios where static libraries depend on each other.</p> - + <p>That is, suppose static libraries X and C are typically distributed to consumers separately. C is a very-common base library, and X contains less-common functionality; X depends on C, such that applications seeking to import library X must also import library @@ -105,7 +107,7 @@ <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS -->*/ .setImplicitOutputsFunction(ImplicitOutputsFunction.fromFunctions(LIPO_ARCHIVE)) .cfg( - new ComposingRuleTransitionFactory( + ComposingTransitionFactory.of( (rule) -> AppleCrosstoolTransition.APPLE_CROSSTOOL_TRANSITION, new ConfigFeatureFlagTransitionFactory("feature_flags"))) .addRequiredToolchains(CppRuleClasses.ccToolchainTypeAttribute(env))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuleClasses.java index 9918a11..d112089 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuleClasses.java
@@ -14,10 +14,11 @@ package com.google.devtools.build.lib.rules.python; import com.google.common.base.Preconditions; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.RawAttributeMapper; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; @@ -53,7 +54,7 @@ * PyCommon#validateTargetPythonVersionAttr}) to report an attribute error to the user. This case * should be prevented by attribute validation if the rule class is defined correctly. */ - public static RuleTransitionFactory makeVersionTransition( + public static TransitionFactory<Rule> makeVersionTransition( PythonVersionTransition defaultTransition) { return (rule) -> { AttributeMap attrs = RawAttributeMapper.of(rule); @@ -87,6 +88,6 @@ * A Python version transition that sets the version as specified by the target's attributes, with * a default determined by {@link PythonOptions#getDefaultPythonVersion}. */ - public static final RuleTransitionFactory VERSION_TRANSITION = + public static final TransitionFactory<Rule> VERSION_TRANSITION = makeVersionTransition(PythonVersionTransition.toDefault()); }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java index 254ef0f..3db997a 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
@@ -38,6 +38,7 @@ import com.google.common.collect.Lists; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; @@ -867,7 +868,7 @@ boolean outputsDefaultExecutable, boolean isAnalysisTest, ImplicitOutputsFunction implicitOutputsFunction, - RuleTransitionFactory transitionFactory, + TransitionFactory<Rule> transitionFactory, ConfiguredTargetFactory<?, ?, ?> configuredTargetFactory, PredicateWithMessage<Rule> validityPredicate, Predicate<String> preferredDependencyPredicate,
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java index 55136a7..292cbca 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java
@@ -58,8 +58,7 @@ @Test public void emptyTransition_returnsOriginalOptionsIfFragmentNotPresent() throws Exception { Rule rule = scratchRule("a", "empty", "feature_flag_setter(name = 'empty', flag_values = {})"); - PatchTransition transition = - new ConfigFeatureFlagTransitionFactory("flag_values").buildTransitionFor(rule); + PatchTransition transition = new ConfigFeatureFlagTransitionFactory("flag_values").create(rule); BuildOptions original = getOptionsWithoutFlagFragment(); BuildOptions converted = transition.patch(original); @@ -81,8 +80,7 @@ " name = 'flag',", " allowed_values = ['a', 'b'],", " default_value = 'a')"); - PatchTransition transition = - new ConfigFeatureFlagTransitionFactory("flag_values").buildTransitionFor(rule); + PatchTransition transition = new ConfigFeatureFlagTransitionFactory("flag_values").create(rule); BuildOptions original = getOptionsWithoutFlagFragment(); BuildOptions converted = transition.patch(original); @@ -94,8 +92,7 @@ @Test public void emptyTransition_returnsClearedOptionsIfFragmentPresent() throws Exception { Rule rule = scratchRule("a", "empty", "feature_flag_setter(name = 'empty', flag_values = {})"); - PatchTransition transition = - new ConfigFeatureFlagTransitionFactory("flag_values").buildTransitionFor(rule); + PatchTransition transition = new ConfigFeatureFlagTransitionFactory("flag_values").create(rule); Map<Label, String> originalFlagMap = ImmutableMap.of(Label.parseAbsolute("//a:flag", ImmutableMap.of()), "value"); @@ -121,8 +118,7 @@ " name = 'flag',", " allowed_values = ['a', 'b'],", " default_value = 'a')"); - PatchTransition transition = - new ConfigFeatureFlagTransitionFactory("flag_values").buildTransitionFor(rule); + PatchTransition transition = new ConfigFeatureFlagTransitionFactory("flag_values").create(rule); Map<Label, String> originalFlagMap = ImmutableMap.of(Label.parseAbsolute("//a:old", ImmutableMap.of()), "value"); Map<Label, String> expectedFlagMap = @@ -190,35 +186,34 @@ new EqualsTester() .addEqualityGroup( // transition for non flags target - factory.buildTransitionFor(nonflag), - NoTransition.INSTANCE) + factory.create(nonflag), NoTransition.INSTANCE) .addEqualityGroup( // transition with empty map - factory.buildTransitionFor(empty), + factory.create(empty), // transition produced by same factory on same rule - factory.buildTransitionFor(empty), + factory.create(empty), // transition produced by similar factory on same rule - factory2.buildTransitionFor(empty), + factory2.create(empty), // transition produced by same factory on similar rule - factory.buildTransitionFor(empty2), + factory.create(empty2), // transition produced by similar factory on similar rule - factory2.buildTransitionFor(empty2)) + factory2.create(empty2)) .addEqualityGroup( // transition with flag -> a - factory.buildTransitionFor(flagSetterA), + factory.create(flagSetterA), // same map, different rule - factory.buildTransitionFor(flagSetterA2), + factory.create(flagSetterA2), // same map, different factory - factory2.buildTransitionFor(flagSetterA)) + factory2.create(flagSetterA)) .addEqualityGroup( // transition with flag set to different value - factory.buildTransitionFor(flagSetterB)) + factory.create(flagSetterB)) .addEqualityGroup( // transition with different flag set to same value - factory.buildTransitionFor(flag2Setter)) + factory.create(flag2Setter)) .addEqualityGroup( // transition with more flags set - factory.buildTransitionFor(bothSetter)) + factory.create(bothSetter)) .testEquals(); }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java index 0ae230b..b5d1ec49 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java
@@ -35,6 +35,7 @@ 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.test.TestConfiguration; import com.google.devtools.build.lib.analysis.util.MockRule; import com.google.devtools.build.lib.analysis.util.TestAspects; @@ -42,7 +43,6 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.testutil.Suite; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; @@ -155,9 +155,9 @@ @AutoCodec.VisibleForSerialization @AutoCodec - static class SetsTestFilterFromAttributeTransitionFactory implements RuleTransitionFactory { + static class SetsTestFilterFromAttributeTransitionFactory implements TransitionFactory<Rule> { @Override - public PatchTransition buildTransitionFor(Rule rule) { + public PatchTransition create(Rule rule) { NonconfigurableAttributeMapper attributes = NonconfigurableAttributeMapper.of(rule); String value = attributes.get("sets_test_filter_to", STRING); if (Strings.isNullOrEmpty(value)) { @@ -226,7 +226,7 @@ @Test public void trimmingTransitionActivatesLastOnAllTargets() throws Exception { - RuleTransitionFactory trimmingTransitionFactory = + TransitionFactory<Rule> trimmingTransitionFactory = (rule) -> new AddArgumentToTestArgsTransition( "trimming transition for " + rule.getLabel().toString()); @@ -320,11 +320,11 @@ @Test public void trimmingTransitionsAreComposedInOrderOfAdding() throws Exception { - RuleTransitionFactory firstTrimmingTransitionFactory = + TransitionFactory<Rule> firstTrimmingTransitionFactory = (rule) -> new AddArgumentToTestArgsTransition( "first trimming transition for " + rule.getLabel().toString()); - RuleTransitionFactory secondTrimmingTransitionFactory = + TransitionFactory<Rule> secondTrimmingTransitionFactory = (rule) -> new AddArgumentToTestArgsTransition( "second trimming transition for " + rule.getLabel().toString());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java index 1816b1b..d108974 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
@@ -35,16 +35,16 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory; import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; +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.test.TestConfiguration; import com.google.devtools.build.lib.analysis.util.MockRule; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; -import com.google.devtools.build.lib.packages.RuleTransitionFactory; import com.google.devtools.build.lib.rules.repository.BindRule; import com.google.devtools.build.lib.rules.repository.WorkspaceBaseRule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -439,7 +439,7 @@ } } - private static final class TestFragmentTransitionFactory implements RuleTransitionFactory { + private static final class TestFragmentTransitionFactory implements TransitionFactory<Rule> { private static final class SetValuesTransition implements PatchTransition { private final String alpha; private final String bravo; @@ -479,8 +479,8 @@ } @Override - public PatchTransition buildTransitionFor(Rule rule) { - NonconfigurableAttributeMapper attributes = NonconfigurableAttributeMapper.of(rule); + public PatchTransition create(Rule rule) { + AttributeMap attributes = NonconfigurableAttributeMapper.of(rule); return new SetValuesTransition( attributes.get("alpha", Type.STRING), attributes.get("bravo", Type.STRING),