diff options
Diffstat (limited to 'src')
21 files changed, 108 insertions, 168 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java index 8fff84a91d..269e2451ab 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java @@ -28,15 +28,10 @@ import static com.google.devtools.build.lib.syntax.Type.STRING_LIST; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -import com.google.devtools.build.lib.analysis.config.DynamicTransitionMapper; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.RunUnder; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; -import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; -import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.analysis.constraints.EnvironmentRule; import com.google.devtools.build.lib.analysis.test.TestConfiguration; import com.google.devtools.build.lib.cmdline.Label; @@ -392,19 +387,4 @@ public class BaseRuleClasses { .build(); } } - - /** - * Declares the implementations for {@link ConfigurationTransitionProxy} enums. - * - * <p>We can't put this in {@link Attribute} because that's in the {@code lib.packages} package, - * which has no access to configuration classes. - * - * <p>New transitions should extend {@link PatchTransition}, which avoids the need for this map. - */ - public static final ImmutableMap<Transition, Transition> DYNAMIC_TRANSITIONS_MAP = - ImmutableMap.of( - ConfigurationTransitionProxy.NONE, DynamicTransitionMapper.SELF - // ConfigurationTransitionProxy.DATA is skipped because it's C++-specific. - // The C++ rule definitions handle its mapping. - ); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 95ea7030d8..5097f42160 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -45,7 +45,7 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.ConfigurationResolver; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +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.Transition; import com.google.devtools.build.lib.analysis.constraints.TopLevelConstraintSemantics; @@ -957,7 +957,7 @@ public class BuildView { Iterable<BuildOptions> buildOptions) { Preconditions.checkArgument(ct.getConfiguration().fragmentClasses().equals(fragments)); Dependency asDep = Dependency.withTransitionAndAspects(ct.getLabel(), - ConfigurationTransitionProxy.NONE, AspectCollection.EMPTY); + NoTransition.INSTANCE, AspectCollection.EMPTY); ImmutableList.Builder<BuildConfiguration> builder = ImmutableList.builder(); for (BuildOptions options : buildOptions) { builder.add(Iterables.getOnlyElement( @@ -1036,19 +1036,19 @@ public class BuildView { .getTarget(handler, label) .getAssociatedRule(); } catch (NoSuchPackageException | NoSuchTargetException e) { - return ConfigurationTransitionProxy.NONE; + return NoTransition.INSTANCE; } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new AssertionError("Configuration of " + label + " interrupted"); } if (rule == null) { - return ConfigurationTransitionProxy.NONE; + return NoTransition.INSTANCE; } RuleTransitionFactory factory = rule .getRuleClassObject() .getTransitionFactory(); if (factory == null) { - return ConfigurationTransitionProxy.NONE; + return NoTransition.INSTANCE; } // dynamicTransitionMapper is only needed because of ConfigurationTransitionProxy.DATA: @@ -1056,7 +1056,7 @@ public class BuildView { // C++-specific patch transition that implements it. PatchTransition transition = (PatchTransition) ruleClassProvider.getDynamicTransitionMapper().map(factory.buildTransitionFor(rule)); - return (transition == null) ? ConfigurationTransitionProxy.NONE : transition; + return (transition == null) ? NoTransition.INSTANCE : transition; } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index a02d4105fd..c8cee3cf98 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -48,6 +48,7 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.FragmentCollection; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +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.Transition; @@ -416,8 +417,8 @@ public final class RuleContext extends TargetContext @Nullable public <T extends Fragment> T getFragment(Class<T> fragment) { - // NONE means target configuration. - return getFragment(fragment, ConfigurationTransitionProxy.NONE); + // No transition means target configuration. + return getFragment(fragment, NoTransition.INSTANCE); } @Nullable @@ -447,8 +448,8 @@ public final class RuleContext extends TargetContext } public <T extends Fragment> boolean isLegalFragment(Class<T> fragment) { - // NONE means target configuration. - return isLegalFragment(fragment, ConfigurationTransitionProxy.NONE); + // No transition means target configuration. + return isLegalFragment(fragment, NoTransition.INSTANCE); } protected BuildConfiguration getConfiguration(Transition transition) { @@ -1072,8 +1073,7 @@ public final class RuleContext extends TargetContext + " is not configured for the host configuration"); } } else if (mode == Mode.TARGET) { - if (!(transition instanceof PatchTransition) - && transition != ConfigurationTransitionProxy.NONE) { + if (!(transition instanceof PatchTransition) && transition != NoTransition.INSTANCE) { throw new IllegalStateException(getRule().getLocation() + ": " + getRuleClassNameForLogging() + " attribute " + attributeName + " is not configured for the target configuration"); @@ -1095,35 +1095,6 @@ public final class RuleContext extends TargetContext } /** - * Returns the Mode for which the attribute is configured. - * This is intended for Skylark, where the Mode is implicitly chosen. - */ - public Mode getAttributeMode(String attributeName) { - Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName); - if (attributeDefinition == null) { - throw new IllegalStateException(getRule().getLocation() + ": " + getRuleClassNameForLogging() - + " attribute " + attributeName + " is not defined"); - } - if (attributeDefinition.getType().getLabelClass() != LabelClass.DEPENDENCY) { - throw new IllegalStateException(getRuleClassNameForLogging() + " attribute " + attributeName - + " is not a label type attribute"); - } - if (attributeDefinition.getConfigurationTransition().isHostTransition()) { - return Mode.HOST; - } else if (attributeDefinition.getConfigurationTransition() - == ConfigurationTransitionProxy.NONE) { - return Mode.TARGET; - } else if (attributeDefinition.getConfigurationTransition() - == ConfigurationTransitionProxy.DATA) { - return Mode.DATA; - } else if (attributeDefinition.hasSplitConfigurationTransition()) { - return Mode.SPLIT; - } - throw new IllegalStateException(getRule().getLocation() + ": " - + getRuleClassNameForLogging() + " attribute " + attributeName + " is not configured"); - } - - /** * For the specified attribute "attributeName" (which must be of type * list(label)), resolve all the labels into ConfiguredTargets (for the * configuration appropriate to the attribute) and return their build 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 3bce74d771..c60f6a5aa7 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 @@ -26,7 +26,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.Dependency; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +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.Transition; @@ -186,7 +186,7 @@ public final class ConfigurationResolver { Transition transition = dep.getTransition(); if (sameFragments) { - if (transition == ConfigurationTransitionProxy.NONE) { + if (transition == NoTransition.INSTANCE) { // The dep uses the same exact configuration. putOnlyEntry( resolvedDeps, @@ -415,9 +415,7 @@ public final class ConfigurationResolver { Iterable<Class<? extends BuildConfiguration.Fragment>> requiredFragments, RuleClassProvider ruleClassProvider, boolean trimResults) { List<BuildOptions> result; - if (transition == ConfigurationTransitionProxy.NONE) { - result = ImmutableList.<BuildOptions>of(fromOptions); - } else if (transition instanceof PatchTransition) { + if (transition instanceof PatchTransition) { // TODO(bazel-team): safety-check that this never mutates fromOptions. result = ImmutableList.of(((PatchTransition) transition).apply(fromOptions)); } else if (transition instanceof SplitTransition) { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java b/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java index e481fb1c45..d08a0dbc7d 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java @@ -14,43 +14,23 @@ package com.google.devtools.build.lib.analysis.config; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; 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.Transition; -import com.google.devtools.build.lib.packages.Attribute; -import com.google.devtools.build.lib.packages.RuleClass; /** * Maps non-{@link PatchTransition} declarations to their implementable equivalents. * * <p>Blaze applies configuration transitions by executing {@link PatchTransition} instances. But - * for legacy reasons, not every transition declaration is a {@link PatchTransition}. The most - * prominent example is {@link ConfigurationTransitionProxy}, which defines its transitions as - * enums. These transitions are used all over the place. So we need a way to continue to support - * them. + * for legacy reasons, {@link ConfigurationTransitionProxy#DATA} (which is used for C++/LIPO logic) + * is an implementation-free enum. * - * <p>Hence this class. - * - * <p>Going forward, we should eliminate the need for this class by eliminating - * non-{@link PatchTransition} transitions. This is conceptually straightforward: replace - * declarations of the form {@link RuleClass.Builder#cfg(Transition)} with - * {@link RuleClass.Builder#cfg(PatchTransition)}. That way, transition declarations "just work", - * with no extra fuss. But this is a migration that will take some time to complete. - * - * {@link ConfigurationTransitionProxy#DATA} provides the most complicated challenge. This is - * C++/LIPO logic, and the implementation is in C++ rule code - * ({@link com.google.devtools.build.lib.rules.cpp.transitions.DisableLipoTransition}). But the enum - * is defined in {@link Attribute}, which is in {@code lib.packages}, which has access to neither - * rule-specific nor configuration-specific code. Furthermore, many non-C++ rules declare this - * transition. We ultimately need a cleaner way to inject this rules-specific logic into general - * Blaze code. + * <p>We should ultimately restrict that logic just to the C++ rule definitions and remove this + * interface. But {@link ConfigurationTransitionProxy#DATA} is used everywhere, including in + * non-C++ rules and in {@code lib.packages} code, which lacks acccess to C++ configuration logic. */ public final class DynamicTransitionMapper { - /** - * Use this to declare a no-op transition that keeps the input configuration. - */ - public static final Transition SELF = new Transition() {}; - private final ImmutableMap<Transition, Transition> map; /** @@ -79,11 +59,9 @@ public final class DynamicTransitionMapper { return fromTransition; } Transition toTransition = map.get(fromTransition); - if (toTransition == SELF) { - return fromTransition; - } else if (toTransition != null) { - return toTransition; + if (toTransition == null) { + throw new IllegalArgumentException("No dynamic mapping for " + fromTransition.toString()); } - throw new IllegalArgumentException("No dynamic mapping for " + fromTransition.toString()); + return toTransition; } } 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 44530445c5..9fc95970fd 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,6 +19,7 @@ import com.google.common.base.Preconditions; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.config.transitions.ComposingSplitTransition; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +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.SplitTransition; @@ -77,7 +78,7 @@ public final class TransitionResolver { // II. Host configurations never switch to another. All prerequisites of host targets have the // same host configuration. if (fromConfig.isHostConfiguration()) { - return ConfigurationTransitionProxy.NONE; + return NoTransition.INSTANCE; } // Make sure config_setting dependencies are resolved in the referencing rule's configuration, @@ -94,13 +95,13 @@ public final class TransitionResolver { // TODO(bazel-team): don't require special casing here. This is far too hackish. if (toTarget instanceof Rule && ((Rule) toTarget).getRuleClassObject().isConfigMatcher()) { // TODO(gregce): see if this actually gets called - return ConfigurationTransitionProxy.NONE; + return NoTransition.INSTANCE; } // The current transition to apply. When multiple transitions are requested, this is a // ComposingSplitTransition, which encapsulates them into a single object so calling code // doesn't need special logic for combinations. - Transition currentTransition = ConfigurationTransitionProxy.NONE; + Transition currentTransition = NoTransition.INSTANCE; // Apply the parent rule's outgoing transition if it has one. RuleTransitionFactory transitionFactory = @@ -140,7 +141,7 @@ public final class TransitionResolver { // Top-level transitions (chosen by configuration fragments): Transition topLevelTransition = fromConfig.topLevelConfigurationHook(target); if (topLevelTransition == null) { - topLevelTransition = ConfigurationTransitionProxy.NONE; + topLevelTransition = NoTransition.INSTANCE; } // Rule class transitions (chosen by rule class definitions): @@ -165,7 +166,7 @@ public final class TransitionResolver { public Transition composeTransitions(Transition transition1, Transition transition2) { if (isFinal(transition1)) { return transition1; - } else if (transition2 == ConfigurationTransitionProxy.NONE) { + } else if (transition2 == NoTransition.INSTANCE) { return transition1; } else if (transition2 == NullTransition.INSTANCE) { // A NULL transition can just replace earlier transitions: no need to compose them. @@ -180,7 +181,7 @@ public final class TransitionResolver { // TODO(gregce): remove the below conversion when all transitions are patch transitions. Transition dynamicTransition = transitionMapper.map(transition2); - return transition1 == ConfigurationTransitionProxy.NONE + return transition1 == NoTransition.INSTANCE ? dynamicTransition : new ComposingSplitTransition(transition1, dynamicTransition); } @@ -202,7 +203,7 @@ public final class TransitionResolver { "cannot apply splits after null transitions (null transitions are expected to be final)"); Preconditions.checkState(currentTransition != HostTransition.INSTANCE, "cannot apply splits after host transitions (host transitions are expected to be final)"); - return currentTransition == ConfigurationTransitionProxy.NONE + return currentTransition == NoTransition.INSTANCE ? split : new ComposingSplitTransition(currentTransition, split); } @@ -226,7 +227,7 @@ public final class TransitionResolver { PatchTransition ruleClassTransition = (PatchTransition) transitionMapper.map(transitionFactory.buildTransitionFor(associatedRule)); if (ruleClassTransition != null) { - if (currentTransition == ConfigurationTransitionProxy.NONE) { + if (currentTransition == NoTransition.INSTANCE) { return ruleClassTransition; } else { return new ComposingSplitTransition(currentTransition, ruleClassTransition); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java index d58bafd917..d36968c21b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java @@ -70,9 +70,7 @@ public class ComposingSplitTransition implements SplitTransition { */ // TODO(gregce): move this somewhere more general. This isn't intrinsic to composed splits. static List<BuildOptions> apply(BuildOptions fromOptions, Transition transition) { - if (transition == ConfigurationTransitionProxy.NONE) { - return ImmutableList.<BuildOptions>of(fromOptions); - } else if (transition instanceof PatchTransition) { + if (transition instanceof PatchTransition) { return ImmutableList.<BuildOptions>of(((PatchTransition) transition).apply(fromOptions)); } else if (transition instanceof SplitTransition) { SplitTransition split = (SplitTransition) transition; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransitionProxy.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransitionProxy.java index 6a19b36fbb..81baf16503 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransitionProxy.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ConfigurationTransitionProxy.java @@ -22,9 +22,6 @@ package com.google.devtools.build.lib.analysis.config.transitions; */ @Deprecated public enum ConfigurationTransitionProxy implements Transition { - /** No transition, i.e., the same configuration as the current. */ - NONE, - /** Transition from the target configuration to the data configuration. */ // TODO(bazel-team): Move this elsewhere. DATA, diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java new file mode 100644 index 0000000000..d5581e5469 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/NoTransition.java @@ -0,0 +1,30 @@ +// Copyright 2018 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.transitions; + +import com.google.devtools.build.lib.analysis.config.BuildOptions; + +/** + * No-op configuration transition. + */ +public final class NoTransition implements PatchTransition { + public static final NoTransition INSTANCE = new NoTransition(); + + private NoTransition() {} + + @Override + public BuildOptions apply(BuildOptions options) { + return options; + } +} diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java index 506ff64543..ce082a3aea 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java @@ -37,7 +37,7 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.FragmentCollection; import com.google.devtools.build.lib.analysis.config.HostTransition; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.stringtemplate.ExpansionException; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector; @@ -225,7 +225,7 @@ public final class SkylarkRuleContext implements SkylarkValue { this.actionFactory = new SkylarkActionFactory(this, skylarkSemantics, ruleContext); this.ruleContext = Preconditions.checkNotNull(ruleContext); this.ruleLabelCanonicalName = ruleContext.getLabel().getCanonicalForm(); - this.fragments = new FragmentCollection(ruleContext, ConfigurationTransitionProxy.NONE); + this.fragments = new FragmentCollection(ruleContext, NoTransition.INSTANCE); this.hostFragments = new FragmentCollection(ruleContext, HostTransition.INSTANCE); this.aspectDescriptor = aspectDescriptor; this.skylarkSemantics = skylarkSemantics; diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java index 75f933ee50..22d39ee88f 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java @@ -29,7 +29,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Ordering; import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition; import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.events.EventHandler; @@ -359,7 +359,7 @@ public final class Attribute implements Comparable<Attribute> { public static class Builder <TYPE> { private final String name; private final Type<TYPE> type; - private Transition configTransition = ConfigurationTransitionProxy.NONE; + private Transition configTransition = NoTransition.INSTANCE; private RuleClassNamePredicate allowedRuleClassesForLabels = ANY_RULE; private RuleClassNamePredicate allowedRuleClassesForLabelsWarning = NO_RULE; private SplitTransitionProvider splitTransitionProvider; @@ -479,7 +479,7 @@ public final class Attribute implements Comparable<Attribute> { * Defines the configuration transition for this attribute. */ public Builder<TYPE> cfg(SplitTransitionProvider splitTransitionProvider) { - Preconditions.checkState(this.configTransition == ConfigurationTransitionProxy.NONE, + Preconditions.checkState(this.configTransition == NoTransition.INSTANCE, "the configuration transition is already set"); this.splitTransitionProvider = Preconditions.checkNotNull(splitTransitionProvider); @@ -499,7 +499,7 @@ public final class Attribute implements Comparable<Attribute> { * {@code NONE}. */ public Builder<TYPE> cfg(Transition configTransition) { - Preconditions.checkState(this.configTransition == ConfigurationTransitionProxy.NONE, + Preconditions.checkState(this.configTransition == NoTransition.INSTANCE, "the configuration transition is already set"); if (configTransition instanceof SplitTransition) { return cfg((SplitTransition) configTransition); @@ -1801,7 +1801,7 @@ public final class Attribute implements Comparable<Attribute> { ImmutableList<RuleAspect<?>> aspects) { Preconditions.checkNotNull(configTransition); Preconditions.checkArgument( - (configTransition == ConfigurationTransitionProxy.NONE) + (configTransition == NoTransition.INSTANCE) || type.getLabelClass() == LabelClass.DEPENDENCY || type.getLabelClass() == LabelClass.NONDEP_REFERENCE, "Configuration transitions can only be specified for label or label list attributes"); diff --git a/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java b/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java index 6679f248b3..83d5aa39f3 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicy.java @@ -18,7 +18,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.SetMultimap; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import java.util.Collection; @@ -82,7 +82,7 @@ public final class ConfigurationFragmentPolicy { * <p>The value is inherited by subclasses. */ public Builder requiresConfigurationFragments(Collection<Class<?>> configurationFragments) { - requiresConfigurationFragments(ConfigurationTransitionProxy.NONE, configurationFragments); + requiresConfigurationFragments(NoTransition.INSTANCE, configurationFragments); return this; } @@ -98,7 +98,7 @@ public final class ConfigurationFragmentPolicy { // We can relax this assumption if needed. But it's already sketchy to let a rule see more // than its own configuration. So we don't want to casually proliferate this pattern. Preconditions.checkArgument( - transition == ConfigurationTransitionProxy.NONE || transition.isHostTransition()); + transition == NoTransition.INSTANCE || transition.isHostTransition()); requiredConfigurationFragments.putAll(transition, configurationFragments); return this; } @@ -117,7 +117,7 @@ public final class ConfigurationFragmentPolicy { Collection<String> configurationFragmentNames) { requiresConfigurationFragmentsBySkylarkModuleName( - ConfigurationTransitionProxy.NONE, configurationFragmentNames); + NoTransition.INSTANCE, configurationFragmentNames); return this; } @@ -136,7 +136,7 @@ public final class ConfigurationFragmentPolicy { // We can relax this assumption if needed. But it's already sketchy to let a rule see more // than its own configuration. So we don't want to casually proliferate this pattern. Preconditions.checkArgument( - transition == ConfigurationTransitionProxy.NONE || transition.isHostTransition()); + transition == NoTransition.INSTANCE || transition.isHostTransition()); requiredConfigurationFragmentNames.putAll(transition, configurationFragmentNames); return this; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java b/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java index 50f1de6ff1..5cfe5939a2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java +++ b/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java @@ -29,8 +29,6 @@ public final class CoreRules implements RuleSet { @Override public void init(Builder builder) { - builder.addDynamicTransitionMaps(BaseRuleClasses.DYNAMIC_TRANSITIONS_MAP); - builder.addConfig(TestConfiguration.TestOptions.class, new TestConfiguration.Loader()); builder.addRuleDefinition(new BaseRuleClasses.RootRule()); builder.addRuleDefinition(new BaseRuleClasses.BaseRule()); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 58f557c96f..9e0a419eb8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -73,6 +73,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationResolver; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +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.Transition; import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget; @@ -1131,7 +1132,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { ((ConfiguredRuleClassProvider) ruleClassProvider) .getDynamicTransitionMapper() .map(ConfigurationTransitionProxy.DATA); - BuildOptions dataOptions = dataTransition != ConfigurationTransitionProxy.NONE + BuildOptions dataOptions = dataTransition != NoTransition.INSTANCE ? ((PatchTransition) dataTransition).apply(firstTargetConfig.getOptions()) : firstTargetConfig.getOptions(); @@ -1629,8 +1630,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { @Nullable public ConfiguredTarget getConfiguredTargetForTesting( ExtendedEventHandler eventHandler, Label label, BuildConfiguration configuration) { - return getConfiguredTargetForTesting( - eventHandler, label, configuration, ConfigurationTransitionProxy.NONE); + return getConfiguredTargetForTesting(eventHandler, label, configuration, NoTransition.INSTANCE); } /** diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java index a932653922..581517ab7e 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java @@ -22,7 +22,7 @@ import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder; import com.google.devtools.build.lib.analysis.config.HostTransition; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.AdvertisedProviderSet; import com.google.devtools.build.lib.packages.AspectDefinition; @@ -283,7 +283,7 @@ public class AspectDefinitionTest { assertThat(requiresFragments.getConfigurationFragmentPolicy()).isNotNull(); assertThat( requiresFragments.getConfigurationFragmentPolicy() - .isLegalConfigurationFragment(TestFragment.class, ConfigurationTransitionProxy.NONE)) + .isLegalConfigurationFragment(TestFragment.class, NoTransition.INSTANCE)) .isTrue(); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java index 6646529869..fbda656942 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java @@ -33,7 +33,7 @@ import com.google.devtools.build.lib.actions.FailAction; import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget; import com.google.devtools.build.lib.analysis.configuredtargets.OutputFileConfiguredTarget; import com.google.devtools.build.lib.analysis.util.BuildViewTestBase; @@ -393,7 +393,7 @@ public class BuildViewTest extends BuildViewTestBase { Dependency innerDependency = Dependency.withTransitionAndAspects( Label.parseAbsolute("//package:inner"), - ConfigurationTransitionProxy.NONE, + NoTransition.INSTANCE, AspectCollection.EMPTY); Dependency fileDependency = Dependency.withNullConfiguration( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java index 8203f317dd..57f0e630ad 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java @@ -22,7 +22,7 @@ import com.google.common.testing.EqualsTester; import com.google.common.testing.NullPointerTester; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.HostTransition; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.cmdline.Label; @@ -377,30 +377,22 @@ public class DependencyTest extends AnalysisTestCase { Dependency.withTransitionAndAspects(b, HostTransition.INSTANCE, differentAspects)) .addEqualityGroup( // base set but with transition NONE - Dependency.withTransitionAndAspects(a, ConfigurationTransitionProxy.NONE, twoAspects), - Dependency.withTransitionAndAspects( - aExplicit, ConfigurationTransitionProxy.NONE, twoAspects), - Dependency.withTransitionAndAspects(a, ConfigurationTransitionProxy.NONE, - inverseAspects), - Dependency.withTransitionAndAspects( - aExplicit, ConfigurationTransitionProxy.NONE, inverseAspects)) + Dependency.withTransitionAndAspects(a, NoTransition.INSTANCE, twoAspects), + Dependency.withTransitionAndAspects(aExplicit, NoTransition.INSTANCE, twoAspects), + Dependency.withTransitionAndAspects(a, NoTransition.INSTANCE, inverseAspects), + Dependency.withTransitionAndAspects(aExplicit, NoTransition.INSTANCE, inverseAspects)) .addEqualityGroup( // base set but with transition NONE and different aspects - Dependency.withTransitionAndAspects(a, ConfigurationTransitionProxy.NONE, - differentAspects), - Dependency.withTransitionAndAspects( - aExplicit, ConfigurationTransitionProxy.NONE, differentAspects)) + Dependency.withTransitionAndAspects(a, NoTransition.INSTANCE, differentAspects), + Dependency.withTransitionAndAspects(aExplicit, NoTransition.INSTANCE, differentAspects)) .addEqualityGroup( // base set but with transition NONE and label //b - Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE, twoAspects), - Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE, - inverseAspects)) + Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, twoAspects), + Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, inverseAspects)) .addEqualityGroup( // inverse of base set: transition NONE, label //b, different aspects - Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE, - differentAspects), - Dependency.withTransitionAndAspects(b, ConfigurationTransitionProxy.NONE, - differentAspects)) + Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, differentAspects), + Dependency.withTransitionAndAspects(b, NoTransition.INSTANCE, differentAspects)) .testEquals(); } } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index d25fb6a301..d7d194c1fa 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -76,6 +76,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options. import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +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.Transition; @@ -1508,7 +1509,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase { */ protected BuildConfiguration getConfiguration(BuildConfiguration fromConfig, Transition transition) throws InterruptedException { - if (transition == ConfigurationTransitionProxy.NONE) { + if (transition == NoTransition.INSTANCE) { return fromConfig; } else if (transition == NullTransition.INSTANCE) { return null; diff --git a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java index 0e7de91a7e..7324889e46 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java @@ -16,7 +16,7 @@ package com.google.devtools.build.lib.packages; import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.Transition; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -92,7 +92,7 @@ public final class ConfigurationFragmentPolicyTest { assertThat(policy.isLegalConfigurationFragment(Integer.class)).isTrue(); assertThat( - policy.isLegalConfigurationFragment(Integer.class, ConfigurationTransitionProxy.NONE)) + policy.isLegalConfigurationFragment(Integer.class, NoTransition.INSTANCE)) .isTrue(); // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was // specified for @@ -102,13 +102,13 @@ public final class ConfigurationFragmentPolicyTest { assertThat(policy.isLegalConfigurationFragment(Long.class)).isTrue(); // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was // specified for - assertThat(policy.isLegalConfigurationFragment(Long.class, ConfigurationTransitionProxy.NONE)) + assertThat(policy.isLegalConfigurationFragment(Long.class, NoTransition.INSTANCE)) .isTrue(); assertThat(policy.isLegalConfigurationFragment(Long.class, TEST_HOST_TRANSITION)) .isTrue(); assertThat(policy.isLegalConfigurationFragment(String.class)).isFalse(); - assertThat(policy.isLegalConfigurationFragment(String.class, ConfigurationTransitionProxy.NONE)) + assertThat(policy.isLegalConfigurationFragment(String.class, NoTransition.INSTANCE)) .isFalse(); assertThat(policy.isLegalConfigurationFragment(String.class, TEST_HOST_TRANSITION)) .isFalse(); @@ -128,8 +128,7 @@ public final class ConfigurationFragmentPolicyTest { assertThat(policy.isLegalConfigurationFragment(TestFragment.class)).isTrue(); assertThat( - policy.isLegalConfigurationFragment(TestFragment.class, - ConfigurationTransitionProxy.NONE)) + policy.isLegalConfigurationFragment(TestFragment.class, NoTransition.INSTANCE)) .isTrue(); assertThat( policy.isLegalConfigurationFragment(TestFragment.class, TEST_HOST_TRANSITION)) @@ -137,8 +136,7 @@ public final class ConfigurationFragmentPolicyTest { assertThat(policy.isLegalConfigurationFragment(OtherFragment.class)).isTrue(); assertThat( - policy.isLegalConfigurationFragment(OtherFragment.class, - ConfigurationTransitionProxy.NONE)) + policy.isLegalConfigurationFragment(OtherFragment.class, NoTransition.INSTANCE)) .isFalse(); assertThat( policy.isLegalConfigurationFragment(OtherFragment.class, TEST_HOST_TRANSITION)) @@ -146,8 +144,7 @@ public final class ConfigurationFragmentPolicyTest { assertThat(policy.isLegalConfigurationFragment(UnknownFragment.class)).isFalse(); assertThat( - policy.isLegalConfigurationFragment( - UnknownFragment.class, ConfigurationTransitionProxy.NONE)) + policy.isLegalConfigurationFragment(UnknownFragment.class, NoTransition.INSTANCE)) .isFalse(); assertThat( policy.isLegalConfigurationFragment( diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java index 9d29f28fbd..7bbd834937 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java @@ -28,7 +28,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.OutputGroupInfo; import com.google.devtools.build.lib.analysis.ViewCreationFailedException; import com.google.devtools.build.lib.analysis.config.HostTransition; -import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.TargetParsingException; @@ -212,8 +212,7 @@ public class SkylarkDefinedAspectsTest extends AnalysisTestCase { AspectDefinition aspectDefinition = aspectValue.getAspect().getDefinition(); assertThat( aspectDefinition.getConfigurationFragmentPolicy() - .isLegalConfigurationFragment(JavaConfiguration.class, - ConfigurationTransitionProxy.NONE)) + .isLegalConfigurationFragment(JavaConfiguration.class, NoTransition.INSTANCE)) .isTrue(); assertThat( aspectDefinition.getConfigurationFragmentPolicy() @@ -221,8 +220,7 @@ public class SkylarkDefinedAspectsTest extends AnalysisTestCase { .isFalse(); assertThat( aspectDefinition.getConfigurationFragmentPolicy() - .isLegalConfigurationFragment(CppConfiguration.class, - ConfigurationTransitionProxy.NONE)) + .isLegalConfigurationFragment(CppConfiguration.class, NoTransition.INSTANCE)) .isFalse(); assertThat( aspectDefinition.getConfigurationFragmentPolicy() diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java index bcd42e84a3..58dfecfc4e 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransitionProxy; +import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.skylark.SkylarkAttr; import com.google.devtools.build.lib.analysis.skylark.SkylarkAttr.Descriptor; import com.google.devtools.build.lib.analysis.skylark.SkylarkFileType; @@ -545,7 +546,7 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { @Test public void testAttrCfgTarget() throws Exception { Attribute attr = buildAttribute("a1", "attr.label(cfg = 'target', allow_files = True)"); - assertThat(attr.getConfigurationTransition()).isEqualTo(ConfigurationTransitionProxy.NONE); + assertThat(attr.getConfigurationTransition()).isEqualTo(NoTransition.INSTANCE); } @Test |