Example #1
0
 /**
  * Creates a {@link Rule} instance, adds it to the {@link Package.Builder} and returns it.
  *
  * @param pkgBuilder the under-construction {@link Package.Builder} to which the rule belongs
  * @param ruleClass the {@link RuleClass} of the rule
  * @param attributeValues a {@link BuildLangTypedAttributeValuesMap} mapping attribute names to
  *     attribute values of build-language type. Each attribute must be defined for this class of
  *     rule, and have a build-language-typed value which can be converted to the appropriate
  *     native type of the attribute (i.e. via {@link BuildType#selectableConvert}). There must be
  *     a map entry for each non-optional attribute of this class of rule.
  * @param eventHandler a eventHandler on which errors and warnings are reported during rule
  *     creation
  * @param ast the abstract syntax tree of the rule expression (optional)
  * @param location the location at which this rule was declared
  * @param env the lexical environment of the function call which declared this rule (optional)
  * @throws InvalidRuleException if the rule could not be constructed for any reason (e.g. no
  *     {@code name} attribute is defined)
  * @throws NameConflictException if the rule's name or output files conflict with others in this
  *     package
  * @throws InterruptedException if interrupted
  */
 static Rule createAndAddRule(
     Package.Builder pkgBuilder,
     RuleClass ruleClass,
     BuildLangTypedAttributeValuesMap attributeValues,
     EventHandler eventHandler,
     @Nullable FuncallExpression ast,
     Location location,
     @Nullable Environment env)
     throws InvalidRuleException, NameConflictException, InterruptedException {
   Rule rule =
       createRule(pkgBuilder, ruleClass, attributeValues, eventHandler, ast, location, env);
   pkgBuilder.addRule(rule);
   return rule;
 }