[jboss-svn-commits] JBL Code SVN: r25496 - in labs/jbossrules/trunk: drools-clips/src/main/java/org/drools/rule/builder/dialect/clips and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 4 17:51:05 EST 2009


Author: tirelli
Date: 2009-03-04 17:51:04 -0500 (Wed, 04 Mar 2009)
New Revision: 25496

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/EngineElementBuilder.java
Modified:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java
   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/FunctionBuilder.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/QueryBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.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/JavaActionBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.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/JavaExprAnalyzer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.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/MVELDialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEnabledBuilder.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/MVELExprAnalyzer.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/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzerTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/RuleConditionElement.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DeclarationScopeResolver.java
   labs/jbossrules/trunk/pom.xml
Log:
Upgrading to mvel 2.0.8.snapshot

Modified: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -2,7 +2,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.clips.Appendable;
 import org.drools.clips.FunctionHandlers;
@@ -141,8 +140,8 @@
     public Dialect.AnalysisResult analyzeExpression(PackageBuildContext context,
                                                     BaseDescr descr,
                                                     Object content,
-                                                    final Set[] availableIdentifiers,
-                                                    Map localTypes) {
+                                                    final Map<String,Class<?>>[] availableIdentifiers,
+                                                    Map<String,Class<?>> localTypes) {
         if ( descr instanceof PredicateDescr ) {
             Appendable builder = new StringBuilderAppendable();
             PredicateDescr pdescr = (PredicateDescr) descr;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/Dialect.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -2,7 +2,6 @@
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.base.TypeResolver;
 import org.drools.io.Resource;
@@ -14,6 +13,7 @@
 import org.drools.rule.builder.ActionBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.EnabledBuilder;
+import org.drools.rule.builder.EngineElementBuilder;
 import org.drools.rule.builder.EntryPointBuilder;
 import org.drools.rule.builder.FromBuilder;
 import org.drools.rule.builder.PackageBuildContext;
@@ -44,7 +44,7 @@
     // to execute complex expressions
     String getExpressionDialectName();
 
-    Map getBuilders();
+    Map<Class<?>,EngineElementBuilder> getBuilders();
 
     TypeResolver getTypeResolver();
 
@@ -78,17 +78,17 @@
 
     EntryPointBuilder getEntryPointBuilder();
 
-    RuleConditionBuilder getBuilder(Class clazz);
+    EngineElementBuilder getBuilder(Class<?> clazz);
 
     AnalysisResult analyzeExpression(final PackageBuildContext context,
                                      final BaseDescr descr,
                                      final Object content,
-                                     final Set[] availableIdentifiers);
+                                     final Map<String, Class<?>>[] availableIdentifiers);
 
     AnalysisResult analyzeBlock(final PackageBuildContext context,
                                 final BaseDescr descr,
                                 final String text,
-                                final Set[] availableIdentifiers);
+                                final Map<String, Class<?>>[] availableIdentifiers);
 
     void compileAll();
 
@@ -122,28 +122,28 @@
          * 
          * @return
          */
-        public List getIdentifiers();
+        public List<String> getIdentifiers();
 
         /**
          * Returns the array of lists<String> of bound identifiers
          * 
          * @return
          */
-        public List[] getBoundIdentifiers();
+        public List<String>[] getBoundIdentifiers();
 
         /**
          * Returns the list<String> of not bounded identifiers
          * 
          * @return
          */
-        public List getNotBoundedIdentifiers();
+        public List<String> getNotBoundedIdentifiers();
 
         /**
          * Returns the list<String> of declared local variables
          * 
          * @return
          */
-        public List getLocalVariables();
+        public List<String> getLocalVariables();
 
     }
 

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -132,7 +132,7 @@
 
     private CompositeClassLoader          rootClassLoader;
 
-    private Map<String, Class>            globals;
+    private Map<String, Class<?>>            globals;
 
     private Resource                      resource;
 
@@ -239,7 +239,7 @@
         this.pkgRegistryMap.put( pkg.getName(),
                                  pkgRegistry );
 
-        globals = new HashMap<String, Class>();
+        globals = new HashMap<String, Class<?>>();
     }
 
     public PackageBuilder(RuleBase ruleBase,
@@ -264,7 +264,7 @@
 
         this.ruleBase = (ReteooRuleBase) ruleBase;
 
-        globals = new HashMap<String, Class>();
+        globals = new HashMap<String, Class<?>>();
     }
 
     /**
@@ -799,7 +799,7 @@
                     } else {
                         pkg.addGlobal( identifier,
                                        this.rootClassLoader.loadClass( type ) );
-                        // this isn't a package merge, it's adding to the rulebase, but I've put it here for convienience
+                        // this isn't a package merge, it's adding to the rulebase, but I've put it here for convenience
                         this.globals.put( identifier,
                                           this.rootClassLoader.loadClass( type ) );
                     }
@@ -1278,7 +1278,7 @@
         return expander;
     }
 
-    public Map<String, Class> getGlobals() {
+    public Map<String, Class<?>> getGlobals() {
         return this.globals;
     }
 

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/EngineElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/EngineElementBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/EngineElementBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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;
+
+/**
+ * A markup interface for builders
+ * 
+ * @author etirelli
+ */
+public interface EngineElementBuilder {
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FunctionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FunctionBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FunctionBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -23,7 +23,7 @@
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.rule.Package;
 
-public interface FunctionBuilder {
+public interface FunctionBuilder extends EngineElementBuilder {
     public String build(final Package pkg,
                         final FunctionDescr functionDescr,
                         final TypeResolver typeResolver,

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -63,7 +63,7 @@
             final BaseDescr child = (BaseDescr) it.next();
 
             // gets corresponding builder
-            final RuleConditionBuilder builder = context.getDialect().getBuilder( child.getClass() );
+            final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( child.getClass() );
 
             if ( builder != null ) {
                 final RuleConditionElement element = builder.build( context,

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -18,8 +18,10 @@
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.drools.base.ClassObjectType;
@@ -151,7 +153,8 @@
         Pattern pattern;
         if ( patternDescr.getIdentifier() != null && !patternDescr.getIdentifier().equals( "" ) ) {
 
-            if ( context.getDeclarationResolver().isDuplicated(context.getRule(), patternDescr.getIdentifier() ) ) {
+            if ( context.getDeclarationResolver().isDuplicated( context.getRule(),
+                                                                patternDescr.getIdentifier() ) ) {
                 // This declaration already  exists, so throw an Exception
                 context.getErrors().add( new DescrBuildError( context.getParentDescr(),
                                                               patternDescr,
@@ -168,7 +171,7 @@
                 // make sure PatternExtractor is wired up to correct ClassObjectType and set as a target for rewiring
                 context.getPkg().getClassFieldAccessorStore().getClassObjectType( ((ClassObjectType) objectType),
                                                                                   (PatternExtractor) pattern.getDeclaration().getExtractor() );
-            }            
+            }
         } else {
             pattern = new Pattern( context.getNextPatternId(),
                                    0, // offset is 0 by default
@@ -181,7 +184,7 @@
             context.getPkg().getClassFieldAccessorStore().getClassObjectType( ((ClassObjectType) objectType),
                                                                               pattern );
         }
-        
+
         //context.getPkg().getClassFieldAccessorStore().get
 
         // adding the newly created pattern to the build stack
@@ -198,7 +201,7 @@
 
         if ( patternDescr.getSource() != null ) {
             // we have a pattern source, so build it
-            RuleConditionBuilder builder = context.getDialect().getBuilder( patternDescr.getSource().getClass() );
+            RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( patternDescr.getSource().getClass() );
 
             PatternSource source = (PatternSource) builder.build( context,
                                                                   patternDescr.getSource() );
@@ -211,7 +214,7 @@
                 SlidingWindowDescr swd = (SlidingWindowDescr) behaviorDescr;
                 SlidingTimeWindow window = new SlidingTimeWindow( swd.getLength() );
                 pattern.addBehavior( window );
-            } else if( Behavior.BehaviorType.LENGTH_WINDOW.matches( behaviorDescr.getType() ) ) {
+            } else if ( Behavior.BehaviorType.LENGTH_WINDOW.matches( behaviorDescr.getType() ) ) {
                 SlidingWindowDescr swd = (SlidingWindowDescr) behaviorDescr;
                 SlidingLengthWindow window = new SlidingLengthWindow( (int) swd.getLength() );
                 pattern.addBehavior( window );
@@ -366,7 +369,7 @@
             registerReadAccessor( context,
                                   pattern.getObjectType(),
                                   fieldName,
-                                  ( LiteralConstraint ) constraint );            
+                                  (LiteralConstraint) constraint );
             registerReadAccessor( context,
                                   pattern.getObjectType(),
                                   fieldName,
@@ -377,7 +380,7 @@
             registerReadAccessor( context,
                                   pattern.getObjectType(),
                                   fieldName,
-                                  (VariableRestriction) restriction );            
+                                  (VariableRestriction) restriction );
             registerReadAccessor( context,
                                   pattern.getObjectType(),
                                   fieldName,
@@ -388,7 +391,7 @@
             registerReadAccessor( context,
                                   pattern.getObjectType(),
                                   fieldName,
-                                  (ReturnValueConstraint) constraint );            
+                                  (ReturnValueConstraint) constraint );
             registerReadAccessor( context,
                                   pattern.getObjectType(),
                                   fieldName,
@@ -542,7 +545,8 @@
                        final Pattern pattern,
                        final FieldBindingDescr fieldBindingDescr) {
 
-        if ( context.getDeclarationResolver().isDuplicated(context.getRule(), fieldBindingDescr.getIdentifier() ) ) {
+        if ( context.getDeclarationResolver().isDuplicated( context.getRule(),
+                                                            fieldBindingDescr.getIdentifier() ) ) {
             // This declaration already  exists, so throw an Exception
             context.getErrors().add( new DescrBuildError( context.getParentDescr(),
                                                           fieldBindingDescr,
@@ -561,15 +565,19 @@
                                                                      true );
     }
 
+    @SuppressWarnings("unchecked")
     private void build(final RuleBuildContext context,
                        final Pattern pattern,
                        final PredicateDescr predicateDescr,
                        final AbstractCompositeConstraint container) {
 
+        Map<String, Class< ? >> declarations = getDeclarationsMap( context );
+        Map<String, Class< ? >> globals = context.getPackageBuilder().getGlobals();
+
         final Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
                                                                                         predicateDescr,
                                                                                         predicateDescr.getContent(),
-                                                                                        new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                        new Map[]{declarations, globals} );
 
         if ( analysis == null ) {
             // something bad happened
@@ -584,7 +592,8 @@
         final List tupleDeclarations = new ArrayList();
         final List factDeclarations = new ArrayList();
         for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-            final Declaration decl = context.getDeclarationResolver().getDeclaration(context.getRule(), (String) usedIdentifiers[0].get( i ) );
+            final Declaration decl = context.getDeclarationResolver().getDeclaration( context.getRule(),
+                                                                                      (String) usedIdentifiers[0].get( i ) );
             if ( decl.getPattern() == pattern ) {
                 factDeclarations.add( decl );
             } else {
@@ -626,6 +635,15 @@
 
     }
 
+    private Map<String, Class< ? >> getDeclarationsMap(final RuleBuildContext context) {
+        Map<String, Class< ? >> declarations = new HashMap<String, Class< ? >>();
+        for ( Map.Entry<String, Declaration> entry : context.getDeclarationResolver().getDeclarations( context.getRule() ).entrySet() ) {
+            declarations.put( entry.getKey(),
+                              entry.getValue().getExtractor().getExtractToClass() );
+        }
+        return declarations;
+    }
+
     /**
      * @param context
      * @param utils
@@ -729,7 +747,8 @@
             return null;
         }
 
-        Declaration declaration = context.getDeclarationResolver().getDeclaration(context.getRule(), variableRestrictionDescr.getIdentifier() );
+        Declaration declaration = context.getDeclarationResolver().getDeclaration( context.getRule(),
+                                                                                   variableRestrictionDescr.getIdentifier() );
 
         if ( declaration == null ) {
             // trying to create implicit declaration
@@ -749,9 +768,7 @@
         }
 
         Target right = getRightTarget( extractor );
-        Target left = ( declaration.isPatternDeclaration() && ! 
-                ( Date.class.isAssignableFrom( declaration.getExtractor().getExtractToClass() ) ||
-                Number.class.isAssignableFrom( declaration.getExtractor().getExtractToClass() ) ) )? Target.HANDLE : Target.FACT;
+        Target left = (declaration.isPatternDeclaration() && !(Date.class.isAssignableFrom( declaration.getExtractor().getExtractToClass() ) || Number.class.isAssignableFrom( declaration.getExtractor().getExtractToClass() ))) ? Target.HANDLE : Target.FACT;
         final Evaluator evaluator = getEvaluator( context,
                                                   variableRestrictionDescr,
                                                   extractor.getValueType(),
@@ -776,11 +793,10 @@
         FieldValue field = null;
         try {
             Object value = literalRestrictionDescr.getValue();
-            if( literalRestrictionDescr.getType() == LiteralRestrictionDescr.TYPE_STRING &&
-                context.getConfiguration().isProcessStringEscapes() ) {
+            if ( literalRestrictionDescr.getType() == LiteralRestrictionDescr.TYPE_STRING && context.getConfiguration().isProcessStringEscapes() ) {
                 value = StringUtils.unescapeJava( (String) value );
             }
-            
+
             field = FieldFactory.getFieldValue( value,
                                                 extractor.getValueType() );
         } catch ( final Exception e ) {
@@ -828,7 +844,8 @@
                                                          parts[1],
                                                          (Pattern) context.getBuildStack().peek() );
             } else {
-                final Declaration decl = context.getDeclarationResolver().getDeclaration(context.getRule(), parts[0] );
+                final Declaration decl = context.getDeclarationResolver().getDeclaration( context.getRule(),
+                                                                                          parts[0] );
                 // if a declaration exists, then it may be a variable direct property access, not an enum
                 if ( decl != null ) {
                     if ( decl.isPatternDeclaration() ) {
@@ -848,9 +865,7 @@
 
             if ( implicit != null ) {
                 Target right = getRightTarget( extractor );
-               Target left = ( implicit.isPatternDeclaration() && ! 
-                       ( Date.class.isAssignableFrom( implicit.getExtractor().getExtractToClass() ) ||
-                       Number.class.isAssignableFrom( implicit.getExtractor().getExtractToClass() ) ) )? Target.HANDLE : Target.FACT;
+                Target left = (implicit.isPatternDeclaration() && !(Date.class.isAssignableFrom( implicit.getExtractor().getExtractToClass() ) || Number.class.isAssignableFrom( implicit.getExtractor().getExtractToClass() ))) ? Target.HANDLE : Target.FACT;
                 final Evaluator evaluator = getEvaluator( context,
                                                           qiRestrictionDescr,
                                                           extractor.getValueType(),
@@ -903,7 +918,7 @@
                                                   qiRestrictionDescr.getEvaluator(),
                                                   qiRestrictionDescr.isNegated(),
                                                   qiRestrictionDescr.getParameterText(),
-                                                  left, 
+                                                  left,
                                                   right );
         if ( evaluator == null ) {
             return null;
@@ -915,8 +930,7 @@
     }
 
     private Target getRightTarget(final InternalReadAccessor extractor) {
-        Target right = ( extractor.isSelfReference() && ! ( Date.class.isAssignableFrom( extractor.getExtractToClass() ) ||
-                Number.class.isAssignableFrom( extractor.getExtractToClass() ) ) ) ? Target.HANDLE : Target.FACT;
+        Target right = (extractor.isSelfReference() && !(Date.class.isAssignableFrom( extractor.getExtractToClass() ) || Number.class.isAssignableFrom( extractor.getExtractToClass() ))) ? Target.HANDLE : Target.FACT;
         return right;
     }
 
@@ -925,16 +939,19 @@
                                                     final InternalReadAccessor extractor,
                                                     final FieldConstraintDescr fieldConstraintDescr,
                                                     final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
+        Map<String, Class< ? >> declarations = getDeclarationsMap( context );
+        Map<String, Class< ? >> globals = context.getPackageBuilder().getGlobals();
         Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
                                                                                   returnValueRestrictionDescr,
                                                                                   returnValueRestrictionDescr.getContent(),
-                                                                                  new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                  new Map[]{declarations, globals} );
         final List[] usedIdentifiers = analysis.getBoundIdentifiers();
 
         final List tupleDeclarations = new ArrayList();
         final List factDeclarations = new ArrayList();
         for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-            final Declaration declaration = context.getDeclarationResolver().getDeclaration(context.getRule(), (String) usedIdentifiers[0].get( i ) );
+            final Declaration declaration = context.getDeclarationResolver().getDeclaration( context.getRule(),
+                                                                                             (String) usedIdentifiers[0].get( i ) );
             if ( declaration.getPattern() == pattern ) {
                 factDeclarations.add( declaration );
             } else {
@@ -1037,7 +1054,7 @@
                                    final boolean isNegated,
                                    final String parameterText,
                                    final Target left,
-                                   final Target right ) {
+                                   final Target right) {
 
         final EvaluatorDefinition def = context.getConfiguration().getEvaluatorRegistry().getEvaluatorDefinition( evaluatorString );
         if ( def == null ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -15,7 +15,7 @@
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.ObjectType;
 
-public class QueryBuilder {
+public class QueryBuilder implements EngineElementBuilder {
     public Pattern build(final RuleBuildContext context,
                          final QueryDescr queryDescr) {
         ObjectType objectType = new ClassObjectType( DroolsQuery.class );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public interface RuleConditionBuilder {
+public interface RuleConditionBuilder extends EngineElementBuilder {
 
     public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr);    

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -65,7 +65,7 @@
             return null;
         }
 
-        final RuleConditionBuilder builder = context.getDialect().getBuilder( accumDescr.getInput().getClass() );
+        final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( accumDescr.getInput().getClass() );
 
         final RuleConditionElement source = builder.build( context,
                                                            accumDescr.getInput() );
@@ -82,7 +82,7 @@
             final JavaAnalysisResult analysis = (JavaAnalysisResult) context.getDialect().analyzeBlock( context,
                                                                                                         accumDescr,
                                                                                                         accumDescr.getExpression(),
-                                                                                                        new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                                        new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
 
             final List[] usedIdentifiers = analysis.getBoundIdentifiers();
 
@@ -126,24 +126,25 @@
             final String className = "Accumulate" + context.getNextId();
             accumDescr.setClassName( className );
 
+            Map<String,Class<?>>[] available = new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()};
             final JavaAnalysisResult initCodeAnalysis = (JavaAnalysisResult) context.getDialect().analyzeBlock( context,
                                                                                                                 accumDescr,
                                                                                                                 accumDescr.getInitCode(),
-                                                                                                                new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                                                available );
             final Dialect.AnalysisResult actionCodeAnalysis = context.getDialect().analyzeBlock( context,
                                                                                                  accumDescr,
                                                                                                  accumDescr.getActionCode(),
-                                                                                                 new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                                 available );
             final Dialect.AnalysisResult resultCodeAnalysis = context.getDialect().analyzeExpression( context,
                                                                                                       accumDescr,
                                                                                                       accumDescr.getResultCode(),
-                                                                                                      new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                                      available );
 
-            final Set requiredDeclarations = new HashSet( initCodeAnalysis.getBoundIdentifiers()[0] );
+            final Set<String> requiredDeclarations = new HashSet<String>( initCodeAnalysis.getBoundIdentifiers()[0] );
             requiredDeclarations.addAll( actionCodeAnalysis.getBoundIdentifiers()[0] );
             requiredDeclarations.addAll( resultCodeAnalysis.getBoundIdentifiers()[0] );
 
-            final Set requiredGlobals = new HashSet( initCodeAnalysis.getBoundIdentifiers()[1] );
+            final Set<String> requiredGlobals = new HashSet<String>( initCodeAnalysis.getBoundIdentifiers()[1] );
             requiredGlobals.addAll( actionCodeAnalysis.getBoundIdentifiers()[1] );
             requiredGlobals.addAll( resultCodeAnalysis.getBoundIdentifiers()[1] );
 
@@ -151,7 +152,7 @@
                 final Dialect.AnalysisResult reverseCodeAnalysis = context.getDialect().analyzeBlock( context,
                                                                                                       accumDescr,
                                                                                                       accumDescr.getActionCode(),
-                                                                                                      new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                                      available );
                 requiredDeclarations.addAll( reverseCodeAnalysis.getBoundIdentifiers()[0] );
                 requiredGlobals.addAll( reverseCodeAnalysis.getBoundIdentifiers()[1] );
             }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaActionBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -19,7 +19,6 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.compiler.Dialect;
 import org.drools.lang.descr.ActionDescr;
@@ -49,14 +48,14 @@
         Dialect.AnalysisResult analysis = dialect.analyzeBlock( context,
                                                                 actionDescr,
                                                                 actionDescr.getText(),
-                                                                new Set[]{Collections.EMPTY_SET, context.getPkg().getGlobals().keySet()} );
+                                                                new Map[]{Collections.EMPTY_MAP, context.getPackageBuilder().getGlobals()} );
 
         if ( analysis == null ) {
             // not possible to get the analysis results
             return;
         }
 
-        final List[] usedIdentifiers = analysis.getBoundIdentifiers();
+        final List<String>[] usedIdentifiers = analysis.getBoundIdentifiers();
 
 
         final Map map = createVariableContext( className,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAnalysisResult.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -32,42 +32,42 @@
  * @author etirelli
  */
 public class JavaAnalysisResult implements AnalysisResult {
-    private static final List[] EMPTY_ARRAY_OF_LISTS = new List[0];
+    private static final List<String>[] EMPTY_ARRAY_OF_LISTS = new List[0];
     
-    private List[] boundIdentifiers = EMPTY_ARRAY_OF_LISTS;
-    private List identifiers = Collections.EMPTY_LIST;
-    private Map localVariables = Collections.EMPTY_MAP;
-    private List notBoundedIdentifiers = Collections.EMPTY_LIST;
+    private List<String>[] boundIdentifiers = EMPTY_ARRAY_OF_LISTS;
+    private List<String> identifiers = Collections.emptyList();
+    private Map<String,JavaLocalDeclarationDescr> localVariables = Collections.emptyMap();
+    private List<String> notBoundedIdentifiers = Collections.emptyList();
     private List<JavaBlockDescr> blocks = Collections.emptyList();
     
-    public List[] getBoundIdentifiers() {
+    public List<String>[] getBoundIdentifiers() {
         return boundIdentifiers;
     }
-    public void setBoundIdentifiers(List[] boundIdentifiers) {
+    public void setBoundIdentifiers(List<String>[] boundIdentifiers) {
         this.boundIdentifiers = boundIdentifiers;
     }
-    public List getIdentifiers() {
+    public List<String> getIdentifiers() {
         return identifiers;
     }
-    public void setIdentifiers(List identifiers) {
+    public void setIdentifiers(List<String> identifiers) {
         this.identifiers = identifiers;
     }
-    public List getLocalVariables() {
-        return new ArrayList( localVariables.keySet() );
+    public List<String> getLocalVariables() {
+        return new ArrayList<String>( localVariables.keySet() );
     }
-    public Map getLocalVariablesMap() {
+    public Map<String,JavaLocalDeclarationDescr> getLocalVariablesMap() {
         return this.localVariables;
     }
-    public void setLocalVariables(Map localVariables) {
+    public void setLocalVariables(Map<String,JavaLocalDeclarationDescr> localVariables) {
         this.localVariables = localVariables;
     }
     public void addLocalVariable( String identifier, JavaLocalDeclarationDescr descr ) {
         this.localVariables.put( identifier, descr );
     }
-    public List getNotBoundedIdentifiers() {
+    public List<String> getNotBoundedIdentifiers() {
         return notBoundedIdentifiers;
     }
-    public void setNotBoundedIdentifiers(List notBoundedIdentifiers) {
+    public void setNotBoundedIdentifiers(List<String> notBoundedIdentifiers) {
         this.notBoundedIdentifiers = notBoundedIdentifiers;
     }
     public List<JavaBlockDescr> getBlockDescrs() {

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -19,9 +19,9 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -62,10 +62,11 @@
 
         final RuleDescr ruleDescr = context.getRuleDescr();
 
+        Map<String, Class< ? >> variables = context.getDeclarationResolver().getDeclarationClasses( context.getRule() );
         Dialect.AnalysisResult analysis = context.getDialect().analyzeBlock( context,
                                                                              ruleDescr,
                                                                              (String) ruleDescr.getConsequence(),
-                                                                             new Set[]{context.getDeclarationResolver().getDeclarations( context.getRule() ).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                             new Map[]{variables, context.getPackageBuilder().getGlobals()} );
 
         if ( analysis == null ) {
             // not possible to get the analysis results
@@ -207,11 +208,12 @@
                                MVELDialect mvel,
                                StringBuilder consequence,
                                JavaModifyBlockDescr d) {
+        Map<String, Class< ? >> variables = context.getDeclarationResolver().getDeclarationClasses( context.getRule() );
         Dialect.AnalysisResult mvelAnalysis = mvel.analyzeBlock( context,
                                                                  context.getRuleDescr(),
                                                                  mvel.getInterceptors(),
                                                                  d.getModifyExpression(),
-                                                                 new Set[]{context.getDeclarationResolver().getDeclarations( context.getRule() ).keySet(), context.getPkg().getGlobals().keySet()},
+                                                                 new Map[]{variables, context.getPackageBuilder().getGlobals()},
                                                                  null );
 
         final ExecutableStatement expr = (ExecutableStatement) mvel.compile( d.getModifyExpression(),

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -243,10 +243,9 @@
     public AnalysisResult analyzeExpression(final PackageBuildContext context,
                                             final BaseDescr descr,
                                             final Object content,
-                                            final Set[] availableIdentifiers) {
+                                            final Map<String,Class<?>>[] availableIdentifiers) {
         JavaAnalysisResult result = null;
         try {
-            //new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()}
             result = this.analyzer.analyzeExpression( (String) content,
                                                       availableIdentifiers );
         } catch ( final Exception e ) {
@@ -261,10 +260,9 @@
     public AnalysisResult analyzeBlock(final PackageBuildContext context,
                                        final BaseDescr descr,
                                        final String text,
-                                       final Set[] availableIdentifiers) {
+                                       final Map<String,Class<?>>[] availableIdentifiers) {
         JavaAnalysisResult result = null;
         try {
-            // new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} 
             result = this.analyzer.analyzeBlock( text,
                                                  availableIdentifiers );
         } catch ( final Exception e ) {

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -18,7 +18,6 @@
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.compiler.Dialect;
 import org.drools.lang.descr.BaseDescr;
@@ -68,7 +67,7 @@
         Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
                                                                                   evalDescr,
                                                                                   evalDescr.getContent(),
-                                                                                  new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                  new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
         final List[] usedIdentifiers = analysis.getBoundIdentifiers();
 
         final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzer.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -21,6 +21,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.antlr.runtime.ANTLRStringStream;
@@ -66,7 +67,7 @@
      *             If an error occurs in the parser.
      */
     public JavaAnalysisResult analyzeExpression(final String expr,
-                                            final Set[] availableIdentifiers) throws RecognitionException {
+                                                final Map<String,Class<?>>[] availableIdentifiers) throws RecognitionException {
         final CharStream charStream = new ANTLRStringStream( expr );
         final JavaLexer lexer = new JavaLexer( charStream );
         final TokenStream tokenStream = new CommonTokenStream( lexer );
@@ -81,7 +82,7 @@
     }
 
     public JavaAnalysisResult analyzeBlock(final String expr,
-                                       final Set[] availableIdentifiers) throws RecognitionException {
+                                       final Map<String,Class<?>>[] availableIdentifiers) throws RecognitionException {
         final CharStream charStream = new ANTLRStringStream( "{" + expr + "}" );
         final JavaLexer lexer = new JavaLexer( charStream );
         final TokenStream tokenStream = new CommonTokenStream( lexer );
@@ -91,7 +92,7 @@
 
         JavaAnalysisResult result = new JavaAnalysisResult();
         result.setIdentifiers( parser.getIdentifiers() );
-        result.setLocalVariables( new HashMap() );
+        result.setLocalVariables( new HashMap<String,JavaLocalDeclarationDescr>() );
         for( Iterator it = parser.getLocalDeclarations().iterator(); it.hasNext(); ) {
             JavaLocalDeclarationDescr descr = (JavaLocalDeclarationDescr) it.next();
             for( Iterator identIt = descr.getIdentifiers().iterator(); identIt.hasNext(); ) {
@@ -119,18 +120,16 @@
      *             If an error occurs in the parser.
      */
     private JavaAnalysisResult analyze(final JavaAnalysisResult result,
-                                   final Set[] availableIdentifiers) throws RecognitionException {
-        final List identifiers = result.getIdentifiers();
-        final Set notBound = new HashSet( identifiers );
-        final List[] used = new List[availableIdentifiers.length];
+                                   final Map<String,Class<?>>[] availableIdentifiers) throws RecognitionException {
+        final List<String> identifiers = result.getIdentifiers();
+        final Set<String> notBound = new HashSet<String>( identifiers );
+        final List<String>[] used = new List[availableIdentifiers.length];
         for ( int i = 0, length = used.length; i < length; i++ ) {
-            used[i] = new ArrayList();
+            used[i] = new ArrayList<String>();
         }
 
         for ( int i = 0, length = availableIdentifiers.length; i < length; i++ ) {
-            final Set set = availableIdentifiers[i];
-            for ( final Iterator it = set.iterator(); it.hasNext(); ) {
-                final String eachDecl = (String) it.next();
+            for ( final String eachDecl : availableIdentifiers[i].keySet() ) {
                 if ( identifiers.contains( eachDecl ) ) {
                     used[i].add( eachDecl );
                     notBound.remove( eachDecl );
@@ -138,7 +137,7 @@
             }
         }
         result.setBoundIdentifiers( used );
-        result.setNotBoundedIdentifiers( new ArrayList( notBound ) );
+        result.setNotBoundedIdentifiers( new ArrayList<String>( notBound ) );
 
         return result;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -19,7 +19,6 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.compiler.Dialect;
 import org.drools.compiler.ReturnValueDescr;
@@ -52,7 +51,7 @@
         Dialect.AnalysisResult analysis = dialect.analyzeBlock( context,
                                                                 descr,
                                                                 descr.getText(),
-                                                                new Set[]{Collections.EMPTY_SET, context.getPkg().getGlobals().keySet()} );
+                                                                new Map[]{Collections.EMPTY_MAP, context.getPackageBuilder().getGlobals()} );
 
         if ( analysis == null ) {
             // not possible to get the analysis results

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -16,7 +16,9 @@
 
 package org.drools.rule.builder.dialect.mvel;
 
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 import org.drools.base.accumulators.MVELAccumulatorFunctionExecutor;
@@ -64,10 +66,10 @@
                 return null;
             }
 
-            final RuleConditionBuilder builder = context.getDialect().getBuilder( accumDescr.getInput().getClass() );
+            final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( accumDescr.getInput().getClass() );
 
-            Declaration[] previousDeclarations = (  Declaration[] ) context.getDeclarationResolver().getDeclarations(context.getRule()).values().toArray( new Declaration[ context.getDeclarationResolver().getDeclarations(context.getRule()).size() ] );
-            
+            Declaration[] previousDeclarations = (Declaration[]) context.getDeclarationResolver().getDeclarations( context.getRule() ).values().toArray( new Declaration[context.getDeclarationResolver().getDeclarations( context.getRule() ).size()] );
+
             // create source CE
             final RuleConditionElement source = builder.build( context,
                                                                accumDescr.getInput() );
@@ -78,31 +80,19 @@
 
             MVELDialect dialect = (MVELDialect) context.getDialect();
 
-            final Declaration[] sourceDeclArr = (Declaration[]) source.getOuterDeclarations().values().toArray( new Declaration[ source.getOuterDeclarations().size() ] );
+            final Declaration[] sourceDeclArr = (Declaration[]) source.getOuterDeclarations().values().toArray( new Declaration[source.getOuterDeclarations().size()] );
 
             Accumulator accumulator = null;
             Declaration[] declarations = null;
 
             if ( accumDescr.isExternalFunction() ) {
                 // build an external function executor
+                Map<String, Class< ? >> declarationsMap = context.getDeclarationResolver().getDeclarationClasses( context.getRule() );
                 final Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
                                                                                    accumDescr,
                                                                                    accumDescr.getExpression(),
-                                                                                   new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                   new Map[]{declarationsMap, context.getPackageBuilder().getGlobals()} );
 
-                //            int size = analysis.getBoundIdentifiers()[0].size();
-                //            declarations = new Declaration[size];
-                //            for ( int i = 0; i < size; i++ ) {
-                //                declarations[i] = context.getDeclarationResolver().getDeclaration( (String) analysis.getBoundIdentifiers()[0].get( i ) );
-                //            }
-                //
-                //            final Serializable expression = dialect.compile( (String) accumDescr.getExpression(),
-                //                                                             analysis,
-                //                                                             null,
-                //                                                             source.getOuterDeclarations(),
-                //                                                             null,
-                //                                                             context );
-
                 MVELCompilationUnit unit = dialect.getMVELCompilationUnit( (String) accumDescr.getExpression(),
                                                                            analysis,
                                                                            previousDeclarations,
@@ -116,45 +106,41 @@
                                                                    function );
             } else {
                 // it is a custom accumulate
+                Map<String, Class< ? >> declarationsMap = context.getDeclarationResolver().getDeclarationClasses( context.getRule() );
                 final MVELAnalysisResult initCodeAnalysis = (MVELAnalysisResult) dialect.analyzeBlock( context,
                                                                                                        accumDescr,
                                                                                                        accumDescr.getInitCode(),
-                                                                                                       new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                                       new Map[]{declarationsMap, context.getPackageBuilder().getGlobals()} );
 
                 final MVELAnalysisResult actionCodeAnalysis = (MVELAnalysisResult) dialect.analyzeBlock( context,
                                                                                                          accumDescr,
                                                                                                          null,
                                                                                                          accumDescr.getActionCode(),
-                                                                                                         new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()},
+                                                                                                         new Map[]{declarationsMap, context.getPackageBuilder().getGlobals()},
                                                                                                          initCodeAnalysis.getMvelVariables() );
                 final MVELAnalysisResult resultCodeAnalysis = (MVELAnalysisResult) dialect.analyzeExpression( context,
                                                                                                               accumDescr,
                                                                                                               accumDescr.getResultCode(),
-                                                                                                              new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()},
+                                                                                                              new Map[]{declarationsMap, context.getPackageBuilder().getGlobals()},
                                                                                                               initCodeAnalysis.getMvelVariables() );
 
                 Dialect.AnalysisResult reverseCodeAnalysis = null;
                 if ( accumDescr.getReverseCode() != null ) {
-                    reverseCodeAnalysis = context.getDialect().analyzeBlock( context,
-                                                                             accumDescr,
-                                                                             accumDescr.getActionCode(),
-                                                                             new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                    reverseCodeAnalysis = dialect.analyzeBlock( context,
+                                                                accumDescr,
+                                                                null,
+                                                                accumDescr.getActionCode(),
+                                                                new Map[]{declarationsMap, context.getPackageBuilder().getGlobals()},
+                                                                initCodeAnalysis.getMvelVariables() );
                 }
-                    
+
                 MVELCompilationUnit initUnit = dialect.getMVELCompilationUnit( (String) accumDescr.getInitCode(),
                                                                                initCodeAnalysis,
                                                                                previousDeclarations,
                                                                                (Declaration[]) source.getOuterDeclarations().values().toArray( new Declaration[source.getOuterDeclarations().size()] ),
-                                                                               null, 
+                                                                               null,
                                                                                context );
 
-                //            final Serializable init = dialect.compile( (String) accumDescr.getInitCode(),
-                //                                                       initCodeAnalysis,
-                //                                                       null,
-                //                                                       source.getOuterDeclarations(),
-                //                                                       null,
-                //                                                       context );
-
                 MVELCompilationUnit actionUnit = dialect.getMVELCompilationUnit( (String) accumDescr.getActionCode(),
                                                                                  actionCodeAnalysis,
                                                                                  previousDeclarations,
@@ -162,14 +148,6 @@
                                                                                  initCodeAnalysis.getMvelVariables(),
                                                                                  context );
 
-                //            final Serializable action = dialect.compile( (String) accumDescr.getActionCode(),
-                //                                                         actionCodeAnalysis,
-                //                                                         null,
-                //                                                         source.getOuterDeclarations(),
-                //                                                         initCodeAnalysis.getMvelVariables(),
-                //                                                         context );
-
-                // Serializable reverse = null;
                 MVELCompilationUnit reverseUnit = null;
                 if ( accumDescr.getReverseCode() != null ) {
                     reverseUnit = dialect.getMVELCompilationUnit( (String) accumDescr.getReverseCode(),
@@ -178,13 +156,6 @@
                                                                   (Declaration[]) source.getOuterDeclarations().values().toArray( new Declaration[source.getOuterDeclarations().size()] ),
                                                                   initCodeAnalysis.getMvelVariables(),
                                                                   context );
-
-                    //                reverse = dialect.compile( (String) accumDescr.getReverseCode(),
-                    //                                           resultCodeAnalysis,
-                    //                                           null,
-                    //                                           source.getOuterDeclarations(),
-                    //                                           initCodeAnalysis.getMvelVariables(),
-                    //                                           context );
                 }
 
                 MVELCompilationUnit resultUnit = dialect.getMVELCompilationUnit( (String) accumDescr.getResultCode(),
@@ -194,36 +165,14 @@
                                                                                  initCodeAnalysis.getMvelVariables(),
                                                                                  context );
 
-                //            final Serializable result = dialect.compile( (String) accumDescr.getResultCode(),
-                //                                                         resultCodeAnalysis,
-                //                                                         null,
-                //                                                         source.getOuterDeclarations(),
-                //                                                         initCodeAnalysis.getMvelVariables(),
-                //                                                         context );
-
-                //DroolsMVELFactory factory = null;
-                if ( reverseUnit == null ) {
-                    //                // does not support reverse, so create a regular factory
-                    //                factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
-                    //                                                 source.getOuterDeclarations(),
-                    //                                                 context.getPkg().getGlobals() );
-                } else {
+                if ( reverseUnit != null ) {
                     Set<String> shadow = new HashSet<String>( source.getOuterDeclarations().keySet() );
                     shadow.retainAll( reverseCodeAnalysis.getNotBoundedIdentifiers() );
                     shadow.addAll( reverseCodeAnalysis.getBoundIdentifiers()[0] );
 
                     reverseUnit.setShadowIdentifiers( (String[]) shadow.toArray( new String[shadow.size()] ) );
-
-                    // supports reverse, so create a shadowing factory
-                    //                factory = new DroolsMVELShadowFactory( context.getDeclarationResolver().getDeclarations(),
-                    //                                                       source.getOuterDeclarations(),
-                    //                                                       context.getPkg().getGlobals(),
-                    //                                                       ( String[] ) shadow.toArray( new String[ shadow.size() ] ) );
                 }
 
-                //            MVELDialectRuntimeData data = (MVELDialectRuntimeData) context.getPkg().getDialectRuntimeRegistry().getDialectData( "mvel" );
-                //            factory.setNextFactory( data.getFunctionFactory() );
-
                 accumulator = new MVELAccumulator( initUnit,
                                                    actionUnit,
                                                    reverseUnit,
@@ -252,4 +201,5 @@
             return null;
         }
     }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELActionBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -78,23 +78,18 @@
         try {
             MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
 
-            Set<String> variables = new HashSet<String>();
-            variables.add("context");
-            variables.add("kcontext");
-            variables.add("drools");
+            Map<String, Class<?>> variables = new HashMap<String,Class<?>>();
+            variables.put("context", ProcessContext.class);
+            variables.put("kcontext", org.drools.runtime.process.ProcessContext.class);
+            variables.put("drools", KnowledgeHelper.class);
             Dialect.AnalysisResult analysis = dialect.analyzeBlock( context,
                                                                     actionDescr,
                                                                     dialect.getInterceptors(),
                                                                     text,
-                                                                    new Set[]{variables, context.getPkg().getGlobals().keySet()},
+                                                                    new Map[]{variables, context.getPackageBuilder().getGlobals()},
                                                                     null );                       
 
 
-            Map<String, Class> variableClasses = new HashMap<String, Class>();
-            variableClasses.put("context", ProcessContext.class);
-            variableClasses.put("kcontext", org.drools.runtime.process.ProcessContext.class);
-            variableClasses.put("drools", KnowledgeHelper.class);
-
             List<String> variableNames = analysis.getNotBoundedIdentifiers();
             if (contextResolver != null) {
 	            for (String variableName: variableNames) {
@@ -107,7 +102,7 @@
 	                            null,
 	                            "Could not find variable '" + variableName + "' for action '" + actionDescr.getText() + "'" ) );            		
 	            	} else {
-	            		variableClasses.put(variableName,
+	            		variables.put(variableName,
             				context.getDialect().getTypeResolver().resolveType(
         						variableScope.findVariable(variableName).getType().getStringType()));
 	            	}
@@ -118,7 +113,7 @@
                                                                        analysis,
                                                                        null,
                                                                        null,
-                                                                       variableClasses,
+                                                                       variables,
                                                                        context );              
             MVELAction expr = new MVELAction( unit, context.getDialect().getId() );
             expr.setVariableNames(variableNames);

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -2,7 +2,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELConsequence;
@@ -86,7 +85,7 @@
                                                                     context.getRuleDescr(),
                                                                     dialect.getInterceptors(),
                                                                     text,
-                                                                    new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()},
+                                                                    new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()},
                                                                     null );
             
             Declaration[] previousDeclarations = (Declaration[]) context.getDeclarationResolver().getDeclarations(context.getRule()).values().toArray( new Declaration[context.getDeclarationResolver().getDeclarations(context.getRule()).size()] );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -12,7 +12,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
 
 import org.drools.base.ModifyInterceptor;
@@ -51,6 +50,7 @@
 import org.drools.rule.builder.CollectBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.EnabledBuilder;
+import org.drools.rule.builder.EngineElementBuilder;
 import org.drools.rule.builder.EntryPointBuilder;
 import org.drools.rule.builder.ForallBuilder;
 import org.drools.rule.builder.FromBuilder;
@@ -108,7 +108,7 @@
     protected static final GroupElementBuilder             GE_BUILDER                     = new GroupElementBuilder();
 
     // a map of registered builders
-    private static Map                                     builders;
+    private static Map<Class< ? >, EngineElementBuilder>   builders;
 
     static {
         initBuilder();
@@ -135,7 +135,7 @@
 
     private boolean                                        strictMode;
     private int                                            languageLevel;
-    public static final Object                             COMPILER_LOCK                  = new Object();    
+    public static final Object                             COMPILER_LOCK                  = new Object();
 
     public MVELDialect(PackageBuilder builder,
                        PackageRegistry pkgRegistry,
@@ -160,9 +160,9 @@
 
         this.imports = new HashMap();
         this.packageImports = new HashMap();
-        
+
         // setting MVEL option directly
-        MVEL.COMPILER_OPT_ALLOW_NAKED_METH_CALL = true;        
+        MVEL.COMPILER_OPT_ALLOW_NAKED_METH_CALL = true;
 
         this.interceptors = new HashMap( 1 );
         this.interceptors.put( "Modify",
@@ -243,7 +243,7 @@
         // statically adding all builders to the map
         // but in the future we can move that to a configuration
         // if we want to
-        builders = new HashMap();
+        builders = new HashMap<Class< ? >, EngineElementBuilder>();
 
         builders.put( AndDescr.class,
                       GE_BUILDER );
@@ -437,10 +437,10 @@
     public void compileAll() {
     }
 
-    public Dialect.AnalysisResult analyzeExpression(PackageBuildContext context,
-                                                    BaseDescr descr,
-                                                    Object content,
-                                                    final Set[] availableIdentifiers) {
+    public Dialect.AnalysisResult analyzeExpression(final PackageBuildContext context,
+                                                    final BaseDescr descr,
+                                                    final Object content,
+                                                    final Map<String, Class< ? >>[] availableIdentifiers) {
         return analyzeExpression( context,
                                   descr,
                                   content,
@@ -448,21 +448,18 @@
                                   null );
     }
 
-    public Dialect.AnalysisResult analyzeExpression(PackageBuildContext context,
-                                                    BaseDescr descr,
-                                                    Object content,
-                                                    final Set[] availableIdentifiers,
-                                                    Map localTypes) {
-        // new
-        // Set[]{context.getDeclarationResolver().getDeclarations().keySet(),
-        // context.getPkg().getGlobals().keySet()},
+    public Dialect.AnalysisResult analyzeExpression(final PackageBuildContext context,
+                                                    final BaseDescr descr,
+                                                    final Object content,
+                                                    final Map<String, Class< ? >>[] availableIdentifiers,
+                                                    final Map<String, Class< ? >> localTypes) {
 
         Dialect.AnalysisResult result = null;
         try {
-            result = this.analyzer.analyzeExpression( context,
-                                                      (String) content,
-                                                      availableIdentifiers,
-                                                      localTypes );
+            result = analyzer.analyzeExpression( context,
+                                                 (String) content,
+                                                 availableIdentifiers,
+                                                 localTypes );
         } catch ( final Exception e ) {
             context.getErrors().add( new DescrBuildError( context.getParentDescr(),
                                                           descr,
@@ -472,10 +469,10 @@
         return result;
     }
 
-    public Dialect.AnalysisResult analyzeBlock(PackageBuildContext context,
-                                               BaseDescr descr,
-                                               String text,
-                                               final Set[] availableIdentifiers) {
+    public Dialect.AnalysisResult analyzeBlock(final PackageBuildContext context,
+                                               final BaseDescr descr,
+                                               final String text,
+                                               final Map<String, Class< ? >>[] availableIdentifiers) {
         return analyzeBlock( context,
                              descr,
                              null,
@@ -484,21 +481,18 @@
                              null );
     }
 
-    public Dialect.AnalysisResult analyzeBlock(PackageBuildContext context,
-                                               BaseDescr descr,
-                                               Map interceptors,
-                                               String text,
-                                               final Set[] availableIdentifiers,
-                                               Map localTypes) {
-        // new
-        // Set[]{context.getDeclarationResolver().getDeclarations().keySet(),
-        // context.getPkg().getGlobals().keySet()}
+    public Dialect.AnalysisResult analyzeBlock(final PackageBuildContext context,
+                                               final BaseDescr descr,
+                                               final Map interceptors,
+                                               final String text,
+                                               final Map<String, Class< ? >>[] availableIdentifiers,
+                                               final Map<String, Class< ? >> localTypes) {
 
         Dialect.AnalysisResult result = null;
-        result = this.analyzer.analyzeExpression( context,
-                                                  text,
-                                                  availableIdentifiers,
-                                                  localTypes );
+        result = analyzer.analyzeExpression( context,
+                                             text,
+                                             availableIdentifiers,
+                                             localTypes );
         return result;
     }
 
@@ -533,7 +527,7 @@
                                                       final Dialect.AnalysisResult analysis,
                                                       final Declaration[] previousDeclarations,
                                                       final Declaration[] localDeclarations,
-                                                      final Map<String, Class> otherInputVariables,
+                                                      final Map<String, Class<?>> otherInputVariables,
                                                       final PackageBuildContext context) {
         String[] pkgImports = new String[this.packageImports.size()];
         int i = 0;
@@ -576,16 +570,16 @@
                                     (Class) globalTypes.get( identifier ) );
             }
 
-//            // @TODO yuck, we don't want conditions for configuration :(
-//            if ( context instanceof RuleBuildContext ) {
-//                DeclarationScopeResolver resolver = ((RuleBuildContext) context).getDeclarationResolver();
-//                for ( Iterator it = list[0].iterator(); it.hasNext(); ) {
-//                    String identifier = (String) it.next();
-//                    Class cls = resolver.getDeclaration( identifier ).getExtractor().getExtractToClass();
-//                    resolvedInputs.put( identifier,
-//                                        cls );
-//                }
-//            }
+            //            // @TODO yuck, we don't want conditions for configuration :(
+            //            if ( context instanceof RuleBuildContext ) {
+            //                DeclarationScopeResolver resolver = ((RuleBuildContext) context).getDeclarationResolver();
+            //                for ( Iterator it = list[0].iterator(); it.hasNext(); ) {
+            //                    String identifier = (String) it.next();
+            //                    Class cls = resolver.getDeclaration( identifier ).getExtractor().getExtractToClass();
+            //                    resolvedInputs.put( identifier,
+            //                                        cls );
+            //                }
+            //            }
 
             // Set<String> usedIdentifiers = new HashSet<String>( list[0] );
 
@@ -634,7 +628,7 @@
         String name;
         if ( context != null && context.getPkg() != null & context.getPkg().getName() != null ) {
             if ( context instanceof RuleBuildContext ) {
-                name = context.getPkg().getName() + "." + ((RuleBuildContext)context).getRuleDescr().getClassName();
+                name = context.getPkg().getName() + "." + ((RuleBuildContext) context).getRuleDescr().getClassName();
             } else {
                 name = context.getPkg().getName() + ".Unknown";
             }
@@ -667,7 +661,7 @@
         String name;
         if ( context != null && context.getPkg() != null & context.getPkg().getName() != null ) {
             if ( context instanceof RuleBuildContext ) {
-                name = context.getPkg().getName() + "." + ((RuleBuildContext)context).getRuleDescr().getClassName();
+                name = context.getPkg().getName() + "." + ((RuleBuildContext) context).getRuleDescr().getClassName();
             } else {
                 name = context.getPkg().getName() + ".Unknown";
             }
@@ -703,7 +697,8 @@
                 DeclarationScopeResolver resolver = ((RuleBuildContext) context).getDeclarationResolver();
                 for ( Iterator it = list[0].iterator(); it.hasNext(); ) {
                     String identifier = (String) it.next();
-                    Class cls = resolver.getDeclaration(null, identifier ).getExtractor().getExtractToClass();
+                    Class cls = resolver.getDeclaration( null,
+                                                         identifier ).getExtractor().getExtractToClass();
                     parserContext.addInput( identifier,
                                             cls );
                 }
@@ -735,19 +730,19 @@
             parserContext.addInput( "drools",
                                     KnowledgeHelper.class );
             if ( parserContext.getInputs().get( "kcontext" ) == null ) {
-            	parserContext.addInput( "kcontext",
-            							RuleContext.class );
+                parserContext.addInput( "kcontext",
+                                        RuleContext.class );
             }
         }
 
         return parserContext;
     }
 
-    public RuleConditionBuilder getBuilder(final Class clazz) {
-        return (RuleConditionBuilder) this.builders.get( clazz );
+    public EngineElementBuilder getBuilder(final Class< ? > clazz) {
+        return this.builders.get( clazz );
     }
 
-    public Map getBuilders() {
+    public Map<Class< ? >, EngineElementBuilder> getBuilders() {
         return this.builders;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEnabledBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEnabledBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEnabledBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -2,7 +2,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELEnabledExpression;
@@ -25,14 +24,15 @@
             // This builder is re-usable in other dialects, so specify by name            
             MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
 
-            Map<String,Class> otherVars = new HashMap<String, Class>();
+            Map<String,Class<?>> otherVars = new HashMap<String, Class<?>>();
             otherVars.put( "rule", org.drools.rule.Rule.class );
 
             Map<String, Declaration> declarations = context.getDeclarationResolver().getDeclarations(context.getRule());
+            Map<String, Class<?>>[] available = new Map[]{ context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()};
             Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
                                                                          context.getRuleDescr(),
                                                                          (String) context.getRuleDescr().getEnabled(),
-                                                                         new Set[]{declarations.keySet(), context.getPkg().getGlobals().keySet()},
+                                                                         available,
                                                                          otherVars );
 
             Declaration[] previousDeclarations = (Declaration[]) declarations.values().toArray( new Declaration[declarations.size()] );

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -16,7 +16,7 @@
 
 package org.drools.rule.builder.dialect.mvel;
 
-import java.util.Set;
+import java.util.Map;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELEvalExpression;
@@ -69,7 +69,7 @@
             Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
                                                                                       evalDescr,
                                                                                       evalDescr.getContent(),
-                                                                                      new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                      new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
 
             Declaration[] previousDeclarations = (Declaration[]) context.getDeclarationResolver().getDeclarations(context.getRule()).values().toArray( new Declaration[context.getDeclarationResolver().getDeclarations(context.getRule()).size()] );
             MVELCompilationUnit unit = dialect.getMVELCompilationUnit( (String) evalDescr.getContent(),

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -17,16 +17,17 @@
  */
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.antlr.runtime.RecognitionException;
 import org.drools.rule.builder.PackageBuildContext;
+import org.mvel2.ParserConfiguration;
 import org.mvel2.ParserContext;
 import org.mvel2.compiler.ExpressionCompiler;
 
@@ -58,48 +59,64 @@
      */
     public MVELAnalysisResult analyzeExpression(final PackageBuildContext context,
                                                 final String expr,
-                                                final Set[] availableIdentifiers,
-                                                final Map localTypes) {
+                                                final Map<String, Class<?>>[] availableIdentifiers,
+                                                final Map<String, Class<?>> localTypes) {
         MVELAnalysisResult result = null;
         if ( expr.trim().length() > 0 ) {
-            ExpressionCompiler compiler = new ExpressionCompiler( expr );
-
             MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
-
-            // @todo proper source file name
-            final ParserContext parserContext = new ParserContext( dialect.getImports(),
-                                                                   null,
-                                                                   "xxx" ); //context.getPkg().getName() + "." + context.getRuleDescr().getClassName() );
-            parserContext.getParserConfiguration().setClassLoader( context.getPackageBuilder().getRootClassLoader() );
-
+            
+            // creating a reusable parser configuration
+            ParserConfiguration conf = new ParserConfiguration();
+            conf.addAllImports( dialect.getImports() );
             if ( dialect.getPackgeImports() != null && !dialect.getPackgeImports().isEmpty() ) {
-	            for ( Iterator it = dialect.getPackgeImports().values().iterator(); it.hasNext(); ) {
-	                String packageImport = (String) it.next();
-	                parserContext.addPackageImport( packageImport );
-	            }
+                for ( String packageImport : ((Collection<String>) dialect.getPackgeImports().values()) ) {
+                    conf.addPackageImport( packageImport );
+                }
             }
+            conf.setClassLoader( context.getPackageBuilder().getRootClassLoader() );
             
-            parserContext.setStrictTypeEnforcement( false );
+            // first compilation is for verification only
 
-            parserContext.setInterceptors( dialect.getInterceptors() );
+            // @todo proper source file name
+            final ParserContext parserContext1 = new ParserContext( conf ); 
+            parserContext1.setStrictTypeEnforcement( false );
+            parserContext1.setInterceptors( dialect.getInterceptors() );
+            ExpressionCompiler compiler1 = new ExpressionCompiler( expr );
+            compiler1.setVerifyOnly( true );
+            compiler1.compile( parserContext1 );
+
+            Set<String> requiredInputs = compiler1.getParserContextState().getInputs().keySet();
             
-            compiler.compile( parserContext );
+            // now, set the required input types and compile again
+            final ParserContext parserContext2 = new ParserContext( conf ); 
+            parserContext2.setStrictTypeEnforcement( false );
+            parserContext2.setInterceptors( dialect.getInterceptors() );
+            for( Map<String,Class<?>> map : availableIdentifiers ) {
+                for( Map.Entry<String, Class<?>> entry : map.entrySet() ) {
+                    if( requiredInputs.contains( entry.getKey() ) ) {
+                        parserContext2.addInput( entry.getKey(), entry.getValue() );
+                    }
+                }
+            }
+            ExpressionCompiler compiler2 = new ExpressionCompiler( expr );
+            compiler2.setVerifyOnly( true );
+            compiler2.compile( parserContext2 );
             
-            result = analyze( compiler.getParserContextState().getInputs().keySet(),
+            result = analyze( compiler2.getParserContextState().getInputs().keySet(),
                               availableIdentifiers );
 
-            result.setMvelVariables( compiler.getParserContextState().getVariables() );
+            result.setMvelVariables( compiler2.getParserContextState().getVariables() );
         } else {
-            result = analyze( Collections.EMPTY_SET,
+            result = analyze( (Set<String>) Collections.EMPTY_SET,
                               availableIdentifiers );
-            result.setMvelVariables( new HashMap() );
+            result.setMvelVariables( new HashMap<String,Class<?>>() );
 
         }
         return result;
     }
 
     /**
-     * Analyze an expression.
+     * Analyse an expression.
      * 
      * @param availDecls
      *            Total set of declarations available.
@@ -111,30 +128,30 @@
      * @throws RecognitionException
      *             If an error occurs in the parser.
      */
-    private MVELAnalysisResult analyze(final Set identifiers,
-                                       final Set[] availableIdentifiers) {
+    @SuppressWarnings("unchecked")
+    private MVELAnalysisResult analyze(final Set<String> identifiers,
+                                       final Map<String, Class<?>>[] availableIdentifiers) {
 
         MVELAnalysisResult result = new MVELAnalysisResult();
-        result.setIdentifiers( new ArrayList( identifiers ) );
+        result.setIdentifiers( new ArrayList<String>( identifiers ) );
 
-        final Set notBound = new HashSet( identifiers );
-        final List[] used = new List[availableIdentifiers.length];
+        final Set<String> notBound = new HashSet<String>( identifiers );
+        final List<String>[] used = new List[availableIdentifiers.length];
         for ( int i = 0, length = used.length; i < length; i++ ) {
-            used[i] = new ArrayList();
+            used[i] = new ArrayList<String>();
         }
 
         for ( int i = 0, length = availableIdentifiers.length; i < length; i++ ) {
-            final Set set = availableIdentifiers[i];
-            for ( final Iterator it = set.iterator(); it.hasNext(); ) {
-                final String eachDecl = (String) it.next();
-                if ( identifiers.contains( eachDecl ) ) {
-                    used[i].add( eachDecl );
-                    notBound.remove( eachDecl );
+            final Set<String> set = availableIdentifiers[i].keySet();
+            for ( final String decl : set ) {
+                if ( identifiers.contains( decl ) ) {
+                    used[i].add( decl );
+                    notBound.remove( decl );
                 }
             }
         }
         result.setBoundIdentifiers( used );
-        result.setNotBoundedIdentifiers( new ArrayList( notBound ) );
+        result.setNotBoundedIdentifiers( new ArrayList<String>( notBound ) );
 
         return result;
     }

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -16,6 +16,7 @@
 
 package org.drools.rule.builder.dialect.mvel;
 
+import java.util.Map;
 import java.util.Set;
 
 import org.drools.base.dataproviders.MVELDataProvider;
@@ -64,7 +65,7 @@
             Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
                                                                          descr,
                                                                          text,
-                                                                         new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                         new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
 
             Declaration[] previousDeclarations = (Declaration[]) context.getDeclarationResolver().getDeclarations(context.getRule()).values().toArray( new Declaration[context.getDeclarationResolver().getDeclarations(context.getRule()).size()] );
             MVELCompilationUnit unit = dialect.getMVELCompilationUnit( text,

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -17,7 +17,7 @@
 package org.drools.rule.builder.dialect.mvel;
 
 import java.util.List;
-import java.util.Set;
+import java.util.Map;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELPredicateExpression;
@@ -50,7 +50,7 @@
             Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
                                                                                       predicateDescr,
                                                                                       predicateDescr.getContent(),
-                                                                                      new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                      new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
 
             MVELCompilationUnit unit = dialect.getMVELCompilationUnit((String) predicateDescr.getContent(), analysis,  previousDeclarations, localDeclarations, null, context);
 

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	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -17,7 +17,7 @@
 package org.drools.rule.builder.dialect.mvel;
 
 import java.util.List;
-import java.util.Set;
+import java.util.Map;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELReturnValueExpression;
@@ -51,7 +51,8 @@
             Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
                                                                                       returnValueRestrictionDescr,
                                                                                       returnValueRestrictionDescr.getContent(),
-                                                                                      new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                                      new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
+
     
             MVELCompilationUnit unit = dialect.getMVELCompilationUnit((String) returnValueRestrictionDescr.getContent(), analysis,  previousDeclarations, localDeclarations, null, context);
     

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -4,7 +4,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELReturnValueEvaluator;
@@ -40,10 +39,10 @@
                                                                     descr,
                                                                     dialect.getInterceptors(),
                                                                     text,
-                                                                    new Set[]{Collections.EMPTY_SET, context.getPkg().getGlobals().keySet()},
+                                                                    new Map[]{Collections.EMPTY_MAP, context.getPackageBuilder().getGlobals()},
                                                                     null );         
 
-            Map<String, Class> variableClasses = new HashMap<String, Class>();
+            Map<String, Class<?>> variableClasses = new HashMap<String, Class<?>>();
             List<String> variableNames = analysis.getNotBoundedIdentifiers();
             if (contextResolver != null) {
 	            for (String variableName: variableNames) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -1,6 +1,6 @@
 package org.drools.rule.builder.dialect.mvel;
 
-import java.util.Set;
+import java.util.Map;
 
 import org.drools.base.mvel.MVELCompilationUnit;
 import org.drools.base.mvel.MVELSalienceExpression;
@@ -26,7 +26,7 @@
             Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
                                                                          context.getRuleDescr(),
                                                                          (String) context.getRuleDescr().getSalience(),
-                                                                         new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()} );
+                                                                         new Map[]{context.getDeclarationResolver().getDeclarationClasses(context.getRule()), context.getPackageBuilder().getGlobals()} );
 
             Declaration[] previousDeclarations = (Declaration[]) context.getDeclarationResolver().getDeclarations(context.getRule()).values().toArray( new Declaration[context.getDeclarationResolver().getDeclarations(context.getRule()).size()] );
             MVELCompilationUnit unit = dialect.getMVELCompilationUnit( (String) context.getRuleDescr().getSalience(),

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderConfigurationTest.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -312,7 +312,7 @@
         public AnalysisResult analyzeBlock(PackageBuildContext context,
                                            BaseDescr descr,
                                            String text,
-                                           Set[] availableIdentifiers) {
+                                           Map[] availableIdentifiers) {
             // TODO Auto-generated method stub
             return null;
         }
@@ -320,7 +320,7 @@
         public AnalysisResult analyzeExpression(PackageBuildContext context,
                                                 BaseDescr descr,
                                                 Object content,
-                                                Set[] availableIdentifiers) {
+                                                Map[] availableIdentifiers) {
             // TODO Auto-generated method stub
             return null;
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -6,19 +6,14 @@
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 
-import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
 import org.drools.StatefulSession;
-import org.drools.common.InternalWorkingMemory;
 import org.drools.impl.EnvironmentFactory;
-import org.drools.impl.KnowledgeBaseImpl;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.marshalling.Marshaller;
 import org.drools.marshalling.MarshallerFactory;
 import org.drools.marshalling.ObjectMarshallingStrategy;
-import org.drools.marshalling.impl.DefaultMarshaller;
-import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.util.DroolsStreamUtils;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -1,5 +1,6 @@
 package org.drools.rule.builder.dialect.java;
 
+import java.util.Map;
 import java.util.Set;
 
 import junit.framework.TestCase;
@@ -72,19 +73,19 @@
         
         String code = "int x = 0;";
         String expected = "x = 0;";
-        JavaAnalysisResult analysis = analyzer.analyzeBlock( code, new Set[0]);
+        JavaAnalysisResult analysis = analyzer.analyzeBlock( code, new Map[0]);
         String result = builder.fixInitCode( analysis, code );
         assertEquals( expected, result );
         
         code = "$anExternalVar.method(); \nint aVar = 0, anotherVar=10    ;Integer bla = new Integer( 25);functionCall();\n";
         expected = "$anExternalVar.method(); \naVar = 0;anotherVar=10;bla = new Integer( 25);functionCall();\n";;
-        analysis = analyzer.analyzeBlock( code, new Set[0]);
+        analysis = analyzer.analyzeBlock( code, new Map[0]);
         result = builder.fixInitCode( analysis, code );
         assertEquals( expected, result );
         
         code = "$anExternalVar.method(); String[] aVar = new String[] { \"a\", \"b\" }, anotherVar=new String[] { someStringVar }  ;final Integer bla = new Integer( 25);functionCall();\n";
         expected = "$anExternalVar.method(); aVar = new String[] { \"a\", \"b\" };anotherVar=new String[] { someStringVar };bla = new Integer( 25);functionCall();\n";
-        analysis = analyzer.analyzeBlock( code, new Set[0]);
+        analysis = analyzer.analyzeBlock( code, new Map[0]);
         result = builder.fixInitCode( analysis, code );
         assertEquals( expected, result );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilderTest.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilderTest.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -1,5 +1,6 @@
 package org.drools.rule.builder.dialect.java;
 
+import java.util.Map;
 import java.util.Set;
 
 import junit.framework.TestCase;
@@ -66,7 +67,7 @@
         try {
             JavaExprAnalyzer analyzer = new JavaExprAnalyzer();
             JavaAnalysisResult analysis = (JavaAnalysisResult) analyzer.analyzeBlock( (String) ruleDescr.getConsequence(),
-                                                                                      new Set[]{} );
+                                                                                      new Map[]{} );
 
             String fixed = builder.fixBlockDescr( context,
                                                   analysis,
@@ -97,7 +98,7 @@
         try {
             JavaExprAnalyzer analyzer = new JavaExprAnalyzer();
             JavaAnalysisResult analysis = (JavaAnalysisResult) analyzer.analyzeBlock( (String) ruleDescr.getConsequence(),
-                                                                                      new Set[]{} );
+                                                                                      new Map[]{} );
 
             String fixed = builder.fixBlockDescr( context,
                                                   analysis,
@@ -128,7 +129,7 @@
         try {
             JavaExprAnalyzer analyzer = new JavaExprAnalyzer();
             JavaAnalysisResult analysis = (JavaAnalysisResult) analyzer.analyzeBlock( (String) ruleDescr.getConsequence(),
-                                                                                      new Set[]{} );
+                                                                                      new Map[]{} );
 
             String fixed = builder.fixBlockDescr( context,
                                                   analysis,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzerTest.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaExprAnalyzerTest.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -18,6 +18,7 @@
 package org.drools.rule.builder.dialect.java;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import junit.framework.TestCase;
@@ -60,7 +61,7 @@
                            "double thisIsAGoodVar = 0;\n" +
                            "method();\n";
         try {
-            JavaAnalysisResult analysis = analyzer.analyzeBlock( codeBlock, new Set[0] );
+            JavaAnalysisResult analysis = analyzer.analyzeBlock( codeBlock, new Map[0] );
             List vars = analysis.getLocalVariables();
             
             assertEquals( 3, vars.size() );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -19,7 +19,6 @@
 import java.io.ByteArrayOutputStream;
 import java.io.Externalizable;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.ObjectInput;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
@@ -46,7 +45,6 @@
 import org.drools.event.RuleBaseEventListener;
 import org.drools.event.RuleBaseEventSupport;
 import org.drools.impl.EnvironmentFactory;
-import org.drools.marshalling.Marshaller;
 import org.drools.process.core.Process;
 import org.drools.rule.CompositeClassLoader;
 import org.drools.rule.DialectRuntimeRegistry;
@@ -246,7 +244,7 @@
         this.config = (RuleBaseConfiguration) droolsStream.readObject();
         this.config.setClassLoader( droolsStream.getParentClassLoader() );
         
-        this.pkgs = (Map) droolsStream.readObject();
+        this.pkgs = (Map<String, Package>) droolsStream.readObject();
 
 
         for ( final Object object : this.pkgs.values() ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -64,18 +64,18 @@
     /**
      *
      */
-    private static final long                 serialVersionUID = 400L;
+    private static final long           serialVersionUID = 400L;
 
     /** The RuleBase */
-    private transient InternalRuleBase        ruleBase;
+    private transient InternalRuleBase  ruleBase;
 
-    private Map                               rules;
+    private Map<Rule, BaseNode[]>       rules;
 
-    private transient ReteooRuleBuilder       ruleBuilder;
+    private transient ReteooRuleBuilder ruleBuilder;
 
-    private IdGenerator                       idGenerator;
+    private IdGenerator                 idGenerator;
 
-    private boolean                           ordered;
+    private boolean                     ordered;
 
     // ------------------------------------------------------------
     // Constructors
@@ -91,7 +91,7 @@
      */
     ReteooBuilder(final InternalRuleBase ruleBase) {
         this.ruleBase = ruleBase;
-        this.rules = new HashMap();
+        this.rules = new HashMap<Rule, BaseNode[]>();
 
         //Set to 1 as Rete node is set to 0
         this.idGenerator = new IdGenerator( 1 );
@@ -114,9 +114,9 @@
      * @throws InvalidPatternException
      */
     void addRule(final Rule rule) throws InvalidPatternException {
-        final List terminals = this.ruleBuilder.addRule( rule,
-                                                         this.ruleBase,
-                                                         this.idGenerator );
+        final List<TerminalNode> terminals = this.ruleBuilder.addRule( rule,
+                                                                       this.ruleBase,
+                                                                       this.idGenerator );
 
         this.rules.put( rule,
                         terminals.toArray( new BaseNode[terminals.size()] ) );
@@ -323,7 +323,7 @@
             bytes = new ByteArrayInputStream( (byte[]) in.readObject() );
             droolsStream = new DroolsObjectInputStream( bytes );
         }
-        this.rules = (Map) in.readObject();
+        this.rules = (Map<Rule, BaseNode[]>) in.readObject();
         this.idGenerator = (IdGenerator) in.readObject();
         this.ordered = in.readBoolean();
         this.ruleBase = droolsStream.getRuleBase();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -36,7 +36,6 @@
 import org.drools.definition.process.Process;
 import org.drools.definition.type.FactType;
 import org.drools.facttemplates.FactTemplate;
-import org.drools.io.Resource;
 
 /**
  * Collection of related <code>Rule</code>s.
@@ -67,7 +66,7 @@
     private String                         name;
 
     /** Set of all rule-names in this <code>Package</code>. */
-    private Map                            rules;
+    private Map<String,Rule>               rules;
 
     private Map<String, ImportDeclaration> imports;
 
@@ -98,7 +97,7 @@
      * This will keep a summary error message as to why this package is not
      * valid
      */
-    private String                         errorSummary;    
+    private String                         errorSummary;
 
     // ------------------------------------------------------------
     // Constructors
@@ -123,7 +122,7 @@
         this.imports = new HashMap<String, ImportDeclaration>();
         this.typeDeclarations = new HashMap<String, TypeDeclaration>();
         this.staticImports = Collections.EMPTY_SET;
-        this.rules = new LinkedHashMap();
+        this.rules = new LinkedHashMap<String, Rule>();
         this.ruleFlows = Collections.EMPTY_MAP;
         this.globals = Collections.EMPTY_MAP;
         this.factTemplates = Collections.EMPTY_MAP;
@@ -206,7 +205,7 @@
         this.ruleFlows = (Map) in.readObject();
         this.globals = (Map<String, String>) in.readObject();
         this.valid = in.readBoolean();
-        this.rules = (Map) in.readObject();
+        this.rules = (Map<String, Rule>) in.readObject();
         this.classFieldAccessorStore = (ClassFieldAccessorStore) in.readObject();
         if ( !isDroolsStream ) {
             in.close();
@@ -290,18 +289,12 @@
     }
 
     public void addGlobal(final String identifier,
-                          final Class clazz) {
-        addGlobal( identifier,
-                   clazz.getName() );
-    }
-
-    public void addGlobal(final String identifier,
-                          final String className) {
+                          final Class< ? > clazz) {
         if ( this.globals == Collections.EMPTY_MAP ) {
             this.globals = new HashMap<String, String>( 1 );
         }
         this.globals.put( identifier,
-                          className );
+                          clazz.getName() );
     }
 
     public void removeGlobal(final String identifier) {
@@ -491,7 +484,6 @@
     public String getErrorSummary() {
         return this.errorSummary;
     }
-    
 
     public boolean equals(final Object object) {
         if ( this == object ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/RuleConditionElement.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/RuleConditionElement.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/RuleConditionElement.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -38,7 +38,7 @@
      * 
      * @return
      */
-    public Map getInnerDeclarations();
+    public Map<String,Declaration> getInnerDeclarations();
 
     /**
      * Returns a Map of declarations that are visible
@@ -46,7 +46,7 @@
      * 
      * @return
      */
-    public Map getOuterDeclarations();
+    public Map<String,Declaration> getOuterDeclarations();
 
     /**
      * Resolves the given identifier in the current scope and

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DeclarationScopeResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DeclarationScopeResolver.java	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DeclarationScopeResolver.java	2009-03-04 22:51:04 UTC (rev 25496)
@@ -18,18 +18,18 @@
  * @author etirelli
  */
 public class DeclarationScopeResolver {
-    private static final Stack EMPTY_STACK = new Stack();
-    private Map[]              maps;
-    private Stack              buildStack;
-    private Package            pkg;
+    private static final Stack<RuleConditionElement> EMPTY_STACK = new Stack<RuleConditionElement>();
+    private Map<String, Class< ? >>[]                maps;
+    private Stack<RuleConditionElement>              buildStack;
+    private Package                                  pkg;
 
-    public DeclarationScopeResolver(final Map[] maps) {
+    public DeclarationScopeResolver(final Map<String, Class< ? >>[] maps) {
         this( maps,
               EMPTY_STACK );
     }
 
-    public DeclarationScopeResolver(final Map[] maps,
-                                    final Stack buildStack) {
+    public DeclarationScopeResolver(final Map<String, Class< ? >>[] maps,
+                                    final Stack<RuleConditionElement> buildStack) {
         this.maps = maps;
         if ( buildStack == null ) {
             this.buildStack = EMPTY_STACK;
@@ -42,46 +42,31 @@
         this.pkg = pkg;
     }
 
-    // @ TODO I don't think this is needed any more, no references to it
-    //  public Class getType(final String name) {
-    //      for ( int i = this.buildStack.size() - 1; i >= 0; i-- ) {
-    //          final Declaration declaration = (Declaration) ((RuleConditionElement) this.buildStack.get( i )).getInnerDeclarations().get( name );
-    //          if ( declaration != null ) {
-    //              return declaration.getExtractor().getExtractToClass();
-    //          }
-    //      }
-    //      for ( int i = 0, length = this.maps.length; i < length; i++ ) {
-    //          final Object object = this.maps[i].get( name );
-    //          if ( object != null ) {
-    //              if ( object instanceof Declaration ) {
-    //                  return ((Declaration) object).getExtractor().getExtractToClass();
-    //              } else {
-    //                  return (Class) object;
-    //              }
-    //          }
-    //      }
-    //      return null;
-    //  }
-    private Declaration getExtendedDeclaration(Rule rule, String identifier){
-    	if(rule.getLhs().getInnerDeclarations().containsKey(identifier)){
-    		return (Declaration)rule.getLhs().getInnerDeclarations().get(identifier);
-    	}else if(null != rule.getParent()){
-    		return getExtendedDeclaration(rule.getParent(), identifier);
-    	}
-    	return null;
-    	
+    private Declaration getExtendedDeclaration(Rule rule,
+                                               String identifier) {
+        if ( rule.getLhs().getInnerDeclarations().containsKey( identifier ) ) {
+            return (Declaration) rule.getLhs().getInnerDeclarations().get( identifier );
+        } else if ( null != rule.getParent() ) {
+            return getExtendedDeclaration( rule.getParent(),
+                                           identifier );
+        }
+        return null;
+
     }
-    private HashMap getAllExtendedDeclaration(Rule rule, HashMap dec){
-    	//declarations.putAll( ((RuleConditionElement) this.buildStack.get( i )).getInnerDeclarations() );
-    	dec.putAll( ((RuleConditionElement)rule.getLhs()).getInnerDeclarations() );
-    	if(null != rule.getParent()){
-    		return getAllExtendedDeclaration(rule.getParent(), dec);
-    	}
-    	return dec;
-    	
+
+    private HashMap<String, Declaration> getAllExtendedDeclaration(Rule rule,
+                                                                   HashMap<String, Declaration> dec) {
+        dec.putAll( ((RuleConditionElement) rule.getLhs()).getInnerDeclarations() );
+        if ( null != rule.getParent() ) {
+            return getAllExtendedDeclaration( rule.getParent(),
+                                              dec );
+        }
+        return dec;
+
     }
-    
-    public Declaration getDeclaration(final Rule rule, final String identifier) {
+
+    public Declaration getDeclaration(final Rule rule,
+                                      final String identifier) {
         // it may be a local bound variable
         for ( int i = this.buildStack.size() - 1; i >= 0; i-- ) {
             final Declaration declaration = (Declaration) ((RuleConditionElement) this.buildStack.get( i )).getInnerDeclarations().get( identifier );
@@ -90,39 +75,40 @@
             }
         }
         // look at parent rules
-        if(rule != null && rule.getParent() != null){
-        	// recursive algorithm for each parent
+        if ( rule != null && rule.getParent() != null ) {
+            // recursive algorithm for each parent
             //     -> lhs.getInnerDeclarations()
-        	Declaration parentDeclaration = getExtendedDeclaration(rule.getParent(), identifier);
-        	if(null != parentDeclaration){
-        		return parentDeclaration;
-        	}
+            Declaration parentDeclaration = getExtendedDeclaration( rule.getParent(),
+                                                                    identifier );
+            if ( null != parentDeclaration ) {
+                return parentDeclaration;
+            }
         }
-        
-        
+
         // it may be a global or something
         for ( int i = 0, length = this.maps.length; i < length; i++ ) {
             if ( this.maps[i].containsKey( (identifier) ) ) {
                 if ( pkg != null ) {
-                    Class cls = (Class) this.maps[i].get( identifier );
+                    Class<?> cls = (Class<?>) this.maps[i].get( identifier );
                     ClassObjectType classObjectType = new ClassObjectType( cls );
-                                        
+
                     Declaration declaration = null;
                     final Pattern dummy = new Pattern( 0,
                                                        classObjectType );
-                    
-                    GlobalExtractor globalExtractor = new GlobalExtractor(identifier, classObjectType);
+
+                    GlobalExtractor globalExtractor = new GlobalExtractor( identifier,
+                                                                           classObjectType );
                     declaration = new Declaration( identifier,
                                                    globalExtractor,
                                                    dummy );
-                    
+
                     // make sure dummy and globalExtractor are wired up to correct ClassObjectType
                     // and set as targets for rewiring
-                    pkg.getClassFieldAccessorStore().getClassObjectType( classObjectType, 
+                    pkg.getClassFieldAccessorStore().getClassObjectType( classObjectType,
                                                                          dummy );
-                    pkg.getClassFieldAccessorStore().getClassObjectType( classObjectType, 
+                    pkg.getClassFieldAccessorStore().getClassObjectType( classObjectType,
                                                                          globalExtractor );
-                    
+
                     return declaration;
                 } else {
                     throw new UnsupportedOperationException( "This shoudln't happen outside of PackageBuilder" );
@@ -132,7 +118,8 @@
         return null;
     }
 
-    public boolean available(Rule rule, final String name) {
+    public boolean available(Rule rule,
+                             final String name) {
         for ( int i = this.buildStack.size() - 1; i >= 0; i-- ) {
             final Declaration declaration = (Declaration) ((RuleConditionElement) this.buildStack.get( i )).getInnerDeclarations().get( name );
             if ( declaration != null ) {
@@ -145,18 +132,20 @@
             }
         }
         // look at parent rules
-        if(rule != null && rule.getParent() != null){
-        	// recursive algorithm for each parent
+        if ( rule != null && rule.getParent() != null ) {
+            // recursive algorithm for each parent
             //     -> lhs.getInnerDeclarations()
-        	Declaration parentDeclaration = getExtendedDeclaration(rule.getParent(), name);
-        	if(null != parentDeclaration){
-        		return true;
-        	}
+            Declaration parentDeclaration = getExtendedDeclaration( rule.getParent(),
+                                                                    name );
+            if ( null != parentDeclaration ) {
+                return true;
+            }
         }
         return false;
     }
 
-    public boolean isDuplicated(Rule rule, final String name) {
+    public boolean isDuplicated(Rule rule,
+                                final String name) {
         for ( int i = 0, length = this.maps.length; i < length; i++ ) {
             if ( this.maps[i].containsKey( (name) ) ) {
                 return true;
@@ -175,13 +164,14 @@
             }
         }
         // look at parent rules
-        if(rule != null && rule.getParent() != null){
-        	// recursive algorithm for each parent
+        if ( rule != null && rule.getParent() != null ) {
+            // recursive algorithm for each parent
             //     -> lhs.getInnerDeclarations()
-        	Declaration parentDeclaration = getExtendedDeclaration(rule.getParent(), name);
-        	if(null != parentDeclaration){
-        		return true;
-        	}
+            Declaration parentDeclaration = getExtendedDeclaration( rule.getParent(),
+                                                                    name );
+            if ( null != parentDeclaration ) {
+                return true;
+            }
         }
         return false;
     }
@@ -192,18 +182,28 @@
      * 
      * @return
      */
-    public Map getDeclarations(Rule rule) {
-        final Map declarations = new HashMap();
+    public Map<String, Declaration> getDeclarations(Rule rule) {
+        final Map<String, Declaration> declarations = new HashMap<String, Declaration>();
         for ( int i = 0; i < this.buildStack.size(); i++ ) {
             // this may be optimized in the future to only re-add elements at 
             // scope breaks, like "NOT" and "EXISTS"
             declarations.putAll( ((RuleConditionElement) this.buildStack.get( i )).getInnerDeclarations() );
         }
-        if(null != rule.getParent()){
-        	return getAllExtendedDeclaration(rule.getParent(), (HashMap)declarations);
+        if ( null != rule.getParent() ) {
+            return getAllExtendedDeclaration( rule.getParent(),
+                                              (HashMap<String, Declaration>) declarations );
         }
         return declarations;
     }
+    
+    public Map<String,Class<?>> getDeclarationClasses(Rule rule) {
+        final Map<String, Declaration> declarations = getDeclarations( rule );
+        final Map<String, Class<?>> classes = new HashMap<String, Class<?>>();
+        for ( Map.Entry<String, Declaration> decl : declarations.entrySet() ) {
+            classes.put( decl.getKey(), decl.getValue().getExtractor().getExtractToClass() );
+        }
+        return classes;
+    }
 
     public Pattern findPatternByIndex(int index) {
         if ( !this.buildStack.isEmpty() ) {

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2009-03-04 16:44:04 UTC (rev 25495)
+++ labs/jbossrules/trunk/pom.xml	2009-03-04 22:51:04 UTC (rev 25496)
@@ -13,7 +13,7 @@
     <url>http://www.jboss.com/products/rules</url>
 
     <properties>
-        <mvel.dep.version>2.0.7-SNAPSHOT</mvel.dep.version>
+        <mvel.dep.version>2.0.8-SNAPSHOT</mvel.dep.version>
     </properties>
 
 
@@ -179,7 +179,7 @@
             </releases>
         </repository>
         
-        <repository><!-- TODO dead code, this probably isn't used anymore -->
+        <repository><!-- used by mvel to publish snapshots -->
             <id>codehaus-snapshot</id>
             <url>http://snapshots.repository.codehaus.org</url>
             <snapshots>
@@ -222,8 +222,8 @@
             </releases>
         </repository>
         <repository>
-    	    <id>codehaus-snapshot</id>
-    	    <url>http://snapshots.repository.codehaus.org</url>
+    	    <id>codehaus</id>
+    	    <url>http://repository.codehaus.org</url>
     	</repository>        
         <repository>
             <id>apache-incubating</id>




More information about the jboss-svn-commits mailing list