docs: public void addRule(final RuleBuildContext context) {
          final RuleImpl rule = context.getRule();
          final RuleDescr ruleDescr = context.getRuleDescr();
  
          RuleClassBuilder classBuilder = context.getDialect().getRuleClassBuilder();
  
          String ruleClass = classBuilder.buildRule(context);
          // return if there is no ruleclass name;
          if (ruleClass == null) {
              return;
          }
  
          // The compilation result is for the entire rule, so difficult to associate with any descr
          addClassCompileTask(this.pkg.getName() + "." + ruleDescr.getClassName(),
                              ruleDescr,
                              ruleClass,
                              this.src,
                              new RuleErrorHandler(ruleDescr,
                                                   rule,
                                                   "Rule Compilation error"));
  
          JavaDialectRuntimeData data = (JavaDialectRuntimeData) this.pkg.getDialectRuntimeRegistry().getDialectData(ID);
  
          for (Map.Entry<String, String> invokers : context.getInvokers().entrySet()) {
              final String className = invokers.getKey();
  
              // Check if an invoker - returnvalue, predicate, eval or consequence has been associated
              // If so we add it to the PackageCompilationData as it will get wired up on compilation
              final Object invoker = context.getInvokerLookup(className);
              if (invoker instanceof Wireable) {
                  data.putInvoker(className, (Wireable)invoker);
              }
              final String text = invokers.getValue();
  
              final BaseDescr descr = context.getDescrLookup(className);
              addClassCompileTask(className,
                                  descr,
                                  text,
                                  this.src,
                                  new RuleInvokerErrorHandler(descr,
                                                              rule,
                                                              "Unable to generate rule invoker."));
          }
  
          // setup the line mappins for this rule
          final String name = this.pkg.getName() + "." + StringUtils.ucFirst(ruleDescr.getClassName());
          final LineMappings mapping = new LineMappings(name);
          mapping.setStartLine(ruleDescr.getConsequenceLine());
          mapping.setOffset(ruleDescr.getConsequenceOffset());
  
          this.pkg.getDialectRuntimeRegistry().getLineMappings().put(name,
                                                                     mapping);
      }