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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 24 19:09:59 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-06-24 19:09:59 -0400 (Tue, 24 Jun 2008)
New Revision: 20739

Modified:
   labs/jbossrules/trunk/drools-compiler/.classpath
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaRuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
Log:
JBRULES-720 Clips Parser
-mvel language level is now set specifically for each call.

Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath	2008-06-24 23:09:51 UTC (rev 20738)
+++ labs/jbossrules/trunk/drools-compiler/.classpath	2008-06-24 23:09:59 UTC (rev 20739)
@@ -11,6 +11,6 @@
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
   <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaRuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaRuleBuilder.java	2008-06-24 23:09:51 UTC (rev 20738)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaRuleBuilder.java	2008-06-24 23:09:59 UTC (rev 20739)
@@ -8,7 +8,9 @@
 import org.drools.lang.descr.BaseDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.dialect.mvel.MVELDialect;
 import org.drools.util.StringUtils;
+import org.mvel.compiler.AbstractParser;
 import org.mvel.integration.impl.MapVariableResolverFactory;
 import org.mvel.optimizers.OptimizerFactory;
 import org.mvel.templates.SimpleTemplateRegistry;
@@ -35,11 +37,11 @@
 
     }
 
-    public TemplateRegistry getRuleTemplateRegistry() {
+    public static TemplateRegistry getRuleTemplateRegistry() {
         return RULE_REGISTRY;
     }
 
-    public TemplateRegistry getInvokerTemplateRegistry() {
+    public static TemplateRegistry getInvokerTemplateRegistry() {
         return INVOKER_REGISTRY;
     }
 
@@ -110,31 +112,34 @@
         return map;
     }
 
-    public void generatTemplates(final String ruleTemplate,
+    public static void generatTemplates(final String ruleTemplate,
                                  final String invokerTemplate,
                                  final RuleBuildContext context,
                                  final String className,
                                  final Map vars,
                                  final Object invokerLookup,
                                  final BaseDescr descrLookup) {
-        TemplateRegistry registry = getRuleTemplateRegistry();
-
-        context.getMethods().add(
-             TemplateRuntime.execute(registry.getNamedTemplate(ruleTemplate), null, new MapVariableResolverFactory(vars), registry)
-        );
-
-
-        registry = getInvokerTemplateRegistry();
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst(className) + "Invoker";
-
-
-        context.getInvokers().put(invokerClassName,
-             TemplateRuntime.execute(registry.getNamedTemplate(invokerTemplate), null, new MapVariableResolverFactory(vars), registry)
-        );
-
-        context.getInvokerLookups().put(invokerClassName,
-                invokerLookup);
-        context.getDescrLookups().put(invokerClassName,
-                descrLookup);
+        synchronized ( MVELDialect.COMPILER_LOCK ) {     
+            AbstractParser.setLanguageLevel( 5 );
+            TemplateRegistry registry = getRuleTemplateRegistry();
+    
+            context.getMethods().add(
+                 TemplateRuntime.execute(registry.getNamedTemplate(ruleTemplate), null, new MapVariableResolverFactory(vars), registry)
+            );
+    
+    
+            registry = getInvokerTemplateRegistry();
+            final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + StringUtils.ucFirst(className) + "Invoker";
+    
+    
+            context.getInvokers().put(invokerClassName,
+                 TemplateRuntime.execute(registry.getNamedTemplate(invokerTemplate), null, new MapVariableResolverFactory(vars), registry)
+            );
+    
+            context.getInvokerLookups().put(invokerClassName,
+                    invokerLookup);
+            context.getDescrLookups().put(invokerClassName,
+                    descrLookup);
+        }
     }
 }

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	2008-06-24 23:09:51 UTC (rev 20738)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2008-06-24 23:09:59 UTC (rev 20739)
@@ -134,26 +134,23 @@
     private Map                                          imports;
     private Map                                          packageImports;
 
+    
     private boolean                                      strictMode;
+    private int                                          languageLevel;
+    public static final Object COMPILER_LOCK = new Object();
 
-    private static Boolean                               languageSet                    = Boolean.FALSE;
-
     public MVELDialect(PackageBuilder builder,
                        PackageRegistry pkgRegistry,
                        Package pkg) {
         this.pkg = pkg;
         this.packageRegistry = pkgRegistry;
         
-        this.configuration = (MVELDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "mvel" );
+        this.configuration = (MVELDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "mvel" );        
         setLanguageLevel( this.configuration.getLangLevel() );
         this.classFieldExtractorCache = builder.getClassFieldExtractorCache();
         this.strictMode = this.configuration.isStrict();
 
-        // we currently default to reflective optimisation
 
-        // Commented out by Mike.
-        //   OptimizerFactory.setDefaultOptimizer( "reflective" );
-
         MVEL.setThreadSafe( true );
 
         this.imports = new HashMap();
@@ -214,17 +211,22 @@
         out.writeBoolean( strictMode );
     }
 
-    public static void setLanguageLevel(int level) {
-        synchronized ( languageSet ) {
-            // this synchronisation is needed as setLanguageLevel is now thread safe
-            // and we do not want to be calling this while something else is being parsed.
-            // the flag ensures it is just called once and no more.
-            if ( languageSet.booleanValue() == false ) {
-                languageSet = new Boolean( true );
-                AbstractParser.setLanguageLevel( level );
-            }
-        }
+    public void setLanguageLevel(int languageLevel) {
+        this.languageLevel = languageLevel;
     }
+    
+    
+//    public static void setLanguageLevel(int level) {        
+//        synchronized ( lang ) {
+//            // this synchronisation is needed as setLanguageLevel is not thread safe
+//            // and we do not want to be calling this while something else is being parsed.
+//            // the flag ensures it is just called once and no more.
+//            if ( languageSet.booleanValue() == false ) {
+//                languageSet = new Boolean( true );
+//                AbstractParser.setLanguageLevel( level );
+//            }
+//        }
+//    }
 
     public static void initBuilder() {
         if ( builders != null ) {
@@ -490,11 +492,13 @@
         if ( MVELDebugHandler.isDebugMode() ) {
             compiler.setDebugSymbols( true );
         }
+                
+        synchronized ( COMPILER_LOCK ) {            
+            AbstractParser.setLanguageLevel( languageLevel );    
+            return compiler.compile( parserContext );
+        }
+    }    
 
-        Serializable expr = compiler.compile( parserContext );
-        return expr;
-    }
-
     public ParserContext getParserContext(final Dialect.AnalysisResult analysis,
                                           final Map outerDeclarations,
                                           final Map otherInputVariables,




More information about the jboss-svn-commits mailing list