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