Added Builder for DeclaredToolchainInfo.
Part of the fix for #7548.
Closes #7552.
PiperOrigin-RevId: 235798206
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java
index 862d56d..8fa0e06 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java
@@ -44,17 +44,58 @@
/** The label of the toolchain to resolve for use in toolchain-aware rules. */
public abstract Label toolchainLabel();
- /** Returns a new {@link DeclaredToolchainInfo} with the given data. */
- public static DeclaredToolchainInfo create(
- ToolchainTypeInfo toolchainType,
- ImmutableList<ConstraintValueInfo> execConstraints,
- ImmutableList<ConstraintValueInfo> targetConstraints,
- Label toolchainLabel) {
- return create(
- toolchainType,
- ConstraintCollection.builder().addConstraints(execConstraints).build(),
- ConstraintCollection.builder().addConstraints(targetConstraints).build(),
- toolchainLabel);
+ /** Builder class to assist in creating {@link DeclaredToolchainInfo} instances. */
+ public static class Builder {
+ private ToolchainTypeInfo toolchainType;
+ private ConstraintCollection.Builder execConstraints = ConstraintCollection.builder();
+ private ConstraintCollection.Builder targetConstraints = ConstraintCollection.builder();
+ private Label toolchainLabel;
+
+ /** Sets the type of the toolchain being declared. */
+ public Builder toolchainType(ToolchainTypeInfo toolchainType) {
+ this.toolchainType = toolchainType;
+ return this;
+ }
+
+ /** Adds constraints describing the execution environment. */
+ public Builder addExecConstraints(Iterable<ConstraintValueInfo> constraints) {
+ this.execConstraints.addConstraints(constraints);
+ return this;
+ }
+
+ /** Adds constraints describing the execution environment. */
+ public Builder addExecConstraints(ConstraintValueInfo... constraints) {
+ return addExecConstraints(ImmutableList.copyOf(constraints));
+ }
+
+ /** Adds constraints describing the target environment. */
+ public Builder addTargetConstraints(Iterable<ConstraintValueInfo> constraints) {
+ this.targetConstraints.addConstraints(constraints);
+ return this;
+ }
+
+ /** Adds constraints describing the target environment. */
+ public Builder addTargetConstraints(ConstraintValueInfo... constraints) {
+ return addTargetConstraints(ImmutableList.copyOf(constraints));
+ }
+
+ /** Sets the label of the toolchain to resolve for use in toolchain-aware rules. */
+ public Builder toolchainLabel(Label toolchainLabel) {
+ this.toolchainLabel = toolchainLabel;
+ return this;
+ }
+
+ /** Returns the newly created {@link DeclaredToolchainInfo} instance. */
+ public DeclaredToolchainInfo build() {
+ // TODO(katre): handle constraint duplication in attributes separately.
+ return new AutoValue_DeclaredToolchainInfo(
+ toolchainType, execConstraints.build(), targetConstraints.build(), toolchainLabel);
+ }
+ }
+
+ /** Returns a new {@link Builder} for creating {@link DeclaredToolchainInfo} instances. */
+ public static Builder builder() {
+ return new Builder();
}
@AutoCodec.Instantiator
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java b/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java
index 35bac2e..22cf191 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.rules.platform;
-import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
@@ -52,11 +51,12 @@
ruleContext.attributes().get(ToolchainRule.TOOLCHAIN_ATTR, BuildType.NODEP_LABEL);
DeclaredToolchainInfo registeredToolchain =
- DeclaredToolchainInfo.create(
- toolchainType,
- ImmutableList.copyOf(execConstraints),
- ImmutableList.copyOf(targetConstraints),
- toolchainLabel);
+ DeclaredToolchainInfo.builder()
+ .toolchainType(toolchainType)
+ .addExecConstraints(execConstraints)
+ .addTargetConstraints(targetConstraints)
+ .toolchainLabel(toolchainLabel)
+ .build();
return new RuleConfiguredTargetBuilder(ruleContext)
.addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java
index 94b89d7..6c46871 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java
@@ -37,37 +37,42 @@
new EqualsTester()
.addEqualityGroup(
// Base case.
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
- ImmutableList.of(constraint1),
- ImmutableList.of(constraint2),
- makeLabel("//toolchain:toolchain1")),
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
- ImmutableList.of(constraint1),
- ImmutableList.of(constraint2),
- makeLabel("//toolchain:toolchain1")))
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+ .addExecConstraints(ImmutableList.of(constraint1))
+ .addTargetConstraints(ImmutableList.of(constraint2))
+ .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+ .build(),
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+ .addExecConstraints(ImmutableList.of(constraint1))
+ .addTargetConstraints(ImmutableList.of(constraint2))
+ .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+ .build())
.addEqualityGroup(
// Different type.
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//toolchain:tc2")),
- ImmutableList.of(constraint1),
- ImmutableList.of(constraint2),
- makeLabel("//toolchain:toolchain1")))
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc2")))
+ .addExecConstraints(ImmutableList.of(constraint1))
+ .addTargetConstraints(ImmutableList.of(constraint2))
+ .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+ .build())
.addEqualityGroup(
// Different constraints.
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
- ImmutableList.of(constraint2),
- ImmutableList.of(constraint1),
- makeLabel("//toolchain:toolchain1")))
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+ .addExecConstraints(ImmutableList.of(constraint2))
+ .addTargetConstraints(ImmutableList.of(constraint1))
+ .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+ .build())
.addEqualityGroup(
// Different toolchain label.
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
- ImmutableList.of(constraint1),
- ImmutableList.of(constraint2),
- makeLabel("//toolchain:toolchain2")))
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+ .addExecConstraints(ImmutableList.of(constraint1))
+ .addTargetConstraints(ImmutableList.of(constraint2))
+ .toolchainLabel(makeLabel("//toolchain:toolchain2"))
+ .build())
.testEquals();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java
index 98c40fc..1fd6da1 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java
@@ -280,17 +280,19 @@
@Test
public void testRegisteredToolchainsValue_equalsAndHashCode() {
DeclaredToolchainInfo toolchain1 =
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//test:toolchain")),
- ImmutableList.of(),
- ImmutableList.of(),
- makeLabel("//test/toolchain_impl_1"));
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//test:toolchain")))
+ .addExecConstraints(ImmutableList.of())
+ .addTargetConstraints(ImmutableList.of())
+ .toolchainLabel(makeLabel("//test/toolchain_impl_1"))
+ .build();
DeclaredToolchainInfo toolchain2 =
- DeclaredToolchainInfo.create(
- ToolchainTypeInfo.create(makeLabel("//test:toolchain")),
- ImmutableList.of(),
- ImmutableList.of(),
- makeLabel("//test/toolchain_impl_2"));
+ DeclaredToolchainInfo.builder()
+ .toolchainType(ToolchainTypeInfo.create(makeLabel("//test:toolchain")))
+ .addExecConstraints(ImmutableList.of())
+ .addTargetConstraints(ImmutableList.of())
+ .toolchainLabel(makeLabel("//test/toolchain_impl_2"))
+ .build();
new EqualsTester()
.addEqualityGroup(