[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