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
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 ae9ec03..ae0c358 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
@@ -57,6 +57,7 @@
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -422,10 +423,6 @@
this.ruleClasses = ImmutableSet.copyOf(ruleClasses);
}
- public RuleClassNamePredicate() {
- this(ImmutableSet.<String>of());
- }
-
@Override
public boolean apply(RuleClass ruleClass) {
return ruleClasses.contains(ruleClass.getName());
@@ -442,6 +439,13 @@
&& ruleClasses.equals(((RuleClassNamePredicate) o).ruleClasses);
}
+ /**
+ * Returns true if this and the other predicate have common rule class entries.
+ */
+ public boolean intersects(RuleClassNamePredicate other) {
+ return !Collections.disjoint(ruleClasses, other.ruleClasses);
+ }
+
@Override
public String toString() {
return ruleClasses.isEmpty() ? "nothing" : StringUtil.joinEnglishList(ruleClasses);