aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Francois-Rene Rideau <tunes@google.com>2015-10-20 17:02:19 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-10-21 14:34:52 +0000
commit5e00ec6f285d0445fc2fad6aede4509cf7d63263 (patch)
treeab56a2c1f045a2e98df71ff32f29d55f6fa4eae5 /src
parenta58db9b6ecdfdb32abd3a7e90c290d6269cfb543 (diff)
Check invalid empty dict attributes
In checkAttrValNonEmpty, also check dict values for emptiness when the attribute was declared non-empty. -- MOS_MIGRATED_REVID=105871620
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java22
1 files changed, 13 insertions, 9 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 65517309fb..797aeb94d5 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
@@ -1351,20 +1351,24 @@ public final class RuleClass {
private void checkAttrValNonEmpty(
Rule rule, EventHandler eventHandler, Object attributeValue, Integer attrIndex) {
- List<?> list;
+
+ Attribute attr = getAttribute(attrIndex);
+ if (!attr.isNonEmpty()) {
+ return;
+ }
+
+ boolean isEmpty = false;
if (attributeValue instanceof SkylarkList) {
- list = ((SkylarkList) attributeValue).getList();
+ isEmpty = ((SkylarkList) attributeValue).isEmpty();
} else if (attributeValue instanceof List<?>) {
- list = (List<?>) attributeValue;
- } else {
- // TODO(bazel-team): Test maps, not just lists, as being non-empty.
- return;
+ isEmpty = ((List<?>) attributeValue).isEmpty();
+ } else if (attributeValue instanceof Map<?, ?>) {
+ isEmpty = ((Map<?, ?>) attributeValue).isEmpty();
}
- Attribute attr = getAttribute(attrIndex);
- if (attr.isNonEmpty() && list.isEmpty()) {
- rule.reportError(rule.getLabel() + ": non empty " + "attribute '" + attr.getName()
+ if (isEmpty) {
+ rule.reportError(rule.getLabel() + ": non empty attribute '" + attr.getName()
+ "' in '" + name + "' rule '" + rule.getLabel() + "' has to have at least one value",
eventHandler);
}