[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