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