aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar gregce <gregce@google.com>2017-07-27 22:09:34 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-28 10:44:52 +0200
commitda4c959603280ded71ad8fbc2d30d4917b175750 (patch)
treedd201d03665350c1fec5247eba18af0bea4dd205 /src/main/java/com/google/devtools/build/lib/analysis
parentd8235cf959ac1326836064aa9442256b69f7318a (diff)
Fix confusing semantics for Attribute.Builder.allowedRuleClasses.
1) Update the javadocs. 2) Clarify that allowedRuleClases and allowedRuleClassesWithWarning must be disjoint sets. 3) Enforce 2). 4) Fix error messaging when only "with warnings" is set. PiperOrigin-RevId: 163379567
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java20
1 files changed, 10 insertions, 10 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 80b2c4e9ca..5e38598317 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
@@ -2054,7 +2054,7 @@ public final class RuleContext extends TargetContext
/**
* Because some rules still have to use allowedRuleClasses to do rule dependency validation.
- * A dependency is valid if it is from a rule in allowedRuledClasses, OR if all of the providers
+ * A dependency is valid if it is from a rule in allowedRuleClasses, OR if all of the providers
* in mandatoryNativeProviders AND mandatoryProvidersList are provided by the target.
*/
private void validateRuleDependency(ConfiguredTarget prerequisite, Attribute attribute) {
@@ -2077,17 +2077,17 @@ public final class RuleContext extends TargetContext
false);
}
- if (attribute.getAllowedRuleClassesWarningPredicate() != Predicates.<RuleClass>alwaysTrue()) {
- Predicate<RuleClass> warningPredicate = attribute.getAllowedRuleClassesWarningPredicate();
- if (warningPredicate.apply(ruleClass)) {
- reportBadPrerequisite(attribute, prerequisiteTarget.getTargetKind(), prerequisite,
- "expected " + attribute.getAllowedRuleClassesPredicate(), true);
- // prerequisite has a rule class allowed with a warning => accept, emitting a warning.
- return;
- }
+ if (attribute.getAllowedRuleClassesWarningPredicate().apply(ruleClass)) {
+ Predicate<RuleClass> allowedRuleClasses = attribute.getAllowedRuleClassesPredicate();
+ reportBadPrerequisite(attribute, prerequisiteTarget.getTargetKind(), prerequisite,
+ allowedRuleClasses == Predicates.<RuleClass>alwaysTrue()
+ ? null : "expected " + allowedRuleClasses,
+ true);
+ // prerequisite has a rule class allowed with a warning => accept, emitting a warning.
+ return;
}
- // If we got there, we have no allowed rule class.
+ // If we get here, we have no allowed rule class.
// If mandatory providers are specified, try them.
Set<String> unfulfilledRequirements = new LinkedHashSet<>();
if (!attribute.getMandatoryNativeProvidersList().isEmpty()