From b3b3e8bb7320ef76dfec97f66284e0a9f7eda2d2 Mon Sep 17 00:00:00 2001 From: John Cater Date: Wed, 3 Apr 2019 09:18:42 -0700 Subject: [PATCH] Convert uses of RuleTransitionFactory to TransitionFactory. Part of #7814. Closes #7922. PiperOrigin-RevId: 241744479 --- .../analysis/ConfiguredRuleClassProvider.java | 32 ++++---- .../lib/analysis/DependencyResolver.java | 8 +- .../ComposingRuleTransitionFactory.java | 82 ------------------- .../config/ConfigurationResolver.java | 5 +- .../analysis/config/TransitionResolver.java | 10 +-- .../analysis/constraints/EnvironmentRule.java | 21 +++-- .../StarlarkRuleTransitionProvider.java | 15 +++- .../test/TestTrimmingTransitionFactory.java | 8 +- .../lib/packages/AttributeTransitionData.java | 2 +- .../build/lib/packages/RuleClass.java | 38 +++------ .../lib/packages/RuleTransitionFactory.java | 39 --------- .../query2/ActionGraphQueryEnvironment.java | 5 +- .../ConfiguredTargetQueryEnvironment.java | 5 +- .../query2/PostAnalysisQueryEnvironment.java | 4 +- .../TransitionsOutputFormatterCallback.java | 15 ++-- ...reFlagTaggedTrimmingTransitionFactory.java | 6 +- .../ConfigFeatureFlagTransitionFactory.java | 10 +-- .../build/lib/rules/objc/AppleBinaryRule.java | 4 +- .../rules/objc/AppleStaticLibraryRule.java | 10 ++- .../build/lib/rules/python/PyRuleClasses.java | 7 +- .../build/lib/packages/RuleClassTest.java | 3 +- ...onfigFeatureFlagTransitionFactoryTest.java | 37 ++++----- ...rTargetsWithTrimmedConfigurationsTest.java | 12 +-- .../TrimmableTestConfigurationFragments.java | 10 +-- 24 files changed, 131 insertions(+), 257 deletions(-) delete mode 100644 src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java delete mode 100644 src/main/java/com/google/devtools/build/lib/packages/RuleTransitionFactory.java 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 2e8c0968d93c7e..8d96baf8e154ed 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 @@ public static class Builder implements RuleDefinitionEnvironment { new Digraph<>(); private List> universalFragments = new ArrayList<>(); - @Nullable private RuleTransitionFactory trimmingTransitionFactory; + @Nullable private TransitionFactory trimmingTransitionFactory; private OptionsDiffPredicate shouldInvalidateCacheForOptionDiff = OptionsDiffPredicate.ALWAYS_INVALIDATE; private PrerequisiteValidator prerequisiteValidator; @@ -410,12 +410,14 @@ public Builder setThirdPartyLicenseExistencePolicy(ThirdPartyLicenseExistencePol * 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 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 @@ public Builder addTrimmingTransitionFactory(RuleTransitionFactory factory) { /** * Overrides the transition factory run over all targets. * - * @see {@link #addTrimmingTransitionFactory(RuleTransitionFactory)} + * @see {@link #addTrimmingTransitionFactory(TransitionFactory)} */ @VisibleForTesting(/* for testing trimming transition factories without relying on prod use */ ) - public Builder overrideTrimmingTransitionFactoryForTesting(RuleTransitionFactory factory) { + public Builder overrideTrimmingTransitionFactoryForTesting(TransitionFactory factory) { trimmingTransitionFactory = null; return this.addTrimmingTransitionFactory(factory); } @@ -609,7 +611,7 @@ public String getToolsRepository() { private final Map> optionsToFragmentMap; /** The transition factory used to produce the transition that will trim targets. */ - @Nullable private final RuleTransitionFactory trimmingTransitionFactory; + @Nullable private final TransitionFactory trimmingTransitionFactory; /** The predicate used to determine whether a diff requires the cache to be invalidated. */ private final OptionsDiffPredicate shouldInvalidateCacheForOptionDiff; @@ -649,7 +651,7 @@ private ConfiguredRuleClassProvider( ImmutableList> configurationOptions, ImmutableList configurationFragments, ImmutableList> universalFragments, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory trimmingTransitionFactory, OptionsDiffPredicate shouldInvalidateCacheForOptionDiff, PrerequisiteValidator prerequisiteValidator, ImmutableMap skylarkAccessibleJavaClasses, @@ -769,12 +771,12 @@ public Class getConfigurationFragmentForOption(String requir /** * Returns the transition factory used to produce the transition to trim targets. * - *

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 + *

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 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 8b572a03c5c03d..eb57e3f252ecc4 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 @@ public final OrderedSetMultimap dependentNodeMap( @Nullable Aspect aspect, ImmutableMap configConditions, ImmutableSet

    *
  1. 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. *
  2. (Optionally) trim configurations to only the fragments the targets actually need. This is * triggered by {@link BuildConfiguration.Options#trimConfigurations}. *
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 2e71ee7bd5d0fe..207d2ae7b58bd3 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 @@ public static ConfigurationTransition evaluateTransition( BuildConfiguration fromConfig, ConfigurationTransition baseTransition, Target toTarget, - @Nullable RuleTransitionFactory trimmingTransitionFactory) { + @Nullable TransitionFactory 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 @@ public static ConfigurationTransition evaluateTransition( private static ConfigurationTransition applyRuleTransition( ConfigurationTransition currentTransition, Target toTarget) { Rule associatedRule = toTarget.getAssociatedRule(); - RuleTransitionFactory transitionFactory = + TransitionFactory transitionFactory = associatedRule.getRuleClassObject().getTransitionFactory(); return applyTransitionFromFactory(currentTransition, toTarget, transitionFactory); } @@ -107,10 +107,10 @@ private static ConfigurationTransition applyRuleTransition( private static ConfigurationTransition applyTransitionFromFactory( ConfigurationTransition currentTransition, Target toTarget, - @Nullable RuleTransitionFactory transitionFactory) { + @Nullable TransitionFactory 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 0bfcbc55bb7863..f16562982f36a0 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 @@ public class EnvironmentRule implements RuleDefinition { @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")) /* The set of environments this one is considered a valid "standin" for.

@@ -55,10 +56,12 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) Environments may only fulfill other environments in the same environment group.

*/ - .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 858c0985ebcace..bf7db5ac0e3830 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 @@ * *

For starlark-defined attribute transitions, see {@link StarlarkAttributeTransitionProvider}. */ -public class StarlarkRuleTransitionProvider implements RuleTransitionFactory { +public class StarlarkRuleTransitionProvider implements TransitionFactory { private final StarlarkDefinedConfigTransition starlarkDefinedConfigTransition; @@ -62,10 +62,17 @@ public StarlarkDefinedConfigTransition getStarlarkDefinedConfigTransitionForTest } @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 956a6455da1873..b94a91c01b0a68 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 { private static final Set TEST_OPTIONS = ImmutableSet.copyOf(Options.getDefaults(TestOptions.class).asMap().keySet()); @@ -37,7 +37,7 @@ public final class TestTrimmingTransitionFactory implements RuleTransitionFactor /** * 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 @@ public BuildOptions patch(BuildOptions originalOptions) { } @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 a43c760838eeee..de6199e1da727a 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 b46bce6e85dff7..328a8403cfc9a6 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 @@ public String toString() { } } - /** 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 @@ public PatchTransition buildTransitionFor(Rule rule) { private boolean hasStarlarkRuleTransition = false; private boolean ignorePackageLicenses = false; private ImplicitOutputsFunction implicitOutputsFunction = ImplicitOutputsFunction.NONE; - private RuleTransitionFactory transitionFactory; + private TransitionFactory transitionFactory; private ConfiguredTargetFactory configuredTargetFactory = null; private PredicateWithMessage validityPredicate = PredicatesWithMessage.alwaysTrue(); @@ -1049,15 +1033,14 @@ public Builder setImplicitOutputsFunction( * Applies the given transition to all incoming edges for this rule class. * *

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. * *

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) (unused) -> (transition)); } /** @@ -1066,12 +1049,13 @@ public Builder cfg(PatchTransition transition) { *

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 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 @@ public Attribute.Builder copy(String name) { * 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 transitionFactory; /** The factory that creates configured targets from this rule. */ private final ConfiguredTargetFactory configuredTargetFactory; @@ -1597,7 +1581,7 @@ public Attribute.Builder copy(String name) { boolean hasFunctionTransitionWhitelist, boolean ignorePackageLicenses, ImplicitOutputsFunction implicitOutputsFunction, - RuleTransitionFactory transitionFactory, + TransitionFactory transitionFactory, ConfiguredTargetFactory configuredTargetFactory, PredicateWithMessage validityPredicate, Predicate preferredDependencyPredicate, @@ -1704,7 +1688,7 @@ public ImplicitOutputsFunction getDefaultImplicitOutputsFunction() { return implicitOutputsFunction; } - public RuleTransitionFactory getTransitionFactory() { + public TransitionFactory 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 7fe079c108bbf6..00000000000000 --- 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. - * - *

This cannot be a {@link - * com.google.devtools.build.lib.analysis.config.transitions.SplitTransition} because splits are - * conceptually a property of the parent 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. - * - *

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 68ff8646a0b0fd..593157b16a155e 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 @@ public ConfiguredTargetValueAccessor getAccessor() { OutputStream out, SkyframeExecutor skyframeExecutor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory 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 e41357d328c0a5..fcbc15f046196e 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 @@ private static ImmutableList getCqueryFunctions() { OutputStream out, SkyframeExecutor skyframeExecutor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory 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 c193b1a20335cb..dff58a58bc8022 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 @@ public PostAnalysisQueryEnvironment( OutputStream outputStream, SkyframeExecutor skyframeExecutor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory, + @Nullable TransitionFactory 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 1259cfcff72fad..5c642cf843a6d1 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 @@ public class TransitionsOutputFormatterCallback extends CqueryThreadsafeCallback protected final BuildConfiguration hostConfiguration; private final HashMap partialResultMap; - @Nullable private final RuleTransitionFactory trimmingTransitionFactory; + @Nullable private final TransitionFactory trimmingTransitionFactory; @Override public String getName() { @@ -83,7 +84,7 @@ public String getName() { SkyframeExecutor skyframeExecutor, TargetAccessor accessor, BuildConfiguration hostConfiguration, - @Nullable RuleTransitionFactory trimmingTransitionFactory) { + @Nullable TransitionFactory trimmingTransitionFactory) { super(eventHandler, options, out, skyframeExecutor, accessor); this.hostConfiguration = hostConfiguration; this.trimmingTransitionFactory = trimmingTransitionFactory; @@ -187,15 +188,11 @@ public void processOutput(Iterable partialResult) throws Inter private String getRuleClassTransition(ConfiguredTarget ct, Target target) { String output = ""; if (ct instanceof RuleConfiguredTarget) { - RuleTransitionFactory factory = + TransitionFactory 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 155da0675007fc..35f9aa47c5d3d7 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 { private static final class ConfigFeatureFlagTaggedTrimmingTransition implements PatchTransition { public static final ConfigFeatureFlagTaggedTrimmingTransition EMPTY = @@ -81,7 +81,7 @@ public ConfigFeatureFlagTaggedTrimmingTransitionFactory(String attributeName) { } @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 b68366d72f5ec2..b482729da5e6b5 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. * *

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 { /** Transition which resets the set of flag-value pairs to the map it was constructed with. */ @AutoCodec @@ -93,7 +93,7 @@ public ConfigFeatureFlagTransitionFactory(String attributeName) { } @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 62f5b67a66fa9e..c0dd02ff709005 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 @@ the main() function. .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 609f6df7cc5c3f..fc3ea657958d79 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 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) return builder .requiresConfigurationFragments( - ObjcConfiguration.class, J2ObjcConfiguration.class, AppleConfiguration.class, + ObjcConfiguration.class, + J2ObjcConfiguration.class, + AppleConfiguration.class, CppConfiguration.class) /*

A list of targets which should not be included (nor their transitive dependencies @@ -73,7 +75,7 @@

A list of targets which should not be included (nor their transitive dependen

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.

- +

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 @@

A list of targets which should not be included (nor their transitive dependen */ .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 9918a11279a85e..d1120899322faf 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 @@ public String getErrorReason(Object value) { * 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 makeVersionTransition( PythonVersionTransition defaultTransition) { return (rule) -> { AttributeMap attrs = RawAttributeMapper.of(rule); @@ -87,6 +88,6 @@ public static RuleTransitionFactory makeVersionTransition( * 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 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 254ef0f5873322..3db997a642b166 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 @@ private static RuleClass newRuleClass( boolean outputsDefaultExecutable, boolean isAnalysisTest, ImplicitOutputsFunction implicitOutputsFunction, - RuleTransitionFactory transitionFactory, + TransitionFactory transitionFactory, ConfiguredTargetFactory configuredTargetFactory, PredicateWithMessage validityPredicate, Predicate 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 55136a7d268029..292cbca65a25cd 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 @@ protected ConfiguredRuleClassProvider getRuleClassProvider() { @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 @@ public void populatedTransition_returnsOriginalOptionsIfFragmentNotPresent() thr " 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 @@ public void populatedTransition_returnsOriginalOptionsIfFragmentNotPresent() thr @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 originalFlagMap = ImmutableMap.of(Label.parseAbsolute("//a:flag", ImmutableMap.of()), "value"); @@ -121,8 +118,7 @@ public void populatedTransition_setsOptionsAndClearsNonPresentOptionsIfFragmentP " 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 originalFlagMap = ImmutableMap.of(Label.parseAbsolute("//a:old", ImmutableMap.of()), "value"); Map expectedFlagMap = @@ -190,35 +186,34 @@ public void transition_equalsTester() throws Exception { 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 0ae230bafe3821..b5d1ec49062aa0 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 @@ public BuildOptions patch(BuildOptions options) { @AutoCodec.VisibleForSerialization @AutoCodec - static class SetsTestFilterFromAttributeTransitionFactory implements RuleTransitionFactory { + static class SetsTestFilterFromAttributeTransitionFactory implements TransitionFactory { @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 @@ public BuildOptions patch(BuildOptions options) { @Test public void trimmingTransitionActivatesLastOnAllTargets() throws Exception { - RuleTransitionFactory trimmingTransitionFactory = + TransitionFactory trimmingTransitionFactory = (rule) -> new AddArgumentToTestArgsTransition( "trimming transition for " + rule.getLabel().toString()); @@ -320,11 +320,11 @@ public void trimmingTransitionActivatesLastOnAllTargets() throws Exception { @Test public void trimmingTransitionsAreComposedInOrderOfAdding() throws Exception { - RuleTransitionFactory firstTrimmingTransitionFactory = + TransitionFactory firstTrimmingTransitionFactory = (rule) -> new AddArgumentToTestArgsTransition( "first trimming transition for " + rule.getLabel().toString()); - RuleTransitionFactory secondTrimmingTransitionFactory = + TransitionFactory 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 1816b1b48cb7af..d108974d0f69b1 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 @@ public String getOutputDirectoryName() { } } - private static final class TestFragmentTransitionFactory implements RuleTransitionFactory { + private static final class TestFragmentTransitionFactory implements TransitionFactory { private static final class SetValuesTransition implements PatchTransition { private final String alpha; private final String bravo; @@ -479,8 +479,8 @@ public BuildOptions patch(BuildOptions target) { } @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),