Expose versions of Package.Builder#addRule and RuleClass#createRule that don't perform internal sanity checks.
--
MOS_MIGRATED_REVID=126073693
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 44d9e30..04a8ef4 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -1205,9 +1205,13 @@
}
}
- void addRule(Rule rule) throws NameConflictException {
+ /**
+ * Same as {@link #addRule}, except with no name conflict checks.
+ *
+ * <p>Don't call this function unless you know what you're doing.
+ */
+ void addRuleUnchecked(Rule rule) {
Preconditions.checkArgument(rule.getPackage() == pkg);
- checkForConflicts(rule);
// Now, modify the package:
for (OutputFile outputFile : rule.getOutputFiles()) {
targets.put(outputFile.getName(), outputFile);
@@ -1225,6 +1229,11 @@
}
}
+ void addRule(Rule rule) throws NameConflictException {
+ checkForConflicts(rule);
+ addRuleUnchecked(rule);
+ }
+
private Builder beforeBuild() {
Preconditions.checkNotNull(pkg);
Preconditions.checkNotNull(filename);
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 6f4ffd7..a9ef960 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
@@ -1340,6 +1340,26 @@
Location location,
AttributeContainer attributeContainer)
throws LabelSyntaxException, InterruptedException {
+ Rule rule = createRuleUnchecked(
+ pkgBuilder, ruleLabel, attributeValues, eventHandler, ast, location, attributeContainer);
+ rule.checkForNullLabels();
+ return rule;
+ }
+
+ /**
+ * Same as {@link #createRule}, except without some internal sanity checks.
+ *
+ * <p>Don't call this function unless you know what you're doing.
+ */
+ Rule createRuleUnchecked(
+ Package.Builder pkgBuilder,
+ Label ruleLabel,
+ AttributeValuesMap attributeValues,
+ EventHandler eventHandler,
+ @Nullable FuncallExpression ast,
+ Location location,
+ AttributeContainer attributeContainer)
+ throws LabelSyntaxException, InterruptedException {
Rule rule = pkgBuilder.createRule(ruleLabel, this, location, attributeContainer);
populateRuleAttributeValues(rule, pkgBuilder, attributeValues, eventHandler);
checkAspectAllowedValues(rule, eventHandler);
@@ -1350,7 +1370,6 @@
checkForDuplicateLabels(rule, eventHandler);
checkThirdPartyRuleHasLicense(rule, pkgBuilder, eventHandler);
checkForValidSizeAndTimeoutValues(rule, eventHandler);
- rule.checkForNullLabels();
rule.checkValidityPredicate(eventHandler);
return rule;
}