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());
}