diff options
author | 2015-09-25 11:35:11 +0000 | |
---|---|---|
committer | 2015-09-25 14:41:21 +0000 | |
commit | e96b0b88a5f9aa8cd816e3603b9179f040d79270 (patch) | |
tree | 82af330b0cc3d012eeae1d6338277fbb674b2ba1 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 61b0cced33159c0f0e03e5effbe4f4af1177c07d (diff) |
Skylark rules can no longer overwrite built-in attributes.
--
MOS_MIGRATED_REVID=103931317
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java index f2a3733b16..88f61ec942 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java @@ -264,11 +264,12 @@ public class SkylarkRuleClassFunctions { Attribute.Builder<?> attrBuilder = (Attribute.Builder<?>) attr.getValue(); String attrName = attributeToNative(attr.getKey(), ast.getLocation(), attrBuilder.hasLateBoundValue()); - builder.addOrOverrideAttribute(attrBuilder.build(attrName)); + addAttribute(builder, attrBuilder.build(attrName)); } } if (executable || test) { - builder.addOrOverrideAttribute( + addAttribute( + builder, attr("$is_executable", BOOLEAN) .value(true) .nonconfigurable("Called from RunCommand.isExecutable, which takes a Target") @@ -297,12 +298,19 @@ public class SkylarkRuleClassFunctions { } registerRequiredFragments(fragments, hostFragments, builder); - builder.setConfiguredTargetFunction(implementation); builder.setRuleDefinitionEnvironment(funcallEnv); return new RuleFunction(builder, type); } + private void addAttribute(RuleClass.Builder builder, Attribute attribute) throws EvalException { + try { + builder.addOrOverrideAttribute(attribute); + } catch (IllegalArgumentException ex) { + throw new EvalException(location, ex); + } + } + private void registerRequiredFragments( SkylarkList fragments, SkylarkList hostFragments, RuleClass.Builder builder) { Map<ConfigurationTransition, ImmutableSet<String>> map = new HashMap<>(); |