diff options
author | cpeyser <cpeyser@google.com> | 2017-08-04 19:48:53 +0200 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-08-07 11:22:12 +0200 |
commit | d78b374941a7b70a9b1bdfdb903213d886226342 (patch) | |
tree | 039b04aceb4d4bb90366f9920755b3ce7e1263d0 | |
parent | 9302d1b2c16b054388a7731a54176695466825aa (diff) |
Required toolchains set on rule classes are inherited.
PiperOrigin-RevId: 164281027
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/RuleClass.java | 2 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java | 18 |
2 files changed, 20 insertions, 0 deletions
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 ae0c358a1e..f979d8bf7b 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 @@ public class RuleClass { 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 b93fe6c836..1545f5635f 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; 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 @@ public class RuleClassBuilderTest extends PackageLoadingTestCase { // 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); + } } |