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;
   }