diff options
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java | 11 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/RuleClass.java | 41 |
2 files changed, 23 insertions, 29 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index 57e680824e..f77a271926 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -158,7 +158,6 @@ public final class RuleContext extends TargetContext private RuleContext( Builder builder, - AttributeMap attributes, ListMultimap<String, ConfiguredTarget> targetMap, ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap, Set<ConfigMatchingProvider> configConditions, @@ -173,7 +172,8 @@ public final class RuleContext extends TargetContext this.targetMap = targetMap; this.filesetEntryMap = filesetEntryMap; this.configConditions = configConditions; - this.attributes = attributes; + this.attributes = + ConfiguredAttributeMapper.of(builder.rule, configConditions); this.features = getEnabledFeatures(); this.ruleClassNameForLogging = ruleClassNameForLogging; this.aspectAttributes = aspectAttributes; @@ -1330,14 +1330,11 @@ public final class RuleContext extends TargetContext Preconditions.checkNotNull(prerequisiteMap); Preconditions.checkNotNull(configConditions); Preconditions.checkNotNull(visibility); - AttributeMap attributes = ConfiguredAttributeMapper.of(rule, configConditions); - validateAttributes(attributes); ListMultimap<String, ConfiguredTarget> targetMap = createTargetMap(); ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap = createFilesetEntryMap(rule, configConditions); return new RuleContext( this, - attributes, targetMap, filesetEntryMap, configConditions, @@ -1346,10 +1343,6 @@ public final class RuleContext extends TargetContext aspectAttributes != null ? aspectAttributes : ImmutableMap.<String, Attribute>of()); } - private void validateAttributes(AttributeMap attributes) { - rule.getRuleClassObject().checkAttributesNonEmpty(rule, reporter, attributes); - } - Builder setVisibility(NestedSet<PackageSpecification> visibility) { this.visibility = visibility; return this; 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 ed2ad3064c..9accac3899 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 @@ -1401,6 +1401,7 @@ public final class RuleClass { boolean explicit = attributeValues.isAttributeExplicitlySpecified(attributeName); setRuleAttributeValue(rule, eventHandler, attr, nativeAttributeValue, explicit); definedAttrIndices.set(attrIndex); + checkAttrValNonEmpty(rule, eventHandler, attributeValue, attr); } return definedAttrIndices; } @@ -1456,6 +1457,7 @@ public final class RuleClass { attrsWithComputedDefaults.add(attr); } else { Object defaultValue = getAttributeNoncomputedDefaultValue(attr, pkgBuilder); + checkAttrValNonEmpty(rule, eventHandler, defaultValue, attr); rule.setAttributeValue(attr, defaultValue, /*explicit=*/ false); checkAllowedValues(rule, attr, eventHandler); } @@ -1498,27 +1500,26 @@ public final class RuleClass { /*explicit=*/false); } - public void checkAttributesNonEmpty( - Rule rule, RuleErrorConsumer ruleErrorConsumer, AttributeMap attributes) { - for (String attributeName : attributes.getAttributeNames()) { - Attribute attr = attributes.getAttributeDefinition(attributeName); - if (!attr.isNonEmpty()) { - continue; - } - Object attributeValue = attributes.get(attributeName, attr.getType()); - - boolean isEmpty = false; - if (attributeValue instanceof SkylarkList) { - isEmpty = ((SkylarkList) attributeValue).isEmpty(); - } else if (attributeValue instanceof List<?>) { - isEmpty = ((List<?>) attributeValue).isEmpty(); - } else if (attributeValue instanceof Map<?, ?>) { - isEmpty = ((Map<?, ?>) attributeValue).isEmpty(); - } + private void checkAttrValNonEmpty( + Rule rule, EventHandler eventHandler, Object attributeValue, Attribute attr) { + if (!attr.isNonEmpty()) { + return; + } - if (isEmpty) { - ruleErrorConsumer.attributeError(attr.getName(), "attribute must be non empty"); - } + boolean isEmpty = false; + + if (attributeValue instanceof SkylarkList) { + isEmpty = ((SkylarkList) attributeValue).isEmpty(); + } else if (attributeValue instanceof List<?>) { + isEmpty = ((List<?>) attributeValue).isEmpty(); + } else if (attributeValue instanceof Map<?, ?>) { + isEmpty = ((Map<?, ?>) attributeValue).isEmpty(); + } + + if (isEmpty) { + rule.reportError(rule.getLabel() + ": non empty attribute '" + attr.getName() + + "' in '" + name + "' rule '" + rule.getLabel() + "' has to have at least one value", + eventHandler); } } |