aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-09-25 11:35:11 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-09-25 14:41:21 +0000
commite96b0b88a5f9aa8cd816e3603b9179f040d79270 (patch)
tree82af330b0cc3d012eeae1d6338277fbb674b2ba1 /src/main/java/com/google/devtools/build/lib/rules
parent61b0cced33159c0f0e03e5effbe4f4af1177c07d (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.java14
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<>();