[jboss-svn-commits] JBL Code SVN: r13252 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/rule/builder/dialect/mvel and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jul 8 23:07:18 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-07-08 23:07:18 -0400 (Sun, 08 Jul 2007)
New Revision: 13252
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/dialect/mvel/MVELDialect.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/MVELSalienceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
Log:
-updates to get MVEL working with type safe mode
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -161,16 +161,17 @@
object,
null );
}
-
- if( patternDescr.getSource() != null ) {
+
+ if ( patternDescr.getSource() != null ) {
// we have a pattern source, so build it
RuleConditionBuilder builder = context.getDialect().getBuilder( patternDescr.getSource().getClass() );
-
- PatternSource source = (PatternSource) builder.build( context, patternDescr.getSource() );
-
+
+ PatternSource source = (PatternSource) builder.build( context,
+ patternDescr.getSource() );
+
pattern.setSource( source );
}
-
+
// poping the pattern
context.getBuildStack().pop();
return pattern;
@@ -319,10 +320,10 @@
dumper.visitFieldConstraintDescr( fieldConstraintDescr );
predicateDescr.setContent( dumper.getTemplate() );
- this.build( context,
- pattern,
- predicateDescr,
- container );
+ build( context,
+ pattern,
+ predicateDescr,
+ container );
// fall back to original dialect
context.setDialect( dialect );
@@ -474,9 +475,9 @@
for ( int i = 0, size = unboundIdentifiers.size(); i < size; i++ ) {
final String identifier = (String) unboundIdentifiers.get( i );
- Declaration declaration = this.createDeclarationObject( context,
- identifier,
- pattern );
+ Declaration declaration = createDeclarationObject( context,
+ identifier,
+ pattern );
if ( declaration != null ) {
factDeclarations.add( declaration );
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 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -1,8 +1,10 @@
package org.drools.rule.builder.dialect.mvel;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -39,7 +41,10 @@
import org.drools.rule.builder.RuleClassBuilder;
import org.drools.rule.builder.RuleConditionBuilder;
import org.drools.rule.builder.SalienceBuilder;
+import org.drools.spi.DeclarationScopeResolver;
import org.mvel.AbstractParser;
+import org.mvel.ExpressionCompiler;
+import org.mvel.ParserContext;
import org.mvel.integration.impl.ClassImportResolverFactory;
import org.mvel.integration.impl.StaticMethodImportResolverFactory;
@@ -211,7 +216,8 @@
Object content) {
Dialect.AnalysisResult result = null;
try {
- result = this.analyzer.analyzeExpression( (String) content,
+ result = this.analyzer.analyzeExpression( context,
+ (String) content,
new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
} catch ( final Exception e ) {
context.getErrors().add( new RuleError( context.getRule(),
@@ -227,7 +233,8 @@
String text) {
Dialect.AnalysisResult result = null;
try {
- result = this.analyzer.analyzeExpression( text,
+ result = this.analyzer.analyzeExpression( context,
+ text,
new Set[]{context.getDeclarationResolver().getDeclarations().keySet(), context.getPkg().getGlobals().keySet()} );
} catch ( final Exception e ) {
context.getErrors().add( new RuleError( context.getRule(),
@@ -237,6 +244,28 @@
}
return result;
}
+
+ public Serializable compile(final String text, final Dialect.AnalysisResult analysis, final RuleBuildContext context) {
+ final ParserContext parserContext = new ParserContext( getClassImportResolverFactory().getImportedClasses(), null, null);
+ parserContext.setStrictTypeEnforcement( true );
+
+ List list[] = analysis.getBoundIdentifiers();
+ DeclarationScopeResolver resolver = context.getDeclarationResolver();
+ for ( Iterator it = list[0].iterator(); it.hasNext(); ) {
+ String identifier = (String) it.next();
+ Class cls = resolver.getDeclaration( identifier ).getExtractor().getExtractToClass();
+ parserContext.addInput( identifier, cls );
+ }
+
+ Map globalTypes = context.getPkg().getGlobals();
+ for ( Iterator it = list[1].iterator(); it.hasNext(); ) {
+ String identifier = (String) it.next();
+ parserContext.addInput( identifier, ( Class ) globalTypes.get( identifier ) );
+ }
+
+ ExpressionCompiler compiler = new ExpressionCompiler( text );
+ return compiler.compile( parserContext );
+ }
public RuleConditionBuilder getBuilder(final Class clazz) {
return (RuleConditionBuilder) this.builders.get( clazz );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -17,7 +17,9 @@
package org.drools.rule.builder.dialect.mvel;
import java.io.Serializable;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELEvalExpression;
@@ -31,7 +33,11 @@
import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.spi.DeclarationScopeResolver;
+import org.mvel.ExpressionCompiler;
import org.mvel.MVEL;
+import org.mvel.ParserContext;
+import org.mvel.util.ParseTools;
/**
* @author etirelli
@@ -80,9 +86,9 @@
declarations[i] = context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
}
- final EvalCondition eval = new EvalCondition( declarations );
- final Serializable expr = MVEL.compileExpression( (String) evalDescr.getContent(),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+ final EvalCondition eval = new EvalCondition( declarations );
+
+ Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) evalDescr.getContent(), analysis, context );
eval.setEvalExpression( new MVELEvalExpression( expr,
factory ) );
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 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzer.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -17,13 +17,17 @@
*/
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.antlr.runtime.RecognitionException;
+import org.drools.rule.builder.RuleBuildContext;
import org.mvel.ExpressionCompiler;
+import org.mvel.ParserContext;
+import org.mvel.integration.impl.MapVariableResolver;
/**
* Expression analyzer.
@@ -51,11 +55,18 @@
* @throws RecognitionException
* If an error occurs in the parser.
*/
- public MVELAnalysisResult analyzeExpression(final String expr,
- final Set[] availableIdentifiers) throws RecognitionException {
+ public MVELAnalysisResult analyzeExpression(final RuleBuildContext context,
+ final String expr,
+ final Set[] availableIdentifiers) throws RecognitionException {
ExpressionCompiler compiler = new ExpressionCompiler( expr);
- compiler.compile();
+ ParserContext parserContext = new ParserContext();
+ parserContext.setStrictTypeEnforcement( false );
+ MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
+ parserContext.setImports( dialect.getClassImportResolverFactory().getImportedClasses() );
+
+ compiler.compile(parserContext);
+
return analyze( compiler.getParserContextState().getInputs().keySet(),
availableIdentifiers );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -27,10 +27,13 @@
import org.drools.rule.From;
import org.drools.rule.Pattern;
import org.drools.rule.RuleConditionElement;
+import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.FromBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.spi.DataProvider;
+import org.mvel.ExpressionCompiler;
import org.mvel.MVEL;
+import org.mvel.ParserContext;
import org.mvel.integration.impl.ClassImportResolverFactory;
/**
@@ -62,14 +65,21 @@
context.getPkg().getGlobals() );
// This builder is re-usable in other dialects, so specify by name
- final ClassImportResolverFactory classImportResolverFactory = ((MVELDialect) context.getDialect( "mvel" )).getClassImportResolverFactory();
+ MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
+
+ final ClassImportResolverFactory classImportResolverFactory = dialect.getClassImportResolverFactory();
factory.setNextFactory( classImportResolverFactory );
- //parser.setValueHandlerFactory( factory );
- final Serializable compiled = MVEL.compileExpression( accessor.toString(),
- classImportResolverFactory.getImportedClasses() );
+ String text = (String) accessor.toString();
+ Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
+ descr,
+ text );
- dataProvider = new MVELDataProvider( compiled,
+ final Serializable expr = dialect.compile( text,
+ analysis,
+ context );
+
+ dataProvider = new MVELDataProvider( expr,
factory );
} catch ( final Exception e ) {
context.getErrors().add( new RuleError( context.getRule(),
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -27,9 +27,12 @@
import org.drools.lang.descr.PredicateDescr;
import org.drools.rule.Declaration;
import org.drools.rule.PredicateConstraint;
+import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.PredicateBuilder;
import org.drools.rule.builder.RuleBuildContext;
+import org.mvel.ExpressionCompiler;
import org.mvel.MVEL;
+import org.mvel.ParserContext;
/**
* @author etirelli
@@ -62,9 +65,16 @@
localMap,
context.getPkg().getGlobals() );
factory.setNextFactory( ((MVELDialect) context.getDialect()).getClassImportResolverFactory() );
-
- final Serializable expr = MVEL.compileExpression( (String) predicateDescr.getContent(),
- ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+
+ final ParserContext parserContext = new ParserContext(((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), null, null);
+ parserContext.setStrictTypeEnforcement( true );
+
+ Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
+ predicateDescr,
+ predicateDescr.getContent() );
+
+ final Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) predicateDescr.getContent(), analysis, context );
+
predicate.setPredicateExpression( new MVELPredicateExpression( expr,
factory ) );
} catch ( final Exception e ) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -26,9 +26,12 @@
import org.drools.lang.descr.ReturnValueRestrictionDescr;
import org.drools.rule.Declaration;
import org.drools.rule.ReturnValueRestriction;
+import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.ReturnValueBuilder;
import org.drools.rule.builder.RuleBuildContext;
+import org.mvel.ExpressionCompiler;
import org.mvel.MVEL;
+import org.mvel.ParserContext;
/**
* @author etirelli
@@ -60,7 +63,18 @@
final DroolsMVELFactory factory = new DroolsMVELFactory(previousMap, localMap, context.getPkg().getGlobals() );
factory.setNextFactory( ((MVELDialect)context.getDialect()).getClassImportResolverFactory() );
- final Serializable expr = MVEL.compileExpression( (String) returnValueRestrictionDescr.getContent(), ((MVELDialect)context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
+ final ParserContext parserContext = new ParserContext(((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), null, null);
+ parserContext.setStrictTypeEnforcement( true );
+
+// ExpressionCompiler compiler = new ExpressionCompiler( (String) returnValueRestrictionDescr.getContent() );
+// final Serializable expr = compiler.compile( parserContext );
+
+ Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
+ returnValueRestrictionDescr,
+ returnValueRestrictionDescr.getContent() );
+
+ final Serializable expr = ((MVELDialect) context.getDialect()).compile( (String) returnValueRestrictionDescr.getContent(), analysis, context );
+
returnValueRestriction.setReturnValueExpression( new MVELReturnValueExpression( expr,
factory ) );
}
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 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -5,9 +5,12 @@
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELSalienceExpression;
import org.drools.compiler.RuleError;
+import org.drools.rule.builder.Dialect;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.SalienceBuilder;
+import org.mvel.ExpressionCompiler;
import org.mvel.MVEL;
+import org.mvel.ParserContext;
import org.mvel.integration.impl.ClassImportResolverFactory;
public class MVELSalienceBuilder
@@ -22,13 +25,19 @@
final DroolsMVELFactory factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
null,
context.getPkg().getGlobals() );
+ MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
// This builder is re-usable in other dialects, so specify by name
- final ClassImportResolverFactory classImportResolverFactory = ((MVELDialect) context.getDialect( "mvel" )).getClassImportResolverFactory();
+ final ClassImportResolverFactory classImportResolverFactory = dialect.getClassImportResolverFactory();
factory.setNextFactory( classImportResolverFactory );
- final Serializable expr = MVEL.compileExpression( (String) context.getRuleDescr().getSalience(),
- classImportResolverFactory.getImportedClasses() );
+ Dialect.AnalysisResult analysis = dialect.analyzeExpression( context,
+ context.getRuleDescr(),
+ (String) context.getRuleDescr().getSalience() );
+ final Serializable expr = dialect.compile( (String) context.getRuleDescr().getSalience(),
+ analysis,
+ context );
+
MVELSalienceExpression salience = new MVELSalienceExpression( expr,
factory );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -35,7 +35,7 @@
MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "default",
+ registry.addDialect( "mvel",
mvelDialect );
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -38,7 +38,7 @@
MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "default",
+ registry.addDialect( "mvel",
mvelDialect );
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-07-09 03:04:50 UTC (rev 13251)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-07-09 03:07:18 UTC (rev 13252)
@@ -40,7 +40,7 @@
MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
DialectRegistry registry = new DialectRegistry();
- registry.addDialect( "default",
+ registry.addDialect( "mvel",
mvelDialect );
final PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
@@ -116,9 +116,6 @@
tuple = new ReteTuple( tuple,
f1 );
- final PredicateContextEntry predicateContext = new PredicateContextEntry();
- predicateContext.leftTuple = tuple;
-
final Cheese brie = new Cheese( "brie",
20 );
assertTrue( returnValue.isAllowed( extractor,
More information about the jboss-svn-commits
mailing list