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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 26 18:49:21 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-02-26 18:49:21 -0500 (Mon, 26 Feb 2007)
New Revision: 9774

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java
Log:
JBRULES-708 MVEL Integration
-More interface/implementation seperation for dialects

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaEvalBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * 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.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Declaration;
+import org.drools.rule.EvalCondition;
+import org.drools.semantics.java.builder.BuildContext;
+import org.drools.semantics.java.builder.BuildUtils;
+import org.drools.semantics.java.builder.ColumnBuilder;
+import org.drools.semantics.java.builder.ConditionalElementBuilder;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaEvalBuilder
+    implements
+    ConditionalElementBuilder {
+
+    /**
+     * Builds and returns an Eval Conditional Element
+     * 
+     * @param context The current build context
+     * @param utils The current build utils instance
+     * @param columnBuilder not used by EvalBuilder
+     * @param descr The Eval Descriptor to build the eval conditional element from
+     * 
+     * @return the Eval Conditional Element
+     */
+    public ConditionalElement build(final BuildContext context,
+                                    final BuildUtils utils,
+                                    final ColumnBuilder columnBuilder,
+                                    final BaseDescr descr) {
+        // it must be an EvalDescr
+        EvalDescr evalDescr = (EvalDescr) descr;
+
+        final String className = "eval" + context.getNextId();
+        
+        evalDescr.setClassMethodName( className );
+
+        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
+                                                                 evalDescr,
+                                                                 evalDescr.getText() );
+
+        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+        }
+
+        final EvalCondition eval = new EvalCondition( declarations );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String evalText = evalDescr.getText();
+        st.setAttribute( "text",
+                         evalText );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "hashCode",
+                         evalText.hashCode() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         eval );
+        context.getDescrLookups().put( invokerClassName,
+                                       evalDescr );
+        return eval;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java (from rev 9773, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaPredicateBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,89 @@
+package org.drools.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.PredicateConstraint;
+import org.drools.semantics.java.builder.BuildContext;
+import org.drools.semantics.java.builder.BuildUtils;
+import org.drools.semantics.java.builder.PredicateBuilder;
+
+public class JavaPredicateBuilder
+    implements
+    PredicateBuilder {
+
+    public void build(final BuildContext context,
+                      final BuildUtils utils,
+                      final List[] usedIdentifiers,
+                      final Declaration[] previousDeclarations,
+                      final Declaration[] localDeclarations,
+                      final PredicateConstraint predicateConstraint,
+                      final PredicateDescr predicateDescr) {
+        // generate 
+        // generate Invoker
+        final String className = "predicate" + context.getNextId();
+        predicateDescr.setClassMethodName( className );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        final String[] localDeclarationTypes = new String[localDeclarations.length];
+        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
+            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+        }
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String predicateText = predicateDescr.getText();
+
+        st.setAttribute( "text",
+                         predicateText );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "hashCode",
+                         predicateText.hashCode() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         predicateConstraint );
+        context.getDescrLookups().put( invokerClassName,
+                                       predicateDescr );
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java (from rev 9773, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/dialect/java/JavaReturnValueBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,81 @@
+package org.drools.dialect.java;
+
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.rule.Declaration;
+import org.drools.rule.ReturnValueRestriction;
+import org.drools.semantics.java.builder.BuildContext;
+import org.drools.semantics.java.builder.BuildUtils;
+
+public class JavaReturnValueBuilder {
+    public void build(final BuildContext context,
+                      final BuildUtils utils,
+                      final List[] usedIdentifiers,
+                      final Declaration[] previousDeclarations,
+                      final Declaration[] localDeclarations,
+                      final ReturnValueRestriction returnValueRestriction,
+                      final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
+        final String className = "returnValue" + context.getNextId();
+        returnValueRestrictionDescr.setClassMethodName( className );
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        final String[] localDeclarationTypes = new String[localDeclarations.length];
+        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
+            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
+        }
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String returnValueText = returnValueRestrictionDescr.getText();
+        st.setAttribute( "text",
+                         returnValueText );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           previousDeclarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        st.setAttribute( "localDeclarations",
+                         localDeclarations );
+        st.setAttribute( "localDeclarationTypes",
+                         localDeclarationTypes );
+
+        st.setAttribute( "hashCode",
+                         returnValueText.hashCode() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         returnValueRestriction );
+        context.getDescrLookups().put( invokerClassName,
+                                       returnValueRestrictionDescr );
+    }
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -26,6 +26,7 @@
 import org.drools.RuntimeDroolsException;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.evaluators.DateFactory;
+import org.drools.dialect.java.JavaEvalBuilder;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
@@ -48,7 +49,7 @@
 import org.drools.semantics.java.builder.ColumnBuilder;
 import org.drools.semantics.java.builder.ConditionalElementBuilder;
 import org.drools.semantics.java.builder.ConsequenceBuilder;
-import org.drools.semantics.java.builder.EvalBuilder;
+import org.drools.semantics.java.builder.JavaConsequenceBuilder;
 import org.drools.semantics.java.builder.ForallBuilder;
 import org.drools.semantics.java.builder.FromBuilder;
 import org.drools.semantics.java.builder.GroupElementBuilder;
@@ -88,7 +89,7 @@
         // if we want to
         this.builders = new HashMap();
         builders.put( EvalDescr.class,
-                      new EvalBuilder() );
+                      new JavaEvalBuilder() );
         builders.put( FromDescr.class,
                       new FromBuilder() );
         builders.put( CollectDescr.class,
@@ -117,7 +118,7 @@
 
         this.columnBuilder = new ColumnBuilder();
 
-        this.consequenceBuilder = new ConsequenceBuilder();
+        this.consequenceBuilder = new JavaConsequenceBuilder();
         
         this.classBuilder = new RuleClassBuilder();
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java	2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ColumnBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -28,6 +28,8 @@
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.compiler.RuleError;
+import org.drools.dialect.java.JavaPredicateBuilder;
+import org.drools.dialect.java.JavaReturnValueBuilder;
 import org.drools.facttemplates.FactTemplate;
 import org.drools.facttemplates.FactTemplateFieldExtractor;
 import org.drools.facttemplates.FactTemplateObjectType;

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java	2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,113 +0,0 @@
-/*
- * Copyright 2006 JBoss Inc
- * 
- * 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.semantics.java.builder;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.RuntimeDroolsException;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Declaration;
-
-/**
- * @author etirelli
- *
- */
-public class ConsequenceBuilder {
-
-    public void buildConsequence(final BuildContext context,
-                                 final BuildUtils utils,
-                                 final RuleDescr ruleDescr) {
-        
-        // pushing consequence LHS into the stack for variable resolution
-        context.getBuildStack().push( context.getRule().getLhs() );
-        
-        // generate 
-        // generate Invoker
-        final String className = "consequence";
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
-                                                                  ruleDescr,
-                                                                  ruleDescr.getConsequence() );
-
-        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
-        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
-        }
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-        st.setAttribute( "text",
-                         utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ) );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        // Must use the rule declarations, so we use the same order as used in the generated invoker
-        final List list = Arrays.asList( context.getRule().getDeclarations() );
-
-        final int[] indexes = new int[declarations.length];
-        for ( int i = 0, length = declarations.length; i < length; i++ ) {
-            indexes[i] = list.indexOf( declarations[i] );
-            if ( indexes[i] == -1 ) {
-                // some defensive code, this should never happen
-                throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
-            }
-        }
-
-        st.setAttribute( "indexes",
-                         indexes );
-
-        st.setAttribute( "text",
-                         ruleDescr.getConsequence() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         context.getRule() );
-        context.getDescrLookups().put( invokerClassName,
-                                       ruleDescr );
-        
-        // popping Rule.getLHS() from the build stack
-        context.getBuildStack().pop();
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java	2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/EvalBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,113 +0,0 @@
-/*
- * Copyright 2006 JBoss Inc
- * 
- * 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.semantics.java.builder;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Declaration;
-import org.drools.rule.EvalCondition;
-
-/**
- * @author etirelli
- *
- */
-public class EvalBuilder
-    implements
-    ConditionalElementBuilder {
-
-    /**
-     * Builds and returns an Eval Conditional Element
-     * 
-     * @param context The current build context
-     * @param utils The current build utils instance
-     * @param columnBuilder not used by EvalBuilder
-     * @param descr The Eval Descriptor to build the eval conditional element from
-     * 
-     * @return the Eval Conditional Element
-     */
-    public ConditionalElement build(final BuildContext context,
-                                    final BuildUtils utils,
-                                    final ColumnBuilder columnBuilder,
-                                    final BaseDescr descr) {
-        // it must be an EvalDescr
-        EvalDescr evalDescr = (EvalDescr) descr;
-
-        final String className = "eval" + context.getNextId();
-        
-        evalDescr.setClassMethodName( className );
-
-        final List[] usedIdentifiers = utils.getUsedIdentifiers( context,
-                                                                 evalDescr,
-                                                                 evalDescr.getText() );
-
-        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
-        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
-            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
-        }
-
-        final EvalCondition eval = new EvalCondition( declarations );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "evalMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final String evalText = evalDescr.getText();
-        st.setAttribute( "text",
-                         evalText );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "evalInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           declarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "hashCode",
-                         evalText.hashCode() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         eval );
-        context.getDescrLookups().put( invokerClassName,
-                                       evalDescr );
-        return eval;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java (from rev 9753, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/ConsequenceBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaConsequenceBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * 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.semantics.java.builder;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.drools.RuntimeDroolsException;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Declaration;
+
+/**
+ * @author etirelli
+ *
+ */
+public class JavaConsequenceBuilder implements ConsequenceBuilder {
+
+    /* (non-Javadoc)
+     * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
+     */
+    public void buildConsequence(final BuildContext context,
+                                 final BuildUtils utils,
+                                 final RuleDescr ruleDescr) {
+        
+        // pushing consequence LHS into the stack for variable resolution
+        context.getBuildStack().push( context.getRule().getLhs() );
+        
+        // generate 
+        // generate Invoker
+        final String className = "consequence";
+
+        StringTemplate st = utils.getRuleGroup().getInstanceOf( "consequenceMethod" );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final List[] usedIdentifiers = utils.getUsedCIdentifiers( context,
+                                                                  ruleDescr,
+                                                                  ruleDescr.getConsequence() );
+
+        final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
+        for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
+            declarations[i] = (Declaration) context.getDeclarationResolver().getDeclaration( (String) usedIdentifiers[0].get( i ) );
+        }
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+        st.setAttribute( "text",
+                         utils.getKnowledgeHelperFixer().fix( ruleDescr.getConsequence() ) );
+
+        context.getMethods().add( st.toString() );
+
+        st = utils.getInvokerGroup().getInstanceOf( "consequenceInvoker" );
+
+        st.setAttribute( "package",
+                         context.getPkg().getName() );
+        st.setAttribute( "ruleClassName",
+                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        utils.setStringTemplateAttributes( context,
+                                           st,
+                                           declarations,
+                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+
+        // Must use the rule declarations, so we use the same order as used in the generated invoker
+        final List list = Arrays.asList( context.getRule().getDeclarations() );
+
+        final int[] indexes = new int[declarations.length];
+        for ( int i = 0, length = declarations.length; i < length; i++ ) {
+            indexes[i] = list.indexOf( declarations[i] );
+            if ( indexes[i] == -1 ) {
+                // some defensive code, this should never happen
+                throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
+            }
+        }
+
+        st.setAttribute( "indexes",
+                         indexes );
+
+        st.setAttribute( "text",
+                         ruleDescr.getConsequence() );
+
+        final String invokerClassName = context.getPkg().getName() + "." + ruleDescr.getClassName() + utils.ucFirst( className ) + "Invoker";
+        context.getInvokers().put( invokerClassName,
+                                   st.toString() );
+        context.getInvokerLookups().put( invokerClassName,
+                                         context.getRule() );
+        context.getDescrLookups().put( invokerClassName,
+                                       ruleDescr );
+        
+        // popping Rule.getLHS() from the build stack
+        context.getBuildStack().pop();
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java	2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaPredicateBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,86 +0,0 @@
-package org.drools.semantics.java.builder;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.PredicateConstraint;
-
-public class JavaPredicateBuilder
-    implements
-    PredicateBuilder {
-
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
-                      final List[] usedIdentifiers,
-                      final Declaration[] previousDeclarations,
-                      final Declaration[] localDeclarations,
-                      final PredicateConstraint predicateConstraint,
-                      final PredicateDescr predicateDescr) {
-        // generate 
-        // generate Invoker
-        final String className = "predicate" + context.getNextId();
-        predicateDescr.setClassMethodName( className );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "predicateMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        final String[] localDeclarationTypes = new String[localDeclarations.length];
-        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
-            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
-        }
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final String predicateText = predicateDescr.getText();
-
-        st.setAttribute( "text",
-                         predicateText );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "predicateInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "hashCode",
-                         predicateText.hashCode() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         predicateConstraint );
-        context.getDescrLookups().put( invokerClassName,
-                                       predicateDescr );
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java	2007-02-26 23:31:35 UTC (rev 9773)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/builder/JavaReturnValueBuilder.java	2007-02-26 23:49:21 UTC (rev 9774)
@@ -1,79 +0,0 @@
-package org.drools.semantics.java.builder;
-
-import java.util.List;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
-import org.drools.rule.Declaration;
-import org.drools.rule.ReturnValueRestriction;
-
-public class JavaReturnValueBuilder {
-    public void build(final BuildContext context,
-                      final BuildUtils utils,
-                      final List[] usedIdentifiers,
-                      final Declaration[] previousDeclarations,
-                      final Declaration[] localDeclarations,
-                      final ReturnValueRestriction returnValueRestriction,
-                      final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
-        final String className = "returnValue" + context.getNextId();
-        returnValueRestrictionDescr.setClassMethodName( className );
-
-        StringTemplate st = utils.getRuleGroup().getInstanceOf( "returnValueMethod" );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        final String[] localDeclarationTypes = new String[localDeclarations.length];
-        for ( int i = 0, size = localDeclarations.length; i < size; i++ ) {
-            localDeclarationTypes[i] = utils.getTypeFixer().fix( localDeclarations[i] );
-        }
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "methodName",
-                         className );
-
-        final String returnValueText = returnValueRestrictionDescr.getText();
-        st.setAttribute( "text",
-                         returnValueText );
-
-        context.getMethods().add( st.toString() );
-
-        st = utils.getInvokerGroup().getInstanceOf( "returnValueInvoker" );
-
-        st.setAttribute( "package",
-                         context.getPkg().getName() );
-        st.setAttribute( "ruleClassName",
-                         utils.ucFirst( context.getRuleDescr().getClassName() ) );
-        st.setAttribute( "invokerClassName",
-                         context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker" );
-        st.setAttribute( "methodName",
-                         className );
-
-        utils.setStringTemplateAttributes( context,
-                                           st,
-                                           previousDeclarations,
-                                           (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-
-        st.setAttribute( "localDeclarations",
-                         localDeclarations );
-        st.setAttribute( "localDeclarationTypes",
-                         localDeclarationTypes );
-
-        st.setAttribute( "hashCode",
-                         returnValueText.hashCode() );
-
-        final String invokerClassName = context.getPkg().getName() + "." + context.getRuleDescr().getClassName() + utils.ucFirst( className ) + "Invoker";
-        context.getInvokers().put( invokerClassName,
-                                   st.toString() );
-        context.getInvokerLookups().put( invokerClassName,
-                                         returnValueRestriction );
-        context.getDescrLookups().put( invokerClassName,
-                                       returnValueRestrictionDescr );
-    }
-}




More information about the jboss-svn-commits mailing list