Required toolchains set on rule classes are inherited.
PiperOrigin-RevId: 164281027
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index ae0c358..f979d8b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -545,6 +545,8 @@
parent.getConfigurationFragmentPolicy().getMissingFragmentPolicy());
supportsConstraintChecking = parent.supportsConstraintChecking;
+ addRequiredToolchains(parent.getRequiredToolchains());
+
for (Attribute attribute : parent.getAttributes()) {
String attrName = attribute.getName();
Preconditions.checkArgument(
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
index b93fe6c..1545f56 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
@@ -21,6 +21,8 @@
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
import static org.junit.Assert.fail;
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase;
import org.junit.Test;
@@ -188,4 +190,20 @@
// Expected exception.
}
}
+
+ @Test
+ public void testRequiredToolchainsAreInherited() throws Exception {
+ Label mockToolchainType = Label.parseAbsoluteUnchecked("//mock_toolchain_type");
+ RuleClass parent =
+ new RuleClass.Builder("$parent", RuleClassType.ABSTRACT, false)
+ .add(attr("tags", STRING_LIST))
+ .addRequiredToolchains(ImmutableList.of(mockToolchainType))
+ .build();
+ RuleClass child =
+ new RuleClass.Builder("child", RuleClassType.NORMAL, false, parent)
+ .factory(DUMMY_CONFIGURED_TARGET_FACTORY)
+ .add(attr("attr", STRING))
+ .build();
+ assertThat(child.getRequiredToolchains()).contains(mockToolchainType);
+ }
}