Enshrine that all ToolchainContexts in a toolchain collection have the same target platform so the toolchain collection should be able to directly access it.
Along the way, rm an unused method.
PiperOrigin-RevId: 333365303
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
index d4461b2..15c1d3f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -1056,6 +1056,7 @@
srcs = ["ToolchainCollection.java"],
deps = [
":toolchain_context",
+ "//src/main/java/com/google/devtools/build/lib/analysis/platform",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//third_party:auto_value",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 99f52d9..47f687c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1219,16 +1219,11 @@
}
public boolean targetPlatformHasConstraint(ConstraintValueInfo constraintValue) {
- if (toolchainContexts == null
- || toolchainContexts.getDefaultToolchainContext().targetPlatform() == null) {
+ if (toolchainContexts == null || toolchainContexts.getTargetPlatform() == null) {
return false;
}
// All toolchain contexts should have the same target platform so we access via the default.
- return toolchainContexts
- .getDefaultToolchainContext()
- .targetPlatform()
- .constraints()
- .hasConstraintValue(constraintValue);
+ return toolchainContexts.getTargetPlatform().constraints().hasConstraintValue(constraintValue);
}
public ConstraintSemantics<RuleContext> getConstraintSemantics() {
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 0ae7a33..a7457f8 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
@@ -18,9 +18,9 @@
import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
import com.google.devtools.build.lib.cmdline.Label;
import java.util.HashMap;
import java.util.Map;
@@ -63,6 +63,14 @@
return getContextMap().keySet();
}
+ /**
+ * This is safe because all toolchain context in a toolchain collection should have the same
+ * target platform
+ */
+ public PlatformInfo getTargetPlatform() {
+ return getDefaultToolchainContext().targetPlatform();
+ }
+
@SuppressWarnings("unchecked")
public ToolchainCollection<ToolchainContext> asToolchainContexts() {
return (ToolchainCollection<ToolchainContext>) this;
@@ -73,16 +81,6 @@
return new Builder<T>();
}
- /**
- * Returns every instance of {@link ToolchainContext} that uses {@code resolvedToolchainLabel} as
- * a resolved toolchain.
- */
- public ImmutableList<T> getContextsForResolvedToolchain(Label resolvedToolchainLabel) {
- return getContextMap().values().stream()
- .filter(tc -> tc.resolvedToolchainLabels().contains(resolvedToolchainLabel))
- .collect(ImmutableList.toImmutableList());
- }
-
/** Builder for ToolchainCollection. */
public static final class Builder<T extends ToolchainContext> {
// This is not immutable so that we can check for duplicate keys easily.
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
index 3739186..cc8c0fb 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
@@ -230,6 +230,7 @@
ToolchainCollection.Builder<UnloadedToolchainContext> toolchainContexts =
ToolchainCollection.builder();
+ BuildConfigurationValue.Key configurationKey = BuildConfigurationValue.key(config);
try {
for (Map.Entry<String, ExecGroup> group : execGroups.entrySet()) {
ExecGroup execGroup = group.getValue();
@@ -237,7 +238,7 @@
(UnloadedToolchainContext)
walkableGraph.getValue(
ToolchainContextKey.key()
- .configurationKey(BuildConfigurationValue.key(config))
+ .configurationKey(configurationKey)
.requiredToolchainTypeLabels(execGroup.requiredToolchains())
.execConstraintLabels(execGroup.execCompatibleWith())
.build());
@@ -250,7 +251,7 @@
(UnloadedToolchainContext)
walkableGraph.getValue(
ToolchainContextKey.key()
- .configurationKey(BuildConfigurationValue.key(config))
+ .configurationKey(configurationKey)
.requiredToolchainTypeLabels(requiredToolchains)
.execConstraintLabels(execConstraintLabels)
.build());
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 82b3c2a..f15da2a 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
@@ -291,7 +291,7 @@
transitivePackagesForPackageRootResolution,
unloadedToolchainContexts == null
? null
- : unloadedToolchainContexts.getDefaultToolchainContext().targetPlatform(),
+ : unloadedToolchainContexts.getTargetPlatform(),
transitiveRootCauses);
if (env.valuesMissing()) {
return null;
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 e77cdf0..8eb219e 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
@@ -331,9 +331,7 @@
getConfigurableAttributeKeysForTesting(
eventHandler,
ctgNode,
- toolchainContexts == null
- ? null
- : toolchainContexts.getDefaultToolchainContext().targetPlatform()),
+ toolchainContexts == null ? null : toolchainContexts.getTargetPlatform()),
toolchainContexts,
DependencyResolver.shouldUseToolchainTransition(configuration, target),
ruleClassProvider.getTrimmingTransitionFactory());
@@ -519,11 +517,12 @@
skyframeExecutor.getSkyFunctionEnvironmentForTesting(eventHandler);
Map<String, ToolchainContextKey> toolchainContextKeys = new HashMap<>();
+ BuildConfigurationValue.Key configurationKey = BuildConfigurationValue.key(targetConfig);
for (Map.Entry<String, ExecGroup> execGroup : execGroups.entrySet()) {
toolchainContextKeys.put(
execGroup.getKey(),
ToolchainContextKey.key()
- .configurationKey(BuildConfigurationValue.key(targetConfig))
+ .configurationKey(configurationKey)
.requiredToolchainTypeLabels(execGroup.getValue().requiredToolchains())
.build());
}
@@ -531,7 +530,7 @@
toolchainContextKeys.put(
targetUnloadedToolchainContextKey,
ToolchainContextKey.key()
- .configurationKey(BuildConfigurationValue.key(targetConfig))
+ .configurationKey(configurationKey)
.requiredToolchainTypeLabels(requiredToolchains)
.build());