Move whitelist checks so they don't crash on user error. As a bonus, these are now only done on attributes of starlark-defined rules instead of all rules attributes.
PiperOrigin-RevId: 226952583
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 28184d6..71d2e97 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
@@ -781,9 +781,6 @@
.nonconfigurable("Used in toolchain resolution")
.value(ImmutableList.of()));
}
- if (skylark) {
- assertRuleClassProperStarlarkDefinedTransitionUsage();
- }
if (buildSetting != null) {
Type<?> type = buildSetting.getType();
Attribute.Builder<?> attrBuilder =
@@ -853,35 +850,6 @@
type);
}
- private void assertRuleClassProperStarlarkDefinedTransitionUsage() {
- boolean hasStarlarkDefinedTransition = false;
- boolean hasAnalysisTestTransitionAttribute = false;
- for (Attribute attribute : attributes.values()) {
- hasStarlarkDefinedTransition |= attribute.hasStarlarkDefinedTransition();
- hasAnalysisTestTransitionAttribute |= attribute.hasAnalysisTestTransition();
- }
-
- if (hasAnalysisTestTransitionAttribute) {
- Preconditions.checkState(
- isAnalysisTest,
- "Only rule definitions with analysis_test=True may have attributes with "
- + "analysis_test_transition transitions");
- }
- if (hasStarlarkDefinedTransition) {
- Preconditions.checkState(
- hasFunctionTransitionWhitelist,
- "Use of function based split transition without whitelist: %s %s",
- ruleDefinitionEnvironmentLabel,
- type);
- } else {
- Preconditions.checkState(
- !hasFunctionTransitionWhitelist,
- "Unused function based split transition whitelist: %s %s",
- ruleDefinitionEnvironmentLabel,
- type);
- }
- }
-
/**
* Declares that the implementation of the associated rule class requires the given
* fragments to be present in this rule's host and target configurations.
@@ -1187,6 +1155,10 @@
return this;
}
+ public Label getRuleDefinitionEnvironmentLabel() {
+ return this.ruleDefinitionEnvironmentLabel;
+ }
+
/**
* Removes an attribute with the same name from this rule class.
*
@@ -1215,6 +1187,10 @@
return this;
}
+ public boolean isAnalysisTest() {
+ return this.isAnalysisTest;
+ }
+
/**
* This rule class has the _whitelist_function_transition attribute. Intended only for Skylark
* rules.
@@ -1224,6 +1200,10 @@
return this;
}
+ public RuleClassType getType() {
+ return this.type;
+ }
+
/**
* Sets the kind of output files this rule creates.
* DO NOT USE! This only exists to support the non-open-sourced {@code fileset} rule.