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()) {