aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java41
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);
}
}