[jboss-svn-commits] JBL Code SVN: r11329 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/compiler and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 25 13:14:03 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-04-25 13:14:03 -0400 (Wed, 25 Apr 2007)
New Revision: 11329

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/util/
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
Log:
JBRULES-713 Make Dialects Pluggeable
-BuildUtils is now gone, moved into JavaDialect

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -50,9 +50,9 @@
 import org.xml.sax.SAXException;
 
 /**
- * This is the main compiler class for parsing and compiling rules and assembling or merging them into a
- * binary Package instance.
- * This can be done by merging into existing binary packages, or totally from source.
+ * This is the main compiler class for parsing and compiling rules and
+ * assembling or merging them into a binary Package instance. This can be done
+ * by merging into existing binary packages, or totally from source.
  */
 public class PackageBuilder {
 
@@ -64,7 +64,7 @@
 
     private TypeResolver                typeResolver;
 
-    private ClassFieldExtractorCache    classFieldExtractorCache;
+    private ClassFieldExtractorCache    classFieldExtractorCache;   
 
     private RuleBuilder                 builder;
 
@@ -73,7 +73,7 @@
     private DialectRegistry             dialects;
 
     /**
-     * Use this when package is starting from scratch. 
+     * Use this when package is starting from scratch.
      */
     public PackageBuilder() {
         this( null,
@@ -94,9 +94,13 @@
     }
 
     /**
-     * This allows you to pass in a pre existing package, and a configuration (for instance to set the classloader).
-     * @param pkg A pre existing package (can be null if none exists)
-     * @param configuration Optional configuration for this builder.
+     * This allows you to pass in a pre existing package, and a configuration
+     * (for instance to set the classloader).
+     * 
+     * @param pkg
+     *            A pre existing package (can be null if none exists)
+     * @param configuration
+     *            Optional configuration for this builder.
      */
     public PackageBuilder(final Package pkg,
                           PackageBuilderConfiguration configuration) {
@@ -108,17 +112,30 @@
         this.results = new ArrayList();
         this.pkg = pkg;
         this.classFieldExtractorCache = new ClassFieldExtractorCache();
+        
+        
+        if ( this.pkg != null ) {
+            this.typeResolver = new ClassTypeResolver( this.pkg.getImports(),
+                                                       this.pkg.getPackageCompilationData().getClassLoader() );
+            // make an automatic import for the current package
+            this.typeResolver.addImport( this.pkg.getName() + ".*" );
+        } else {
+            this.typeResolver = new ClassTypeResolver( new ArrayList(), configuration.getClassLoader() );
+        }
 
         this.dialects = new DialectRegistry();
         this.dialects.addDialect( "java",
                                   new JavaDialect( pkg,
-                                                   configuration ) );
+                                                   configuration,
+                                                   getTypeResolver(),
+                                                   this.classFieldExtractorCache ) );
 
         this.dialect = this.dialects.getDialect( "java" );
     }
 
     /**
      * Load a rule package from DRL source.
+     * 
      * @param reader
      * @throws DroolsParserException
      * @throws IOException
@@ -133,6 +150,7 @@
 
     /**
      * Load a rule package from XML source.
+     * 
      * @param reader
      * @throws DroolsParserException
      * @throws IOException
@@ -153,8 +171,11 @@
 
     /**
      * Load a rule package from DRL source using the supplied DSL configuration.
-     * @param source The source of the rules.
-     * @param dsl The source of the domain specific language configuration.
+     * 
+     * @param source
+     *            The source of the rules.
+     * @param dsl
+     *            The source of the domain specific language configuration.
      * @throws DroolsParserException
      * @throws IOException
      */
@@ -168,10 +189,9 @@
         addPackage( pkg );
     }
 
-    /** 
-     * This adds a package from a Descr/AST 
-     * This will also trigger a compile, if there are any generated classes to compile
-     * of course.
+    /**
+     * This adds a package from a Descr/AST This will also trigger a compile, if
+     * there are any generated classes to compile of course.
      */
     public void addPackage(final PackageDescr packageDescr) {
 
@@ -179,7 +199,7 @@
         validateUniqueRuleNames( packageDescr );
 
         if ( this.pkg != null ) {
-            //mergePackage( packageDescr ) ;
+            // mergePackage( packageDescr ) ;
             mergePackage( this.pkg,
                           packageDescr );
         } else {
@@ -187,21 +207,21 @@
         }
 
         this.builder = new RuleBuilder( getTypeResolver(),
-                                   this.classFieldExtractorCache,
-                                   this.dialect );
+                                        this.classFieldExtractorCache,
+                                        this.dialect );
 
-        //only try to compile if there are no parse errors
+        // only try to compile if there are no parse errors
         if ( !hasErrors() ) {
             for ( final Iterator it = packageDescr.getFactTemplates().iterator(); it.hasNext(); ) {
                 addFactTemplate( (FactTemplateDescr) it.next() );
             }
 
-            //iterate and compile
+            // iterate and compile
             for ( final Iterator it = packageDescr.getFunctions().iterator(); it.hasNext(); ) {
                 addFunction( (FunctionDescr) it.next() );
             }
 
-            //iterate and compile
+            // iterate and compile
             for ( final Iterator it = packageDescr.getRules().iterator(); it.hasNext(); ) {
                 addRule( (RuleDescr) it.next() );
             }
@@ -213,7 +233,7 @@
     }
 
     private void validatePackageName(final PackageDescr packageDescr) {
-        if (this.pkg != null) {
+        if ( this.pkg != null ) {
             return;
         }
         if ( packageDescr.getName() == null || "".equals( packageDescr.getName() ) ) {
@@ -250,18 +270,25 @@
 
     private void mergePackage(final Package pkg,
                               final PackageDescr packageDescr) {
+
+        // make sure we have initialised this typeResolver with "default" imports
+        if ( this.typeResolver.getImports().isEmpty() ) {
+            this.typeResolver.addImport( pkg.getName() + ".*" );
+        }
+        
         final List imports = packageDescr.getImports();
         for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
-            pkg.addImport( ((ImportDescr) it.next()).getTarget() );
+            String importEntry = ((ImportDescr) it.next()).getTarget();
+            pkg.addImport( importEntry );
+            this.typeResolver.addImport( importEntry );
         }
 
         for ( final Iterator it = packageDescr.getFunctionImports().iterator(); it.hasNext(); ) {
             pkg.addStaticImport( ((FunctionImportDescr) it.next()).getTarget() );
         }
+        
+        ((ClassTypeResolver)this.typeResolver).setClassLoader( pkg.getPackageCompilationData().getClassLoader() );
 
-        final TypeResolver typeResolver = new ClassTypeResolver( pkg.getImports(),
-                                                                 pkg.getPackageCompilationData().getClassLoader() );
-
         final List globals = packageDescr.getGlobals();
         for ( final Iterator it = globals.iterator(); it.hasNext(); ) {
             final GlobalDescr global = (GlobalDescr) it.next();
@@ -312,13 +339,13 @@
         this.dialect.init( ruleDescr );
 
         this.builder.build( this.pkg,
-                       ruleDescr );
+                            ruleDescr );
 
         this.results.addAll( this.builder.getErrors() );
 
         final Rule rule = this.builder.getRule();
 
-        this.dialect.addRuleSemantics( this.builder,
+        this.dialect.addRule( this.builder,
                                        rule,
                                        ruleDescr );
 
@@ -326,23 +353,18 @@
     }
 
     /**
-     * @return a Type resolver, lazily. 
-     * If one does not exist yet, it will be initialised.
+     * @return a Type resolver, lazily. If one does not exist yet, it will be
+     *         initialised.
      */
     private TypeResolver getTypeResolver() {
-        if ( this.typeResolver == null ) {
-            this.typeResolver = new ClassTypeResolver( this.pkg.getImports(),
-                                                       this.pkg.getPackageCompilationData().getClassLoader() );
-            // make an automatic import for the current package
-            this.typeResolver.addImport( this.pkg.getName() + ".*" );
-        }
         return this.typeResolver;
     }
 
     /**
-     * @return The compiled package. The package may contain errors, which you can report on
-     * by calling getErrors or printErrors. If you try to add an invalid package (or rule)
-     * to a RuleBase, you will get a runtime exception.
+     * @return The compiled package. The package may contain errors, which you
+     *         can report on by calling getErrors or printErrors. If you try to
+     *         add an invalid package (or rule) to a RuleBase, you will get a
+     *         runtime exception.
      * 
      * Compiled packages are serializable.
      */
@@ -354,21 +376,24 @@
         return this.pkg;
     }
 
-    /** This will return true if there were errors in the package building and compiling phase */
+    /**
+     * This will return true if there were errors in the package building and
+     * compiling phase
+     */
     public boolean hasErrors() {
         return this.results.size() > 0;
     }
 
     /**
-     * @return A list of Error objects that resulted from building and compiling the package. 
+     * @return A list of Error objects that resulted from building and compiling
+     *         the package.
      */
     public DroolsError[] getErrors() {
         return (DroolsError[]) this.results.toArray( new DroolsError[this.results.size()] );
     }
 
     /**
-     * This will pretty print the errors (from getErrors())
-     * into lines.
+     * This will pretty print the errors (from getErrors()) into lines.
      */
     public String printErrors() {
         final StringBuffer buf = new StringBuffer();
@@ -379,14 +404,12 @@
         }
         return buf.toString();
     }
-    
-    
+
     /**
-     * Reset the error list.
-     * This is useful when incrementally building packages.
-     * Care should be used when building this, if you 
-     * clear this when there were errors on items that a rule depends on
-     * (eg functions), then you will get spurious errors which will not be that helpful.
+     * Reset the error list. This is useful when incrementally building
+     * packages. Care should be used when building this, if you clear this when
+     * there were errors on items that a rule depends on (eg functions), then
+     * you will get spurious errors which will not be that helpful.
      */
     protected void resetErrors() {
         this.results.clear();
@@ -402,20 +425,21 @@
     }
 
     /**
-     * This is the super of the error handlers.
-     * Each error handler knows how to report a compile error of its type, should it happen.
-     * This is needed, as the compiling is done as one
-     * hit at the end, and we need to be able to work out what rule/ast element
-     * caused the error.
+     * This is the super of the error handlers. Each error handler knows how to
+     * report a compile error of its type, should it happen. This is needed, as
+     * the compiling is done as one hit at the end, and we need to be able to
+     * work out what rule/ast element caused the error.
      * 
-     * An error handler it created for each class task that is queued to be compiled.
-     * This doesn't mean an error has occurred, it just means it *may* occur
-     * in the future and we need to be able to map it back to the AST element
-     * that originally spawned the code to be compiled.
+     * An error handler it created for each class task that is queued to be
+     * compiled. This doesn't mean an error has occurred, it just means it *may*
+     * occur in the future and we need to be able to map it back to the AST
+     * element that originally spawned the code to be compiled.
      */
     public abstract static class ErrorHandler {
         private final List errors  = new ArrayList();
+
         protected String   message;
+
         private boolean    inError = false;
 
         /** This needes to be checked if there is infact an error */
@@ -430,16 +454,15 @@
 
         /**
          * 
-         * @return A DroolsError object populated as appropriate,
-         * should the unthinkable happen and this need to be reported.
+         * @return A DroolsError object populated as appropriate, should the
+         *         unthinkable happen and this need to be reported.
          */
         public abstract DroolsError getError();
 
         /**
-         * We must use an error of JCI problem objects.
-         * If there are no problems, null is returned.
-         * These errors are placed in the DroolsError instances.
-         * Its not 1 to 1 with reported errors.
+         * We must use an error of JCI problem objects. If there are no
+         * problems, null is returned. These errors are placed in the
+         * DroolsError instances. Its not 1 to 1 with reported errors.
          */
         protected CompilationProblem[] collectCompilerProblems() {
             if ( this.errors.size() == 0 ) {
@@ -455,6 +478,7 @@
     public static class RuleErrorHandler extends ErrorHandler {
 
         private BaseDescr descr;
+
         private Rule      rule;
 
         public RuleErrorHandler(final BaseDescr ruleDescr,
@@ -475,8 +499,7 @@
     }
 
     /**
-     * There isn't much point in reporting invoker errors, as
-     * they are no help. 
+     * There isn't much point in reporting invoker errors, as they are no help.
      */
     public static class RuleInvokerErrorHandler extends RuleErrorHandler {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -2,16 +2,13 @@
 
 import org.drools.lang.descr.BaseDescr;
 import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 public interface AccumulateBuilder {
 
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
      */
-    public ConditionalElement build(BuildContext context,
-                                    BuildUtils utils,
-                                    PatternBuilder patternBuilder,
+    public ConditionalElement build(RuleBuildContext context,
                                     BaseDescr descr);
 
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,236 +0,0 @@
-/*
- * Copyright 2006 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.rule.builder;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Package;
-import org.drools.rule.Query;
-import org.drools.rule.Rule;
-import org.drools.spi.DeclarationScopeResolver;
-
-/**
- * A context for the current build
- * 
- * @author etirelli
- */
-public class BuildContext {
-
-    // current package
-    private Package                  pkg;
-
-    // current rule
-    private Rule                     rule;
-
-    // a stack for the rule building used
-    // for declarations resolution
-    private Stack                    buildStack;
-
-    // current Rule descriptor
-    private RuleDescr                ruleDescr;
-
-    // available declarationResolver 
-    private DeclarationScopeResolver declarationResolver;
-
-    // a simple counter for patterns
-    private int                      patternId = -1;
-
-    // errors found when building the current context
-    private List                     errors;
-
-    // the class name for the rule    
-    private String                   ruleClass;
-
-    // list of generated methods
-    private List                     methods;
-
-    // map<String invokerClassName, String invokerCode> of generated invokers
-    private Map                      invokers;
-
-    // map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
-    private Map                      invokerLookups;
-
-    // map<String invokerClassName, BaseDescr descr> of descriptor lookups
-    private Map                      descrLookups;
-
-    // a simple counter for generated names
-    private int                      counter;
-
-    /**
-     * Default constructor
-     */
-    public BuildContext(final Package pkg,
-                        final RuleDescr ruleDescr) {
-        this.pkg = pkg;
-
-        this.methods = new ArrayList();
-        this.invokers = new HashMap();
-        this.invokerLookups = new HashMap();
-        this.descrLookups = new HashMap();
-        this.errors = new ArrayList();
-        this.buildStack = new Stack();
-        this.declarationResolver = new DeclarationScopeResolver( new Map[]{this.pkg.getGlobals()},
-                                                                 this.buildStack );
-        this.ruleDescr = ruleDescr;
-
-        if ( ruleDescr instanceof QueryDescr ) {
-            this.rule = new Query( ruleDescr.getName() );
-        } else {
-            this.rule = new Rule( ruleDescr.getName() );
-        }
-
-    }
-
-    /**
-     * Returns the list of errors found while building the current context
-     * @return
-     */
-    public List getErrors() {
-        return this.errors;
-    }
-
-    /**
-     * Returns the current package being built
-     * @return
-     */
-    public Package getPkg() {
-        return this.pkg;
-    }
-
-    /**
-     * Returns the current Rule being built
-     * @return
-     */
-    public Rule getRule() {
-        return this.rule;
-    }
-
-    /**
-     * Returns the current RuleDescriptor
-     * @return
-     */
-    public RuleDescr getRuleDescr() {
-        return this.ruleDescr;
-    }
-
-    /**
-     * Returns the available declarationResolver instance
-     * @return
-     */
-    public DeclarationScopeResolver getDeclarationResolver() {
-        return this.declarationResolver;
-    }
-
-    /**
-     * Sets the available declarationResolver instance
-     * @param declarationResolver
-     */
-    public void setDeclarationResolver(final DeclarationScopeResolver variables) {
-        this.declarationResolver = variables;
-    }
-
-    /**
-     * Returns the Map<String invokerClassName, BaseDescr descr> of descriptor lookups
-     * @return
-     */
-    public Map getDescrLookups() {
-        return this.descrLookups;
-    }
-
-    public void setDescrLookups(final Map descrLookups) {
-        this.descrLookups = descrLookups;
-    }
-
-    /**
-     * Returns the Map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
-     * @return
-     */
-    public Map getInvokerLookups() {
-        return this.invokerLookups;
-    }
-
-    public void setInvokerLookups(final Map invokerLookups) {
-        this.invokerLookups = invokerLookups;
-    }
-
-    /**
-     * Returns the Map<String invokerClassName, String invokerCode> of generated invokers
-     * @return
-     */
-    public Map getInvokers() {
-        return this.invokers;
-    }
-
-    public void setInvokers(final Map invokers) {
-        this.invokers = invokers;
-    }
-
-    /**
-     * Returns the list of generated methods
-     * @return
-     */
-    public List getMethods() {
-        return this.methods;
-    }
-
-    public void setMethods(final List methods) {
-        this.methods = methods;
-    }
-
-    /**
-     * Returns current counter value for generated method names
-     * @return
-     */
-    public int getCurrentId() {
-        return this.counter;
-    }
-
-    public int getNextId() {
-        return this.counter++;
-    }
-
-    public int getPatternId() {
-        return this.patternId;
-    }
-
-    public int getNextPatternId() {
-        return ++this.patternId;
-    }
-
-    public void setPatternId(final int patternId) {
-        this.patternId = patternId;
-    }
-
-    public String getRuleClass() {
-        return this.ruleClass;
-    }
-
-    public void setRuleClass(final String ruleClass) {
-        this.ruleClass = ruleClass;
-    }
-
-    public Stack getBuildStack() {
-        return this.buildStack;
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -18,10 +18,10 @@
 
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.rule.Collect;
 import org.drools.rule.Pattern;
 import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 /**
  * @author etirelli
@@ -34,15 +34,12 @@
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
 
         final CollectDescr collectDescr = (CollectDescr) descr;
-
+        final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
         final Pattern sourcePattern = patternBuilder.build( context,
-                                                            utils,
                                                             collectDescr.getSourcePattern() );
 
         if ( sourcePattern == null ) {
@@ -50,7 +47,6 @@
         }
 
         final Pattern resultPattern = patternBuilder.build( context,
-                                                            utils,
                                                             collectDescr.getResultPattern() );
 
         final String className = "collect" + context.getNextId();

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -18,7 +18,6 @@
 
 import org.drools.lang.descr.BaseDescr;
 import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 /**
  * An interface to define classes capable of building
@@ -28,9 +27,7 @@
  */
 public interface ConditionalElementBuilder {
 
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr);
 
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConsequenceBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,12 +1,10 @@
 package org.drools.rule.builder;
 
 import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 public interface ConsequenceBuilder {
 
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final RuleDescr ruleDescr);
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,14 +1,23 @@
 package org.drools.rule.builder;
 
 import java.util.List;
+import java.util.Map;
 
 import org.codehaus.jfdi.interpreter.TypeResolver;
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 
 public interface Dialect {
+    Map getBuilders();
+
+    TypeResolver getTypeResolver();
+
+    ClassFieldExtractorCache getClassFieldExtractorCache();    
+    
     ConditionalElementBuilder getEvalBuilder();
 
     AccumulateBuilder getAccumulateBuilder();
@@ -22,10 +31,20 @@
     RuleClassBuilder getRuleClassBuilder();
 
     FromBuilder getFromBuilder();
+    
+    Object getBuilder(Class clazz);
 
+    List[] getExpressionIdentifiers(final RuleBuildContext context,
+                              final BaseDescr descr,
+                              final Object content);
+    
+    List[] getBlockIdentifiers(final RuleBuildContext context,
+                               final BaseDescr descr,
+                               final String text);    
+
     void compileAll();
 
-    void addRuleSemantics(final RuleBuilder builder,
+    void addRule(final RuleBuilder builder,
                           final Rule rule,
                           final RuleDescr ruleDescr);
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,7 +24,6 @@
 import org.drools.rule.Pattern;
 import org.drools.rule.ConditionalElement;
 import org.drools.rule.Forall;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 /**
  * @author etirelli
@@ -37,15 +36,13 @@
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
         final ForallDescr forallDescr = (ForallDescr) descr;
 
+        final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
         final Pattern basePattern = patternBuilder.build( context,
-                                                 utils,
-                                                 forallDescr.getBasePattern() );
+                                                          forallDescr.getBasePattern() );
 
         if ( basePattern == null ) {
             return null;
@@ -59,8 +56,7 @@
 
         for ( final Iterator it = forallDescr.getRemainingPatterns().iterator(); it.hasNext(); ) {
             final Pattern anotherPattern = patternBuilder.build( context,
-                                                        utils,
-                                                        (PatternDescr) it.next() );
+                                                                 (PatternDescr) it.next() );
             forall.addRemainingPattern( anotherPattern );
         }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -2,16 +2,13 @@
 
 import org.drools.lang.descr.BaseDescr;
 import org.drools.rule.ConditionalElement;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 public interface FromBuilder {
 
     /**
      * @inheritDoc
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr);
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -30,7 +30,6 @@
 import org.drools.rule.ConditionalElement;
 import org.drools.rule.GroupElement;
 import org.drools.rule.GroupElementFactory;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 /**
  * @author etirelli
@@ -43,9 +42,7 @@
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
         final ConditionalElementDescr cedescr = (ConditionalElementDescr) descr;
 
@@ -58,20 +55,21 @@
             final BaseDescr child = (BaseDescr) it.next();
 
             // gets corresponding builder
-            final ConditionalElementBuilder cebuilder = utils.getBuilder( child.getClass() );
+            //final ConditionalElementBuilder cebuilder = ( ConditionalElementBuilder ) utils.getBuilder( child.getClass() );
+            final Object builder = context.getDialect().getBuilder( child.getClass() );
 
-            if ( cebuilder != null ) {
-                final ConditionalElement ce = cebuilder.build( context,
-                                                         utils,
-                                                         patternBuilder,
-                                                         child );
+            if ( builder instanceof ConditionalElementBuilder ) {
+                ConditionalElementBuilder ceBuilder = (ConditionalElementBuilder) builder;
+                final ConditionalElement ce = ceBuilder.build( context,
+                                                               child );
                 if ( ce != null ) {
                     ge.addChild( ce );
                 }
-            } else if ( child instanceof PatternDescr ) {
+            } else if ( builder instanceof PatternBuilder ) {
+                final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( child.getClass() );
+
                 final Pattern pattern = patternBuilder.build( context,
-                                                           utils,
-                                                           (PatternDescr) child );
+                                                              (PatternDescr) child );
                 // in case there is a problem with the pattern building,
                 // builder will return null. Ex: ClassNotFound for the pattern type
                 if ( pattern != null ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -53,7 +53,6 @@
 import org.drools.rule.ReturnValueRestriction;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.VariableRestriction;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.FieldValue;
@@ -82,9 +81,8 @@
      * @param patternDescr
      * @return
      */
-    public Pattern build(final BuildContext context,
-                        final BuildUtils utils,
-                        final PatternDescr patternDescr) {
+    public Pattern build(final RuleBuildContext context,
+                         final PatternDescr patternDescr) {
 
         if ( patternDescr.getObjectType() == null || patternDescr.getObjectType().equals( "" ) ) {
             context.getErrors().add( new RuleError( context.getRule(),
@@ -102,7 +100,7 @@
             objectType = new FactTemplateObjectType( factTemplate );
         } else {
             try {
-                final Class userProvidedClass = utils.getTypeResolver().resolveType( patternDescr.getObjectType() );
+                final Class userProvidedClass = context.getDialect().getTypeResolver().resolveType( patternDescr.getObjectType() );
                 final String shadowProxyName = ShadowProxyFactory.getProxyClassNameForClass( userProvidedClass );
                 Class shadowClass = null;
                 try {
@@ -141,14 +139,14 @@
             }
 
             pattern = new Pattern( context.getNextPatternId(),
-                                 0, // offset is 0 by default
-                                 objectType,
-                                 patternDescr.getIdentifier() );
+                                   0, // offset is 0 by default
+                                   objectType,
+                                   patternDescr.getIdentifier() );
         } else {
             pattern = new Pattern( context.getNextPatternId(),
-                                 0, // offset is 0 by default
-                                 objectType,
-                                 null );
+                                   0, // offset is 0 by default
+                                   objectType,
+                                   null );
         }
         // adding the newly created pattern to the build stack
         // this is necessary in case of local declaration usage
@@ -158,17 +156,14 @@
             final Object object = it.next();
             if ( object instanceof FieldBindingDescr ) {
                 build( context,
-                       utils,
                        pattern,
                        (FieldBindingDescr) object );
             } else if ( object instanceof FieldConstraintDescr ) {
                 build( context,
-                       utils,
                        pattern,
                        (FieldConstraintDescr) object );
             } else if ( object instanceof PredicateDescr ) {
                 build( context,
-                       utils,
                        pattern,
                        (PredicateDescr) object );
             }
@@ -178,13 +173,11 @@
         return pattern;
     }
 
-    private void build(final BuildContext context,
-                       final BuildUtils utils,
+    private void build(final RuleBuildContext context,
                        final Pattern pattern,
                        final FieldConstraintDescr fieldConstraintDescr) {
 
         final FieldExtractor extractor = getFieldExtractor( context,
-                                                            utils,
                                                             fieldConstraintDescr,
                                                             pattern.getObjectType(),
                                                             fieldConstraintDescr.getFieldName(),
@@ -198,7 +191,6 @@
             final Object object = fieldConstraintDescr.getRestrictions().get( 0 );
 
             final Restriction restriction = buildRestriction( context,
-                                                              utils,
                                                               pattern,
                                                               extractor,
                                                               fieldConstraintDescr,
@@ -210,13 +202,13 @@
 
             if ( object instanceof LiteralRestrictionDescr ) {
                 pattern.addConstraint( new LiteralConstraint( extractor,
-                                                             (LiteralRestriction) restriction ) );
+                                                              (LiteralRestriction) restriction ) );
             } else if ( object instanceof VariableRestrictionDescr ) {
                 pattern.addConstraint( new VariableConstraint( extractor,
-                                                              (VariableRestriction) restriction ) );
+                                                               (VariableRestriction) restriction ) );
             } else if ( object instanceof ReturnValueRestrictionDescr ) {
                 pattern.addConstraint( new ReturnValueConstraint( extractor,
-                                                                 (ReturnValueRestriction) restriction ) );
+                                                                  (ReturnValueRestriction) restriction ) );
             }
 
             return;
@@ -255,7 +247,6 @@
                     // Are we are at the first operator? if so treat differently
                     if ( previousList == null ) {
                         restriction = buildRestriction( context,
-                                                        utils,
                                                         pattern,
                                                         extractor,
                                                         fieldConstraintDescr,
@@ -267,7 +258,6 @@
                         }
                     } else {
                         restriction = buildRestriction( context,
-                                                        utils,
                                                         pattern,
                                                         extractor,
                                                         fieldConstraintDescr,
@@ -297,8 +287,7 @@
             currentRestriction = (RestrictionDescr) object;
         }
 
-        final Restriction restriction = buildRestriction( context,
-                                                          utils,
+        final Restriction restriction = buildRestriction( context,                                                          
                                                           pattern,
                                                           extractor,
                                                           fieldConstraintDescr,
@@ -328,11 +317,10 @@
         }
 
         pattern.addConstraint( new MultiRestrictionFieldConstraint( extractor,
-                                                                   restrictions ) );
+                                                                    restrictions ) );
     }
 
-    private void build(final BuildContext context,
-                       final BuildUtils utils,
+    private void build(final RuleBuildContext context,
                        final Pattern pattern,
                        final FieldBindingDescr fieldBindingDescr) {
 
@@ -346,7 +334,6 @@
         }
 
         final FieldExtractor extractor = getFieldExtractor( context,
-                                                            utils,
                                                             fieldBindingDescr,
                                                             pattern.getObjectType(),
                                                             fieldBindingDescr.getFieldName(),
@@ -356,11 +343,10 @@
         }
 
         pattern.addDeclaration( fieldBindingDescr.getIdentifier(),
-                               extractor );
+                                extractor );
     }
 
-    private void build(final BuildContext context,
-                       final BuildUtils utils,
+    private void build(final RuleBuildContext context,
                        final Pattern pattern,
                        final PredicateDescr predicateDescr) {
 
@@ -368,9 +354,9 @@
         // where first list is from rule local variables
         // second list is from global variables
         // and third is for unbound variables
-        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-                                                                 predicateDescr,
-                                                                 predicateDescr.getContent() );
+        final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
+                                                                                predicateDescr,
+                                                                                predicateDescr.getContent() );
         final List tupleDeclarations = new ArrayList();
         final List factDeclarations = new ArrayList();
         for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
@@ -383,7 +369,6 @@
         }
         final int NOT_BOUND_INDEX = usedIdentifiers.length - 1;
         this.createImplicitBindings( context,
-                                     utils,
                                      pattern,
                                      usedIdentifiers[NOT_BOUND_INDEX],
                                      factDeclarations );
@@ -401,7 +386,6 @@
         final PredicateBuilder builder = this.dialect.getPredicateBuilder();
 
         builder.build( context,
-                       utils,
                        usedIdentifiers,
                        previousDeclarations,
                        localDeclarations,
@@ -418,8 +402,7 @@
      * @param NOT_BOUND_INDEX
      * @param factDeclarations
      */
-    private void createImplicitBindings(final BuildContext context,
-                                        final BuildUtils utils,
+    private void createImplicitBindings(final RuleBuildContext context,
                                         final Pattern pattern,
                                         final List unboundIdentifiers,
                                         final List factDeclarations) {
@@ -427,10 +410,9 @@
         for ( int i = 0, size = unboundIdentifiers.size(); i < size; i++ ) {
             final String identifier = (String) unboundIdentifiers.get( i );
             final FieldBindingDescr implicitBinding = new FieldBindingDescr( identifier,
-                                                                       identifier );
+                                                                             identifier );
 
             final FieldExtractor extractor = getFieldExtractor( context,
-                                                                utils,
                                                                 implicitBinding,
                                                                 pattern.getObjectType(),
                                                                 implicitBinding.getFieldName(),
@@ -446,8 +428,7 @@
         }
     }
 
-    private Restriction buildRestriction(final BuildContext context,
-                                         final BuildUtils utils,
+    private Restriction buildRestriction(final RuleBuildContext context,
                                          final Pattern pattern,
                                          final FieldExtractor extractor,
                                          final FieldConstraintDescr fieldConstraintDescr,
@@ -455,7 +436,6 @@
         Restriction restriction = null;
         if ( restrictionDescr instanceof LiteralRestrictionDescr ) {
             restriction = buildRestriction( context,
-                                            utils,
                                             extractor,
                                             fieldConstraintDescr,
                                             (LiteralRestrictionDescr) restrictionDescr );
@@ -466,7 +446,6 @@
                                             (VariableRestrictionDescr) restrictionDescr );
         } else if ( restrictionDescr instanceof ReturnValueRestrictionDescr ) {
             restriction = buildRestriction( context,
-                                            utils,
                                             pattern,
                                             extractor,
                                             fieldConstraintDescr,
@@ -477,7 +456,7 @@
         return restriction;
     }
 
-    private VariableRestriction buildRestriction(final BuildContext context,
+    private VariableRestriction buildRestriction(final RuleBuildContext context,
                                                  final FieldExtractor extractor,
                                                  final FieldConstraintDescr fieldConstraintDescr,
                                                  final VariableRestrictionDescr variableRestrictionDescr) {
@@ -517,8 +496,7 @@
                                         evaluator );
     }
 
-    private LiteralRestriction buildRestriction(final BuildContext context,
-                                                final BuildUtils utils,
+    private LiteralRestriction buildRestriction(final RuleBuildContext context,
                                                 final FieldExtractor extractor,
                                                 final FieldConstraintDescr fieldConstraintDescr,
                                                 final LiteralRestrictionDescr literalRestrictionDescr) {
@@ -529,7 +507,7 @@
                                                                                   lastDot );
             final String fieldName = literalRestrictionDescr.getText().substring( lastDot + 1 );
             try {
-                final Class staticClass = utils.getTypeResolver().resolveType( className );
+                final Class staticClass = context.getDialect().getTypeResolver().resolveType( className );
                 field = FieldFactory.getFieldValue( staticClass.getField( fieldName ).get( null ),
                                                     extractor.getValueType() );
             } catch ( final ClassNotFoundException e ) {
@@ -569,15 +547,14 @@
                                        extractor );
     }
 
-    private ReturnValueRestriction buildRestriction(final BuildContext context,
-                                                    final BuildUtils utils,
+    private ReturnValueRestriction buildRestriction(final RuleBuildContext context,
                                                     final Pattern pattern,
                                                     final FieldExtractor extractor,
                                                     final FieldConstraintDescr fieldConstraintDescr,
                                                     final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
-        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-                                                                 returnValueRestrictionDescr,
-                                                                 returnValueRestrictionDescr.getContent() );
+        final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
+                                                                                returnValueRestrictionDescr,
+                                                                                returnValueRestrictionDescr.getContent() );
 
         final List tupleDeclarations = new ArrayList();
         final List factDeclarations = new ArrayList();
@@ -591,8 +568,7 @@
         }
 
         final int NOT_BOUND_INDEX = usedIdentifiers.length - 1;
-        this.createImplicitBindings( context,
-                                     utils,
+        createImplicitBindings( context,
                                      pattern,
                                      usedIdentifiers[NOT_BOUND_INDEX],
                                      factDeclarations );
@@ -617,7 +593,6 @@
         final ReturnValueBuilder builder = this.dialect.getReturnValueBuilder();
 
         builder.build( context,
-                       utils,
                        usedIdentifiers,
                        previousDeclarations,
                        localDeclarations,
@@ -627,8 +602,7 @@
         return returnValueRestriction;
     }
 
-    private FieldExtractor getFieldExtractor(final BuildContext context,
-                                             final BuildUtils utils,
+    private FieldExtractor getFieldExtractor(final RuleBuildContext context,
                                              final BaseDescr descr,
                                              final ObjectType objectType,
                                              final String fieldName,
@@ -643,7 +617,7 @@
         } else {
             try {
                 ClassLoader classloader = context.getPkg().getPackageCompilationData().getClassLoader();
-                extractor = utils.getClassFieldExtractorCache().getExtractor( ((ClassObjectType) objectType).getClassType(),
+                extractor = context.getDialect().getClassFieldExtractorCache().getExtractor( ((ClassObjectType) objectType).getClassType(),
                                                                               fieldName,
                                                                               classloader );
             } catch ( final RuntimeDroolsException e ) {
@@ -659,7 +633,7 @@
         return extractor;
     }
 
-    private Evaluator getEvaluator(final BuildContext context,
+    private Evaluator getEvaluator(final RuleBuildContext context,
                                    final BaseDescr descr,
                                    final ValueType valueType,
                                    final String evaluatorString) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PredicateBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -5,11 +5,9 @@
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 public interface PredicateBuilder {
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -5,11 +5,9 @@
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 public interface ReturnValueBuilder {
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java (from rev 11296, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/BuildContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.rule.builder;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.Query;
+import org.drools.rule.Rule;
+import org.drools.spi.DeclarationScopeResolver;
+
+/**
+ * A context for the current build
+ * 
+ * @author etirelli
+ */
+public class RuleBuildContext {
+
+    // current package
+    private Package                  pkg;
+
+    // current rule
+    private Rule                     rule;
+
+    // a stack for the rule building used
+    // for declarations resolution
+    private Stack                    buildStack;
+
+    // current Rule descriptor
+    private RuleDescr                ruleDescr;
+
+    // available declarationResolver 
+    private DeclarationScopeResolver declarationResolver;
+
+    // a simple counter for patterns
+    private int                      patternId = -1;
+
+    // errors found when building the current context
+    private List                     errors;
+
+    // the class name for the rule    
+    private String                   ruleClass;
+
+    // list of generated methods
+    private List                     methods;
+
+    // map<String invokerClassName, String invokerCode> of generated invokers
+    private Map                      invokers;
+
+    // map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
+    private Map                      invokerLookups;
+
+    // map<String invokerClassName, BaseDescr descr> of descriptor lookups
+    private Map                      descrLookups;
+
+    // a simple counter for generated names
+    private int                      counter;
+    
+    private Dialect                  dialect;
+
+    /**
+     * Default constructor
+     */
+    public RuleBuildContext(final Package pkg,
+                        final RuleDescr ruleDescr) {
+        this.pkg = pkg;
+
+        this.methods = new ArrayList();
+        this.invokers = new HashMap();
+        this.invokerLookups = new HashMap();
+        this.descrLookups = new HashMap();
+        this.errors = new ArrayList();
+        this.buildStack = new Stack();
+        this.declarationResolver = new DeclarationScopeResolver( new Map[]{this.pkg.getGlobals()},
+                                                                 this.buildStack );
+        this.ruleDescr = ruleDescr;
+
+        if ( ruleDescr instanceof QueryDescr ) {
+            this.rule = new Query( ruleDescr.getName() );
+        } else {
+            this.rule = new Rule( ruleDescr.getName() );
+        }
+    }
+    
+    public void setDialect(Dialect dialect) {
+        this.dialect = dialect;
+    }
+    
+    public Dialect getDialect() {
+        return this.dialect;
+    }
+
+    /**
+     * Returns the list of errors found while building the current context
+     * @return
+     */
+    public List getErrors() {
+        return this.errors;
+    }
+
+    /**
+     * Returns the current package being built
+     * @return
+     */
+    public Package getPkg() {
+        return this.pkg;
+    }
+
+    /**
+     * Returns the current Rule being built
+     * @return
+     */
+    public Rule getRule() {
+        return this.rule;
+    }
+
+    /**
+     * Returns the current RuleDescriptor
+     * @return
+     */
+    public RuleDescr getRuleDescr() {
+        return this.ruleDescr;
+    }
+
+    /**
+     * Returns the available declarationResolver instance
+     * @return
+     */
+    public DeclarationScopeResolver getDeclarationResolver() {
+        return this.declarationResolver;
+    }
+
+    /**
+     * Sets the available declarationResolver instance
+     * @param declarationResolver
+     */
+    public void setDeclarationResolver(final DeclarationScopeResolver variables) {
+        this.declarationResolver = variables;
+    }
+
+    /**
+     * Returns the Map<String invokerClassName, BaseDescr descr> of descriptor lookups
+     * @return
+     */
+    public Map getDescrLookups() {
+        return this.descrLookups;
+    }
+
+    public void setDescrLookups(final Map descrLookups) {
+        this.descrLookups = descrLookups;
+    }
+
+    /**
+     * Returns the Map<String invokerClassName, ConditionalElement ce> of generated invoker lookups
+     * @return
+     */
+    public Map getInvokerLookups() {
+        return this.invokerLookups;
+    }
+
+    public void setInvokerLookups(final Map invokerLookups) {
+        this.invokerLookups = invokerLookups;
+    }
+
+    /**
+     * Returns the Map<String invokerClassName, String invokerCode> of generated invokers
+     * @return
+     */
+    public Map getInvokers() {
+        return this.invokers;
+    }
+
+    public void setInvokers(final Map invokers) {
+        this.invokers = invokers;
+    }
+
+    /**
+     * Returns the list of generated methods
+     * @return
+     */
+    public List getMethods() {
+        return this.methods;
+    }
+
+    public void setMethods(final List methods) {
+        this.methods = methods;
+    }
+
+    /**
+     * Returns current counter value for generated method names
+     * @return
+     */
+    public int getCurrentId() {
+        return this.counter;
+    }
+
+    public int getNextId() {
+        return this.counter++;
+    }
+
+    public int getPatternId() {
+        return this.patternId;
+    }
+
+    public int getNextPatternId() {
+        return ++this.patternId;
+    }
+
+    public void setPatternId(final int patternId) {
+        this.patternId = patternId;
+    }
+
+    public String getRuleClass() {
+        return this.ruleClass;
+    }
+
+    public void setRuleClass(final String ruleClass) {
+        this.ruleClass = ruleClass;
+    }
+
+    public Stack getBuildStack() {
+        return this.buildStack;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -41,7 +41,6 @@
 import org.drools.rule.GroupElement;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
 import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
 import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
@@ -54,74 +53,16 @@
 public class RuleBuilder {
 
     // the current build context
-    private BuildContext       context;
+    private RuleBuildContext context;
 
-    // the current build utils
-    private BuildUtils         utils;
+    private Dialect      dialect;
 
-    // a map of registered builders
-    private Map                builders;
-
-    // the builder for patterns
-    private PatternBuilder      patternBuilder;
-
-    // the builder for the consequence
-    private ConsequenceBuilder consequenceBuilder;
-
-    // the builder for the rule class
-    private RuleClassBuilder   classBuilder;
-
-    private Dialect            dialect;
-
     // Constructor
     public RuleBuilder(final TypeResolver typeResolver,
                        final ClassFieldExtractorCache cache,
                        final Dialect dialect) {
 
         this.dialect = dialect;
-
-        // statically adding all builders to the map
-        // but in the future we can move that to a configuration
-        // if we want to
-        this.builders = new HashMap();
-
-        this.builders.put( CollectDescr.class,
-                      new CollectBuilder() );
-
-        this.builders.put( ForallDescr.class,
-                      new ForallBuilder() );
-        final GroupElementBuilder gebuilder = new GroupElementBuilder();
-        this.builders.put( AndDescr.class,
-                      gebuilder );
-        this.builders.put( OrDescr.class,
-                      gebuilder );
-        this.builders.put( NotDescr.class,
-                      gebuilder );
-        this.builders.put( ExistsDescr.class,
-                      gebuilder );
-
-        // dialect specific        
-        this.patternBuilder = new PatternBuilder( this.dialect );
-
-        this.builders.put( FromDescr.class,
-                      this.dialect.getFromBuilder() );
-
-        this.builders.put( AccumulateDescr.class,
-                      this.dialect.getAccumulateBuilder() );
-
-        this.builders.put( EvalDescr.class,
-                      this.dialect.getEvalBuilder() );
-
-        this.consequenceBuilder = this.dialect.getConsequenceBuilder();
-
-        this.classBuilder = this.dialect.getRuleClassBuilder();
-
-        this.utils = new BuildUtils( new KnowledgeHelperFixer(),
-                                     new DeclarationTypeFixer(),
-                                     new JavaExprAnalyzer(),
-                                     typeResolver,
-                                     cache,
-                                     this.builders );
     }
 
     public Map getInvokers() {
@@ -166,19 +107,19 @@
      */
     public synchronized Rule build(final Package pkg,
                                    final RuleDescr ruleDescr) {
-        this.context = new BuildContext( pkg,
+        this.context = new RuleBuildContext( pkg,
                                          ruleDescr );
 
         // Assign attributes
         setAttributes( this.context.getRule(),
                        ruleDescr.getAttributes() );
+        
+        this.context.setDialect( this.dialect );
 
-        final ConditionalElementBuilder builder = this.utils.getBuilder( ruleDescr.getLhs().getClass() );
+        final ConditionalElementBuilder builder = ( ConditionalElementBuilder ) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
         if ( builder != null ) {
             final GroupElement ce = (GroupElement) builder.build( this.context,
-                                                            this.utils,
-                                                            this.patternBuilder,
-                                                            ruleDescr.getLhs() );
+                                                                  ruleDescr.getLhs() );
             this.context.getRule().setLhs( ce );
         } else {
             throw new RuntimeDroolsException( "BUG: builder not found for descriptor class " + ruleDescr.getLhs().getClass() );
@@ -188,13 +129,12 @@
         // generate the main rule from the previously generated s.
         if ( !(ruleDescr instanceof QueryDescr) ) {
             // do not build the consequence if we have a query
-            this.consequenceBuilder.build( this.context,
-                                           this.utils,
-                                           ruleDescr );
+
+            this.dialect.getConsequenceBuilder().build( this.context,
+                                                        ruleDescr );
         }
-        this.classBuilder.buildRule( this.context,
-                                     this.utils,
-                                     ruleDescr );
+        this.dialect.getRuleClassBuilder().buildRule( this.context,
+                                                      ruleDescr );
 
         return this.context.getRule();
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,12 +1,10 @@
 package org.drools.rule.builder;
 
 import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 
 public interface RuleClassBuilder {
 
-    public void buildRule(final BuildContext context,
-                          final BuildUtils utils,
+    public void buildRule(final RuleBuildContext context,
                           final RuleDescr ruleDescr);
 
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/BuildUtils.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,219 +0,0 @@
-/*
- * Copyright 2006 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.rule.builder.dialect.java;
-
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.antlr.stringtemplate.StringTemplateGroup;
-import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
-import org.codehaus.jfdi.interpreter.TypeResolver;
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.compiler.RuleError;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.ConditionalElementBuilder;
-
-/**
- * A holder class for utility functions
- * 
- * @author etirelli
- */
-public class BuildUtils {
-
-    // the string template groups
-    private final StringTemplateGroup      ruleGroup    = new StringTemplateGroup( new InputStreamReader( BuildUtils.class.getResourceAsStream( "javaRule.stg" ) ),
-                                                                                   AngleBracketTemplateLexer.class );
-
-    private final StringTemplateGroup      invokerGroup = new StringTemplateGroup( new InputStreamReader( BuildUtils.class.getResourceAsStream( "javaInvokers.stg" ) ),
-                                                                                   AngleBracketTemplateLexer.class );
-
-    private final KnowledgeHelperFixer     knowledgeHelperFixer;
-
-    private final DeclarationTypeFixer     typeFixer;
-
-    private final JavaExprAnalyzer         analyzer;
-
-    private final TypeResolver             typeResolver;
-
-    private final ClassFieldExtractorCache classFieldExtractorCache;
-
-    private final Map                      builders;
-
-    public BuildUtils(final KnowledgeHelperFixer knowledgeHelperFixer,
-                      final DeclarationTypeFixer typeFixer,
-                      final JavaExprAnalyzer analyzer,
-                      final TypeResolver typeResolver,
-                      final ClassFieldExtractorCache classFieldExtractorCache,
-                      final Map builders) {
-        this.knowledgeHelperFixer = knowledgeHelperFixer;
-        this.typeFixer = typeFixer;
-        this.analyzer = analyzer;
-        this.typeResolver = typeResolver;
-        this.classFieldExtractorCache = classFieldExtractorCache;
-        this.builders = builders;
-    }
-
-    public List[] getUsedIdentifiers(final BuildContext context,
-                                     final BaseDescr descr,
-                                     final Object content) {
-        List[] usedIdentifiers = null;
-        try {
-            usedIdentifiers = this.analyzer.analyzeExpression( (String) content,
-                                                               new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
-        } catch ( final Exception e ) {
-            context.getErrors().add( new RuleError( context.getRule(),
-                                                    descr,
-                                                    null,
-                                                    "Unable to determine the used declarations" ) );
-        }
-        return usedIdentifiers;
-    }
-
-    public List[] getUsedCIdentifiers(final BuildContext context,
-                                      final BaseDescr descr,
-                                      final String text) {
-        List[] usedIdentifiers = null;
-        try {
-            usedIdentifiers = this.analyzer.analyzeBlock( text,
-                                                          new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
-        } catch ( final Exception e ) {
-            context.getErrors().add( new RuleError( context.getRule(),
-                                                    descr,
-                                                    null,
-                                                    "Unable to determine the used declarations" ) );
-        }
-        return usedIdentifiers;
-    }
-
-    /**
-     * Sets usual string template attributes:
-     * 
-     * <li> list of declarations and declaration types</li>
-     * <li> list of globals and global types</li>
-     *
-     * @param context the current build context
-     * @param st the string template whose attributes will be set 
-     * @param declarations array of declarations to set
-     * @param globals array of globals to set
-     */
-    public void setStringTemplateAttributes(final BuildContext context,
-                                            final StringTemplate st,
-                                            final Declaration[] declarations,
-                                            final String[] globals ) {
-        final String[] declarationTypes = new String[declarations.length];
-        for ( int i = 0, size = declarations.length; i < size; i++ ) {
-            declarationTypes[i] = this.typeFixer.fix( declarations[i] );
-        }
-
-        final List globalTypes = new ArrayList( globals.length );
-        for ( int i = 0, length = globals.length; i < length; i++ ) {
-            globalTypes.add( ((Class) context.getPkg().getGlobals().get( globals[i] )).getName().replace( '$',
-                                                                                                          '.' ) );
-        }
-
-        st.setAttribute( "declarations",
-                         declarations );
-        st.setAttribute( "declarationTypes",
-                         declarationTypes );
-
-        st.setAttribute( "globals",
-                         globals );
-        st.setAttribute( "globalTypes",
-                         globalTypes );
-    }
-
-    /**
-     * Upper case the first letter of "name"
-     * 
-     * @param name
-     * @return
-     */
-    public String ucFirst(final String name) {
-        return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
-    }
-
-    /**
-     * Returns the string template group of invokers
-     * @return
-     */
-    public StringTemplateGroup getInvokerGroup() {
-        return this.invokerGroup;
-    }
-
-    /**
-     * Returns the string template group of actual rule templates
-     * @return
-     */
-    public StringTemplateGroup getRuleGroup() {
-        return this.ruleGroup;
-    }
-
-    /**
-     * Returns the Knowledge Helper Fixer
-     * @return
-     */
-    public KnowledgeHelperFixer getKnowledgeHelperFixer() {
-        return this.knowledgeHelperFixer;
-    }
-
-    /**
-     * Returns the current type resolver instance
-     * @return
-     */
-    public TypeResolver getTypeResolver() {
-        return this.typeResolver;
-    }
-
-    /**
-     * Returns the cache of field extractors
-     * @return
-     */
-    public ClassFieldExtractorCache getClassFieldExtractorCache() {
-        return this.classFieldExtractorCache;
-    }
-
-    /**
-     * Returns a map<Class, ConditionalElementBuilder> of builders
-     * @return
-     */
-    public Map getBuilders() {
-        return this.builders;
-    }
-
-    /**
-     * Returns the builder for the given descriptor class
-     * @param descr
-     * @return
-     */
-    public ConditionalElementBuilder getBuilder(final Class descr) {
-        return (ConditionalElementBuilder) this.builders.get( descr );
-    }
-
-    /**
-     * @return the typeFixer
-     */
-    public DeclarationTypeFixer getTypeFixer() {
-        return this.typeFixer;
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -16,10 +16,9 @@
         final Class classType = declaration.getExtractor().getExtractToClass();
         if ( classType.isArray() ) {
             return classType.getComponentType().getName().concat( "[]" );
-        } else {
-            // Does this replacement usefull in the declaration type ??
-            return classType.getName().replace( '$',
-                                                '.' );
-        }
+        };
+        // Does this replacement usefull in the declaration type ??
+        return classType.getName().replace( '$',
+                                            '.' );
     }
 }

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DialectSession.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -0,0 +1,5 @@
+package org.drools.rule.builder.dialect.java;
+
+public class DialectSession {
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -23,14 +23,16 @@
 import org.drools.base.ClassObjectType;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.rule.Accumulate;
 import org.drools.rule.Pattern;
 import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.util.StringUtils;
 
 /**
  * @author etirelli
@@ -47,37 +49,35 @@
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.AccumulateBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
 
         final AccumulateDescr accumDescr = (AccumulateDescr) descr;
 
+        final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
+
         final Pattern sourcePattern = patternBuilder.build( context,
-                                                   utils,
-                                                   accumDescr.getSourcePattern() );
+                                                            accumDescr.getSourcePattern() );
 
         if ( sourcePattern == null ) {
             return null;
         }
 
         final Pattern resultPattern = patternBuilder.build( context,
-                                                   utils,
-                                                   accumDescr.getResultPattern() );
+                                                            accumDescr.getResultPattern() );
 
         final String className = "accumulate" + context.getNextId();
         accumDescr.setClassMethodName( className );
 
-        final List[] usedIdentifiers1 = utils.getUsedCIdentifiers( context,
-                                                                   accumDescr,
-                                                                   accumDescr.getInitCode() );
-        final List[] usedIdentifiers2 = utils.getUsedCIdentifiers( context,
-                                                                   accumDescr,
-                                                                   accumDescr.getActionCode() );
-        final List[] usedIdentifiers3 = utils.getUsedIdentifiers( context,
-                                                                  accumDescr,
-                                                                  accumDescr.getResultCode() );
+        final List[] usedIdentifiers1 = context.getDialect().getBlockIdentifiers( context,
+                                                                                  accumDescr,
+                                                                                  accumDescr.getInitCode() );
+        final List[] usedIdentifiers2 = context.getDialect().getBlockIdentifiers( context,
+                                                                                  accumDescr,
+                                                                                  accumDescr.getActionCode() );
+        final List[] usedIdentifiers3 = context.getDialect().getExpressionIdentifiers( context,
+                                                                                       accumDescr,
+                                                                                       accumDescr.getResultCode() );
 
         final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
         requiredDeclarations.addAll( usedIdentifiers2[0] );
@@ -95,13 +95,15 @@
 
         final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
 
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "accumulateMethod" );
+        JavaDialect dialect = (JavaDialect) context.getDialect();
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           globals );
+        StringTemplate st = dialect.getRuleGroup().getInstanceOf( "accumulateMethod" );
 
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             declarations,
+                                             globals );
+
         st.setAttribute( "innerDeclarations",
                          sourceDeclArr );
         st.setAttribute( "methodName",
@@ -130,30 +132,30 @@
 
         context.getMethods().add( st.toString() );
 
-        st = utils.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
+        st = dialect.getInvokerGroup().getInstanceOf( "accumulateInvoker" );
 
         st.setAttribute( "package",
                          context.getPkg().getName() );
         st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+                         StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
         st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+                         context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
         st.setAttribute( "methodName",
                          className );
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             declarations,
+                                             (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ) );
 
         st.setAttribute( "hashCode",
                          actionCode.hashCode() );
 
         final Accumulate accumulate = new Accumulate( sourcePattern,
-                                                resultPattern,
-                                                declarations,
-                                                sourceDeclArr );
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+                                                      resultPattern,
+                                                      declarations,
+                                                      sourceDeclArr );
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
         context.getInvokers().put( invokerClassName,
                                    st.toString() );
         context.getInvokerLookups().put( invokerClassName,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,9 +24,10 @@
 import org.drools.RuntimeDroolsException;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Declaration;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.spi.PatternExtractor;
+import org.drools.util.StringUtils;
 
 /**
  * @author etirelli
@@ -39,8 +40,7 @@
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
      */
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final RuleDescr ruleDescr) {
 
         // pushing consequence LHS into the stack for variable resolution
@@ -50,14 +50,16 @@
         // generate Invoker
         final String className = "consequence";
 
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
+        JavaDialect dialect = (JavaDialect) context.getDialect();
 
+        StringTemplate st = dialect.getRuleGroup().getInstanceOf( "consequenceMethod" );
+
         st.setAttribute( "methodName",
                          className );
 
-        final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
-                                                                  ruleDescr,
-                                                                  (String) ruleDescr.getConsequence() );
+        final List[] usedIdentifiers = context.getDialect().getBlockIdentifiers( context,
+                                                                                 ruleDescr,
+                                                                                 (String) ruleDescr.getConsequence() );
 
         final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
 
@@ -65,43 +67,44 @@
             declarations[i] = context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
         }
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             declarations,
+                                             (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
         st.setAttribute( "text",
-                         utils.getKnowledgeHelperFixer().fix( (String) ruleDescr.getConsequence() ) );
+                         ((JavaDialect) context.getDialect()).getKnowledgeHelperFixer().fix( (String) ruleDescr.getConsequence() ) );
 
         context.getMethods().add( st.toString() );
 
-        st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
+        st = dialect.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
 
         st.setAttribute( "package",
                          context.getPkg().getName() );
         st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+                         StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
         st.setAttribute( "invokerClassName",
-                         ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
+                         ruleDescr.getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
         st.setAttribute( "methodName",
                          className );
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             declarations,
+                                             (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
 
         // Must use the rule declarations, so we use the same order as used in the generated invoker
         final List list = Arrays.asList( context.getRule().getDeclarations() );
 
         //final int[] indexes = new int[declarations.length];
-        final List indexes = new ArrayList(declarations.length);
+        final List indexes = new ArrayList( declarations.length );
 
         // have to user a String[] as boolean[] is broken in stringtemplate
         final String[] notPatterns = new String[declarations.length];
         for ( int i = 0, length = declarations.length; i < length; i++ ) {
-            indexes.add( i, new Integer( list.indexOf( declarations[i] ) ) );
+            indexes.add( i,
+                         new Integer( list.indexOf( declarations[i] ) ) );
             notPatterns[i] = (declarations[i].getExtractor() instanceof PatternExtractor) ? null : "true";
-            if ( ((Integer)indexes.get(i)).intValue() == -1 ) {
+            if ( ((Integer) indexes.get( i )).intValue() == -1 ) {
                 // some defensive code, this should never happen
                 throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
             }
@@ -116,7 +119,7 @@
         st.setAttribute( "text",
                          ruleDescr.getConsequence() );
 
-        final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
+        final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + StringUtils.ucFirst( className ) + "Invoker";
 
         context.getInvokers().put( invokerClassName,
                                    st.toString() );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -1,12 +1,17 @@
 package org.drools.rule.builder.dialect.java;
 
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import org.antlr.stringtemplate.StringTemplate;
+import org.antlr.stringtemplate.StringTemplateGroup;
+import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
 import org.apache.commons.jci.compilers.CompilationResult;
 import org.apache.commons.jci.compilers.EclipseJavaCompiler;
 import org.apache.commons.jci.compilers.EclipseJavaCompilerSettings;
@@ -17,7 +22,9 @@
 import org.apache.commons.jci.readers.ResourceReader;
 import org.codehaus.jfdi.interpreter.TypeResolver;
 import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldExtractorCache;
 import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.RuleError;
 import org.drools.compiler.PackageBuilder.ErrorHandler;
 import org.drools.compiler.PackageBuilder.FunctionErrorHandler;
 import org.drools.compiler.PackageBuilder.RuleErrorHandler;
@@ -33,13 +40,15 @@
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Declaration;
 import org.drools.rule.LineMappings;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.CollectBuilder;
-import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.ConditionalElementBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.Dialect;
@@ -47,6 +56,7 @@
 import org.drools.rule.builder.FromBuilder;
 import org.drools.rule.builder.FunctionBuilder;
 import org.drools.rule.builder.GroupElementBuilder;
+import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.PredicateBuilder;
 import org.drools.rule.builder.ReturnValueBuilder;
 import org.drools.rule.builder.RuleBuilder;
@@ -58,46 +68,58 @@
     implements
     Dialect {
 
-    private final JavaAccumulateBuilder       accumulate  = new JavaAccumulateBuilder();
-    private final JavaConsequenceBuilder      consequence = new JavaConsequenceBuilder();
-    private final JavaEvalBuilder             eval        = new JavaEvalBuilder();
-    private final JavaPredicateBuilder        predicate   = new JavaPredicateBuilder();
-    private final JavaReturnValueBuilder      returnValue = new JavaReturnValueBuilder();
-    private final JavaRuleClassBuilder        rule        = new JavaRuleClassBuilder();
-    private final MVELFromBuilder             from        = new MVELFromBuilder();
+    // the string template groups
+    private final StringTemplateGroup      ruleGroup    = new StringTemplateGroup( new InputStreamReader( JavaDialect.class.getResourceAsStream( "javaRule.stg" ) ),
+                                                                                   AngleBracketTemplateLexer.class );
 
-    private Package                     pkg;
-    private JavaCompiler                compiler;
-    private List                        generatedClassList;
-    private PackageBuilderConfiguration configuration;
+    private final StringTemplateGroup      invokerGroup = new StringTemplateGroup( new InputStreamReader( JavaDialect.class.getResourceAsStream( "javaInvokers.stg" ) ),
+                                                                                   AngleBracketTemplateLexer.class );
 
-    private MemoryResourceReader        src;
-    private PackageStore                packageStoreWrapper;
+    // builders
+    private final PatternBuilder           pattern      = new PatternBuilder( this );
+    private final JavaAccumulateBuilder    accumulate   = new JavaAccumulateBuilder();
+    private final JavaEvalBuilder          eval         = new JavaEvalBuilder();
+    private final JavaPredicateBuilder     predicate    = new JavaPredicateBuilder();
+    private final JavaReturnValueBuilder   returnValue  = new JavaReturnValueBuilder();
+    private final JavaConsequenceBuilder   consequence  = new JavaConsequenceBuilder();
+    private final JavaRuleClassBuilder     rule         = new JavaRuleClassBuilder();
+    private final MVELFromBuilder          from         = new MVELFromBuilder();
 
-    private Map                         lineMappings;
+    // 
+    private final KnowledgeHelperFixer     knowledgeHelperFixer;
+    private final DeclarationTypeFixer     typeFixer;
+    private final JavaExprAnalyzer         analyzer;
 
-    private Map                         errorHandlers;
+    private PackageBuilderConfiguration    configuration;
 
-    private List                        results;
+    private Package                        pkg;
+    private JavaCompiler                   compiler;
+    private List                           generatedClassList;
+    private MemoryResourceReader           src;
+    private PackageStore                   packageStoreWrapper;
+    private Map                            lineMappings;
+    private Map                            errorHandlers;
+    private List                           results;
+    private final TypeResolver             typeResolver;
+    private final ClassFieldExtractorCache classFieldExtractorCache;
 
     // a map of registered builders
-    private Map                         builders;
+    private Map                            builders;
 
-    // the builder for patterns
-    private PatternBuilder               patternBuilder;
-
-    // the builder for the consequence
-    private ConsequenceBuilder          consequenceBuilder;
-
-    // the builder for the rule class
-    private RuleClassBuilder            classBuilder;
-
     public JavaDialect(final Package pkg,
-                       final PackageBuilderConfiguration configuration) {
+                       final PackageBuilderConfiguration configuration,
+                       final TypeResolver typeResolver,
+                       final ClassFieldExtractorCache classFieldExtractorCache) {
         this.pkg = pkg;
         this.configuration = configuration;
         loadCompiler();
 
+        this.typeResolver = typeResolver;
+        this.classFieldExtractorCache = classFieldExtractorCache;
+        this.knowledgeHelperFixer = new KnowledgeHelperFixer();
+        this.typeFixer = new DeclarationTypeFixer();
+        this.analyzer = new JavaExprAnalyzer();
+
         if ( pkg != null ) {
             init( pkg );
         }
@@ -112,35 +134,40 @@
         this.builders = new HashMap();
 
         this.builders.put( CollectDescr.class,
-                      new CollectBuilder() );
+                           new CollectBuilder() );
 
         this.builders.put( ForallDescr.class,
-                      new ForallBuilder() );
+                           new ForallBuilder() );
+
         final GroupElementBuilder gebuilder = new GroupElementBuilder();
+
         this.builders.put( AndDescr.class,
-                      gebuilder );
+                           gebuilder );
+
         this.builders.put( OrDescr.class,
-                      gebuilder );
+                           gebuilder );
+
         this.builders.put( NotDescr.class,
-                      gebuilder );
+                           gebuilder );
+
         this.builders.put( ExistsDescr.class,
-                      gebuilder );
+                           gebuilder );
 
-        // dialect specific        
-        this.patternBuilder = new PatternBuilder( this );
+        this.builders.put( PatternDescr.class,
+                           getPatternBuilder() );
 
         this.builders.put( FromDescr.class,
-                      getFromBuilder() );
+                           getFromBuilder() );
 
         this.builders.put( AccumulateDescr.class,
-                      getAccumulateBuilder() );
+                           getAccumulateBuilder() );
 
         this.builders.put( EvalDescr.class,
-                      getEvalBuilder() );
+                           getEvalBuilder() );
+    }
 
-        this.consequenceBuilder = getConsequenceBuilder();
-
-        this.classBuilder = getRuleClassBuilder();
+    public Map getBuilders() {
+        return this.builders;
     }
 
     public void init(final Package pkg) {
@@ -170,14 +197,81 @@
         ruleDescr.setClassName( ucFirst( ruleClassName ) );
     }
 
+    public List[] getExpressionIdentifiers(final RuleBuildContext context,
+                                           final BaseDescr descr,
+                                           final Object content) {
+        List[] usedIdentifiers = null;
+        try {
+            usedIdentifiers = this.analyzer.analyzeExpression( (String) content,
+                                                               new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+        } catch ( final Exception e ) {
+            context.getErrors().add( new RuleError( context.getRule(),
+                                                    descr,
+                                                    null,
+                                                    "Unable to determine the used declarations" ) );
+        }
+        return usedIdentifiers;
+    }
+
+    public List[] getBlockIdentifiers(final RuleBuildContext context,
+                                      final BaseDescr descr,
+                                      final String text) {
+        List[] usedIdentifiers = null;
+        try {
+            usedIdentifiers = this.analyzer.analyzeBlock( text,
+                                                          new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+        } catch ( final Exception e ) {
+            context.getErrors().add( new RuleError( context.getRule(),
+                                                    descr,
+                                                    null,
+                                                    "Unable to determine the used declarations" ) );
+        }
+        return usedIdentifiers;
+    }
+
+    /**
+     * Returns the current type resolver instance
+     * @return
+     */
+    public TypeResolver getTypeResolver() {
+        return this.typeResolver;
+    }
+
+    /**
+     * Returns the cache of field extractors
+     * @return
+     */
+    public ClassFieldExtractorCache getClassFieldExtractorCache() {
+        return this.classFieldExtractorCache;
+    }
+
+    /**
+     * Returns the Knowledge Helper Fixer
+     * @return
+     */
+    public KnowledgeHelperFixer getKnowledgeHelperFixer() {
+        return this.knowledgeHelperFixer;
+    }
+
+    /**
+     * @return the typeFixer
+     */
+    public DeclarationTypeFixer getTypeFixer() {
+        return this.typeFixer;
+    }
+
+    public Object getBuilder(Class clazz) {
+        return this.builders.get( clazz );
+    }
+
+    public PatternBuilder getPatternBuilder() {
+        return this.pattern;
+    }
+
     public AccumulateBuilder getAccumulateBuilder() {
         return this.accumulate;
     }
 
-    public ConsequenceBuilder getConsequenceBuilder() {
-        return this.consequence;
-    }
-
     public ConditionalElementBuilder getEvalBuilder() {
         return this.eval;
     }
@@ -190,6 +284,10 @@
         return this.returnValue;
     }
 
+    public ConsequenceBuilder getConsequenceBuilder() {
+        return this.consequence;
+    }
+
     public RuleClassBuilder getRuleClassBuilder() {
         return this.rule;
     }
@@ -199,6 +297,59 @@
     }
 
     /**
+     * Sets usual string template attributes:
+     * 
+     * <li> list of declarations and declaration types</li>
+     * <li> list of globals and global types</li>
+     *
+     * @param context the current build context
+     * @param st the string template whose attributes will be set 
+     * @param declarations array of declarations to set
+     * @param globals array of globals to set
+     */
+    public void setStringTemplateAttributes(final RuleBuildContext context,
+                                            final StringTemplate st,
+                                            final Declaration[] declarations,
+                                            final String[] globals) {
+        final String[] declarationTypes = new String[declarations.length];
+        for ( int i = 0, size = declarations.length; i < size; i++ ) {
+            declarationTypes[i] = ((JavaDialect) context.getDialect()).getTypeFixer().fix( declarations[i] );
+        }
+
+        final List globalTypes = new ArrayList( globals.length );
+        for ( int i = 0, length = globals.length; i < length; i++ ) {
+            globalTypes.add( ((Class) context.getPkg().getGlobals().get( globals[i] )).getName().replace( '$',
+                                                                                                          '.' ) );
+        }
+
+        st.setAttribute( "declarations",
+                         declarations );
+        st.setAttribute( "declarationTypes",
+                         declarationTypes );
+
+        st.setAttribute( "globals",
+                         globals );
+        st.setAttribute( "globalTypes",
+                         globalTypes );
+    }
+
+    /**
+     * Returns the string template group of invokers
+     * @return
+     */
+    public StringTemplateGroup getInvokerGroup() {
+        return this.invokerGroup;
+    }
+
+    /**
+     * Returns the string template group of actual rule templates
+     * @return
+     */
+    public StringTemplateGroup getRuleGroup() {
+        return this.ruleGroup;
+    }
+
+    /**
      * This actually triggers the compiling of all the resources.
      * Errors are mapped back to the element that originally generated the semantic
      * code.
@@ -245,12 +396,12 @@
     }
 
     /**
-     * This will setup the semantic components of the rule for compiling later on.
+     * This will add the rule for compiling later on.
      * It will not actually call the compiler
      */
-    public void addRuleSemantics(final RuleBuilder builder,
-                                 final Rule rule,
-                                 final RuleDescr ruleDescr) {
+    public void addRule(final RuleBuilder builder,
+                        final Rule rule,
+                        final RuleDescr ruleDescr) {
         // return if there is no ruleclass name;       
         if ( builder.getRuleClass() == null ) {
             return;

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialectSession.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -0,0 +1,5 @@
+package org.drools.rule.builder.dialect.java;
+
+public class JavaDialectSession {
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,9 +24,10 @@
 import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.util.StringUtils;
 
 /**
  * @author etirelli
@@ -46,9 +47,7 @@
      * 
      * @return the Eval Conditional Element
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
         // it must be an EvalDescr
         final EvalDescr evalDescr = (EvalDescr) descr;
@@ -57,9 +56,9 @@
 
         evalDescr.setClassMethodName( className );
 
-        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-                                                                 evalDescr,
-                                                                 evalDescr.getContent() );
+        final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
+                                                                                      evalDescr,
+                                                                                      evalDescr.getContent() );
 
         final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
         for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
@@ -68,13 +67,15 @@
 
         final EvalCondition eval = new EvalCondition( declarations );
 
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
+        JavaDialect dialect = (JavaDialect) context.getDialect();
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        StringTemplate st = dialect.getRuleGroup().getInstanceOf( "evalMethod" );
 
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             declarations,
+                                             (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
         st.setAttribute( "methodName",
                          className );
 
@@ -84,26 +85,26 @@
 
         context.getMethods().add( st.toString() );
 
-        st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
+        st = dialect.getInvokerGroup().getInstanceOf( "evalInvoker" );
 
         st.setAttribute( "package",
                          context.getPkg().getName() );
         st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+                         StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
         st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+                         context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
         st.setAttribute( "methodName",
                          className );
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             declarations,
+                                             (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
 
         st.setAttribute( "hashCode",
                          evalText.hashCode() );
 
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
         context.getInvokers().put( invokerClassName,
                                    st.toString() );
         context.getInvokerLookups().put( invokerClassName,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaPredicateBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -6,15 +6,15 @@
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.PredicateBuilder;
+import org.drools.util.StringUtils;
 
 public class JavaPredicateBuilder
     implements
     PredicateBuilder {
 
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,
@@ -24,17 +24,19 @@
         // generate Invoker
         final String className = "predicate" + context.getNextId();
         predicateDescr.setClassMethodName( className );
+        
+        JavaDialect dialect = (JavaDialect) context.getDialect();
 
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
+        StringTemplate st = dialect.getRuleGroup().getInstanceOf( "predicateMethod" );
 
-        utils.setStringTemplateAttributes( context,
+        dialect.setStringTemplateAttributes( context,
                                            st,
                                            previousDeclarations,
                                            (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
 
         final String[] localDeclarationTypes = new String[localDeclarations.length];
         for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
-            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+            localDeclarationTypes[i] = ( (JavaDialect) context.getDialect()).getTypeFixer().fix( localDeclarations[i] );
         }
 
         st.setAttribute( "localDeclarations",
@@ -52,18 +54,18 @@
 
         context.getMethods().add( st.toString() );
 
-        st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
+        st = dialect.getInvokerGroup().getInstanceOf( "predicateInvoker" );
 
         st.setAttribute( "package",
                          context.getPkg().getName() );
         st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+                         StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
         st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+                         context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
         st.setAttribute( "methodName",
                          className );
 
-        utils.setStringTemplateAttributes( context,
+        dialect.setStringTemplateAttributes( context,
                                            st,
                                            previousDeclarations,
                                            (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
@@ -76,7 +78,7 @@
         st.setAttribute( "hashCode",
                          predicateText.hashCode() );
 
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
         context.getInvokers().put( invokerClassName,
                                    st.toString() );
         context.getInvokerLookups().put( invokerClassName,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -6,14 +6,14 @@
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.util.StringUtils;
 
 public class JavaReturnValueBuilder
     implements
     ReturnValueBuilder {
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,
@@ -22,16 +22,18 @@
         final String className = "returnValue" + context.getNextId();
         returnValueRestrictionDescr.setClassMethodName( className );
 
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
+        JavaDialect dialect = (JavaDialect) context.getDialect();
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        StringTemplate st = dialect.getRuleGroup().getInstanceOf( "returnValueMethod" );
 
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             previousDeclarations,
+                                             (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
         final String[] localDeclarationTypes = new String[localDeclarations.length];
         for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
-            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+            localDeclarationTypes[i] = ((JavaDialect) context.getDialect()).getTypeFixer().fix( localDeclarations[i] );
         }
 
         st.setAttribute( "localDeclarations",
@@ -48,21 +50,21 @@
 
         context.getMethods().add( st.toString() );
 
-        st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
+        st = dialect.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
 
         st.setAttribute( "package",
                          context.getPkg().getName() );
         st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+                         StringUtils.ucFirst( context.getRuleDescr().getClassName() ) );
         st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+                         context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker" );
         st.setAttribute( "methodName",
                          className );
 
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        dialect.setStringTemplateAttributes( context,
+                                             st,
+                                             previousDeclarations,
+                                             (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
 
         st.setAttribute( "localDeclarations",
                          localDeclarations );
@@ -72,7 +74,7 @@
         st.setAttribute( "hashCode",
                          returnValueText.hashCode() );
 
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst( className ) + "Invoker";
         context.getInvokers().put( invokerClassName,
                                    st.toString() );
         context.getInvokerLookups().put( invokerClassName,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaRuleClassBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -19,8 +19,9 @@
 import java.util.Iterator;
 
 import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.util.StringUtils;
 
 /**
  * @author etirelli
@@ -33,8 +34,7 @@
     /* (non-Javadoc)
      * @see org.drools.rule.builder.dialect.java.RuleClassBuilder#buildRule(org.drools.rule.builder.BuildContext, org.drools.rule.builder.dialect.java.BuildUtils, org.drools.lang.descr.RuleDescr)
      */
-    public void buildRule(final BuildContext context,
-                          final BuildUtils utils,
+    public void buildRule(final RuleBuildContext context,
                           final RuleDescr ruleDescr) {
         // If there is no compiled code, return
         if ( context.getMethods().isEmpty() ) {
@@ -54,7 +54,7 @@
             buffer.append( "import static " + it.next() + ";" + lineSeparator );
         }
 
-        buffer.append( "public class " + utils.ucFirst( ruleDescr.getClassName() ) + " {" + lineSeparator );
+        buffer.append( "public class " + StringUtils.ucFirst( ruleDescr.getClassName() ) + " {" + lineSeparator );
         buffer.append( "    private static final long serialVersionUID  = 320L;" + lineSeparator );
 
         for ( int i = 0, size = context.getMethods().size() - 1; i < size; i++ ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -5,17 +5,15 @@
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.MVELConsequence;
 import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.mvel.MVEL;
 
 public class MVELConsequenceBuilder
     implements
     ConsequenceBuilder {
 
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final RuleDescr ruleDescr) {
         // pushing consequence LHS into the stack for variable resolution
         context.getBuildStack().push( context.getRule().getLhs() );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,10 +24,9 @@
 import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.ConditionalElementBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.mvel.MVEL;
 
 /**
@@ -48,9 +47,7 @@
      * 
      * @return the Eval Conditional Element
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
         // it must be an EvalDescr
         final EvalDescr evalDescr = (EvalDescr) descr;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,14 +24,14 @@
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.rule.Pattern;
 import org.drools.rule.ConditionalElement;
 import org.drools.rule.From;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.ConditionalElementBuilder;
 import org.drools.rule.builder.FromBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.drools.spi.DataProvider;
 import org.mvel.MVEL;
 
@@ -48,14 +48,13 @@
     /* (non-Javadoc)
      * @see org.drools.dialect.mvel.FromBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
      */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final PatternBuilder patternBuilder,
+    public ConditionalElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
         final FromDescr fromDescr = (FromDescr) descr;
 
+        final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
+        
         final Pattern pattern = patternBuilder.build( context,
-                                                      utils,
                                                       fromDescr.getReturnedPattern() );
 
         if ( pattern == null ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -26,9 +26,8 @@
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.PredicateConstraint;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.PredicateBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.mvel.MVEL;
 
 /**
@@ -39,8 +38,7 @@
     implements
     PredicateBuilder {
 
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -29,9 +29,8 @@
 import org.drools.rule.Declaration;
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.ReturnValueBuilder;
-import org.drools.rule.builder.dialect.java.BuildUtils;
 import org.mvel.MVEL;
 
 /**
@@ -42,8 +41,7 @@
     implements
     ReturnValueBuilder {
 
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,
@@ -72,8 +70,7 @@
                                                                                         factory ) );
     }
 
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
+    public void build(final RuleBuildContext context,
                       final List[] usedIdentifiers,
                       final Declaration[] previousDeclarations,
                       final Declaration[] localDeclarations,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -592,107 +592,105 @@
                       accessor.toString() );
     }
 
-    //    public void testFrom() throws Exception {
-    //        final RuleDescr rule = parseResource( "from.drl" ).rule();
-    //
-    //        if(parser.hasErrors()) {
-    //            System.err.println(parser.getErrorMessages());
-    //        }
-    //        assertFalse(parser.hasErrors());
-    //        
-    //        assertNotNull( rule );
-    //
-    //        assertEquals( "using_from",
-    //                      rule.getName() );
-    //
-    //        assertEquals(9, rule.getLhs().getDescrs().size());
-    //        
-    //        FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
-    //        
-    //        assertEquals(3, from.getLine());
-    //        
-    //        assertEquals("Foo", from.getReturnedPattern().getObjectType());
-    //        assertTrue(from.getDataSource() instanceof FieldAccessDescr);
-    //        assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());        
-    //        assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
-    //        
-    //        
-    //        ArgumentValueDescr arg = null;
-    //        
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(1);
-    //        assertEquals("Foo", from.getReturnedPattern().getObjectType());
-    //        assertEquals(0, from.getReturnedPattern().getDescrs().size());
-    //        FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-    //        arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-    //        assertEquals(ArgumentValueDescr.STRING,  arg.getType() );
-    //        
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(2);
-    //        fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-    //        arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-    //        assertEquals(ArgumentValueDescr.VARIABLE,  arg.getType() );        
-    //        
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(3);
-    //        fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-    //        arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-    //        assertEquals(ArgumentValueDescr.INTEGRAL,  arg.getType() );
-    //        
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(4);
-    //        assertEquals("Whee", from.getReturnedColumn().getObjectType());
-    //        assertEquals(1, from.getReturnedColumn().getDescrs().size());
-    //        assertTrue(from.getDataSource() instanceof FunctionCallDescr);
-    //        assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());        
-    //        assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
-    //        arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
-    //        assertEquals("y", arg.getValue());
-    //        assertEquals(ArgumentValueDescr.STRING, arg.getType());
-    //
-    //        assertEquals(7, from.getLine());
-    //        assertEquals(7, from.getReturnedColumn().getLine());
-    //        
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(5);
-    //        assertEquals("Foo", from.getReturnedColumn().getObjectType());
-    //        assertEquals(1, from.getReturnedColumn().getDescrs().size());
-    //        assertEquals("f", from.getReturnedColumn().getIdentifier());
-    //        assertTrue(from.getDataSource() instanceof MethodAccessDescr);
-    //        assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());        
-    //        assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
-    //        assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
-    //        arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
-    //        
-    //        
-    //        assertEquals("x", arg.getValue());
-    //        assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
-    //
-    //        assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
-    //        
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(6);
-    //        assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
-    //
-    //        from = (FromDescr) rule.getLhs().getDescrs().get(7);
-    //        MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
-    //        assertEquals("wa", meth.getMethodName());
-    //        assertEquals("la", meth.getVariableName());
-    //        
-    //        arg = (ArgumentValueDescr) meth.getArguments().get(0);
-    //        assertEquals("42", arg.getValue());
-    //        assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
-    //        
-    //        arg = (ArgumentValueDescr) meth.getArguments().get(1);
-    //        assertEquals("42.42", arg.getValue());
-    //        assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
-    //
-    //        arg = (ArgumentValueDescr) meth.getArguments().get(2);
-    //        assertEquals("false", arg.getValue());
-    //        assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
-    //        
-    //        arg = (ArgumentValueDescr) meth.getArguments().get(3);
-    //        assertEquals("null", arg.getValue());
-    //        assertEquals(ArgumentValueDescr.NULL, arg.getType());
-    //        
-    //                
-    //        
-    //        assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
-    //    }
+//        public void testFrom() throws Exception {
+//            final RuleDescr rule = parseResource( "from.drl" ).rule();
+//    
+//            if(parser.hasErrors()) {
+//                System.err.println(parser.getErrorMessages());
+//            }
+//            assertFalse(parser.hasErrors());
+//            
+//            assertNotNull( rule );
+//    
+//            assertEquals( "using_from",
+//                          rule.getName() );
+//    
+//            assertEquals(9, rule.getLhs().getDescrs().size());
+//            
+//            FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
+//            
+//            assertEquals(3, from.getLine());
+//            
+//            assertEquals("Foo", from.getReturnedPattern().getObjectType());
+//            assertTrue(from.getDataSource() instanceof FieldAccessDescr);
+//            assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());        
+//            assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
+//            
+//            
+//            ArgumentValueDescr arg = null;
+//            
+//            from = (FromDescr) rule.getLhs().getDescrs().get(1);
+//            assertEquals("Foo", from.getReturnedPattern().getObjectType());
+//            assertEquals(0, from.getReturnedPattern().getDescrs().size());
+//            FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+//            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+//            assertEquals(ArgumentValueDescr.STRING,  arg.getType() );
+//            
+//            from = (FromDescr) rule.getLhs().getDescrs().get(2);
+//            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+//            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+//            assertEquals(ArgumentValueDescr.VARIABLE,  arg.getType() );        
+//            
+//            from = (FromDescr) rule.getLhs().getDescrs().get(3);
+//            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+//            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+//            assertEquals(ArgumentValueDescr.INTEGRAL,  arg.getType() );
+//            
+//            from = (FromDescr) rule.getLhs().getDescrs().get(4);
+//            assertEquals("Whee", from.getReturnedColumn().getObjectType());
+//            assertEquals(1, from.getReturnedColumn().getDescrs().size());
+//            assertTrue(from.getDataSource() instanceof FunctionCallDescr);
+//            assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());        
+//            assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
+//            arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
+//            assertEquals("y", arg.getValue());
+//            assertEquals(ArgumentValueDescr.STRING, arg.getType());
+//    
+//            assertEquals(7, from.getLine());
+//            assertEquals(7, from.getReturnedColumn().getLine());
+//            
+//            from = (FromDescr) rule.getLhs().getDescrs().get(5);
+//            assertEquals("Foo", from.getReturnedColumn().getObjectType());
+//            assertEquals(1, from.getReturnedColumn().getDescrs().size());
+//            assertEquals("f", from.getReturnedColumn().getIdentifier());
+//            assertTrue(from.getDataSource() instanceof MethodAccessDescr);
+//            assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());        
+//            assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
+//            assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
+//            arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
+//            
+//            
+//            assertEquals("x", arg.getValue());
+//            assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
+//    
+//            assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
+//            
+//            from = (FromDescr) rule.getLhs().getDescrs().get(6);
+//            assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
+//    
+//            from = (FromDescr) rule.getLhs().getDescrs().get(7);
+//            MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
+//            assertEquals("wa", meth.getMethodName());
+//            assertEquals("la", meth.getVariableName());
+//            
+//            arg = (ArgumentValueDescr) meth.getArguments().get(0);
+//            assertEquals("42", arg.getValue());
+//            assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
+//            
+//            arg = (ArgumentValueDescr) meth.getArguments().get(1);
+//            assertEquals("42.42", arg.getValue());
+//            assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
+//    
+//            arg = (ArgumentValueDescr) meth.getArguments().get(2);
+//            assertEquals("false", arg.getValue());
+//            assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
+//            
+//            arg = (ArgumentValueDescr) meth.getArguments().get(3);
+//            assertEquals("null", arg.getValue());
+//            assertEquals(ArgumentValueDescr.NULL, arg.getType());                                
+//            
+//            assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
+//        }
 
     public void testSimpleRule() throws Exception {
         final RuleDescr rule = parseResource( "simple_rule.drl" ).rule();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -61,74 +61,71 @@
     /**
      * Test method for {@link org.drools.rule.builder.RuleBuilder#build(org.drools.rule.Package, org.drools.lang.descr.RuleDescr)}.
      */
-    public void testBuild() {
-        try {
-            final DrlParser parser = new DrlParser();
-            final PackageDescr pkgDescr = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "nestedConditionalElements.drl" ) ) );
+    public void testBuild() throws Exception {
+        final DrlParser parser = new DrlParser();
+        final PackageDescr pkgDescr = parser.parse( new InputStreamReader( getClass().getResourceAsStream( "nestedConditionalElements.drl" ) ) );
 
-            // just checking there is no parsing errors
-            Assert.assertFalse( parser.getErrors().toString(),
-                                parser.hasErrors() );
+        // just checking there is no parsing errors
+        Assert.assertFalse( parser.getErrors().toString(),
+                            parser.hasErrors() );
 
-            final Package pkg = new Package( "org.drools" );
+        final Package pkg = new Package( "org.drools" );
 
-            final RuleDescr ruleDescr = (RuleDescr) pkgDescr.getRules().get( 0 );
-            final String ruleClassName = "RuleClassName.java";
-            ruleDescr.setClassName( ruleClassName );
+        final RuleDescr ruleDescr = (RuleDescr) pkgDescr.getRules().get( 0 );
+        final String ruleClassName = "RuleClassName.java";
+        ruleDescr.setClassName( ruleClassName );
 
-            final TypeResolver typeResolver = new ClassTypeResolver( new ArrayList(),
-                                                               this.getClass().getClassLoader() );
-            // make an automatic import for the current package
-            typeResolver.addImport( pkgDescr.getName() + ".*" );
-            typeResolver.addImport( "java.lang.*" );
+        final TypeResolver typeResolver = new ClassTypeResolver( new ArrayList(),
+                                                                 this.getClass().getClassLoader() );
+        // make an automatic import for the current package
+        typeResolver.addImport( pkgDescr.getName() + ".*" );
+        typeResolver.addImport( "java.lang.*" );
 
-            final RuleBuilder builder = new RuleBuilder( typeResolver,
-                                                         new ClassFieldExtractorCache(),
-                                                         new JavaDialect( null,
-                                                                          new PackageBuilderConfiguration() ) );
+        final RuleBuilder builder = new RuleBuilder( typeResolver,
+                                                     new ClassFieldExtractorCache(),
+                                                     new JavaDialect( null,
+                                                                      new PackageBuilderConfiguration(),
+                                                                      typeResolver,
+                                                                      new ClassFieldExtractorCache() ) );
 
-            builder.build( pkg,
-                           ruleDescr );
+        builder.build( pkg,
+                       ruleDescr );
 
-            Assert.assertTrue( builder.getErrors().toString(),
-                               builder.getErrors().isEmpty() );
+        Assert.assertTrue( builder.getErrors().toString(),
+                           builder.getErrors().isEmpty() );
 
-            final Rule rule = builder.getRule();
+        final Rule rule = builder.getRule();
 
-            assertEquals( "There should be 2 rule level declarations",
-                          2,
-                          rule.getDeclarations().length );
+        assertEquals( "There should be 2 rule level declarations",
+                      2,
+                      rule.getDeclarations().length );
 
-            // second GE should be a not
-            final GroupElement not = (GroupElement) rule.getLhs().getChildren().get( 1 );
-            assertTrue( not.isNot() );
-            // not has no outer declarations
-            assertTrue( not.getOuterDeclarations().isEmpty() );
-            assertEquals( 1,
-                          not.getInnerDeclarations().size() );
-            assertTrue( not.getInnerDeclarations().keySet().contains( "$state" ) );
+        // second GE should be a not
+        final GroupElement not = (GroupElement) rule.getLhs().getChildren().get( 1 );
+        assertTrue( not.isNot() );
+        // not has no outer declarations
+        assertTrue( not.getOuterDeclarations().isEmpty() );
+        assertEquals( 1,
+                      not.getInnerDeclarations().size() );
+        assertTrue( not.getInnerDeclarations().keySet().contains( "$state" ) );
 
-            // second not
-            final GroupElement not2 = (GroupElement) ((GroupElement) not.getChildren().get( 0 )).getChildren().get( 1 );
-            assertTrue( not2.isNot() );
-            // not has no outer declarations
-            assertTrue( not2.getOuterDeclarations().isEmpty() );
-            assertEquals( 1,
-                          not2.getInnerDeclarations().size() );
-            assertTrue( not2.getInnerDeclarations().keySet().contains( "$likes" ) );
-
-        } catch ( final Exception e ) {
-            e.printStackTrace();
-            fail( "This test is not supposed to throw any exception: " + e.getMessage() );
-        }
-
+        // second not
+        final GroupElement not2 = (GroupElement) ((GroupElement) not.getChildren().get( 0 )).getChildren().get( 1 );
+        assertTrue( not2.isNot() );
+        // not has no outer declarations
+        assertTrue( not2.getOuterDeclarations().isEmpty() );
+        assertEquals( 1,
+                      not2.getInnerDeclarations().size() );
+        assertTrue( not2.getInnerDeclarations().keySet().contains( "$likes" ) );
     }
 
     public void testBuildAttributes() throws Exception {
         final RuleBuilder builder = new RuleBuilder( null,
-                                               null,
-                                               new JavaDialect( null,
-                                                                new PackageBuilderConfiguration() ) );
+                                                     null,
+                                                     new JavaDialect( null,
+                                                                      new PackageBuilderConfiguration(),
+                                                                      null,
+                                                                      null ) );
         Rule rule = new Rule( "myrule" );
         List attributes = new ArrayList();
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -18,7 +18,7 @@
 import org.drools.rule.Pattern;
 import org.drools.rule.Declaration;
 import org.drools.rule.Package;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.PatternExtractor;
 import org.drools.spi.DeclarationScopeResolver;
 import org.drools.spi.ObjectType;
@@ -56,7 +56,6 @@
 
         final MVELConsequenceBuilder builder = new MVELConsequenceBuilder();
         builder.build( context,
-                       null,
                        ruleDescr );
 
         final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
@@ -97,7 +96,7 @@
         }
     }
 
-    public static class InstrumentedBuildContent extends BuildContext {
+    public static class InstrumentedBuildContent extends RuleBuildContext {
         private DeclarationScopeResolver declarationScopeResolver;
 
         public InstrumentedBuildContent(final Package pkg,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -19,7 +19,7 @@
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Package;
-import org.drools.rule.builder.BuildContext;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
 import org.drools.spi.DeclarationScopeResolver;
 import org.drools.spi.FieldExtractor;
@@ -34,15 +34,15 @@
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
-                                                                         ruleDescr );
+                                                                               ruleDescr );
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
         final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
                                                                   "price" );
         final Pattern pattern = new Pattern( 0,
-                                    new ClassObjectType( int.class ) );
+                                             new ClassObjectType( int.class ) );
         final Declaration declaration = new Declaration( "a",
-                                                   extractor,
-                                                   pattern );
+                                                         extractor,
+                                                         pattern );
         final Map map = new HashMap();
         map.put( "a",
                  declaration );
@@ -54,15 +54,13 @@
 
         final MVELEvalBuilder builder = new MVELEvalBuilder();
         final EvalCondition eval = (EvalCondition) builder.build( context,
-                                                            null,
-                                                            null,
-                                                            evalDescr );
+                                                                  evalDescr );
 
         final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
         final WorkingMemory wm = ruleBase.newStatefulSession();
 
         final Cheese cheddar = new Cheese( "cheddar",
-                                     10 );
+                                           10 );
         final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
         final ReteTuple tuple = new ReteTuple( f0 );
 
@@ -92,7 +90,7 @@
         }
     }
 
-    public static class InstrumentedBuildContent extends BuildContext {
+    public static class InstrumentedBuildContent extends RuleBuildContext {
         private DeclarationScopeResolver declarationScopeResolver;
 
         public InstrumentedBuildContent(final Package pkg,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -22,8 +22,7 @@
 import org.drools.rule.Package;
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
 import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
 import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
@@ -40,22 +39,22 @@
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
-                                                                         ruleDescr );
+                                                                               ruleDescr );
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
         final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
                                                                   "price" );
         final Pattern patternA = new Pattern( 0,
-                                     new ClassObjectType( int.class ) );
+                                              new ClassObjectType( int.class ) );
 
         final Pattern patternB = new Pattern( 1,
-                                     new ClassObjectType( int.class ) );
+                                              new ClassObjectType( int.class ) );
 
         final Declaration a = new Declaration( "a",
-                                         extractor,
-                                         patternA );
+                                               extractor,
+                                               patternA );
         final Declaration b = new Declaration( "b",
-                                         extractor,
-                                         patternB );
+                                               extractor,
+                                               patternB );
 
         final Map map = new HashMap();
         map.put( "a",
@@ -80,15 +79,7 @@
         final PredicateConstraint predicate = new PredicateConstraint( null,
                                                                        localDeclarations );
 
-        final BuildUtils utils = new BuildUtils( new KnowledgeHelperFixer(),
-                                           new DeclarationTypeFixer(),
-                                           new JavaExprAnalyzer(),
-                                           null,
-                                           null,
-                                           null );
-
         builder.build( context,
-                       utils,
                        usedIdentifiers,
                        previousDeclarations,
                        localDeclarations,
@@ -99,10 +90,10 @@
         final InternalWorkingMemory wm = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final Cheese stilton = new Cheese( "stilton",
-                                     10 );
+                                           10 );
 
         final Cheese cheddar = new Cheese( "cheddar",
-                                     10 );
+                                           10 );
         final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
         final ReteTuple tuple = new ReteTuple( f0 );
 
@@ -136,7 +127,7 @@
         }
     }
 
-    public static class InstrumentedBuildContent extends BuildContext {
+    public static class InstrumentedBuildContent extends RuleBuildContext {
         private DeclarationScopeResolver declarationScopeResolver;
 
         public InstrumentedBuildContent(final Package pkg,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-04-25 17:13:42 UTC (rev 11328)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-04-25 17:14:03 UTC (rev 11329)
@@ -24,8 +24,7 @@
 import org.drools.rule.Package;
 import org.drools.rule.ReturnValueRestriction;
 import org.drools.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.rule.builder.BuildContext;
-import org.drools.rule.builder.dialect.java.BuildUtils;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
 import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
 import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
@@ -42,22 +41,22 @@
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
 
         final InstrumentedBuildContent context = new InstrumentedBuildContent( pkg,
-                                                                         ruleDescr );
+                                                                               ruleDescr );
         final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
         final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
                                                                   "price" );
         final Pattern patternA = new Pattern( 0,
-                                     new ClassObjectType( int.class ) );
+                                              new ClassObjectType( int.class ) );
 
         final Pattern patternB = new Pattern( 1,
-                                     new ClassObjectType( int.class ) );
+                                              new ClassObjectType( int.class ) );
 
         final Declaration a = new Declaration( "a",
-                                         extractor,
-                                         patternA );
+                                               extractor,
+                                               patternA );
         final Declaration b = new Declaration( "b",
-                                         extractor,
-                                         patternB );
+                                               extractor,
+                                               patternB );
 
         final Map map = new HashMap();
         map.put( "a",
@@ -86,15 +85,7 @@
                                                                                requiredGlobals,
                                                                                ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
 
-        final BuildUtils utils = new BuildUtils( new KnowledgeHelperFixer(),
-                                           new DeclarationTypeFixer(),
-                                           new JavaExprAnalyzer(),
-                                           null,
-                                           null,
-                                           null );
-
         builder.build( context,
-                       utils,
                        usedIdentifiers,
                        previousDeclarations,
                        localDeclarations,
@@ -105,10 +96,10 @@
         final InternalWorkingMemory wm = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final Cheese stilton = new Cheese( "stilton",
-                                     10 );
+                                           10 );
 
         final Cheese cheddar = new Cheese( "cheddar",
-                                     10 );
+                                           10 );
         final InternalFactHandle f0 = (InternalFactHandle) wm.assertObject( cheddar );
         ReteTuple tuple = new ReteTuple( f0 );
 
@@ -120,7 +111,7 @@
         predicateContext.leftTuple = tuple;
 
         final Cheese brie = new Cheese( "brie",
-                                  20 );
+                                        20 );
         assertTrue( returnValue.isAllowed( extractor,
                                            brie,
                                            tuple,
@@ -149,7 +140,7 @@
         }
     }
 
-    public static class InstrumentedBuildContent extends BuildContext {
+    public static class InstrumentedBuildContent extends RuleBuildContext {
         private DeclarationScopeResolver declarationScopeResolver;
 
         public InstrumentedBuildContent(final Package pkg,




More information about the jboss-svn-commits mailing list