Move checking for host transitions to a few centralized places. This is a prerequisite for adding transition factories. Part of #7814. PiperOrigin-RevId: 240172034
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 078b090..6bb79d7 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
@@ -200,7 +200,7 @@ Dependency.withConfigurationAndAspects( dep.getLabel(), ctgValue.getConfiguration(), dep.getAspects())); continue; - } else if (transition == HostTransition.INSTANCE) { + } else if (transition.isHostTransition()) { // The current rule's host configuration can also be used for the dep. We short-circuit // the standard transition logic for host transitions because these transitions are // uniquely frequent. It's possible, e.g., for every node in the configured target graph
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 ae22a85..ef6b286 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
@@ -113,8 +113,7 @@ * be composed after it. */ private static boolean isFinal(ConfigurationTransition transition) { - return (transition == NullTransition.INSTANCE - || transition == HostTransition.INSTANCE); + return (transition == NullTransition.INSTANCE || transition.isHostTransition()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java index 09b5173..1d543c7 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
@@ -851,7 +851,7 @@ if (!DependencyFilter.NO_IMPLICIT_DEPS.apply(ruleContext.getRule(), attrDef) // We can't identify host deps by calling BuildConfiguration.isHostConfiguration() // because --nodistinct_host_configuration subverts that call. - || attrDef.getConfigurationTransition().isHostTransition()) { + || attrDef.hasHostConfigurationTransition()) { continue; } }
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 87dd882..14ad552 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
@@ -2030,8 +2030,8 @@ name); if (isLateBound(name)) { LateBoundDefault<?, ?> lateBoundDefault = (LateBoundDefault<?, ?>) defaultValue; - Preconditions.checkArgument(!lateBoundDefault.useHostConfiguration() - || (configTransition.isHostTransition()), + Preconditions.checkArgument( + !lateBoundDefault.useHostConfiguration() || configTransition.isHostTransition(), "a late bound default value using the host configuration must use the host transition"); } @@ -2196,14 +2196,23 @@ } /** - * Returns true if this attribute transitions on a split transition. - * See {@link SplitTransition}. + * Returns true if this attribute transitions on a split transition. See {@link SplitTransition}. */ + // TODO(https://github.com/bazelbuild/bazel/issues/7814) Remove this. public boolean hasSplitConfigurationTransition() { return (splitTransitionProvider != null); } /** + * Returns true if this attribute transitions to the host configuration. See {@link + * com.google.devtools.build.lib.analysis.config.HostTransition}. + */ + // TODO(https://github.com/bazelbuild/bazel/issues/7814) Remove this. + public boolean hasHostConfigurationTransition() { + return configTransition.isHostTransition(); + } + + /** * Returns whether the target is required to be executable for label or label * list attributes. For other attributes it always returns {@code false}. */
diff --git a/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java b/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java index f3d4971..71b451f 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java +++ b/src/main/java/com/google/devtools/build/lib/packages/DependencyFilter.java
@@ -36,16 +36,16 @@ /** Dependency predicate that excludes host dependencies */ public static final DependencyFilter NO_HOST_DEPS = new DependencyFilter() { - @Override - public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) { - // getConfigurationTransition() is only defined for labels which introduce a dependency. - if (attribute.getType().getLabelClass() != LabelClass.DEPENDENCY) { - return true; - } + @Override + public boolean apply(AttributeInfoProvider infoProvider, Attribute attribute) { + // getConfigurationTransition() is only defined for labels which introduce a dependency. + if (attribute.getType().getLabelClass() != LabelClass.DEPENDENCY) { + return true; + } - return !attribute.getConfigurationTransition().isHostTransition(); - } - }; + return !attribute.hasHostConfigurationTransition(); + } + }; /** Dependency predicate that excludes implicit dependencies */ public static final DependencyFilter NO_IMPLICIT_DEPS = new DependencyFilter() {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java index 3545976..82fe31a 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
@@ -650,7 +650,7 @@ attrPb.setAllowEmpty(!attr.isNonEmpty()); attrPb.setAllowSingleFile(attr.isSingleArtifact()); attrPb.setConfigurable(attr.isConfigurable()); - attrPb.setCfgIsHost(attr.getConfigurationTransition().isHostTransition()); + attrPb.setCfgIsHost(attr.hasHostConfigurationTransition()); // Encode default value, if simple. Object v = attr.getDefaultValueUnchecked();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java index f3014f2..71561f4 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java
@@ -183,8 +183,7 @@ .getAssociatedRule() .getRuleClassObject() .getAttributeByName("tools") - .getConfigurationTransition() - .isHostTransition()) + .hasHostConfigurationTransition()) .isTrue(); assertThat(getHostConfiguration().getCompilationMode()).isEqualTo(CompilationMode.OPT); }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java index 8ce3e89..4a5a6b1 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
@@ -294,7 +294,7 @@ @Test public void testHostTransition() throws Exception { Attribute attr = attr("foo", LABEL).cfg(HostTransition.INSTANCE).allowedFileTypes().build(); - assertThat(attr.getConfigurationTransition().isHostTransition()).isTrue(); + assertThat(attr.hasHostConfigurationTransition()).isTrue(); assertThat(attr.hasSplitConfigurationTransition()).isFalse(); }
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 01b0497..dd16c74 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
@@ -581,7 +581,7 @@ @Test public void testAttrCfg() throws Exception { Attribute attr = buildAttribute("a1", "attr.label(cfg = 'host', allow_files = True)"); - assertThat(attr.getConfigurationTransition().isHostTransition()).isTrue(); + assertThat(attr.hasHostConfigurationTransition()).isTrue(); } @Test