[jboss-svn-commits] JBL Code SVN: r13319 - in labs/jbossrules/branches/mvel-tooling-2007-06-30: m2_repo/org/mvel/mvel14/1.2pre1 and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jul 10 17:45:58 EDT 2007


Author: pombredanne
Date: 2007-07-10 17:45:58 -0400 (Tue, 10 Jul 2007)
New Revision: 13319

Modified:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/m2_repo/org/mvel/mvel14/1.2pre1/mvel14-1.2pre1.jar
Log:
Ported r13318 from trunk to branch mvel-tooling-2007-06-30. The new mvel jar is based on mvel's trunk @ r701

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2007-07-10 20:37:31 UTC (rev 13318)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2007-07-10 21:45:58 UTC (rev 13319)
@@ -69,7 +69,7 @@
         if ( sourcePattern == null ) {
             return null;
         }
-        
+
         MVELDialect dialect = (MVELDialect) context.getDialect();
 
         final Declaration[] sourceDeclArr = (Declaration[]) sourcePattern.getOuterDeclarations().values().toArray( new Declaration[0] );
@@ -84,9 +84,9 @@
 
         if ( accumDescr.isExternalFunction() ) {
             // build an external function executor
-            final Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
-                                                                                            accumDescr,
-                                                                                            accumDescr.getExpression() );
+            final Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
+                                                                               accumDescr,
+                                                                               accumDescr.getExpression() );
 
             int size = analysis.getBoundIdentifiers()[0].size();
             declarations = new Declaration[size];
@@ -95,7 +95,7 @@
             }
 
             final Serializable expression = MVEL.compileExpression( (String) accumDescr.getExpression(),
-                                                                    ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+                                                                    dialect.getClassImportResolverFactory().getImportedClasses() );
 
             AccumulateFunction function = context.getConfiguration().getAccumulateFunction( accumDescr.getFunctionIdentifier() );
 
@@ -104,16 +104,22 @@
                                                                function );
         } else {
             // it is a custom accumulate
-            final Dialect.AnalysisResult initCodeAnalysis = context.getDialect().analyzeBlock( context,
-                                                                                        accumDescr,
-                                                                                        accumDescr.getInitCode() );
-            final Dialect.AnalysisResult actionCodeAnalysis = context.getDialect().analyzeBlock( context,
-                                                                                        accumDescr,
-                                                                                        accumDescr.getActionCode() );
-            final Dialect.AnalysisResult resultCodeAnalysis = context.getDialect().analyzeExpression( context,
-                                                                                             accumDescr,
-                                                                                             accumDescr.getResultCode() );
+            final MVELAnalysisResult initCodeAnalysis = ( MVELAnalysisResult ) dialect.analyzeBlock( context,
+                                                                                  accumDescr,
+                                                                                  accumDescr.getInitCode() );
 
+            final MVELAnalysisResult actionCodeAnalysis = ( MVELAnalysisResult ) dialect.analyzeBlock( context,
+                                                                                    accumDescr,
+                                                                                    null,
+                                                                                    accumDescr.getActionCode(),
+                                                                                    initCodeAnalysis.getMvelVariables() );
+            actionCodeAnalysis.setMvelVariables( initCodeAnalysis.getMvelVariables() );
+            final MVELAnalysisResult resultCodeAnalysis = ( MVELAnalysisResult ) dialect.analyzeExpression( context,
+                                                                                         accumDescr,
+                                                                                         accumDescr.getResultCode(),
+                                                                                         initCodeAnalysis.getMvelVariables()  );
+            resultCodeAnalysis.setMvelVariables( initCodeAnalysis.getMvelVariables() );
+
             final List requiredDeclarations = new ArrayList( initCodeAnalysis.getBoundIdentifiers()[0] );
             requiredDeclarations.addAll( actionCodeAnalysis.getBoundIdentifiers()[0] );
             requiredDeclarations.addAll( resultCodeAnalysis.getBoundIdentifiers()[0] );
@@ -129,28 +135,37 @@
             for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
                 declarations[i] = context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
             }
-            
-            final Serializable init = dialect.compile( (String) accumDescr.getInitCode(), initCodeAnalysis, null, context );
-            final Serializable action = dialect.compile((String) accumDescr.getActionCode(), actionCodeAnalysis, null, context );
 
-            
-           
+            final Serializable init = dialect.compile( (String) accumDescr.getInitCode(),
+                                                       initCodeAnalysis,
+                                                       null,
+                                                       context );
+            final Serializable action = dialect.compile( (String) accumDescr.getActionCode(),
+                                                         actionCodeAnalysis,
+                                                         null,
+                                                         context );
 
-//            final Serializable init = MVEL.compileExpression( (String) accumDescr.getInitCode(),
-//                                                              ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
-//            final Serializable action = MVEL.compileExpression( (String) accumDescr.getActionCode(),
-//                                                                ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+            //            final Serializable init = MVEL.compileExpression( (String) accumDescr.getInitCode(),
+            //                                                              ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+            //            final Serializable action = MVEL.compileExpression( (String) accumDescr.getActionCode(),
+            //                                                                ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
             Serializable reverse = null;
             if ( accumDescr.getReverseCode() != null ) {
-//                reverse = MVEL.compileExpression( (String) accumDescr.getReverseCode(),
-//                                                  ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
-                reverse = dialect.compile( (String) accumDescr.getReverseCode(), resultCodeAnalysis, null, context );
+                //                reverse = MVEL.compileExpression( (String) accumDescr.getReverseCode(),
+                //                                                  ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+                reverse = dialect.compile( (String) accumDescr.getReverseCode(),
+                                           resultCodeAnalysis,
+                                           null,
+                                           context );
             }
-//            final Serializable result = MVEL.compileExpression( (String) accumDescr.getResultCode(),
-//                                                                ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+            //            final Serializable result = MVEL.compileExpression( (String) accumDescr.getResultCode(),
+            //                                                                ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
 
-            final Serializable result = dialect.compile((String) accumDescr.getResultCode(), resultCodeAnalysis, null, context );
-            
+            final Serializable result = dialect.compile( (String) accumDescr.getResultCode(),
+                                                         resultCodeAnalysis,
+                                                         null,
+                                                         context );
+
             accumulator = new MVELAccumulator( factory,
                                                init,
                                                action,

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java	2007-07-10 20:37:31 UTC (rev 13318)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAnalysisResult.java	2007-07-10 21:45:58 UTC (rev 13319)
@@ -19,6 +19,7 @@
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.drools.rule.builder.Dialect.AnalysisResult;
 
@@ -35,6 +36,9 @@
     private List localVariables = Collections.EMPTY_LIST;
     private List notBoundedIdentifiers = Collections.EMPTY_LIST;
     
+    private Map mvelVariables;
+    private Map mvelInputs;
+    
     public List[] getBoundIdentifiers() {
         return boundIdentifiers;
     }
@@ -59,4 +63,14 @@
     public void setNotBoundedIdentifiers(List notBoundedIdentifiers) {
         this.notBoundedIdentifiers = notBoundedIdentifiers;
     }
+
+    public Map getMvelVariables() {
+        return mvelVariables;
+    }
+    
+    public void setMvelVariables(Map mvelVariables) {
+        this.mvelVariables = mvelVariables;
+    }
+    
+    
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-07-10 20:37:31 UTC (rev 13318)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-07-10 21:45:58 UTC (rev 13319)
@@ -103,7 +103,8 @@
             Dialect.AnalysisResult analysis = dialect.analyzeBlock( context,
                                                                     context.getRuleDescr(),
                                                                     dialect.getInterceptors(),
-                                                                    text );
+                                                                    text,
+                                                                    null );
 
             final Serializable expr = dialect.compile( text,
                                                        analysis,

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-10 20:37:31 UTC (rev 13318)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-10 21:45:58 UTC (rev 13319)
@@ -8,6 +8,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.TypeResolver;
@@ -79,11 +80,19 @@
     private final MVELConsequenceBuilder            consequence             = new MVELConsequenceBuilder();
     //private final JavaRuleClassBuilder            rule        = new JavaRuleClassBuilder();
     private final MVELFromBuilder                   from                    = new MVELFromBuilder();
+<<<<<<< .working
 
     private final Map interceptors;
+=======
+>>>>>>> .merge-right.r13318
 
+<<<<<<< .working
     private Map                            lineMappings;
 
+=======
+    private final Map                               interceptors;
+
+>>>>>>> .merge-right.r13318
     private List                                    results;
     //private final JavaFunctionBuilder             function    = new JavaFunctionBuilder();
 
@@ -168,8 +177,12 @@
 
         this.builders.put( EvalDescr.class,
                            getEvalBuilder() );
+<<<<<<< .working
 
 
+=======
+
+>>>>>>> .merge-right.r13318
     }
 
     public void init(Package pkg) {
@@ -263,11 +276,22 @@
     public Dialect.AnalysisResult analyzeExpression(RuleBuildContext context,
                                                     BaseDescr descr,
                                                     Object content) {
+        return analyzeExpression( context,
+                                  descr,
+                                  content,
+                                  null );
+    }
+
+    public Dialect.AnalysisResult analyzeExpression(RuleBuildContext context,
+                                                    BaseDescr descr,
+                                                    Object content,
+                                                    Map localTypes) {
         Dialect.AnalysisResult result = null;
         try {
             result = this.analyzer.analyzeExpression( context,
                                                       (String) content,
-                                                      new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+                                                      new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()},
+                                                      localTypes );
         } catch ( final Exception e ) {
             context.getErrors().add( new RuleError( context.getRule(),
                                                     descr,
@@ -283,18 +307,21 @@
         return analyzeBlock( context,
                              descr,
                              null,
-                             text );
+                             text,
+                             null );
     }
 
     public Dialect.AnalysisResult analyzeBlock(RuleBuildContext context,
                                                BaseDescr descr,
                                                Map interceptors,
-                                               String text) {
+                                               String text,
+                                               Map localTypes) {
         Dialect.AnalysisResult result = null;
         try {
             result = this.analyzer.analyzeExpression( context,
                                                       text,
-                                                      new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
+                                                      new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()},
+                                                      localTypes );
         } catch ( final Exception e ) {
             context.getErrors().add( new RuleError( context.getRule(),
                                                     descr,
@@ -308,9 +335,13 @@
                                 final Dialect.AnalysisResult analysis,
                                 final Map interceptors,
                                 final RuleBuildContext context) {
-        final ParserContext parserContext = new ParserContext( getClassImportResolverFactory().getImportedClasses(),
+        Map imports = getClassImportResolverFactory().getImportedClasses();
+        imports.putAll( getStaticMethodImportResolverFactory().getImportedMethods() );
+
+        final ParserContext parserContext = new ParserContext( imports,
                                                                null,
                                                                null );
+
         parserContext.setStrictTypeEnforcement( true );
         if ( interceptors != null ) {
             parserContext.setInterceptors( interceptors );
@@ -331,9 +362,24 @@
             parserContext.addInput( identifier,
             						(Class) globalTypes.get( identifier ) );
         }
+<<<<<<< .working
 
-        parserContext.addInput( "drools", KnowledgeHelper.class );
+=======
 
+
+>>>>>>> .merge-right.r13318
+        Map mvelVars = ((MVELAnalysisResult)analysis).getMvelVariables();
+        if ( mvelVars != null ) {
+            for ( Iterator it = mvelVars.entrySet().iterator(); it.hasNext(); ) {
+                Entry entry = (Entry) it.next();
+                parserContext.addInput( (String)entry.getKey(),
+                                        (Class) entry.getValue() );
+            }
+        }
+
+        parserContext.addInput( "drools",
+                                KnowledgeHelper.class );
+
         ExpressionCompiler compiler = new ExpressionCompiler( text );
         Serializable expr = compiler.compile( parserContext );
         return expr;
@@ -414,42 +460,43 @@
     }
 
     public static class AssertInterceptor
-    implements
-    Interceptor {
-    public int doBefore(ASTNode node,
-                        VariableResolverFactory factory) {
-        return 0;
-    }
+        implements
+        Interceptor {
+        public int doBefore(ASTNode node,
+                            VariableResolverFactory factory) {
+            return 0;
+        }
 
-    public int doAfter(Object value,
-                       ASTNode node,
-                       VariableResolverFactory factory) {
-        ((DroolsMVELFactory) factory).getWorkingMemory().insert( value );
-        return 0;
+        public int doAfter(Object value,
+                           ASTNode node,
+                           VariableResolverFactory factory) {
+            ((DroolsMVELFactory) factory).getWorkingMemory().insert( value );
+            return 0;
+        }
     }
-}
 
-public static class ModifyInterceptor
-    implements
-    Interceptor {
-    public int doBefore(ASTNode node,
-                        VariableResolverFactory factory) {
-        Object object = ((WithNode) node).getNestedStatement().getValue( null,
-                                                                         factory );
+    public static class ModifyInterceptor
+        implements
+        Interceptor {
+        public int doBefore(ASTNode node,
+                            VariableResolverFactory factory) {
+            Object object = ((WithNode) node).getNestedStatement().getValue( null,
+                                                                             factory );
 
-        DroolsMVELKnowledgeHelper resolver = (DroolsMVELKnowledgeHelper) factory.getVariableResolver( "drools" );
-        KnowledgeHelper helper = (KnowledgeHelper) resolver.getValue();
-        helper.modifyRetract( object );
-        return 0;
-    }
+            DroolsMVELKnowledgeHelper resolver = (DroolsMVELKnowledgeHelper) factory.getVariableResolver( "drools" );
+            KnowledgeHelper helper = (KnowledgeHelper) resolver.getValue();
+            helper.modifyRetract( object );
+            return 0;
+        }
 
-    public int doAfter(Object value,
-                       ASTNode node,
-                       VariableResolverFactory factory) {
-        DroolsMVELKnowledgeHelper resolver = (DroolsMVELKnowledgeHelper) factory.getVariableResolver( "drools" );
-        KnowledgeHelper helper = (KnowledgeHelper) resolver.getValue();
-        helper.modifyInsert( value );
-        return 0;
+        public int doAfter(Object value,
+                           ASTNode node,
+                           VariableResolverFactory factory) {
+            DroolsMVELKnowledgeHelper resolver = (DroolsMVELKnowledgeHelper) factory.getVariableResolver( "drools" );
+            KnowledgeHelper helper = (KnowledgeHelper) resolver.getValue();
+            helper.modifyInsert( value );
+            return 0;
+        }
     }
 }
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java	2007-07-10 20:37:31 UTC (rev 13318)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java	2007-07-10 21:45:58 UTC (rev 13319)
@@ -20,6 +20,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.RecognitionException;
@@ -55,19 +56,28 @@
      */
     public MVELAnalysisResult analyzeExpression(final RuleBuildContext context,
                                                 final String expr,
-                                                final Set[] availableIdentifiers) throws RecognitionException {
+                                                final Set[] availableIdentifiers,
+                                                final Map localTypes) throws RecognitionException {
         ExpressionCompiler compiler = new ExpressionCompiler( expr );
 
         ParserContext parserContext = new ParserContext();
         parserContext.setStrictTypeEnforcement( false );
         MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
-        parserContext.setImports( dialect.getClassImportResolverFactory().getImportedClasses() );
+        
+        Map imports = dialect.getClassImportResolverFactory().getImportedClasses();
+        imports.putAll( dialect.getStaticMethodImportResolverFactory().getImportedMethods() );
+        
+        parserContext.setImports( imports );
         parserContext.setInterceptors( dialect.getInterceptors() );
 
         compiler.compile( parserContext );
+        
+        MVELAnalysisResult result = analyze( compiler.getParserContextState().getInputs().keySet(),
+                                             availableIdentifiers );
+        
+        result.setMvelVariables( compiler.getParserContextState().getVariables() );
 
-        return analyze( compiler.getParserContextState().getInputs().keySet(),
-                        availableIdentifiers );
+        return result;
     }
 
     /**

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/m2_repo/org/mvel/mvel14/1.2pre1/mvel14-1.2pre1.jar
===================================================================
(Binary files differ)




More information about the jboss-svn-commits mailing list