Hoist up the useToolchainTransitionParameter to the caller.
This will allow Aspects to use the toolchain transition.
Part of work on toolchain transition, #10523.
PiperOrigin-RevId: 316751670
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 111711b..e88183b 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
@@ -73,6 +73,30 @@
public abstract class DependencyResolver {
/**
+ * Returns whether or not to use the new toolchain transition. Checks the global incompatible
+ * change flag and the rule's toolchain transition readiness attribute.
+ */
+ // TODO(#10523): Remove this when the migration period for toolchain transitions has ended.
+ public static boolean shouldUseToolchainTransition(
+ @Nullable BuildConfiguration configuration, Target target) {
+ // Check whether the global incompatible change flag is set.
+ if (configuration != null) {
+ PlatformOptions platformOptions = configuration.getOptions().get(PlatformOptions.class);
+ if (platformOptions != null && platformOptions.overrideToolchainTransition) {
+ return true;
+ }
+ }
+
+ // Check the rule definition to see if it is ready.
+ if (target instanceof Rule && ((Rule) target).getRuleClassObject().useToolchainTransition()) {
+ return true;
+ }
+
+ // Default to false.
+ return false;
+ }
+
+ /**
* What we know about a dependency edge after factoring in the properties of the configured target
* that the edge originates from, but not the properties of target it points to.
*/
@@ -148,6 +172,7 @@
@Nullable Aspect aspect,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
@Nullable ToolchainCollection<ToolchainContext> toolchainContexts,
+ boolean useToolchainTransition,
@Nullable TransitionFactory<Rule> trimmingTransitionFactory)
throws EvalException, InterruptedException, InconsistentAspectOrderException {
NestedSetBuilder<Cause> rootCauses = NestedSetBuilder.stableOrder();
@@ -155,9 +180,10 @@
dependentNodeMap(
node,
hostConfig,
- aspect != null ? ImmutableList.of(aspect) : ImmutableList.<Aspect>of(),
+ aspect != null ? ImmutableList.of(aspect) : ImmutableList.of(),
configConditions,
toolchainContexts,
+ useToolchainTransition,
rootCauses,
trimmingTransitionFactory);
if (!rootCauses.isEmpty()) {
@@ -203,6 +229,7 @@
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
@Nullable ToolchainCollection<ToolchainContext> toolchainContexts,
+ boolean useToolchainTransition,
NestedSetBuilder<Cause> rootCauses,
@Nullable TransitionFactory<Rule> trimmingTransitionFactory)
throws EvalException, InterruptedException, InconsistentAspectOrderException {
@@ -239,9 +266,6 @@
return OrderedSetMultimap.create();
}
- // TODO(#10523): Remove this when the migration period for toolchain transitions has ended.
- boolean useToolchainTransition =
- shouldUseToolchainTransition(node.getConfiguration(), fromRule);
OrderedSetMultimap<DependencyKind, PartiallyResolvedDependency> partiallyResolvedDeps =
partiallyResolveDependencies(
outgoingLabels,
@@ -259,29 +283,6 @@
}
/**
- * Returns whether or not to use the new toolchain transition. Checks the global incompatible
- * change flag and the rule's toolchain transition readiness attribute.
- */
- private static boolean shouldUseToolchainTransition(
- @Nullable BuildConfiguration configuration, @Nullable Rule fromRule) {
- // Check whether the global incompatible change flag is set.
- if (configuration != null) {
- PlatformOptions platformOptions = configuration.getOptions().get(PlatformOptions.class);
- if (platformOptions != null && platformOptions.overrideToolchainTransition) {
- return true;
- }
- }
-
- // Check the rule definition to see if it is ready.
- if (fromRule != null && fromRule.getRuleClassObject().useToolchainTransition()) {
- return true;
- }
-
- // Default to false.
- return false;
- }
-
- /**
* Factor in the properties of the current rule into the dependency edge calculation.
*
* <p>The target of the dependency edges depends on two things: the rule that depends on them and
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
index fa20d77..ed0d557 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
@@ -132,6 +132,7 @@
/*aspect=*/ null,
configConditions,
toolchainContexts,
+ DependencyResolver.shouldUseToolchainTransition(config, target),
trimmingTransitionFactory);
} catch (EvalException | InconsistentAspectOrderException e) {
throw new InterruptedException(e.getMessage());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index 627d206..200b703 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -424,6 +424,7 @@
: ToolchainCollection.builder()
.addDefaultContext(unloadedToolchainContext)
.build(),
+ /* useToolchainTransition= */ false,
ruleClassProvider,
view.getHostConfiguration(originalTargetAndAspectConfiguration.getConfiguration()),
transitivePackagesForPackageRootResolution,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 515faf7..1cac710 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -35,6 +35,7 @@
import com.google.devtools.build.lib.analysis.Dependency;
import com.google.devtools.build.lib.analysis.DependencyKey;
import com.google.devtools.build.lib.analysis.DependencyKind;
+import com.google.devtools.build.lib.analysis.DependencyResolver;
import com.google.devtools.build.lib.analysis.DuplicateException;
import com.google.devtools.build.lib.analysis.EmptyConfiguredTarget;
import com.google.devtools.build.lib.analysis.InconsistentAspectOrderException;
@@ -314,6 +315,7 @@
unloadedToolchainContexts == null
? null
: unloadedToolchainContexts.asToolchainContexts(),
+ DependencyResolver.shouldUseToolchainTransition(configuration, ctgValue.getTarget()),
ruleClassProvider,
view.getHostConfiguration(configuration),
transitivePackagesForPackageRootResolution,
@@ -615,6 +617,7 @@
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
@Nullable ToolchainCollection<ToolchainContext> toolchainContexts,
+ boolean useToolchainTransition,
RuleClassProvider ruleClassProvider,
BuildConfiguration hostConfiguration,
@Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution,
@@ -634,6 +637,7 @@
aspects,
configConditions,
toolchainContexts,
+ useToolchainTransition,
transitiveRootCauses,
((ConfiguredRuleClassProvider) ruleClassProvider).getTrimmingTransitionFactory());
} catch (EvalException e) {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
index abf3ee6..cb7b0b1 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
@@ -95,6 +95,7 @@
aspect != null ? Aspect.forNative(aspect) : null,
ImmutableMap.of(),
/*toolchainContext=*/ null,
+ /*useToolchainTransition=*/ false,
/*trimmingTransitionFactory=*/ null);
return prerequisiteMap;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
index 950249f..bce8237 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
@@ -325,15 +325,16 @@
}
DependencyResolver dependencyResolver = new SilentDependencyResolver();
- TargetAndConfiguration ctgNode =
- new TargetAndConfiguration(
- target, skyframeExecutor.getConfiguration(eventHandler, ct.getConfigurationKey()));
+ BuildConfiguration configuration =
+ skyframeExecutor.getConfiguration(eventHandler, ct.getConfigurationKey());
+ TargetAndConfiguration ctgNode = new TargetAndConfiguration(target, configuration);
return dependencyResolver.dependentNodeMap(
ctgNode,
configurations.getHostConfiguration(),
/*aspect=*/ null,
getConfigurableAttributeKeysForTesting(eventHandler, ctgNode),
toolchainContexts,
+ DependencyResolver.shouldUseToolchainTransition(configuration, target),
ruleClassProvider.getTrimmingTransitionFactory());
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
index 2821a20..93ec6ea 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
@@ -142,6 +142,7 @@
ImmutableList.<Aspect>of(),
ImmutableMap.<Label, ConfigMatchingProvider>of(),
/*toolchainContext=*/ null,
+ /* useToolchainTransition= */ false,
stateProvider.lateBoundRuleClassProvider(),
stateProvider.lateBoundHostConfig(),
NestedSetBuilder.<Package>stableOrder(),