Refactor DependencyResolver#dependentNodeMap to take in a set of toolchain labels instead of the entire toolchain context since that's all the dependency resolver really needs. This will help make cquery transitions outputter easier to implement.
PiperOrigin-RevId: 189342812
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 e9657f8..c788f56 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
@@ -1052,7 +1052,9 @@
configurations.getHostConfiguration(),
/*aspect=*/ null,
getConfigurableAttributeKeysForTesting(eventHandler, ctgNode),
- toolchainContext);
+ toolchainContext == null
+ ? ImmutableSet.of()
+ : toolchainContext.getResolvedToolchainLabels());
}
/**
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 14b7dcc..77fe0ad 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
@@ -90,7 +90,7 @@
* This is needed to support {@link LateBoundDefault#useHostConfiguration()}.
* @param aspect the aspect applied to this target (if any)
* @param configConditions resolver for config_setting labels
- * @param toolchainContext {@link ToolchainContext} for this target
+ * @param toolchainLabels required toolchain labels
* @return a mapping of each attribute in this rule or aspects to its dependent nodes
*/
public final OrderedSetMultimap<Attribute, Dependency> dependentNodeMap(
@@ -98,7 +98,7 @@
BuildConfiguration hostConfig,
@Nullable Aspect aspect,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- ToolchainContext toolchainContext)
+ ImmutableSet<Label> toolchainLabels)
throws EvalException, InvalidConfigurationException, InterruptedException,
InconsistentAspectOrderException {
NestedSetBuilder<Label> rootCauses = NestedSetBuilder.<Label>stableOrder();
@@ -108,7 +108,7 @@
hostConfig,
aspect != null ? ImmutableList.of(aspect) : ImmutableList.<Aspect>of(),
configConditions,
- toolchainContext,
+ toolchainLabels,
rootCauses);
if (!rootCauses.isEmpty()) {
throw new IllegalStateException(rootCauses.build().iterator().next().toString());
@@ -141,7 +141,7 @@
* This is needed to support {@link LateBoundDefault#useHostConfiguration()}.
* @param aspects the aspects applied to this target (if any)
* @param configConditions resolver for config_setting labels
- * @param toolchainContext context information for required toolchains
+ * @param toolchainLabels required toolchain labels
* @param rootCauses collector for dep labels that can't be (loading phase) loaded @return a
* mapping of each attribute in this rule or aspects to its dependent nodes
*/
@@ -150,7 +150,7 @@
BuildConfiguration hostConfig,
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- @Nullable ToolchainContext toolchainContext,
+ ImmutableSet<Label> toolchainLabels,
NestedSetBuilder<Label> rootCauses)
throws EvalException, InvalidConfigurationException, InterruptedException,
InconsistentAspectOrderException {
@@ -168,7 +168,7 @@
visitTargetVisibility(node, rootCauses, outgoingEdges.get(null));
} else if (target instanceof Rule) {
visitRule(
- node, hostConfig, aspects, configConditions, toolchainContext, rootCauses, outgoingEdges);
+ node, hostConfig, aspects, configConditions, toolchainLabels, rootCauses, outgoingEdges);
} else if (target instanceof PackageGroup) {
visitPackageGroup(node, (PackageGroup) target, rootCauses, outgoingEdges.get(null));
} else {
@@ -183,7 +183,7 @@
BuildConfiguration hostConfig,
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- @Nullable ToolchainContext toolchainContext,
+ ImmutableSet<Label> toolchainLabels,
NestedSetBuilder<Label> rootCauses,
OrderedSetMultimap<Attribute, Dependency> outgoingEdges)
throws EvalException, InvalidConfigurationException, InconsistentAspectOrderException,
@@ -201,11 +201,9 @@
resolveEarlyBoundAttributes(depResolver);
resolveLateBoundAttributes(depResolver, ruleConfig, hostConfig);
- if (toolchainContext != null) {
- Attribute toolchainsAttribute =
- attributeMap.getAttributeDefinition(PlatformSemantics.TOOLCHAINS_ATTR);
- resolveToolchainDependencies(outgoingEdges.get(toolchainsAttribute), toolchainContext);
- }
+ Attribute toolchainsAttribute =
+ attributeMap.getAttributeDefinition(PlatformSemantics.TOOLCHAINS_ATTR);
+ resolveToolchainDependencies(outgoingEdges.get(toolchainsAttribute), toolchainLabels);
}
/**
@@ -405,8 +403,8 @@
}
private void resolveToolchainDependencies(
- Set<Dependency> dependencies, ToolchainContext toolchainContext) {
- for (Label label : toolchainContext.getResolvedToolchainLabels()) {
+ Set<Dependency> dependencies, ImmutableSet<Label> toolchainLabels) {
+ for (Label label : toolchainLabels) {
Dependency dependency =
Dependency.withTransitionAndAspects(
label, HostTransition.INSTANCE, AspectCollection.EMPTY);
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 ea70f6e..2df73d1 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
@@ -404,7 +404,9 @@
hostConfiguration,
aspects,
configConditions,
- toolchainContext,
+ toolchainContext == null
+ ? ImmutableSet.of()
+ : toolchainContext.getResolvedToolchainLabels(),
transitiveLoadingRootCauses);
} catch (EvalException e) {
// EvalException can only be thrown by computed Skylark attributes in the current rule.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
index 27d9a3d..c8e61fe 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
@@ -16,6 +16,7 @@
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -124,7 +125,7 @@
hostConfiguration,
/*aspect=*/ null,
configConditions,
- /*toolchainContext=*/ null);
+ /*toolchainLabels=*/ ImmutableSet.of());
if (ct.getConfiguration() != null) {
deps = ConfigurationResolver.resolveConfigurations(env, ctgValue, deps, hostConfiguration,
ruleClassProvider);
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 419f042..4069c9a 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
@@ -17,6 +17,7 @@
import static com.google.common.truth.Truth.assertWithMessage;
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.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
@@ -108,7 +109,7 @@
getHostConfiguration(),
aspect != null ? Aspect.forNative(aspect) : null,
ImmutableMap.<Label, ConfigMatchingProvider>of(),
- /*toolchainContext=*/ null);
+ /*toolchainLabels=*/ ImmutableSet.of());
}
@SafeVarargs