diff options
author | 2015-10-20 17:02:19 +0000 | |
---|---|---|
committer | 2015-10-21 14:34:52 +0000 | |
commit | 5e00ec6f285d0445fc2fad6aede4509cf7d63263 (patch) | |
tree | ab56a2c1f045a2e98df71ff32f29d55f6fa4eae5 /src | |
parent | a58db9b6ecdfdb32abd3a7e90c290d6269cfb543 (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.java | 22 |
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); } |