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 ) ; }
This will add the rule for compiling later on . It will not actually call the compiler