Check non-default UnloadedToolchainContexts for errors in ConfiguredTargetFunction

PiperOrigin-RevId: 305755382
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 54394c5..f441740 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
@@ -484,7 +484,7 @@
     }
 
     if (toolchainContexts != null) {
-      outgoingLabels.putAll(TOOLCHAIN_DEPENDENCY, toolchainContexts.getRequiredToolchains());
+      outgoingLabels.putAll(TOOLCHAIN_DEPENDENCY, toolchainContexts.getResolvedToolchains());
     }
 
     if (!rule.isAttributeValueExplicitlySpecified(RuleClass.APPLICABLE_LICENSES_ATTR)) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java
index 17985a9..8274d83 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java
@@ -13,15 +13,15 @@
 // limitations under the License.
 package com.google.devtools.build.lib.analysis;
 
+import static com.google.common.collect.ImmutableSet.toImmutableSet;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.cmdline.Label;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * A wrapper class for a map of exec_group names to their relevent ToolchainContext.
@@ -70,12 +70,10 @@
     return toolchainContexts.get(execGroup);
   }
 
-  public ImmutableSet<Label> getRequiredToolchains() {
-    Set<Label> requiredToolchains = new HashSet<>();
-    for (T context : toolchainContexts.values()) {
-      requiredToolchains.addAll(context.resolvedToolchainLabels());
-    }
-    return ImmutableSet.copyOf(requiredToolchains);
+  public ImmutableSet<Label> getResolvedToolchains() {
+    return toolchainContexts.values().stream()
+        .flatMap(c -> c.resolvedToolchainLabels().stream())
+        .collect(toImmutableSet());
   }
 
   public ToolchainCollection<ToolchainContext> asToolchainContexts() {
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 6d9b644..eb639f8 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
@@ -359,14 +359,13 @@
         ConfiguredValueCreationException cvce = (ConfiguredValueCreationException) e.getCause();
 
         // Check if this is caused by an unresolved toolchain, and report it as such.
-        // TODO(b/151742236): check non-default {@link ExecGroup} toolchains as well.
         if (unloadedToolchainContexts != null) {
-          UnloadedToolchainContext finalUnloadedToolchainContext =
-              unloadedToolchainContexts.getDefaultToolchainContext();
+          ImmutableSet<Label> requiredToolchains =
+              unloadedToolchainContexts.getResolvedToolchains();
           Set<Label> toolchainDependencyErrors =
               cvce.getRootCauses().toList().stream()
                   .map(Cause::getLabel)
-                  .filter(l -> finalUnloadedToolchainContext.resolvedToolchainLabels().contains(l))
+                  .filter(requiredToolchains::contains)
                   .collect(ImmutableSet.toImmutableSet());
 
           if (!toolchainDependencyErrors.isEmpty()) {