[jboss-svn-commits] JBL Code SVN: r12105 - in labs/jbossrules/trunk: drools-clips/src/main/java/org/drools/clp and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 23 12:20:50 EDT 2007


Author: tirelli
Date: 2007-05-23 12:20:50 -0400 (Wed, 23 May 2007)
New Revision: 12105

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/Location.java
Modified:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/CLPParser.java
   labs/jbossrules/trunk/drools-compiler/.classpath
   labs/jbossrules/trunk/drools-compiler/.project
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java
   labs/jbossrules/trunk/pom.xml
Log:
JBRULES-871: fixing IDE tests. Instrumenting parser to provide more information during parsing and partial parsing. 

Modified: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/CLPParser.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/CLPParser.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/CLPParser.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1206,7 +1206,7 @@
             			fc = new FieldConstraintDescr(f.getText());
             			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
             			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
-            			pattern.addDescr( fc );			
+            			pattern.addConstraint( fc );			
             		
             pushFollow(FOLLOW_connected_constraint_in_field_constriant852);
             connected_constraint(fc,  pattern);
@@ -1443,7 +1443,7 @@
 
             	
             		    engine.addFunction( (FunctionCaller) fc );
-            			pattern.addDescr( new PredicateDescr( engine ) );
+            			pattern.addConstraint( new PredicateDescr( engine ) );
             		
 
             }

Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/.classpath	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,18 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta18/mvel14-1.2beta18.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0b7/antlr-3.0b7.jar"/>
-</classpath>
\ No newline at end of file
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="/drools-core"/>
+	<classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta18/mvel14-1.2beta18.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0/antlr-3.0.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/trunk/drools-compiler/.project
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.project	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/.project	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,9 +1,7 @@
 <projectDescription>
   <name>drools-compiler</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-core</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -28,6 +28,7 @@
 import org.drools.lang.DRLLexer;
 import org.drools.lang.DRLParser;
 import org.drools.lang.Expander;
+import org.drools.lang.Location;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.dsl.DefaultExpanderResolver;
 
@@ -38,6 +39,7 @@
 public class DrlParser {
 
     private final List results = new ArrayList();
+    private Location location = null;
 
     public DrlParser() {
 
@@ -47,6 +49,7 @@
     public PackageDescr parse(final String text) throws DroolsParserException {
         final DRLParser parser = getParser( text );
         compile( parser );
+        this.location = parser.getLocation();
         return parser.getPackageDescr();
 
     }
@@ -54,6 +57,7 @@
     public PackageDescr parse(final Reader reader) throws DroolsParserException {
         final DRLParser parser = getParser( reader );
         compile( parser );
+        this.location = parser.getLocation();
         return parser.getPackageDescr();
 
     }
@@ -168,4 +172,8 @@
                                         e );
         }
     }
+    
+    public Location getLocation() {
+        return this.location; 
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,5 +1,5 @@
 EXISTS=56
-COMMA=47
+COMMA=31
 AUTO_FOCUS=22
 END=10
 HexDigit=62
@@ -10,12 +10,12 @@
 QUERY=9
 THEN=58
 RULE=12
-INIT=30
+INIT=32
 IMPORT=6
 DATE_EFFECTIVE=14
 PACKAGE=5
-OR=37
-DOUBLE_PIPE=38
+OR=38
+DOUBLE_PIPE=39
 AND=54
 FUNCTION=7
 GLOBAL=8
@@ -25,58 +25,58 @@
 LOCK_ON_ACTIVE=28
 DATE_EXPIRES=16
 LEFT_SQUARE=52
-CONTAINS=41
+CONTAINS=42
 SH_STYLE_SINGLE_LINE_COMMENT=65
 ATTRIBUTES=4
 LEFT_CURLY=50
-RESULT=32
+RESULT=34
 FROM=55
-ID=34
+ID=37
 ACTIVATION_GROUP=23
-LEFT_PAREN=35
-DOUBLE_AMPER=39
+LEFT_PAREN=30
+DOUBLE_AMPER=40
 RIGHT_CURLY=51
+EXCLUDES=44
 BOOL=18
-EXCLUDES=43
-MEMBEROF=44
+MEMBEROF=45
 WHEN=13
 RULEFLOW_GROUP=24
 WS=60
 STRING=15
-ACTION=31
-COLLECT=33
-IN=46
+ACTION=33
+COLLECT=36
+IN=47
 NO_LOOP=21
 ACCUMULATE=29
 UnicodeEscape=63
 DURATION=26
-EVAL=40
-MATCHES=42
+EVAL=41
+MATCHES=43
 EOL=59
 NULL=49
 AGENDA_GROUP=25
 OctalEscape=64
 SALIENCE=19
 MULTI_LINE_COMMENT=67
-NOT=45
-RIGHT_PAREN=36
+NOT=46
+RIGHT_PAREN=35
 ENABLED=17
 RIGHT_SQUARE=53
 C_STYLE_SINGLE_LINE_COMMENT=66
 '->'=73
 '<'=77
 '>'=75
-')'=36
+')'=35
 '=='=74
 ';'=69
 ']'=53
 '!='=79
-','=47
-'('=35
+','=31
+'('=30
 '>='=76
 ':'=70
 '.'=71
-'||'=38
+'||'=39
 '<='=78
 '['=52
 '.*'=72

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-19 15:56:47
+// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-23 10:58:25
 
 	package org.drools.lang;
 
@@ -11,7 +11,7 @@
 import java.util.HashMap;
 public class DRLLexer extends Lexer {
     public static final int EXISTS=56;
-    public static final int COMMA=47;
+    public static final int COMMA=31;
     public static final int T79=79;
     public static final int AUTO_FOCUS=22;
     public static final int END=10;
@@ -25,12 +25,12 @@
     public static final int QUERY=9;
     public static final int THEN=58;
     public static final int RULE=12;
-    public static final int INIT=30;
+    public static final int INIT=32;
     public static final int IMPORT=6;
     public static final int PACKAGE=5;
     public static final int DATE_EFFECTIVE=14;
-    public static final int OR=37;
-    public static final int DOUBLE_PIPE=38;
+    public static final int OR=38;
+    public static final int DOUBLE_PIPE=39;
     public static final int AND=54;
     public static final int FUNCTION=7;
     public static final int GLOBAL=8;
@@ -40,41 +40,41 @@
     public static final int LOCK_ON_ACTIVE=28;
     public static final int DATE_EXPIRES=16;
     public static final int LEFT_SQUARE=52;
-    public static final int CONTAINS=41;
+    public static final int CONTAINS=42;
     public static final int SH_STYLE_SINGLE_LINE_COMMENT=65;
     public static final int T77=77;
     public static final int ATTRIBUTES=4;
     public static final int LEFT_CURLY=50;
-    public static final int RESULT=32;
+    public static final int RESULT=34;
     public static final int T69=69;
     public static final int FROM=55;
-    public static final int ID=34;
+    public static final int ID=37;
     public static final int ACTIVATION_GROUP=23;
-    public static final int LEFT_PAREN=35;
-    public static final int DOUBLE_AMPER=39;
+    public static final int LEFT_PAREN=30;
+    public static final int DOUBLE_AMPER=40;
     public static final int RIGHT_CURLY=51;
+    public static final int EXCLUDES=44;
     public static final int BOOL=18;
-    public static final int EXCLUDES=43;
     public static final int T73=73;
-    public static final int MEMBEROF=44;
+    public static final int MEMBEROF=45;
     public static final int WHEN=13;
     public static final int T78=78;
     public static final int RULEFLOW_GROUP=24;
     public static final int WS=60;
     public static final int STRING=15;
-    public static final int ACTION=31;
+    public static final int ACTION=33;
     public static final int T71=71;
     public static final int T72=72;
-    public static final int COLLECT=33;
+    public static final int COLLECT=36;
     public static final int T76=76;
-    public static final int IN=46;
+    public static final int IN=47;
     public static final int ACCUMULATE=29;
     public static final int NO_LOOP=21;
     public static final int UnicodeEscape=63;
     public static final int T75=75;
     public static final int DURATION=26;
-    public static final int EVAL=40;
-    public static final int MATCHES=42;
+    public static final int EVAL=41;
+    public static final int MATCHES=43;
     public static final int EOF=-1;
     public static final int AGENDA_GROUP=25;
     public static final int NULL=49;
@@ -83,8 +83,8 @@
     public static final int SALIENCE=19;
     public static final int OctalEscape=64;
     public static final int MULTI_LINE_COMMENT=67;
-    public static final int RIGHT_PAREN=36;
-    public static final int NOT=45;
+    public static final int RIGHT_PAREN=35;
+    public static final int NOT=46;
     public static final int ENABLED=17;
     public static final int RIGHT_SQUARE=53;
     public static final int C_STYLE_SINGLE_LINE_COMMENT=66;
@@ -303,10 +303,10 @@
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:17: ( ( ' ' | '\\t' | '\\f' | EOL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:17: ( ' ' | '\\t' | '\\f' | EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:17: ( ( ' ' | '\\t' | '\\f' | EOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:17: ( ' ' | '\\t' | '\\f' | EOL )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:17: ( ' ' | '\\t' | '\\f' | EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:17: ( ' ' | '\\t' | '\\f' | EOL )
             int alt1=4;
             switch ( input.LA(1) ) {
             case ' ':
@@ -333,35 +333,35 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1626:17: ( ' ' | '\\t' | '\\f' | EOL )", 1, 0, input);
+                    new NoViableAltException("1739:17: ( ' ' | '\\t' | '\\f' | EOL )", 1, 0, input);
 
                 throw nvae;
             }
 
             switch (alt1) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:19: ' '
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:19: ' '
                     {
                     match(' '); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:19: '\\t'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:19: '\\t'
                     {
                     match('\t'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1628:19: '\\f'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1741:19: '\\f'
                     {
                     match('\f'); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1629:19: EOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1742:19: EOL
                     {
                     mEOL(); if (failed) return ;
 
@@ -386,14 +386,14 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
-            if ( (LA2_0=='\r') && (synpred1())) {
+            if ( (LA2_0=='\r') ) {
                 int LA2_1 = input.LA(2);
 
                 if ( (LA2_1=='\n') && (synpred1())) {
@@ -408,13 +408,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1636:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1749:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -422,14 +422,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:25: '\\r'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1750:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1638:25: '\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -451,10 +451,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:4: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:4: ( '-' )? ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:4: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -463,7 +463,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -472,7 +472,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -486,7 +486,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -517,10 +517,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -529,7 +529,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -538,7 +538,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -552,7 +552,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -570,7 +570,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:26: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -584,7 +584,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:27: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -615,7 +615,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -628,19 +628,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1650:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1763:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -656,14 +656,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:15: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:32: ~ ( '\\\\' | '\"' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1764:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -693,13 +693,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -715,14 +715,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:16: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:33: ~ ( '\\\\' | '\\'' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -763,8 +763,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
             {
             if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {
                 input.consume();
@@ -789,7 +789,7 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1660:9: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:9: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape )
             int alt11=3;
             int LA11_0 = input.LA(1);
 
@@ -847,7 +847,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1658:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+                        new NoViableAltException("1771:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
 
                     throw nvae;
                 }
@@ -856,13 +856,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1658:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+                    new NoViableAltException("1771:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1660:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' )
                     {
                     match('\\'); if (failed) return ;
                     if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='.'||(input.LA(1)>='A' && input.LA(1)<='B')||(input.LA(1)>='D' && input.LA(1)<='E')||input.LA(1)=='G'||input.LA(1)=='Q'||input.LA(1)=='S'||input.LA(1)=='W'||input.LA(1)=='Z'||input.LA(1)=='\\'||(input.LA(1)>='a' && input.LA(1)<='f')||(input.LA(1)>='n' && input.LA(1)<='p')||(input.LA(1)>='r' && input.LA(1)<='t')||(input.LA(1)>='w' && input.LA(1)<='x')||input.LA(1)=='z' ) {
@@ -880,14 +880,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:9: UnicodeEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1774:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1662:9: OctalEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1775:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -904,7 +904,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -938,7 +938,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1665:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1778:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -946,31 +946,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1665:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1778:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:14: ( '0' .. '3' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:15: '0' .. '3'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:14: ( '0' .. '3' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:36: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:37: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:36: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -980,18 +980,18 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1001,11 +1001,11 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:9: '\\\\' ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1025,8 +1025,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1787:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1787:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -1047,10 +1047,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:4: ( ( 'true' | 'false' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:4: ( ( 'true' | 'false' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:4: ( 'true' | 'false' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1063,13 +1063,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1678:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1791:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:5: 'true'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -1077,7 +1077,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:12: 'false'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -1101,8 +1101,8 @@
     public final void mPACKAGE() throws RecognitionException {
         try {
             int _type = PACKAGE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:11: ( 'package' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:11: 'package'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1794:11: ( 'package' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1794:11: 'package'
             {
             match("package"); if (failed) return ;
 
@@ -1120,8 +1120,8 @@
     public final void mIMPORT() throws RecognitionException {
         try {
             int _type = IMPORT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:10: ( 'import' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:10: 'import'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:10: ( 'import' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:10: 'import'
             {
             match("import"); if (failed) return ;
 
@@ -1139,8 +1139,8 @@
     public final void mFUNCTION() throws RecognitionException {
         try {
             int _type = FUNCTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:12: ( 'function' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:12: 'function'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1798:12: ( 'function' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1798:12: 'function'
             {
             match("function"); if (failed) return ;
 
@@ -1158,8 +1158,8 @@
     public final void mGLOBAL() throws RecognitionException {
         try {
             int _type = GLOBAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:10: ( 'global' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:10: 'global'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1800:10: ( 'global' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1800:10: 'global'
             {
             match("global"); if (failed) return ;
 
@@ -1177,8 +1177,8 @@
     public final void mRULE() throws RecognitionException {
         try {
             int _type = RULE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:11: ( 'rule' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:11: 'rule'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1802:11: ( 'rule' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1802:11: 'rule'
             {
             match("rule"); if (failed) return ;
 
@@ -1196,8 +1196,8 @@
     public final void mQUERY() throws RecognitionException {
         try {
             int _type = QUERY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:9: ( 'query' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:9: 'query'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1804:9: ( 'query' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1804:9: 'query'
             {
             match("query"); if (failed) return ;
 
@@ -1215,8 +1215,8 @@
     public final void mTEMPLATE() throws RecognitionException {
         try {
             int _type = TEMPLATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:12: ( 'template' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:12: 'template'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1806:12: ( 'template' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1806:12: 'template'
             {
             match("template"); if (failed) return ;
 
@@ -1234,8 +1234,8 @@
     public final void mATTRIBUTES() throws RecognitionException {
         try {
             int _type = ATTRIBUTES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:14: ( 'attributes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:14: 'attributes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1808:14: ( 'attributes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1808:14: 'attributes'
             {
             match("attributes"); if (failed) return ;
 
@@ -1253,8 +1253,8 @@
     public final void mDATE_EFFECTIVE() throws RecognitionException {
         try {
             int _type = DATE_EFFECTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:4: ( 'date-effective' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:4: 'date-effective'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:4: ( 'date-effective' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:4: 'date-effective'
             {
             match("date-effective"); if (failed) return ;
 
@@ -1272,8 +1272,8 @@
     public final void mDATE_EXPIRES() throws RecognitionException {
         try {
             int _type = DATE_EXPIRES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: ( 'date-expires' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: 'date-expires'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1814:4: ( 'date-expires' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1814:4: 'date-expires'
             {
             match("date-expires"); if (failed) return ;
 
@@ -1291,8 +1291,8 @@
     public final void mENABLED() throws RecognitionException {
         try {
             int _type = ENABLED;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:11: ( 'enabled' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:11: 'enabled'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1816:11: ( 'enabled' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1816:11: 'enabled'
             {
             match("enabled"); if (failed) return ;
 
@@ -1310,8 +1310,8 @@
     public final void mSALIENCE() throws RecognitionException {
         try {
             int _type = SALIENCE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1706:4: ( 'salience' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1706:4: 'salience'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1819:4: ( 'salience' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1819:4: 'salience'
             {
             match("salience"); if (failed) return ;
 
@@ -1329,8 +1329,8 @@
     public final void mNO_LOOP() throws RecognitionException {
         try {
             int _type = NO_LOOP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1708:11: ( 'no-loop' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1708:11: 'no-loop'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1821:11: ( 'no-loop' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1821:11: 'no-loop'
             {
             match("no-loop"); if (failed) return ;
 
@@ -1348,8 +1348,8 @@
     public final void mAUTO_FOCUS() throws RecognitionException {
         try {
             int _type = AUTO_FOCUS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:4: ( 'auto-focus' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:4: 'auto-focus'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1824:4: ( 'auto-focus' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1824:4: 'auto-focus'
             {
             match("auto-focus"); if (failed) return ;
 
@@ -1367,8 +1367,8 @@
     public final void mACTIVATION_GROUP() throws RecognitionException {
         try {
             int _type = ACTIVATION_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:4: ( 'activation-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:4: 'activation-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1827:4: ( 'activation-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1827:4: 'activation-group'
             {
             match("activation-group"); if (failed) return ;
 
@@ -1386,8 +1386,8 @@
     public final void mAGENDA_GROUP() throws RecognitionException {
         try {
             int _type = AGENDA_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:4: ( 'agenda-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:4: 'agenda-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1830:4: ( 'agenda-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1830:4: 'agenda-group'
             {
             match("agenda-group"); if (failed) return ;
 
@@ -1405,8 +1405,8 @@
     public final void mDIALECT() throws RecognitionException {
         try {
             int _type = DIALECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:4: ( 'dialect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:4: 'dialect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1833:4: ( 'dialect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1833:4: 'dialect'
             {
             match("dialect"); if (failed) return ;
 
@@ -1424,8 +1424,8 @@
     public final void mRULEFLOW_GROUP() throws RecognitionException {
         try {
             int _type = RULEFLOW_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1723:4: ( 'ruleflow-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1723:4: 'ruleflow-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1836:4: ( 'ruleflow-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1836:4: 'ruleflow-group'
             {
             match("ruleflow-group"); if (failed) return ;
 
@@ -1443,8 +1443,8 @@
     public final void mDURATION() throws RecognitionException {
         try {
             int _type = DURATION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:4: ( 'duration' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:4: 'duration'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1839:4: ( 'duration' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1839:4: 'duration'
             {
             match("duration"); if (failed) return ;
 
@@ -1462,8 +1462,8 @@
     public final void mLOCK_ON_ACTIVE() throws RecognitionException {
         try {
             int _type = LOCK_ON_ACTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:4: ( 'lock-on-active' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:4: 'lock-on-active'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1842:4: ( 'lock-on-active' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1842:4: 'lock-on-active'
             {
             match("lock-on-active"); if (failed) return ;
 
@@ -1481,8 +1481,8 @@
     public final void mFROM() throws RecognitionException {
         try {
             int _type = FROM;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:8: ( 'from' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:8: 'from'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1844:8: ( 'from' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1844:8: 'from'
             {
             match("from"); if (failed) return ;
 
@@ -1500,8 +1500,8 @@
     public final void mACCUMULATE() throws RecognitionException {
         try {
             int _type = ACCUMULATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1734:4: ( 'accumulate' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1734:4: 'accumulate'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1847:4: ( 'accumulate' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1847:4: 'accumulate'
             {
             match("accumulate"); if (failed) return ;
 
@@ -1519,8 +1519,8 @@
     public final void mINIT() throws RecognitionException {
         try {
             int _type = INIT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:8: ( 'init' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:8: 'init'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1849:8: ( 'init' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1849:8: 'init'
             {
             match("init"); if (failed) return ;
 
@@ -1538,8 +1538,8 @@
     public final void mACTION() throws RecognitionException {
         try {
             int _type = ACTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:10: ( 'action' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:10: 'action'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1851:10: ( 'action' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1851:10: 'action'
             {
             match("action"); if (failed) return ;
 
@@ -1557,8 +1557,8 @@
     public final void mRESULT() throws RecognitionException {
         try {
             int _type = RESULT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:10: ( 'result' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:10: 'result'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1853:10: ( 'result' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1853:10: 'result'
             {
             match("result"); if (failed) return ;
 
@@ -1576,8 +1576,8 @@
     public final void mCOLLECT() throws RecognitionException {
         try {
             int _type = COLLECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1742:11: ( 'collect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1742:11: 'collect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1855:11: ( 'collect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1855:11: 'collect'
             {
             match("collect"); if (failed) return ;
 
@@ -1595,8 +1595,8 @@
     public final void mOR() throws RecognitionException {
         try {
             int _type = OR;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1744:6: ( 'or' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1744:6: 'or'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1857:6: ( 'or' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1857:6: 'or'
             {
             match("or"); if (failed) return ;
 
@@ -1614,8 +1614,8 @@
     public final void mAND() throws RecognitionException {
         try {
             int _type = AND;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1746:7: ( 'and' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1746:7: 'and'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1859:7: ( 'and' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1859:7: 'and'
             {
             match("and"); if (failed) return ;
 
@@ -1633,8 +1633,8 @@
     public final void mCONTAINS() throws RecognitionException {
         try {
             int _type = CONTAINS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:4: ( 'contains' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:4: 'contains'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1862:4: ( 'contains' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1862:4: 'contains'
             {
             match("contains"); if (failed) return ;
 
@@ -1652,8 +1652,8 @@
     public final void mEXCLUDES() throws RecognitionException {
         try {
             int _type = EXCLUDES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:4: ( 'excludes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:4: 'excludes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1865:4: ( 'excludes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1865:4: 'excludes'
             {
             match("excludes"); if (failed) return ;
 
@@ -1671,8 +1671,8 @@
     public final void mMEMBEROF() throws RecognitionException {
         try {
             int _type = MEMBEROF;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:4: ( 'memberOf' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:4: 'memberOf'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1868:4: ( 'memberOf' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1868:4: 'memberOf'
             {
             match("memberOf"); if (failed) return ;
 
@@ -1690,8 +1690,8 @@
     public final void mMATCHES() throws RecognitionException {
         try {
             int _type = MATCHES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:11: ( 'matches' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:11: 'matches'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1870:11: ( 'matches' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1870:11: 'matches'
             {
             match("matches"); if (failed) return ;
 
@@ -1709,8 +1709,8 @@
     public final void mIN() throws RecognitionException {
         try {
             int _type = IN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759:6: ( 'in' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759:6: 'in'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1872:6: ( 'in' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1872:6: 'in'
             {
             match("in"); if (failed) return ;
 
@@ -1728,8 +1728,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:8: ( 'null' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:8: 'null'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1874:8: ( 'null' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1874:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -1747,8 +1747,8 @@
     public final void mEXISTS() throws RecognitionException {
         try {
             int _type = EXISTS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763:10: ( 'exists' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763:10: 'exists'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1876:10: ( 'exists' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1876:10: 'exists'
             {
             match("exists"); if (failed) return ;
 
@@ -1766,8 +1766,8 @@
     public final void mNOT() throws RecognitionException {
         try {
             int _type = NOT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:7: ( 'not' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:7: 'not'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1878:7: ( 'not' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1878:7: 'not'
             {
             match("not"); if (failed) return ;
 
@@ -1785,8 +1785,8 @@
     public final void mEVAL() throws RecognitionException {
         try {
             int _type = EVAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1767:8: ( 'eval' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1767:8: 'eval'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1880:8: ( 'eval' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1880:8: 'eval'
             {
             match("eval"); if (failed) return ;
 
@@ -1804,8 +1804,8 @@
     public final void mFORALL() throws RecognitionException {
         try {
             int _type = FORALL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:10: ( 'forall' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:10: 'forall'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1882:10: ( 'forall' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1882:10: 'forall'
             {
             match("forall"); if (failed) return ;
 
@@ -1823,8 +1823,8 @@
     public final void mWHEN() throws RecognitionException {
         try {
             int _type = WHEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1771:11: ( 'when' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1771:11: 'when'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1884:11: ( 'when' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1884:11: 'when'
             {
             match("when"); if (failed) return ;
 
@@ -1842,8 +1842,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:12: ( 'then' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:12: 'then'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1886:12: ( 'then' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1886:12: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1861,8 +1861,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1775:11: ( 'end' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1775:11: 'end'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1888:11: ( 'end' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1888:11: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1880,8 +1880,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1891:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1891:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             {
             if ( input.LA(1)=='$'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
                 input.consume();
@@ -1894,7 +1894,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1891:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1943,8 +1943,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:11: ( '(' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:11: '('
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1895:11: ( '(' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1895:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1961,8 +1961,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1786:11: ( ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1786:11: ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1899:11: ( ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1899:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1979,8 +1979,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:11: ( '[' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:11: '['
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1903:11: ( '[' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1903:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1997,8 +1997,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1794:11: ( ']' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1794:11: ']'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1907:11: ( ']' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1907:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -2015,8 +2015,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1798:11: ( '{' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1798:11: '{'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1911:11: ( '{' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1911:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -2033,8 +2033,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1802:11: ( '}' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1802:11: '}'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1915:11: ( '}' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1915:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -2051,8 +2051,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1805:9: ( ',' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1805:9: ','
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1918:9: ( ',' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1918:9: ','
             {
             match(','); if (failed) return ;
 
@@ -2069,8 +2069,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1809:4: ( '&&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1809:4: '&&'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1922:4: ( '&&' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1922:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -2088,8 +2088,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1813:4: ( '||' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1813:4: '||'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1926:4: ( '||' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1926:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -2107,11 +2107,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:4: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:4: '#' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1930:4: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1930:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:8: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1930:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2130,7 +2130,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1930:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2160,12 +2160,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:4: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:4: '//' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1936:4: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1936:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1936:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -2184,7 +2184,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:36: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1936:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2214,12 +2214,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1941:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1941:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1941:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -2244,7 +2244,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1941:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2275,7 +2275,7 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1833:3: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1946:3: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
@@ -2808,8 +2808,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:14: ( '\\r\\n' )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:16: '\\r\\n'
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:14: ( '\\r\\n' )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-19 15:56:46
+// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-23 10:58:25
 
 	package org.drools.lang;
 	import java.util.List;
@@ -18,10 +18,10 @@
 import java.util.HashMap;
 public class DRLParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ATTRIBUTES", "PACKAGE", "IMPORT", "FUNCTION", "GLOBAL", "QUERY", "END", "TEMPLATE", "RULE", "WHEN", "DATE_EFFECTIVE", "STRING", "DATE_EXPIRES", "ENABLED", "BOOL", "SALIENCE", "INT", "NO_LOOP", "AUTO_FOCUS", "ACTIVATION_GROUP", "RULEFLOW_GROUP", "AGENDA_GROUP", "DURATION", "DIALECT", "LOCK_ON_ACTIVE", "ACCUMULATE", "INIT", "ACTION", "RESULT", "COLLECT", "ID", "LEFT_PAREN", "RIGHT_PAREN", "OR", "DOUBLE_PIPE", "DOUBLE_AMPER", "EVAL", "CONTAINS", "MATCHES", "EXCLUDES", "MEMBEROF", "NOT", "IN", "COMMA", "FLOAT", "NULL", "LEFT_CURLY", "RIGHT_CURLY", "LEFT_SQUARE", "RIGHT_SQUARE", "AND", "FROM", "EXISTS", "FORALL", "THEN", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "MISC", "';'", "':'", "'.'", "'.*'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!='"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ATTRIBUTES", "PACKAGE", "IMPORT", "FUNCTION", "GLOBAL", "QUERY", "END", "TEMPLATE", "RULE", "WHEN", "DATE_EFFECTIVE", "STRING", "DATE_EXPIRES", "ENABLED", "BOOL", "SALIENCE", "INT", "NO_LOOP", "AUTO_FOCUS", "ACTIVATION_GROUP", "RULEFLOW_GROUP", "AGENDA_GROUP", "DURATION", "DIALECT", "LOCK_ON_ACTIVE", "ACCUMULATE", "LEFT_PAREN", "COMMA", "INIT", "ACTION", "RESULT", "RIGHT_PAREN", "COLLECT", "ID", "OR", "DOUBLE_PIPE", "DOUBLE_AMPER", "EVAL", "CONTAINS", "MATCHES", "EXCLUDES", "MEMBEROF", "NOT", "IN", "FLOAT", "NULL", "LEFT_CURLY", "RIGHT_CURLY", "LEFT_SQUARE", "RIGHT_SQUARE", "AND", "FROM", "EXISTS", "FORALL", "THEN", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "MISC", "';'", "':'", "'.'", "'.*'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!='"
     };
     public static final int EXISTS=56;
-    public static final int COMMA=47;
+    public static final int COMMA=31;
     public static final int AUTO_FOCUS=22;
     public static final int END=10;
     public static final int HexDigit=62;
@@ -32,12 +32,12 @@
     public static final int QUERY=9;
     public static final int THEN=58;
     public static final int RULE=12;
-    public static final int INIT=30;
+    public static final int INIT=32;
     public static final int IMPORT=6;
     public static final int DATE_EFFECTIVE=14;
     public static final int PACKAGE=5;
-    public static final int OR=37;
-    public static final int DOUBLE_PIPE=38;
+    public static final int OR=38;
+    public static final int DOUBLE_PIPE=39;
     public static final int AND=54;
     public static final int FUNCTION=7;
     public static final int GLOBAL=8;
@@ -47,33 +47,33 @@
     public static final int LOCK_ON_ACTIVE=28;
     public static final int DATE_EXPIRES=16;
     public static final int LEFT_SQUARE=52;
-    public static final int CONTAINS=41;
+    public static final int CONTAINS=42;
     public static final int SH_STYLE_SINGLE_LINE_COMMENT=65;
     public static final int ATTRIBUTES=4;
     public static final int LEFT_CURLY=50;
-    public static final int RESULT=32;
+    public static final int RESULT=34;
     public static final int FROM=55;
-    public static final int ID=34;
+    public static final int ID=37;
     public static final int ACTIVATION_GROUP=23;
-    public static final int LEFT_PAREN=35;
-    public static final int DOUBLE_AMPER=39;
+    public static final int LEFT_PAREN=30;
+    public static final int DOUBLE_AMPER=40;
     public static final int RIGHT_CURLY=51;
+    public static final int EXCLUDES=44;
     public static final int BOOL=18;
-    public static final int EXCLUDES=43;
-    public static final int MEMBEROF=44;
+    public static final int MEMBEROF=45;
     public static final int WHEN=13;
     public static final int RULEFLOW_GROUP=24;
     public static final int WS=60;
     public static final int STRING=15;
-    public static final int ACTION=31;
-    public static final int COLLECT=33;
-    public static final int IN=46;
+    public static final int ACTION=33;
+    public static final int COLLECT=36;
+    public static final int IN=47;
     public static final int NO_LOOP=21;
     public static final int ACCUMULATE=29;
     public static final int UnicodeEscape=63;
     public static final int DURATION=26;
-    public static final int EVAL=40;
-    public static final int MATCHES=42;
+    public static final int EVAL=41;
+    public static final int MATCHES=43;
     public static final int EOF=-1;
     public static final int EOL=59;
     public static final int NULL=49;
@@ -81,15 +81,15 @@
     public static final int OctalEscape=64;
     public static final int SALIENCE=19;
     public static final int MULTI_LINE_COMMENT=67;
-    public static final int NOT=45;
-    public static final int RIGHT_PAREN=36;
+    public static final int NOT=46;
+    public static final int RIGHT_PAREN=35;
     public static final int ENABLED=17;
     public static final int RIGHT_SQUARE=53;
     public static final int C_STYLE_SINGLE_LINE_COMMENT=66;
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[216+1];
+            ruleMemo = new HashMap[219+1];
          }
         
 
@@ -103,6 +103,7 @@
     	private int lineOffset = 0;
     	private DescrFactory factory = new DescrFactory();
     	private boolean parserDebug = false;
+    	private Location location = new Location( Location.LOCATION_UNKNOWN );
     	
     	// THE FOLLOWING LINES ARE DUMMY ATTRIBUTES TO WORK AROUND AN ANTLR BUG
     	private BaseDescr from = null;
@@ -246,18 +247,22 @@
             		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
             	}
             }
+            
+            public Location getLocation() {
+                    return this.location;
+            }
           
 
 
 
     // $ANTLR start opt_semicolon
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:172:1: opt_semicolon : ( ';' )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:177:1: opt_semicolon : ( ';' )? ;
     public final void opt_semicolon() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( ( ';' )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( ';' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:4: ( ( ';' )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:4: ( ';' )?
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( ';' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:4: ( ';' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -291,17 +296,21 @@
 
 
     // $ANTLR start compilation_unit
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:176:1: compilation_unit : prolog ( statement )+ ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:1: compilation_unit : prolog ( statement )+ ;
     public final void compilation_unit() throws RecognitionException {
+
+        		// reset Location information
+        		this.location = new Location( Location.LOCATION_UNKNOWN );
+        	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:177:4: ( prolog ( statement )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:177:4: prolog ( statement )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:186:4: ( prolog ( statement )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:186:4: prolog ( statement )+
             {
-            pushFollow(FOLLOW_prolog_in_compilation_unit58);
+            pushFollow(FOLLOW_prolog_in_compilation_unit64);
             prolog();
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:3: ( statement )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:187:3: ( statement )+
             int cnt2=0;
             loop2:
             do {
@@ -315,9 +324,9 @@
 
                 switch (alt2) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:5: statement
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:187:5: statement
             	    {
-            	    pushFollow(FOLLOW_statement_in_compilation_unit65);
+            	    pushFollow(FOLLOW_statement_in_compilation_unit71);
             	    statement();
             	    _fsp--;
             	    if (failed) return ;
@@ -351,7 +360,7 @@
 
 
     // $ANTLR start prolog
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:1: prolog : (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:1: prolog : (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
     public final void prolog() throws RecognitionException {
         String n = null;
 
@@ -362,10 +371,10 @@
         		String packageName = "";
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: ( (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:194:4: ( (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:194:4: (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: (n= package_statement )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:194:4: (n= package_statement )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -374,9 +383,9 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:6: n= package_statement
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:194:6: n= package_statement
                     {
-                    pushFollow(FOLLOW_package_statement_in_prolog90);
+                    pushFollow(FOLLOW_package_statement_in_prolog96);
                     n=package_statement();
                     _fsp--;
                     if (failed) return ;
@@ -394,7 +403,7 @@
               			this.packageDescr = factory.createPackage( packageName ); 
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:189:4: ( ATTRIBUTES ':' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:198:4: ( ATTRIBUTES ':' )?
             int alt4=2;
             int LA4_0 = input.LA(1);
 
@@ -403,17 +412,17 @@
             }
             switch (alt4) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:189:5: ATTRIBUTES ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:198:5: ATTRIBUTES ':'
                     {
-                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_prolog105); if (failed) return ;
-                    match(input,70,FOLLOW_70_in_prolog107); if (failed) return ;
+                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_prolog111); if (failed) return ;
+                    match(input,70,FOLLOW_70_in_prolog113); if (failed) return ;
 
                     }
                     break;
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:4: ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: ( ( ',' )? a= rule_attribute )*
             loop6:
             do {
                 int alt6=2;
@@ -426,9 +435,9 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:6: ( ',' )? a= rule_attribute
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:6: ( ',' )? a= rule_attribute
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:6: ( ',' )?
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:6: ( ',' )?
             	    int alt5=2;
             	    int LA5_0 = input.LA(1);
 
@@ -439,14 +448,14 @@
             	        case 1 :
             	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: ','
             	            {
-            	            match(input,COMMA,FOLLOW_COMMA_in_prolog116); if (failed) return ;
+            	            match(input,COMMA,FOLLOW_COMMA_in_prolog122); if (failed) return ;
 
             	            }
             	            break;
 
             	    }
 
-            	    pushFollow(FOLLOW_rule_attribute_in_prolog121);
+            	    pushFollow(FOLLOW_rule_attribute_in_prolog127);
             	    a=rule_attribute();
             	    _fsp--;
             	    if (failed) return ;
@@ -480,7 +489,7 @@
 
 
     // $ANTLR start statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:197:1: statement : ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:206:1: statement : ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) ;
     public final void statement() throws RecognitionException {
         FactTemplateDescr t = null;
 
@@ -490,10 +499,10 @@
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:2: ( ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:208:2: ( ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:208:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:208:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
             int alt7=7;
             switch ( input.LA(1) ) {
             case IMPORT:
@@ -509,7 +518,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 1, input);
+                        new NoViableAltException("208:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 1, input);
 
                     throw nvae;
                 }
@@ -543,16 +552,16 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 0, input);
+                    new NoViableAltException("208:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 0, input);
 
                 throw nvae;
             }
 
             switch (alt7) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: function_import_statement
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:208:4: function_import_statement
                     {
-                    pushFollow(FOLLOW_function_import_statement_in_statement150);
+                    pushFollow(FOLLOW_function_import_statement_in_statement156);
                     function_import_statement();
                     _fsp--;
                     if (failed) return ;
@@ -560,9 +569,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: import_statement
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:209:4: import_statement
                     {
-                    pushFollow(FOLLOW_import_statement_in_statement156);
+                    pushFollow(FOLLOW_import_statement_in_statement162);
                     import_statement();
                     _fsp--;
                     if (failed) return ;
@@ -570,9 +579,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:201:4: global
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:210:4: global
                     {
-                    pushFollow(FOLLOW_global_in_statement162);
+                    pushFollow(FOLLOW_global_in_statement168);
                     global();
                     _fsp--;
                     if (failed) return ;
@@ -580,9 +589,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:202:4: function
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:211:4: function
                     {
-                    pushFollow(FOLLOW_function_in_statement168);
+                    pushFollow(FOLLOW_function_in_statement174);
                     function();
                     _fsp--;
                     if (failed) return ;
@@ -590,9 +599,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:203:10: t= template
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:212:10: t= template
                     {
-                    pushFollow(FOLLOW_template_in_statement182);
+                    pushFollow(FOLLOW_template_in_statement188);
                     t=template();
                     _fsp--;
                     if (failed) return ;
@@ -603,9 +612,9 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:204:4: r= rule
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:213:4: r= rule
                     {
-                    pushFollow(FOLLOW_rule_in_statement191);
+                    pushFollow(FOLLOW_rule_in_statement197);
                     r=rule();
                     _fsp--;
                     if (failed) return ;
@@ -616,9 +625,9 @@
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:205:4: q= query
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:214:4: q= query
                     {
-                    pushFollow(FOLLOW_query_in_statement203);
+                    pushFollow(FOLLOW_query_in_statement209);
                     q=query();
                     _fsp--;
                     if (failed) return ;
@@ -647,7 +656,7 @@
 
 
     // $ANTLR start package_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:209:1: package_statement returns [String packageName] : PACKAGE n= dotted_name[null] opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:218:1: package_statement returns [String packageName] : PACKAGE n= dotted_name[null] opt_semicolon ;
     public final String package_statement() throws RecognitionException {
         String packageName = null;
 
@@ -658,15 +667,15 @@
         		packageName = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:214:3: ( PACKAGE n= dotted_name[null] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:214:3: PACKAGE n= dotted_name[null] opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:223:3: ( PACKAGE n= dotted_name[null] opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:223:3: PACKAGE n= dotted_name[null] opt_semicolon
             {
-            match(input,PACKAGE,FOLLOW_PACKAGE_in_package_statement232); if (failed) return packageName;
-            pushFollow(FOLLOW_dotted_name_in_package_statement236);
+            match(input,PACKAGE,FOLLOW_PACKAGE_in_package_statement238); if (failed) return packageName;
+            pushFollow(FOLLOW_dotted_name_in_package_statement242);
             n=dotted_name(null);
             _fsp--;
             if (failed) return packageName;
-            pushFollow(FOLLOW_opt_semicolon_in_package_statement239);
+            pushFollow(FOLLOW_opt_semicolon_in_package_statement245);
             opt_semicolon();
             _fsp--;
             if (failed) return packageName;
@@ -691,7 +700,7 @@
 
 
     // $ANTLR start import_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:221:1: import_statement : imp= IMPORT import_name[importDecl] opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:230:1: import_statement : imp= IMPORT import_name[importDecl] opt_semicolon ;
     public final void import_statement() throws RecognitionException {
         Token imp=null;
 
@@ -699,11 +708,11 @@
                 	ImportDescr importDecl = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:225:4: (imp= IMPORT import_name[importDecl] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:225:4: imp= IMPORT import_name[importDecl] opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:234:4: (imp= IMPORT import_name[importDecl] opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:234:4: imp= IMPORT import_name[importDecl] opt_semicolon
             {
             imp=(Token)input.LT(1);
-            match(input,IMPORT,FOLLOW_IMPORT_in_import_statement271); if (failed) return ;
+            match(input,IMPORT,FOLLOW_IMPORT_in_import_statement277); if (failed) return ;
             if ( backtracking==0 ) {
 
               	            importDecl = factory.createImport( );
@@ -713,11 +722,11 @@
               		    }
               	        
             }
-            pushFollow(FOLLOW_import_name_in_import_statement294);
+            pushFollow(FOLLOW_import_name_in_import_statement300);
             import_name(importDecl);
             _fsp--;
             if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_import_statement297);
+            pushFollow(FOLLOW_opt_semicolon_in_import_statement303);
             opt_semicolon();
             _fsp--;
             if (failed) return ;
@@ -737,7 +746,7 @@
 
 
     // $ANTLR start function_import_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:236:1: function_import_statement : imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:245:1: function_import_statement : imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon ;
     public final void function_import_statement() throws RecognitionException {
         Token imp=null;
 
@@ -745,12 +754,12 @@
                 	FunctionImportDescr importDecl = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:240:4: (imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:240:4: imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:249:4: (imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:249:4: imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon
             {
             imp=(Token)input.LT(1);
-            match(input,IMPORT,FOLLOW_IMPORT_in_function_import_statement323); if (failed) return ;
-            match(input,FUNCTION,FOLLOW_FUNCTION_in_function_import_statement325); if (failed) return ;
+            match(input,IMPORT,FOLLOW_IMPORT_in_function_import_statement329); if (failed) return ;
+            match(input,FUNCTION,FOLLOW_FUNCTION_in_function_import_statement331); if (failed) return ;
             if ( backtracking==0 ) {
 
               	            importDecl = factory.createFunctionImport();
@@ -760,11 +769,11 @@
               		    }
               	        
             }
-            pushFollow(FOLLOW_import_name_in_function_import_statement348);
+            pushFollow(FOLLOW_import_name_in_function_import_statement354);
             import_name(importDecl);
             _fsp--;
             if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_function_import_statement351);
+            pushFollow(FOLLOW_opt_semicolon_in_function_import_statement357);
             opt_semicolon();
             _fsp--;
             if (failed) return ;
@@ -784,7 +793,7 @@
 
 
     // $ANTLR start import_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:252:1: import_name[ImportDescr importDecl] returns [String name] : id= identifier ( '.' id= identifier )* (star= '.*' )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:261:1: import_name[ImportDescr importDecl] returns [String name] : id= identifier ( '.' id= identifier )* (star= '.*' )? ;
     public final String import_name(ImportDescr importDecl) throws RecognitionException {
         String name = null;
 
@@ -796,10 +805,10 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:3: (id= identifier ( '.' id= identifier )* (star= '.*' )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:3: id= identifier ( '.' id= identifier )* (star= '.*' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:3: (id= identifier ( '.' id= identifier )* (star= '.*' )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:3: id= identifier ( '.' id= identifier )* (star= '.*' )?
             {
-            pushFollow(FOLLOW_identifier_in_import_name379);
+            pushFollow(FOLLOW_identifier_in_import_name385);
             id=identifier();
             _fsp--;
             if (failed) return name;
@@ -810,7 +819,7 @@
               		    importDecl.setEndCharacter( ((CommonToken)id).getStopIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263:3: ( '.' id= identifier )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:3: ( '.' id= identifier )*
             loop8:
             do {
                 int alt8=2;
@@ -823,10 +832,10 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263:5: '.' id= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:5: '.' id= identifier
             	    {
-            	    match(input,71,FOLLOW_71_in_import_name391); if (failed) return name;
-            	    pushFollow(FOLLOW_identifier_in_import_name395);
+            	    match(input,71,FOLLOW_71_in_import_name397); if (failed) return name;
+            	    pushFollow(FOLLOW_identifier_in_import_name401);
             	    id=identifier();
             	    _fsp--;
             	    if (failed) return name;
@@ -846,7 +855,7 @@
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:3: (star= '.*' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:279:3: (star= '.*' )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -855,10 +864,10 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:5: star= '.*'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:279:5: star= '.*'
                     {
                     star=(Token)input.LT(1);
-                    match(input,72,FOLLOW_72_in_import_name419); if (failed) return name;
+                    match(input,72,FOLLOW_72_in_import_name425); if (failed) return name;
                     if ( backtracking==0 ) {
                        
                       		        name = name + star.getText(); 
@@ -888,7 +897,7 @@
 
 
     // $ANTLR start global
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:1: global : loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:1: global : loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon ;
     public final void global() throws RecognitionException {
         Token loc=null;
         String type = null;
@@ -900,11 +909,11 @@
         	    GlobalDescr global = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:3: (loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:3: loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:3: (loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:3: loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon
             {
             loc=(Token)input.LT(1);
-            match(input,GLOBAL,FOLLOW_GLOBAL_in_global455); if (failed) return ;
+            match(input,GLOBAL,FOLLOW_GLOBAL_in_global461); if (failed) return ;
             if ( backtracking==0 ) {
 
               		    global = factory.createGlobal();
@@ -912,7 +921,7 @@
               		    packageDescr.addGlobal( global );
               		
             }
-            pushFollow(FOLLOW_dotted_name_in_global466);
+            pushFollow(FOLLOW_dotted_name_in_global472);
             type=dotted_name(null);
             _fsp--;
             if (failed) return ;
@@ -921,11 +930,11 @@
               		    global.setType( type );
               		
             }
-            pushFollow(FOLLOW_identifier_in_global478);
+            pushFollow(FOLLOW_identifier_in_global484);
             id=identifier();
             _fsp--;
             if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_global480);
+            pushFollow(FOLLOW_opt_semicolon_in_global486);
             opt_semicolon();
             _fsp--;
             if (failed) return ;
@@ -951,7 +960,7 @@
 
 
     // $ANTLR start function
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:303:1: function : loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:312:1: function : loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] ;
     public final void function() throws RecognitionException {
         Token loc=null;
         String retType = null;
@@ -969,27 +978,27 @@
         		FunctionDescr f = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:3: (loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:3: loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:3: (loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:3: loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f]
             {
             loc=(Token)input.LT(1);
-            match(input,FUNCTION,FOLLOW_FUNCTION_in_function507); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:16: (retType= dotted_name[null] )?
+            match(input,FUNCTION,FOLLOW_FUNCTION_in_function513); if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:16: (retType= dotted_name[null] )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
             if ( (LA10_0==ID) ) {
                 int LA10_1 = input.LA(2);
 
-                if ( ((LA10_1>=ATTRIBUTES && LA10_1<=WHEN)||LA10_1==ENABLED||LA10_1==SALIENCE||LA10_1==DURATION||(LA10_1>=ACCUMULATE && LA10_1<=ID)||LA10_1==OR||(LA10_1>=EVAL && LA10_1<=IN)||LA10_1==NULL||LA10_1==LEFT_SQUARE||(LA10_1>=AND && LA10_1<=THEN)||LA10_1==71) ) {
+                if ( ((LA10_1>=ATTRIBUTES && LA10_1<=WHEN)||LA10_1==ENABLED||LA10_1==SALIENCE||LA10_1==DURATION||LA10_1==ACCUMULATE||(LA10_1>=INIT && LA10_1<=RESULT)||(LA10_1>=COLLECT && LA10_1<=OR)||(LA10_1>=EVAL && LA10_1<=IN)||LA10_1==NULL||LA10_1==LEFT_SQUARE||(LA10_1>=AND && LA10_1<=THEN)||LA10_1==71) ) {
                     alt10=1;
                 }
             }
             switch (alt10) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:17: retType= dotted_name[null]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:17: retType= dotted_name[null]
                     {
-                    pushFollow(FOLLOW_dotted_name_in_function512);
+                    pushFollow(FOLLOW_dotted_name_in_function518);
                     retType=dotted_name(null);
                     _fsp--;
                     if (failed) return ;
@@ -999,7 +1008,7 @@
 
             }
 
-            pushFollow(FOLLOW_identifier_in_function519);
+            pushFollow(FOLLOW_identifier_in_function525);
             n=identifier();
             _fsp--;
             if (failed) return ;
@@ -1012,26 +1021,26 @@
               			packageDescr.addFunction( f );
               		
             }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_function528); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:4: ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )?
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_function534); if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:326:4: ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )?
             int alt14=2;
             int LA14_0 = input.LA(1);
 
-            if ( ((LA14_0>=ATTRIBUTES && LA14_0<=WHEN)||LA14_0==ENABLED||LA14_0==SALIENCE||LA14_0==DURATION||(LA14_0>=ACCUMULATE && LA14_0<=ID)||LA14_0==OR||(LA14_0>=EVAL && LA14_0<=IN)||LA14_0==NULL||(LA14_0>=AND && LA14_0<=THEN)) ) {
+            if ( ((LA14_0>=ATTRIBUTES && LA14_0<=WHEN)||LA14_0==ENABLED||LA14_0==SALIENCE||LA14_0==DURATION||LA14_0==ACCUMULATE||(LA14_0>=INIT && LA14_0<=RESULT)||(LA14_0>=COLLECT && LA14_0<=OR)||(LA14_0>=EVAL && LA14_0<=IN)||LA14_0==NULL||(LA14_0>=AND && LA14_0<=THEN)) ) {
                 alt14=1;
             }
             switch (alt14) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:6: (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:326:6: (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )*
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:6: (paramType= dotted_name[null] )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:326:6: (paramType= dotted_name[null] )?
                     int alt11=2;
                     alt11 = dfa11.predict(input);
                     switch (alt11) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:7: paramType= dotted_name[null]
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:326:7: paramType= dotted_name[null]
                             {
-                            pushFollow(FOLLOW_dotted_name_in_function538);
+                            pushFollow(FOLLOW_dotted_name_in_function544);
                             paramType=dotted_name(null);
                             _fsp--;
                             if (failed) return ;
@@ -1041,7 +1050,7 @@
 
                     }
 
-                    pushFollow(FOLLOW_argument_in_function545);
+                    pushFollow(FOLLOW_argument_in_function551);
                     paramName=argument();
                     _fsp--;
                     if (failed) return ;
@@ -1050,7 +1059,7 @@
                       					f.addParameter( paramType, paramName );
                       				
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:5: ( ',' (paramType= dotted_name[null] )? paramName= argument )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:5: ( ',' (paramType= dotted_name[null] )? paramName= argument )*
                     loop13:
                     do {
                         int alt13=2;
@@ -1063,17 +1072,17 @@
 
                         switch (alt13) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:7: ',' (paramType= dotted_name[null] )? paramName= argument
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:7: ',' (paramType= dotted_name[null] )? paramName= argument
                     	    {
-                    	    match(input,COMMA,FOLLOW_COMMA_in_function559); if (failed) return ;
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:11: (paramType= dotted_name[null] )?
+                    	    match(input,COMMA,FOLLOW_COMMA_in_function565); if (failed) return ;
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:11: (paramType= dotted_name[null] )?
                     	    int alt12=2;
                     	    alt12 = dfa12.predict(input);
                     	    switch (alt12) {
                     	        case 1 :
-                    	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:12: paramType= dotted_name[null]
+                    	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:12: paramType= dotted_name[null]
                     	            {
-                    	            pushFollow(FOLLOW_dotted_name_in_function564);
+                    	            pushFollow(FOLLOW_dotted_name_in_function570);
                     	            paramType=dotted_name(null);
                     	            _fsp--;
                     	            if (failed) return ;
@@ -1083,7 +1092,7 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_argument_in_function571);
+                    	    pushFollow(FOLLOW_argument_in_function577);
                     	    paramName=argument();
                     	    _fsp--;
                     	    if (failed) return ;
@@ -1107,8 +1116,8 @@
 
             }
 
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_function595); if (failed) return ;
-            pushFollow(FOLLOW_curly_chunk_in_function601);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_function601); if (failed) return ;
+            pushFollow(FOLLOW_curly_chunk_in_function607);
             body=curly_chunk(f);
             _fsp--;
             if (failed) return ;
@@ -1134,7 +1143,7 @@
 
 
     // $ANTLR start query
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:1: query returns [QueryDescr query] : loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:1: query returns [QueryDescr query] : loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END ;
     public final QueryDescr query() throws RecognitionException {
         QueryDescr query = null;
 
@@ -1147,12 +1156,12 @@
         		AndDescr lhs = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343:3: (loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343:3: loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:3: (loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:3: loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END
             {
             loc=(Token)input.LT(1);
-            match(input,QUERY,FOLLOW_QUERY_in_query633); if (failed) return query;
-            pushFollow(FOLLOW_name_in_query637);
+            match(input,QUERY,FOLLOW_QUERY_in_query639); if (failed) return query;
+            pushFollow(FOLLOW_name_in_query643);
             queryName=name();
             _fsp--;
             if (failed) return query;
@@ -1165,10 +1174,10 @@
               			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:3: ( normal_lhs_block[lhs] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:4: normal_lhs_block[lhs]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:3: ( normal_lhs_block[lhs] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:4: normal_lhs_block[lhs]
             {
-            pushFollow(FOLLOW_normal_lhs_block_in_query650);
+            pushFollow(FOLLOW_normal_lhs_block_in_query656);
             normal_lhs_block(lhs);
             _fsp--;
             if (failed) return query;
@@ -1176,7 +1185,7 @@
             }
 
             loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_query667); if (failed) return query;
+            match(input,END,FOLLOW_END_in_query673); if (failed) return query;
             if ( backtracking==0 ) {
 
               			query.setEndCharacter( ((CommonToken)loc).getStopIndex() );
@@ -1198,7 +1207,7 @@
 
 
     // $ANTLR start template
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:1: template returns [FactTemplateDescr template] : loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:1: template returns [FactTemplateDescr template] : loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon ;
     public final FactTemplateDescr template() throws RecognitionException {
         FactTemplateDescr template = null;
 
@@ -1212,16 +1221,16 @@
         		template = null;		
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: (loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:376:3: (loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:376:3: loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon
             {
             loc=(Token)input.LT(1);
-            match(input,TEMPLATE,FOLLOW_TEMPLATE_in_template697); if (failed) return template;
-            pushFollow(FOLLOW_identifier_in_template701);
+            match(input,TEMPLATE,FOLLOW_TEMPLATE_in_template703); if (failed) return template;
+            pushFollow(FOLLOW_identifier_in_template707);
             templateName=identifier();
             _fsp--;
             if (failed) return template;
-            pushFollow(FOLLOW_opt_semicolon_in_template703);
+            pushFollow(FOLLOW_opt_semicolon_in_template709);
             opt_semicolon();
             _fsp--;
             if (failed) return template;
@@ -1232,7 +1241,7 @@
               			template.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:3: (slot= template_slot )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:3: (slot= template_slot )+
             int cnt15=0;
             loop15:
             do {
@@ -1246,9 +1255,9 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:4: slot= template_slot
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:4: slot= template_slot
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template718);
+            	    pushFollow(FOLLOW_template_slot_in_template724);
             	    slot=template_slot();
             	    _fsp--;
             	    if (failed) return template;
@@ -1272,8 +1281,8 @@
             } while (true);
 
             loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_template735); if (failed) return template;
-            pushFollow(FOLLOW_opt_semicolon_in_template737);
+            match(input,END,FOLLOW_END_in_template741); if (failed) return template;
+            pushFollow(FOLLOW_opt_semicolon_in_template743);
             opt_semicolon();
             _fsp--;
             if (failed) return template;
@@ -1298,7 +1307,7 @@
 
 
     // $ANTLR start template_slot
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name[field] n= identifier opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name[field] n= identifier opt_semicolon ;
     public final FieldTemplateDescr template_slot() throws RecognitionException {
         FieldTemplateDescr field = null;
 
@@ -1311,15 +1320,15 @@
         		field = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:11: (fieldType= dotted_name[field] n= identifier opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:11: fieldType= dotted_name[field] n= identifier opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:11: (fieldType= dotted_name[field] n= identifier opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:11: fieldType= dotted_name[field] n= identifier opt_semicolon
             {
             if ( backtracking==0 ) {
 
               			field = factory.createFieldTemplate();
               	         
             }
-            pushFollow(FOLLOW_dotted_name_in_template_slot783);
+            pushFollow(FOLLOW_dotted_name_in_template_slot789);
             fieldType=dotted_name(field);
             _fsp--;
             if (failed) return field;
@@ -1328,11 +1337,11 @@
               		        field.setClassType( fieldType );
               		 
             }
-            pushFollow(FOLLOW_identifier_in_template_slot801);
+            pushFollow(FOLLOW_identifier_in_template_slot807);
             n=identifier();
             _fsp--;
             if (failed) return field;
-            pushFollow(FOLLOW_opt_semicolon_in_template_slot803);
+            pushFollow(FOLLOW_opt_semicolon_in_template_slot809);
             opt_semicolon();
             _fsp--;
             if (failed) return field;
@@ -1359,7 +1368,7 @@
 
 
     // $ANTLR start rule
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:1: rule returns [RuleDescr rule] : loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:1: rule returns [RuleDescr rule] : loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] ;
     public final RuleDescr rule() throws RecognitionException {
         RuleDescr rule = null;
 
@@ -1373,28 +1382,29 @@
         		AndDescr lhs = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:3: (loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:3: loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:3: (loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:3: loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule]
             {
             loc=(Token)input.LT(1);
-            match(input,RULE,FOLLOW_RULE_in_rule836); if (failed) return rule;
-            pushFollow(FOLLOW_name_in_rule840);
+            match(input,RULE,FOLLOW_RULE_in_rule842); if (failed) return rule;
+            pushFollow(FOLLOW_name_in_rule846);
             ruleName=name();
             _fsp--;
             if (failed) return rule;
             if ( backtracking==0 ) {
                
+              			location.setType( Location.LOCATION_RULE_HEADER );
               			debug( "start rule: " + ruleName );
               			rule = new RuleDescr( ruleName, null ); 
               			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               			rule.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            pushFollow(FOLLOW_rule_attributes_in_rule849);
+            pushFollow(FOLLOW_rule_attributes_in_rule855);
             rule_attributes(rule);
             _fsp--;
             if (failed) return rule;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:3: (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:431:3: (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )?
             int alt17=2;
             int LA17_0 = input.LA(1);
 
@@ -1403,11 +1413,11 @@
             }
             switch (alt17) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:5: loc= WHEN ( ':' )? ( normal_lhs_block[lhs] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:431:5: loc= WHEN ( ':' )? ( normal_lhs_block[lhs] )
                     {
                     loc=(Token)input.LT(1);
-                    match(input,WHEN,FOLLOW_WHEN_in_rule858); if (failed) return rule;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:14: ( ':' )?
+                    match(input,WHEN,FOLLOW_WHEN_in_rule864); if (failed) return rule;
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:431:14: ( ':' )?
                     int alt16=2;
                     int LA16_0 = input.LA(1);
 
@@ -1418,7 +1428,7 @@
                         case 1 :
                             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: ':'
                             {
-                            match(input,70,FOLLOW_70_in_rule860); if (failed) return rule;
+                            match(input,70,FOLLOW_70_in_rule866); if (failed) return rule;
 
                             }
                             break;
@@ -1427,15 +1437,16 @@
 
                     if ( backtracking==0 ) {
                        
+                      				this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
                       				lhs = new AndDescr(); rule.setLhs( lhs ); 
                       				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                       				lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );
                       			
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:4: ( normal_lhs_block[lhs] )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:5: normal_lhs_block[lhs]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:438:4: ( normal_lhs_block[lhs] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:5: normal_lhs_block[lhs]
                     {
-                    pushFollow(FOLLOW_normal_lhs_block_in_rule878);
+                    pushFollow(FOLLOW_normal_lhs_block_in_rule884);
                     normal_lhs_block(lhs);
                     _fsp--;
                     if (failed) return rule;
@@ -1448,7 +1459,7 @@
 
             }
 
-            pushFollow(FOLLOW_rhs_chunk_in_rule899);
+            pushFollow(FOLLOW_rhs_chunk_in_rule905);
             rhs_chunk(rule);
             _fsp--;
             if (failed) return rule;
@@ -1468,16 +1479,16 @@
 
 
     // $ANTLR start rule_attributes
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:438:1: rule_attributes[RuleDescr rule] : ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:1: rule_attributes[RuleDescr rule] : ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
     public final void rule_attributes(RuleDescr rule) throws RecognitionException {
         AttributeDescr a = null;
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: ( ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: ( ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: ( ATTRIBUTES ':' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: ( ATTRIBUTES ':' )?
             int alt18=2;
             int LA18_0 = input.LA(1);
 
@@ -1486,17 +1497,17 @@
             }
             switch (alt18) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:5: ATTRIBUTES ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:5: ATTRIBUTES ':'
                     {
-                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_rule_attributes920); if (failed) return ;
-                    match(input,70,FOLLOW_70_in_rule_attributes922); if (failed) return ;
+                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_rule_attributes926); if (failed) return ;
+                    match(input,70,FOLLOW_70_in_rule_attributes928); if (failed) return ;
 
                     }
                     break;
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:4: ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: ( ( ',' )? a= rule_attribute )*
             loop20:
             do {
                 int alt20=2;
@@ -1509,9 +1520,9 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:6: ( ',' )? a= rule_attribute
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:6: ( ',' )? a= rule_attribute
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:6: ( ',' )?
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:6: ( ',' )?
             	    int alt19=2;
             	    int LA19_0 = input.LA(1);
 
@@ -1522,14 +1533,14 @@
             	        case 1 :
             	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: ','
             	            {
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes931); if (failed) return ;
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes937); if (failed) return ;
 
             	            }
             	            break;
 
             	    }
 
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes936);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes942);
             	    a=rule_attribute();
             	    _fsp--;
             	    if (failed) return ;
@@ -1563,7 +1574,7 @@
 
 
     // $ANTLR start rule_attribute
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:450:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );
     public final AttributeDescr rule_attribute() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1574,7 +1585,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:4: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:466:4: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect )
             int alt21=12;
             switch ( input.LA(1) ) {
             case SALIENCE:
@@ -1640,16 +1651,16 @@
             default:
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("450:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );", 21, 0, input);
+                    new NoViableAltException("461:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );", 21, 0, input);
 
                 throw nvae;
             }
 
             switch (alt21) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:4: a= salience
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:466:4: a= salience
                     {
-                    pushFollow(FOLLOW_salience_in_rule_attribute977);
+                    pushFollow(FOLLOW_salience_in_rule_attribute983);
                     a=salience();
                     _fsp--;
                     if (failed) return d;
@@ -1660,9 +1671,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:5: a= no_loop
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:467:5: a= no_loop
                     {
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute987);
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute993);
                     a=no_loop();
                     _fsp--;
                     if (failed) return d;
@@ -1673,9 +1684,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:5: a= agenda_group
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:5: a= agenda_group
                     {
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute998);
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1004);
                     a=agenda_group();
                     _fsp--;
                     if (failed) return d;
@@ -1686,9 +1697,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:458:5: a= duration
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:5: a= duration
                     {
-                    pushFollow(FOLLOW_duration_in_rule_attribute1011);
+                    pushFollow(FOLLOW_duration_in_rule_attribute1017);
                     a=duration();
                     _fsp--;
                     if (failed) return d;
@@ -1699,9 +1710,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:5: a= activation_group
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:5: a= activation_group
                     {
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1025);
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1031);
                     a=activation_group();
                     _fsp--;
                     if (failed) return d;
@@ -1712,9 +1723,9 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:5: a= auto_focus
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:471:5: a= auto_focus
                     {
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1036);
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1042);
                     a=auto_focus();
                     _fsp--;
                     if (failed) return d;
@@ -1725,9 +1736,9 @@
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:5: a= date_effective
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:5: a= date_effective
                     {
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1047);
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1053);
                     a=date_effective();
                     _fsp--;
                     if (failed) return d;
@@ -1738,9 +1749,9 @@
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:462:5: a= date_expires
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:5: a= date_expires
                     {
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1057);
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1063);
                     a=date_expires();
                     _fsp--;
                     if (failed) return d;
@@ -1751,9 +1762,9 @@
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:5: a= enabled
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474:5: a= enabled
                     {
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1067);
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1073);
                     a=enabled();
                     _fsp--;
                     if (failed) return d;
@@ -1764,9 +1775,9 @@
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:5: a= ruleflow_group
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:5: a= ruleflow_group
                     {
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1077);
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1083);
                     a=ruleflow_group();
                     _fsp--;
                     if (failed) return d;
@@ -1777,9 +1788,9 @@
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:5: a= lock_on_active
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:5: a= lock_on_active
                     {
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1087);
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1093);
                     a=lock_on_active();
                     _fsp--;
                     if (failed) return d;
@@ -1790,9 +1801,9 @@
                     }
                     break;
                 case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:466:5: a= dialect
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:5: a= dialect
                     {
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1096);
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1102);
                     a=dialect();
                     _fsp--;
                     if (failed) return d;
@@ -1817,7 +1828,7 @@
 
 
     // $ANTLR start date_effective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:1: date_effective returns [AttributeDescr d] : loc= DATE_EFFECTIVE val= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:481:1: date_effective returns [AttributeDescr d] : loc= DATE_EFFECTIVE val= STRING ;
     public final AttributeDescr date_effective() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1828,13 +1839,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:3: (loc= DATE_EFFECTIVE val= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:3: loc= DATE_EFFECTIVE val= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:3: (loc= DATE_EFFECTIVE val= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:3: loc= DATE_EFFECTIVE val= STRING
             {
             loc=(Token)input.LT(1);
-            match(input,DATE_EFFECTIVE,FOLLOW_DATE_EFFECTIVE_in_date_effective1128); if (failed) return d;
+            match(input,DATE_EFFECTIVE,FOLLOW_DATE_EFFECTIVE_in_date_effective1134); if (failed) return d;
             val=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1132); if (failed) return d;
+            match(input,STRING,FOLLOW_STRING_in_date_effective1138); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "date-effective", getString( val ) );
@@ -1859,7 +1870,7 @@
 
 
     // $ANTLR start date_expires
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:1: date_expires returns [AttributeDescr d] : loc= DATE_EXPIRES val= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:1: date_expires returns [AttributeDescr d] : loc= DATE_EXPIRES val= STRING ;
     public final AttributeDescr date_expires() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1870,13 +1881,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:3: (loc= DATE_EXPIRES val= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:3: loc= DATE_EXPIRES val= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:3: (loc= DATE_EXPIRES val= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:3: loc= DATE_EXPIRES val= STRING
             {
             loc=(Token)input.LT(1);
-            match(input,DATE_EXPIRES,FOLLOW_DATE_EXPIRES_in_date_expires1165); if (failed) return d;
+            match(input,DATE_EXPIRES,FOLLOW_DATE_EXPIRES_in_date_expires1171); if (failed) return d;
             val=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1169); if (failed) return d;
+            match(input,STRING,FOLLOW_STRING_in_date_expires1175); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "date-expires", getString( val ) );
@@ -1901,7 +1912,7 @@
 
 
     // $ANTLR start enabled
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:1: enabled returns [AttributeDescr d] : loc= ENABLED t= BOOL ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:1: enabled returns [AttributeDescr d] : loc= ENABLED t= BOOL ;
     public final AttributeDescr enabled() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1912,13 +1923,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:4: (loc= ENABLED t= BOOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:4: loc= ENABLED t= BOOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:4: (loc= ENABLED t= BOOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:4: loc= ENABLED t= BOOL
             {
             loc=(Token)input.LT(1);
-            match(input,ENABLED,FOLLOW_ENABLED_in_enabled1204); if (failed) return d;
+            match(input,ENABLED,FOLLOW_ENABLED_in_enabled1210); if (failed) return d;
             t=(Token)input.LT(1);
-            match(input,BOOL,FOLLOW_BOOL_in_enabled1208); if (failed) return d;
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1214); if (failed) return d;
             if ( backtracking==0 ) {
 
               				d = new AttributeDescr( "enabled", t.getText() );
@@ -1943,7 +1954,7 @@
 
 
     // $ANTLR start salience
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:1: salience returns [AttributeDescr d ] : loc= SALIENCE i= INT ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:1: salience returns [AttributeDescr d ] : loc= SALIENCE i= INT ;
     public final AttributeDescr salience() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1954,13 +1965,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:3: (loc= SALIENCE i= INT )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:3: loc= SALIENCE i= INT
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:3: (loc= SALIENCE i= INT )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:3: loc= SALIENCE i= INT
             {
             loc=(Token)input.LT(1);
-            match(input,SALIENCE,FOLLOW_SALIENCE_in_salience1253); if (failed) return d;
+            match(input,SALIENCE,FOLLOW_SALIENCE_in_salience1259); if (failed) return d;
             i=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_salience1257); if (failed) return d;
+            match(input,INT,FOLLOW_INT_in_salience1263); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "salience", i.getText() );
@@ -1985,7 +1996,7 @@
 
 
     // $ANTLR start no_loop
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:533:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );
     public final AttributeDescr no_loop() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1996,7 +2007,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:3: ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:3: ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) )
             int alt22=2;
             int LA22_0 = input.LA(1);
 
@@ -2012,7 +2023,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("533:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 1, input);
+                        new NoViableAltException("544:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 1, input);
 
                     throw nvae;
                 }
@@ -2020,19 +2031,19 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("533:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 0, input);
+                    new NoViableAltException("544:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 0, input);
 
                 throw nvae;
             }
             switch (alt22) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:3: (loc= NO_LOOP )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:3: (loc= NO_LOOP )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:3: (loc= NO_LOOP )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:4: loc= NO_LOOP
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:3: (loc= NO_LOOP )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:550:4: loc= NO_LOOP
                     {
                     loc=(Token)input.LT(1);
-                    match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1295); if (failed) return d;
+                    match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1301); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				d = new AttributeDescr( "no-loop", "true" );
@@ -2048,15 +2059,15 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:3: (loc= NO_LOOP t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:3: (loc= NO_LOOP t= BOOL )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:3: (loc= NO_LOOP t= BOOL )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:4: loc= NO_LOOP t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:3: (loc= NO_LOOP t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:4: loc= NO_LOOP t= BOOL
                     {
                     loc=(Token)input.LT(1);
-                    match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1323); if (failed) return d;
+                    match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1329); if (failed) return d;
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1327); if (failed) return d;
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1333); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				d = new AttributeDescr( "no-loop", t.getText() );
@@ -2086,7 +2097,7 @@
 
 
     // $ANTLR start auto_focus
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:561:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );
     public final AttributeDescr auto_focus() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2097,7 +2108,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:3: ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:3: ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) )
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2113,7 +2124,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("561:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 1, input);
+                        new NoViableAltException("572:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 1, input);
 
                     throw nvae;
                 }
@@ -2121,19 +2132,19 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("561:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 0, input);
+                    new NoViableAltException("572:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 0, input);
 
                 throw nvae;
             }
             switch (alt23) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:3: (loc= AUTO_FOCUS )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:3: (loc= AUTO_FOCUS )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:3: (loc= AUTO_FOCUS )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:4: loc= AUTO_FOCUS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:3: (loc= AUTO_FOCUS )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:4: loc= AUTO_FOCUS
                     {
                     loc=(Token)input.LT(1);
-                    match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1376); if (failed) return d;
+                    match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1382); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				d = new AttributeDescr( "auto-focus", "true" );
@@ -2149,15 +2160,15 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:3: (loc= AUTO_FOCUS t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:3: (loc= AUTO_FOCUS t= BOOL )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:3: (loc= AUTO_FOCUS t= BOOL )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:4: loc= AUTO_FOCUS t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:3: (loc= AUTO_FOCUS t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:4: loc= AUTO_FOCUS t= BOOL
                     {
                     loc=(Token)input.LT(1);
-                    match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1404); if (failed) return d;
+                    match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1410); if (failed) return d;
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1408); if (failed) return d;
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1414); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				d = new AttributeDescr( "auto-focus", t.getText() );
@@ -2187,7 +2198,7 @@
 
 
     // $ANTLR start activation_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:1: activation_group returns [AttributeDescr d] : loc= ACTIVATION_GROUP n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:1: activation_group returns [AttributeDescr d] : loc= ACTIVATION_GROUP n= STRING ;
     public final AttributeDescr activation_group() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2198,13 +2209,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: (loc= ACTIVATION_GROUP n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: loc= ACTIVATION_GROUP n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:3: (loc= ACTIVATION_GROUP n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:3: loc= ACTIVATION_GROUP n= STRING
             {
             loc=(Token)input.LT(1);
-            match(input,ACTIVATION_GROUP,FOLLOW_ACTIVATION_GROUP_in_activation_group1453); if (failed) return d;
+            match(input,ACTIVATION_GROUP,FOLLOW_ACTIVATION_GROUP_in_activation_group1459); if (failed) return d;
             n=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1457); if (failed) return d;
+            match(input,STRING,FOLLOW_STRING_in_activation_group1463); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "activation-group", getString( n ) );
@@ -2229,7 +2240,7 @@
 
 
     // $ANTLR start ruleflow_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:1: ruleflow_group returns [AttributeDescr d] : loc= RULEFLOW_GROUP n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:1: ruleflow_group returns [AttributeDescr d] : loc= RULEFLOW_GROUP n= STRING ;
     public final AttributeDescr ruleflow_group() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2240,13 +2251,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:3: (loc= RULEFLOW_GROUP n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:3: loc= RULEFLOW_GROUP n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:3: (loc= RULEFLOW_GROUP n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:3: loc= RULEFLOW_GROUP n= STRING
             {
             loc=(Token)input.LT(1);
-            match(input,RULEFLOW_GROUP,FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1489); if (failed) return d;
+            match(input,RULEFLOW_GROUP,FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1495); if (failed) return d;
             n=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1493); if (failed) return d;
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1499); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "ruleflow-group", getString( n ) );
@@ -2271,7 +2282,7 @@
 
 
     // $ANTLR start agenda_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:1: agenda_group returns [AttributeDescr d] : loc= AGENDA_GROUP n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:1: agenda_group returns [AttributeDescr d] : loc= AGENDA_GROUP n= STRING ;
     public final AttributeDescr agenda_group() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2282,13 +2293,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:3: (loc= AGENDA_GROUP n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:3: loc= AGENDA_GROUP n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:3: (loc= AGENDA_GROUP n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:3: loc= AGENDA_GROUP n= STRING
             {
             loc=(Token)input.LT(1);
-            match(input,AGENDA_GROUP,FOLLOW_AGENDA_GROUP_in_agenda_group1525); if (failed) return d;
+            match(input,AGENDA_GROUP,FOLLOW_AGENDA_GROUP_in_agenda_group1531); if (failed) return d;
             n=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1529); if (failed) return d;
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1535); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "agenda-group", getString( n ) );
@@ -2313,7 +2324,7 @@
 
 
     // $ANTLR start duration
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:1: duration returns [AttributeDescr d] : loc= DURATION i= INT ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:1: duration returns [AttributeDescr d] : loc= DURATION i= INT ;
     public final AttributeDescr duration() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2324,13 +2335,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:3: (loc= DURATION i= INT )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:3: loc= DURATION i= INT
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:3: (loc= DURATION i= INT )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:3: loc= DURATION i= INT
             {
             loc=(Token)input.LT(1);
-            match(input,DURATION,FOLLOW_DURATION_in_duration1563); if (failed) return d;
+            match(input,DURATION,FOLLOW_DURATION_in_duration1569); if (failed) return d;
             i=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1567); if (failed) return d;
+            match(input,INT,FOLLOW_INT_in_duration1573); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "duration", i.getText() );
@@ -2355,7 +2366,7 @@
 
 
     // $ANTLR start dialect
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:1: dialect returns [AttributeDescr d] : loc= DIALECT n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:1: dialect returns [AttributeDescr d] : loc= DIALECT n= STRING ;
     public final AttributeDescr dialect() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2366,13 +2377,13 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:3: (loc= DIALECT n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:3: loc= DIALECT n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:3: (loc= DIALECT n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:3: loc= DIALECT n= STRING
             {
             loc=(Token)input.LT(1);
-            match(input,DIALECT,FOLLOW_DIALECT_in_dialect1599); if (failed) return d;
+            match(input,DIALECT,FOLLOW_DIALECT_in_dialect1605); if (failed) return d;
             n=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect1603); if (failed) return d;
+            match(input,STRING,FOLLOW_STRING_in_dialect1609); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new AttributeDescr( "dialect", getString( n ) );
@@ -2397,7 +2408,7 @@
 
 
     // $ANTLR start lock_on_active
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );
     public final AttributeDescr lock_on_active() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2408,7 +2419,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:3: ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:3: ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) )
             int alt24=2;
             int LA24_0 = input.LA(1);
 
@@ -2424,7 +2435,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("665:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 1, input);
+                        new NoViableAltException("676:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 1, input);
 
                     throw nvae;
                 }
@@ -2432,19 +2443,19 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("665:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 0, input);
+                    new NoViableAltException("676:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 0, input);
 
                 throw nvae;
             }
             switch (alt24) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:3: (loc= LOCK_ON_ACTIVE )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:3: (loc= LOCK_ON_ACTIVE )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:3: (loc= LOCK_ON_ACTIVE )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:4: loc= LOCK_ON_ACTIVE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:3: (loc= LOCK_ON_ACTIVE )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:682:4: loc= LOCK_ON_ACTIVE
                     {
                     loc=(Token)input.LT(1);
-                    match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1652); if (failed) return d;
+                    match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1658); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				d = new AttributeDescr( "lock-on-active", "true" );
@@ -2460,15 +2471,15 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:3: (loc= LOCK_ON_ACTIVE t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:3: (loc= LOCK_ON_ACTIVE t= BOOL )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:3: (loc= LOCK_ON_ACTIVE t= BOOL )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:4: loc= LOCK_ON_ACTIVE t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:3: (loc= LOCK_ON_ACTIVE t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: loc= LOCK_ON_ACTIVE t= BOOL
                     {
                     loc=(Token)input.LT(1);
-                    match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1680); if (failed) return d;
+                    match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1686); if (failed) return d;
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1684); if (failed) return d;
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1690); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				d = new AttributeDescr( "lock-on-active", t.getText() );
@@ -2498,31 +2509,31 @@
 
 
     // $ANTLR start normal_lhs_block
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:1: normal_lhs_block[AndDescr descr] : (d= lhs[descr] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:704:1: normal_lhs_block[AndDescr descr] : (d= lhs[descr] )* ;
     public final void normal_lhs_block(AndDescr descr) throws RecognitionException {
         BaseDescr d = null;
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:3: ( (d= lhs[descr] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:3: (d= lhs[descr] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:3: ( (d= lhs[descr] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:3: (d= lhs[descr] )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:3: (d= lhs[descr] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:3: (d= lhs[descr] )*
             loop25:
             do {
                 int alt25=2;
                 int LA25_0 = input.LA(1);
 
-                if ( ((LA25_0>=ID && LA25_0<=LEFT_PAREN)||LA25_0==EVAL||LA25_0==NOT||(LA25_0>=EXISTS && LA25_0<=FORALL)) ) {
+                if ( (LA25_0==LEFT_PAREN||LA25_0==ID||LA25_0==EVAL||LA25_0==NOT||(LA25_0>=EXISTS && LA25_0<=FORALL)) ) {
                     alt25=1;
                 }
 
 
                 switch (alt25) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:5: d= lhs[descr]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:5: d= lhs[descr]
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1722);
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1728);
             	    d=lhs(descr);
             	    _fsp--;
             	    if (failed) return ;
@@ -2554,7 +2565,7 @@
 
 
     // $ANTLR start lhs
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:1: lhs[ConditionalElementDescr ce] returns [BaseDescr d] : l= lhs_or ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:1: lhs[ConditionalElementDescr ce] returns [BaseDescr d] : l= lhs_or ;
     public final BaseDescr lhs(ConditionalElementDescr ce) throws RecognitionException {
         BaseDescr d = null;
 
@@ -2565,10 +2576,10 @@
         		d=null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:705:4: (l= lhs_or )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:705:4: l= lhs_or
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:4: (l= lhs_or )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:4: l= lhs_or
             {
-            pushFollow(FOLLOW_lhs_or_in_lhs1759);
+            pushFollow(FOLLOW_lhs_or_in_lhs1765);
             l=lhs_or();
             _fsp--;
             if (failed) return d;
@@ -2591,7 +2602,7 @@
 
 
     // $ANTLR start lhs_pattern
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );
     public final BaseDescr lhs_pattern() throws RecognitionException {
         BaseDescr d = null;
 
@@ -2602,7 +2613,7 @@
         		d=null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: (f= fact_binding | f= fact )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:4: (f= fact_binding | f= fact )
             int alt26=2;
             int LA26_0 = input.LA(1);
 
@@ -2618,7 +2629,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("709:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 1, input);
+                        new NoViableAltException("720:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 1, input);
 
                     throw nvae;
                 }
@@ -2626,15 +2637,15 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("709:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 0, input);
+                    new NoViableAltException("720:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 0, input);
 
                 throw nvae;
             }
             switch (alt26) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: f= fact_binding
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:4: f= fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern1787);
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern1793);
                     f=fact_binding();
                     _fsp--;
                     if (failed) return d;
@@ -2645,9 +2656,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: f= fact
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:4: f= fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern1796);
+                    pushFollow(FOLLOW_fact_in_lhs_pattern1802);
                     f=fact();
                     _fsp--;
                     if (failed) return d;
@@ -2672,7 +2683,7 @@
 
 
     // $ANTLR start from_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717:1: from_statement returns [FromDescr d] : ds= from_source[d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:1: from_statement returns [FromDescr d] : ds= from_source[d] ;
     public final FromDescr from_statement() throws RecognitionException {
         FromDescr d = null;
 
@@ -2683,10 +2694,10 @@
         		d=factory.createFrom();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:2: (ds= from_source[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:2: ds= from_source[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:733:2: (ds= from_source[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:733:2: ds= from_source[d]
             {
-            pushFollow(FOLLOW_from_source_in_from_statement1823);
+            pushFollow(FOLLOW_from_source_in_from_statement1829);
             ds=from_source(d);
             _fsp--;
             if (failed) return d;
@@ -2712,7 +2723,7 @@
 
 
     // $ANTLR start from_source
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? ;
     public final DeclarativeInvokerDescr from_source(FromDescr from) throws RecognitionException {
         DeclarativeInvokerDescr ds = null;
 
@@ -2726,10 +2737,10 @@
         		AccessorDescr ad = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:3: (ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:3: ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:3: (ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:3: ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )?
             {
-            pushFollow(FOLLOW_identifier_in_from_source1865);
+            pushFollow(FOLLOW_identifier_in_from_source1871);
             ident=identifier();
             _fsp--;
             if (failed) return ds;
@@ -2740,9 +2751,10 @@
               			ad.setStartCharacter( ((CommonToken)ident).getStartIndex() );
               			ad.setEndCharacter( ((CommonToken)ident).getStopIndex() );
               			ds = ad;
+              			location.setProperty(Location.LOCATION_FROM_CONTENT, ident.getText());
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:3: (args= paren_chunk[from] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:3: (args= paren_chunk[from] )?
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -2755,9 +2767,9 @@
             }
             switch (alt27) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: args= paren_chunk[from]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:4: args= paren_chunk[from]
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source1876);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source1882);
                     args=paren_chunk(from);
                     _fsp--;
                     if (failed) return ds;
@@ -2771,6 +2783,7 @@
                       				fc.setStartCharacter( ((CommonToken)ident).getStartIndex() );
                       				fc.setEndCharacter( ((CommonToken)ident).getStopIndex() );
                       				ad.addInvoker(fc);
+                      				location.setProperty(Location.LOCATION_FROM_CONTENT, args);
                       			}
                       		
                     }
@@ -2780,7 +2793,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:3: ( expression_chain[from, ad] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:3: ( expression_chain[from, ad] )?
             int alt28=2;
             int LA28_0 = input.LA(1);
 
@@ -2791,7 +2804,7 @@
                 case 1 :
                     // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: expression_chain[from, ad]
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source1890);
+                    pushFollow(FOLLOW_expression_chain_in_from_source1896);
                     expression_chain(from,  ad);
                     _fsp--;
                     if (failed) return ds;
@@ -2801,9 +2814,16 @@
 
             }
 
+            if ( backtracking==0 ) {
 
+              			if( ad != null ) {
+              				location.setProperty(Location.LOCATION_FROM_CONTENT, ad.toString() );
+              			}
+              		
             }
 
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -2817,7 +2837,7 @@
 
 
     // $ANTLR start expression_chain
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:1: expression_chain[FromDescr from, AccessorDescr as] : ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:1: expression_chain[FromDescr from, AccessorDescr as] : ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) ;
     public final void expression_chain(FromDescr from, AccessorDescr as) throws RecognitionException {
         Token field = null;
 
@@ -2831,14 +2851,14 @@
         	    	MethodAccessDescr ma = null;	
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:2: ( ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:4: '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:4: '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )?
             {
-            match(input,71,FOLLOW_71_in_expression_chain1915); if (failed) return ;
-            pushFollow(FOLLOW_identifier_in_expression_chain1919);
+            match(input,71,FOLLOW_71_in_expression_chain1925); if (failed) return ;
+            pushFollow(FOLLOW_identifier_in_expression_chain1929);
             field=identifier();
             _fsp--;
             if (failed) return ;
@@ -2850,7 +2870,7 @@
               		fa.setEndCharacter( ((CommonToken)field).getStopIndex() );
               	    
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )?
             int alt29=3;
             int LA29_0 = input.LA(1);
 
@@ -2866,9 +2886,9 @@
             }
             switch (alt29) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:6: ( LEFT_SQUARE )=>sqarg= square_chunk[from]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:6: ( LEFT_SQUARE )=>sqarg= square_chunk[from]
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain1950);
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain1960);
                     sqarg=square_chunk(from);
                     _fsp--;
                     if (failed) return ;
@@ -2881,9 +2901,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:6: ( LEFT_PAREN )=>paarg= paren_chunk[from]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:6: ( LEFT_PAREN )=>paarg= paren_chunk[from]
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain1984);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain1994);
                     paarg=paren_chunk(from);
                     _fsp--;
                     if (failed) return ;
@@ -2909,7 +2929,7 @@
               	      }
               	  
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:4: ( expression_chain[from, as] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:813:4: ( expression_chain[from, as] )?
             int alt30=2;
             int LA30_0 = input.LA(1);
 
@@ -2920,7 +2940,7 @@
                 case 1 :
                     // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: expression_chain[from, as]
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain2005);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2015);
                     expression_chain(from,  as);
                     _fsp--;
                     if (failed) return ;
@@ -2949,7 +2969,7 @@
 
 
     // $ANTLR start accumulate_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:1: accumulate_statement returns [AccumulateDescr d] : loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')' ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:1: accumulate_statement returns [AccumulateDescr d] : loc= ACCUMULATE LEFT_PAREN pattern= lhs_pattern ( COMMA )? INIT text= paren_chunk[null] ( COMMA )? ACTION text= paren_chunk[null] ( COMMA )? RESULT text= paren_chunk[null] loc= RIGHT_PAREN ;
     public final AccumulateDescr accumulate_statement() throws RecognitionException {
         AccumulateDescr d = null;
 
@@ -2963,60 +2983,133 @@
         		d = factory.createAccumulate();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:10: (loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:10: loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:10: (loc= ACCUMULATE LEFT_PAREN pattern= lhs_pattern ( COMMA )? INIT text= paren_chunk[null] ( COMMA )? ACTION text= paren_chunk[null] ( COMMA )? RESULT text= paren_chunk[null] loc= RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:10: loc= ACCUMULATE LEFT_PAREN pattern= lhs_pattern ( COMMA )? INIT text= paren_chunk[null] ( COMMA )? ACTION text= paren_chunk[null] ( COMMA )? RESULT text= paren_chunk[null] loc= RIGHT_PAREN
             {
             loc=(Token)input.LT(1);
-            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2046); if (failed) return d;
+            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2056); if (failed) return d;
             if ( backtracking==0 ) {
                
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+              			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE );
               		
             }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2056); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_accumulate_statement2060);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2066); if (failed) return d;
+            pushFollow(FOLLOW_lhs_pattern_in_accumulate_statement2070);
             pattern=lhs_pattern();
             _fsp--;
             if (failed) return d;
-            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2062); if (failed) return d;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:34: ( COMMA )?
+            int alt31=2;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==COMMA) ) {
+                alt31=1;
+            }
+            switch (alt31) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: COMMA
+                    {
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2072); if (failed) return d;
+
+                    }
+                    break;
+
+            }
+
             if ( backtracking==0 ) {
 
               		        d.setSourcePattern( (PatternDescr)pattern );
               		
             }
-            match(input,INIT,FOLLOW_INIT_in_accumulate_statement2071); if (failed) return d;
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2075);
+            match(input,INIT,FOLLOW_INIT_in_accumulate_statement2082); if (failed) return d;
+            if ( backtracking==0 ) {
+
+              			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_INIT );
+              		
+            }
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2093);
             text=paren_chunk(null);
             _fsp--;
             if (failed) return d;
-            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2078); if (failed) return d;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:26: ( COMMA )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==COMMA) ) {
+                alt32=1;
+            }
+            switch (alt32) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: COMMA
+                    {
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2096); if (failed) return d;
+
+                    }
+                    break;
+
+            }
+
             if ( backtracking==0 ) {
 
-              		        d.setInitCode( text.substring(1, text.length()-1) );
+              			if( text != null ) {
+              			        d.setInitCode( text.substring(1, text.length()-1) );
+              				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, d.getInitCode());
+              				location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION );
+              			}
               		
             }
-            match(input,ACTION,FOLLOW_ACTION_in_accumulate_statement2087); if (failed) return d;
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2091);
+            match(input,ACTION,FOLLOW_ACTION_in_accumulate_statement2105); if (failed) return d;
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2109);
             text=paren_chunk(null);
             _fsp--;
             if (failed) return d;
-            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2094); if (failed) return d;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:844:33: ( COMMA )?
+            int alt33=2;
+            int LA33_0 = input.LA(1);
+
+            if ( (LA33_0==COMMA) ) {
+                alt33=1;
+            }
+            switch (alt33) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: COMMA
+                    {
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2112); if (failed) return d;
+
+                    }
+                    break;
+
+            }
+
             if ( backtracking==0 ) {
 
-              		        d.setActionCode( text.substring(1, text.length()-1) );
+              			if( text != null ) {
+              			        d.setActionCode( text.substring(1, text.length()-1) );
+              	       			location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, d.getActionCode());
+              				location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT );
+              			}
               		
             }
-            match(input,RESULT,FOLLOW_RESULT_in_accumulate_statement2103); if (failed) return d;
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2107);
+            match(input,RESULT,FOLLOW_RESULT_in_accumulate_statement2121); if (failed) return d;
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2125);
             text=paren_chunk(null);
             _fsp--;
             if (failed) return d;
+            if ( backtracking==0 ) {
+
+              			if( text != null ) {
+              			        d.setResultCode( text.substring(1, text.length()-1) );
+              				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, d.getResultCode());
+              			}
+              		
+            }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2112); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2137); if (failed) return d;
             if ( backtracking==0 ) {
 
-              		        d.setResultCode( text.substring(1, text.length()-1) );
+              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
               			d.setEndCharacter( ((CommonToken)loc).getStopIndex() );
               		
             }
@@ -3036,7 +3129,7 @@
 
 
     // $ANTLR start collect_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:1: collect_statement returns [CollectDescr d] : loc= COLLECT '(' pattern= lhs_pattern loc= ')' ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:1: collect_statement returns [CollectDescr d] : loc= COLLECT LEFT_PAREN pattern= lhs_pattern loc= RIGHT_PAREN ;
     public final CollectDescr collect_statement() throws RecognitionException {
         CollectDescr d = null;
 
@@ -3048,28 +3141,30 @@
         		d = factory.createCollect();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:10: (loc= COLLECT '(' pattern= lhs_pattern loc= ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:10: loc= COLLECT '(' pattern= lhs_pattern loc= ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:10: (loc= COLLECT LEFT_PAREN pattern= lhs_pattern loc= RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:10: loc= COLLECT LEFT_PAREN pattern= lhs_pattern loc= RIGHT_PAREN
             {
             loc=(Token)input.LT(1);
-            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement2155); if (failed) return d;
+            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement2180); if (failed) return d;
             if ( backtracking==0 ) {
                
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+              			location.setType( Location.LOCATION_LHS_FROM_COLLECT );
               		
             }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2165); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_collect_statement2169);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2190); if (failed) return d;
+            pushFollow(FOLLOW_lhs_pattern_in_collect_statement2194);
             pattern=lhs_pattern();
             _fsp--;
             if (failed) return d;
             loc=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2173); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2198); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        d.setSourcePattern( (PatternDescr)pattern );
               			d.setEndCharacter( ((CommonToken)loc).getStopIndex() );
+              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
               		
             }
 
@@ -3088,7 +3183,7 @@
 
 
     // $ANTLR start fact_binding
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:845:1: fact_binding returns [BaseDescr d] : id= ID ':' fe= fact_expression[id.getText()] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885:1: fact_binding returns [BaseDescr d] : id= ID ':' fe= fact_expression[id.getText()] ;
     public final BaseDescr fact_binding() throws RecognitionException {
         BaseDescr d = null;
 
@@ -3101,12 +3196,12 @@
         		boolean multi=false;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:4: (id= ID ':' fe= fact_expression[id.getText()] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:4: id= ID ':' fe= fact_expression[id.getText()]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:4: (id= ID ':' fe= fact_expression[id.getText()] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:4: id= ID ':' fe= fact_expression[id.getText()]
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_fact_binding2207); if (failed) return d;
-            match(input,70,FOLLOW_70_in_fact_binding2209); if (failed) return d;
+            match(input,ID,FOLLOW_ID_in_fact_binding2232); if (failed) return d;
+            match(input,70,FOLLOW_70_in_fact_binding2234); if (failed) return d;
             if ( backtracking==0 ) {
 
                		        // handling incomplete parsing
@@ -3114,7 +3209,7 @@
                		        ((PatternDescr) d).setIdentifier( id.getText() );
                		
             }
-            pushFollow(FOLLOW_fact_expression_in_fact_binding2222);
+            pushFollow(FOLLOW_fact_expression_in_fact_binding2247);
             fe=fact_expression(id.getText());
             _fsp--;
             if (failed) return d;
@@ -3143,7 +3238,7 @@
 
 
     // $ANTLR start fact_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:2: fact_expression[String id] returns [BaseDescr pd] : ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:2: fact_expression[String id] returns [BaseDescr pd] : ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* );
     public final BaseDescr fact_expression(String id) throws RecognitionException {
         BaseDescr pd = null;
 
@@ -3157,33 +3252,33 @@
          		boolean multi = false;
          	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:5: ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* )
-            int alt32=2;
-            int LA32_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:5: ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* )
+            int alt35=2;
+            int LA35_0 = input.LA(1);
 
-            if ( (LA32_0==LEFT_PAREN) ) {
-                alt32=1;
+            if ( (LA35_0==LEFT_PAREN) ) {
+                alt35=1;
             }
-            else if ( (LA32_0==ID) ) {
-                alt32=2;
+            else if ( (LA35_0==ID) ) {
+                alt35=2;
             }
             else {
                 if (backtracking>0) {failed=true; return pd;}
                 NoViableAltException nvae =
-                    new NoViableAltException("867:2: fact_expression[String id] returns [BaseDescr pd] : ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* );", 32, 0, input);
+                    new NoViableAltException("907:2: fact_expression[String id] returns [BaseDescr pd] : ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* );", 35, 0, input);
 
                 throw nvae;
             }
-            switch (alt32) {
+            switch (alt35) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:5: LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:5: LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_expression2254); if (failed) return pd;
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression2258);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_expression2279); if (failed) return pd;
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression2283);
                     fe=fact_expression(id);
                     _fsp--;
                     if (failed) return pd;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_expression2261); if (failed) return pd;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_expression2286); if (failed) return pd;
                     if ( backtracking==0 ) {
                        pd=fe; 
                     }
@@ -3191,9 +3286,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:6: f= fact ( ( OR | DOUBLE_PIPE ) f= fact )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:6: f= fact ( ( OR | DOUBLE_PIPE ) f= fact )*
                     {
-                    pushFollow(FOLLOW_fact_in_fact_expression2272);
+                    pushFollow(FOLLOW_fact_in_fact_expression2297);
                     f=fact();
                     _fsp--;
                     if (failed) return pd;
@@ -3203,26 +3298,26 @@
                        			pd = f;
                        		
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:4: ( ( OR | DOUBLE_PIPE ) f= fact )*
-                    loop31:
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918:4: ( ( OR | DOUBLE_PIPE ) f= fact )*
+                    loop34:
                     do {
-                        int alt31=2;
-                        int LA31_0 = input.LA(1);
+                        int alt34=2;
+                        int LA34_0 = input.LA(1);
 
-                        if ( ((LA31_0>=OR && LA31_0<=DOUBLE_PIPE)) ) {
-                            int LA31_6 = input.LA(2);
+                        if ( ((LA34_0>=OR && LA34_0<=DOUBLE_PIPE)) ) {
+                            int LA34_7 = input.LA(2);
 
-                            if ( (synpred49()) ) {
-                                alt31=1;
+                            if ( (synpred52()) ) {
+                                alt34=1;
                             }
 
 
                         }
 
 
-                        switch (alt31) {
+                        switch (alt34) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:6: ( OR | DOUBLE_PIPE ) f= fact
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918:6: ( OR | DOUBLE_PIPE ) f= fact
                     	    {
                     	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
                     	        input.consume();
@@ -3232,7 +3327,7 @@
                     	        if (backtracking>0) {failed=true; return pd;}
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression2284);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression2309);    throw mse;
                     	    }
 
                     	    if ( backtracking==0 ) {
@@ -3244,7 +3339,7 @@
                     	       				}
                     	       			
                     	    }
-                    	    pushFollow(FOLLOW_fact_in_fact_expression2302);
+                    	    pushFollow(FOLLOW_fact_in_fact_expression2327);
                     	    f=fact();
                     	    _fsp--;
                     	    if (failed) return pd;
@@ -3259,7 +3354,7 @@
                     	    break;
 
                     	default :
-                    	    break loop31;
+                    	    break loop34;
                         }
                     } while (true);
 
@@ -3281,7 +3376,7 @@
 
 
     // $ANTLR start fact
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:1: fact returns [BaseDescr d] : id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:934:1: fact returns [BaseDescr d] : id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN ;
     public final BaseDescr fact() throws RecognitionException {
         BaseDescr d = null;
 
@@ -3295,8 +3390,8 @@
         		PatternDescr pattern = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:11: (id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:11: id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:11: (id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:11: id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN
             {
             if ( backtracking==0 ) {
 
@@ -3304,7 +3399,7 @@
                			d = pattern; 
                	        
             }
-            pushFollow(FOLLOW_dotted_name_in_fact2363);
+            pushFollow(FOLLOW_dotted_name_in_fact2388);
             id=dotted_name(d);
             _fsp--;
             if (failed) return d;
@@ -3315,25 +3410,28 @@
                		
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2377); if (failed) return d;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2402); if (failed) return d;
             if ( backtracking==0 ) {
 
+              		                location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START );
+                          			location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME, id );
+               				
                				pattern.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                			        pattern.setLeftParentCharacter( ((CommonToken)loc).getStartIndex() );
                			
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:4: ( constraints[pattern] )?
-            int alt33=2;
-            int LA33_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:4: ( constraints[pattern] )?
+            int alt36=2;
+            int LA36_0 = input.LA(1);
 
-            if ( ((LA33_0>=ATTRIBUTES && LA33_0<=WHEN)||LA33_0==ENABLED||LA33_0==SALIENCE||LA33_0==DURATION||(LA33_0>=ACCUMULATE && LA33_0<=LEFT_PAREN)||LA33_0==OR||(LA33_0>=EVAL && LA33_0<=IN)||LA33_0==NULL||(LA33_0>=AND && LA33_0<=THEN)) ) {
-                alt33=1;
+            if ( ((LA36_0>=ATTRIBUTES && LA36_0<=WHEN)||LA36_0==ENABLED||LA36_0==SALIENCE||LA36_0==DURATION||(LA36_0>=ACCUMULATE && LA36_0<=LEFT_PAREN)||(LA36_0>=INIT && LA36_0<=RESULT)||(LA36_0>=COLLECT && LA36_0<=OR)||(LA36_0>=EVAL && LA36_0<=IN)||LA36_0==NULL||(LA36_0>=AND && LA36_0<=THEN)) ) {
+                alt36=1;
             }
-            switch (alt33) {
+            switch (alt36) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:6: constraints[pattern]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:6: constraints[pattern]
                     {
-                    pushFollow(FOLLOW_constraints_in_fact2387);
+                    pushFollow(FOLLOW_constraints_in_fact2412);
                     constraints(pattern);
                     _fsp--;
                     if (failed) return d;
@@ -3344,10 +3442,11 @@
             }
 
             endLoc=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2400); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2425); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        if( endLoc.getType() == RIGHT_PAREN ) {
+              				this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
               				pattern.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
               				pattern.setEndCharacter( ((CommonToken)endLoc).getStopIndex() );
                			        pattern.setRightParentCharacter( ((CommonToken)endLoc).getStartIndex() );
@@ -3370,33 +3469,36 @@
 
 
     // $ANTLR start constraints
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:925:1: constraints[PatternDescr pattern] : constraint[pattern] ( ',' constraint[pattern] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:969:1: constraints[PatternDescr pattern] : constraint[pattern] ( ',' constraint[pattern] )* ;
     public final void constraints(PatternDescr pattern) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:4: ( constraint[pattern] ( ',' constraint[pattern] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:4: constraint[pattern] ( ',' constraint[pattern] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:4: ( constraint[pattern] ( ',' constraint[pattern] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:4: constraint[pattern] ( ',' constraint[pattern] )*
             {
-            pushFollow(FOLLOW_constraint_in_constraints2420);
+            pushFollow(FOLLOW_constraint_in_constraints2445);
             constraint(pattern);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:3: ( ',' constraint[pattern] )*
-            loop34:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:3: ( ',' constraint[pattern] )*
+            loop37:
             do {
-                int alt34=2;
-                int LA34_0 = input.LA(1);
+                int alt37=2;
+                int LA37_0 = input.LA(1);
 
-                if ( (LA34_0==COMMA) ) {
-                    alt34=1;
+                if ( (LA37_0==COMMA) ) {
+                    alt37=1;
                 }
 
 
-                switch (alt34) {
+                switch (alt37) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:5: ',' constraint[pattern]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:5: ',' constraint[pattern]
             	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2427); if (failed) return ;
-            	    pushFollow(FOLLOW_constraint_in_constraints2429);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2452); if (failed) return ;
+            	    if ( backtracking==0 ) {
+            	       location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START ); 
+            	    }
+            	    pushFollow(FOLLOW_constraint_in_constraints2461);
             	    constraint(pattern);
             	    _fsp--;
             	    if (failed) return ;
@@ -3405,7 +3507,7 @@
             	    break;
 
             	default :
-            	    break loop34;
+            	    break loop37;
                 }
             } while (true);
 
@@ -3425,21 +3527,21 @@
 
 
     // $ANTLR start constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:930:1: constraint[PatternDescr pattern] : or_constr[top] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:1: constraint[PatternDescr pattern] : or_constr[top] ;
     public final void constraint(PatternDescr pattern) throws RecognitionException {
 
         		ConditionalElementDescr top = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:3: ( or_constr[top] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:3: or_constr[top]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981:3: ( or_constr[top] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981:3: or_constr[top]
             {
             if ( backtracking==0 ) {
 
               			top = pattern.getConstraint();
               		
             }
-            pushFollow(FOLLOW_or_constr_in_constraint2459);
+            pushFollow(FOLLOW_or_constr_in_constraint2494);
             or_constr(top);
             _fsp--;
             if (failed) return ;
@@ -3459,7 +3561,7 @@
 
 
     // $ANTLR start or_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:1: or_constr[ConditionalElementDescr base] : and_constr[or] (t= DOUBLE_PIPE and_constr[or] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:1: or_constr[ConditionalElementDescr base] : and_constr[or] (t= DOUBLE_PIPE and_constr[or] )* ;
     public final void or_constr(ConditionalElementDescr base) throws RecognitionException {
         Token t=null;
 
@@ -3467,31 +3569,36 @@
         		OrDescr or = new OrDescr();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:3: ( and_constr[or] (t= DOUBLE_PIPE and_constr[or] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:3: and_constr[or] (t= DOUBLE_PIPE and_constr[or] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:3: ( and_constr[or] (t= DOUBLE_PIPE and_constr[or] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:3: and_constr[or] (t= DOUBLE_PIPE and_constr[or] )*
             {
-            pushFollow(FOLLOW_and_constr_in_or_constr2482);
+            pushFollow(FOLLOW_and_constr_in_or_constr2517);
             and_constr(or);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:18: (t= DOUBLE_PIPE and_constr[or] )*
-            loop35:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:3: (t= DOUBLE_PIPE and_constr[or] )*
+            loop38:
             do {
-                int alt35=2;
-                int LA35_0 = input.LA(1);
+                int alt38=2;
+                int LA38_0 = input.LA(1);
 
-                if ( (LA35_0==DOUBLE_PIPE) ) {
-                    alt35=1;
+                if ( (LA38_0==DOUBLE_PIPE) ) {
+                    alt38=1;
                 }
 
 
-                switch (alt35) {
+                switch (alt38) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:20: t= DOUBLE_PIPE and_constr[or]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:5: t= DOUBLE_PIPE and_constr[or]
             	    {
             	    t=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2489); if (failed) return ;
-            	    pushFollow(FOLLOW_and_constr_in_or_constr2491);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2527); if (failed) return ;
+            	    if ( backtracking==0 ) {
+
+            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_and_constr_in_or_constr2537);
             	    and_constr(or);
             	    _fsp--;
             	    if (failed) return ;
@@ -3500,7 +3607,7 @@
             	    break;
 
             	default :
-            	    break loop35;
+            	    break loop38;
                 }
             } while (true);
 
@@ -3529,7 +3636,7 @@
 
 
     // $ANTLR start and_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:1: and_constr[ConditionalElementDescr base] : unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:1: and_constr[ConditionalElementDescr base] : unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )* ;
     public final void and_constr(ConditionalElementDescr base) throws RecognitionException {
         Token t=null;
 
@@ -3537,31 +3644,36 @@
         		AndDescr and = new AndDescr();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:3: ( unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:3: unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:3: ( unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:3: unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )*
             {
-            pushFollow(FOLLOW_unary_constr_in_and_constr2520);
+            pushFollow(FOLLOW_unary_constr_in_and_constr2569);
             unary_constr(and);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:21: (t= DOUBLE_AMPER unary_constr[and] )*
-            loop36:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:3: (t= DOUBLE_AMPER unary_constr[and] )*
+            loop39:
             do {
-                int alt36=2;
-                int LA36_0 = input.LA(1);
+                int alt39=2;
+                int LA39_0 = input.LA(1);
 
-                if ( (LA36_0==DOUBLE_AMPER) ) {
-                    alt36=1;
+                if ( (LA39_0==DOUBLE_AMPER) ) {
+                    alt39=1;
                 }
 
 
-                switch (alt36) {
+                switch (alt39) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:23: t= DOUBLE_AMPER unary_constr[and]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:5: t= DOUBLE_AMPER unary_constr[and]
             	    {
             	    t=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2527); if (failed) return ;
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr2529);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2579); if (failed) return ;
+            	    if ( backtracking==0 ) {
+
+            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr2589);
             	    unary_constr(and);
             	    _fsp--;
             	    if (failed) return ;
@@ -3570,7 +3682,7 @@
             	    break;
 
             	default :
-            	    break loop36;
+            	    break loop39;
                 }
             } while (true);
 
@@ -3599,14 +3711,14 @@
 
 
     // $ANTLR start unary_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:1: unary_constr[ConditionalElementDescr base] : ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:1: unary_constr[ConditionalElementDescr base] : ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] ) ;
     public final void unary_constr(ConditionalElementDescr base) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:3: ( ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:3: ( ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )
-            int alt37=3;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )
+            int alt40=3;
             switch ( input.LA(1) ) {
             case ATTRIBUTES:
             case PACKAGE:
@@ -3641,23 +3753,23 @@
             case FORALL:
             case THEN:
                 {
-                alt37=1;
+                alt40=1;
                 }
                 break;
             case EVAL:
                 {
-                int LA37_28 = input.LA(2);
+                int LA40_28 = input.LA(2);
 
-                if ( (synpred54()) ) {
-                    alt37=1;
+                if ( (synpred57()) ) {
+                    alt40=1;
                 }
                 else if ( (true) ) {
-                    alt37=3;
+                    alt40=3;
                 }
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )", 37, 28, input);
+                        new NoViableAltException("1031:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )", 40, 28, input);
 
                     throw nvae;
                 }
@@ -3665,22 +3777,22 @@
                 break;
             case LEFT_PAREN:
                 {
-                alt37=2;
+                alt40=2;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )", 37, 0, input);
+                    new NoViableAltException("1031:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )", 40, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt37) {
+            switch (alt40) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:5: field_constraint[base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:5: field_constraint[base]
                     {
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr2554);
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr2617);
                     field_constraint(base);
                     _fsp--;
                     if (failed) return ;
@@ -3688,22 +3800,22 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:5: LEFT_PAREN or_constr[base] RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1032:5: LEFT_PAREN or_constr[base] RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2562); if (failed) return ;
-                    pushFollow(FOLLOW_or_constr_in_unary_constr2564);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2625); if (failed) return ;
+                    pushFollow(FOLLOW_or_constr_in_unary_constr2627);
                     or_constr(base);
                     _fsp--;
                     if (failed) return ;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2567); if (failed) return ;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2630); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:5: EVAL predicate[base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:5: EVAL predicate[base]
                     {
-                    match(input,EVAL,FOLLOW_EVAL_in_unary_constr2573); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_unary_constr2575);
+                    match(input,EVAL,FOLLOW_EVAL_in_unary_constr2636); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_unary_constr2638);
                     predicate(base);
                     _fsp--;
                     if (failed) return ;
@@ -3729,7 +3841,7 @@
 
 
     // $ANTLR start field_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:1: field_constraint[ConditionalElementDescr base] : (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:1: field_constraint[ConditionalElementDescr base] : (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )? ;
     public final void field_constraint(ConditionalElementDescr base) throws RecognitionException {
         Token fb=null;
         Token f = null;
@@ -3741,27 +3853,27 @@
         		RestrictionConnectiveDescr top = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:3: ( (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:3: (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:3: ( (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:3: (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )?
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:3: (fb= ID ':' )?
-            int alt38=2;
-            int LA38_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:3: (fb= ID ':' )?
+            int alt41=2;
+            int LA41_0 = input.LA(1);
 
-            if ( (LA38_0==ID) ) {
-                int LA38_1 = input.LA(2);
+            if ( (LA41_0==ID) ) {
+                int LA41_1 = input.LA(2);
 
-                if ( (LA38_1==70) ) {
-                    alt38=1;
+                if ( (LA41_1==70) ) {
+                    alt41=1;
                 }
             }
-            switch (alt38) {
+            switch (alt41) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:5: fb= ID ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:5: fb= ID ':'
                     {
                     fb=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_field_constraint2607); if (failed) return ;
-                    match(input,70,FOLLOW_70_in_field_constraint2609); if (failed) return ;
+                    match(input,ID,FOLLOW_ID_in_field_constraint2670); if (failed) return ;
+                    match(input,70,FOLLOW_70_in_field_constraint2672); if (failed) return ;
                     if ( backtracking==0 ) {
                        
                       			fbd = new FieldBindingDescr();
@@ -3778,13 +3890,15 @@
 
             }
 
-            pushFollow(FOLLOW_identifier_in_field_constraint2630);
+            pushFollow(FOLLOW_identifier_in_field_constraint2693);
             f=identifier();
             _fsp--;
             if (failed) return ;
             if ( backtracking==0 ) {
 
               		    if( f != null ) {
+              			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+              			location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, f.getText());
               		    
               			if ( fbd != null ) {
               			    fbd.setFieldName( f.getText() );
@@ -3802,21 +3916,21 @@
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:3: ( or_restr_connective[top] | '->' predicate[base] )?
-            int alt39=3;
-            int LA39_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1075:3: ( or_restr_connective[top] | '->' predicate[base] )?
+            int alt42=3;
+            int LA42_0 = input.LA(1);
 
-            if ( (LA39_0==LEFT_PAREN||(LA39_0>=CONTAINS && LA39_0<=IN)||(LA39_0>=74 && LA39_0<=79)) ) {
-                alt39=1;
+            if ( (LA42_0==LEFT_PAREN||(LA42_0>=CONTAINS && LA42_0<=IN)||(LA42_0>=74 && LA42_0<=79)) ) {
+                alt42=1;
             }
-            else if ( (LA39_0==73) ) {
-                alt39=2;
+            else if ( (LA42_0==73) ) {
+                alt42=2;
             }
-            switch (alt39) {
+            switch (alt42) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:4: or_restr_connective[top]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:4: or_restr_connective[top]
                     {
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2644);
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2707);
                     or_restr_connective(top);
                     _fsp--;
                     if (failed) return ;
@@ -3832,10 +3946,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1024:4: '->' predicate[base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:4: '->' predicate[base]
                     {
-                    match(input,73,FOLLOW_73_in_field_constraint2659); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_field_constraint2661);
+                    match(input,73,FOLLOW_73_in_field_constraint2722); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_field_constraint2724);
                     predicate(base);
                     _fsp--;
                     if (failed) return ;
@@ -3861,42 +3975,50 @@
 
 
     // $ANTLR start or_restr_connective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:1: or_restr_connective[ RestrictionConnectiveDescr base ] : and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:1: or_restr_connective[ RestrictionConnectiveDescr base ] : and_restr_connective[or] (t= DOUBLE_PIPE and_restr_connective[or] )* ;
     public final void or_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
+        Token t=null;
 
+
         		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:3: ( and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:3: and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:3: ( and_restr_connective[or] (t= DOUBLE_PIPE and_restr_connective[or] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:3: and_restr_connective[or] (t= DOUBLE_PIPE and_restr_connective[or] )*
             {
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2689);
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2753);
             and_restr_connective(or);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:28: ( DOUBLE_PIPE and_restr_connective[or] )*
-            loop40:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1095:3: (t= DOUBLE_PIPE and_restr_connective[or] )*
+            loop43:
             do {
-                int alt40=2;
-                int LA40_0 = input.LA(1);
+                int alt43=2;
+                int LA43_0 = input.LA(1);
 
-                if ( (LA40_0==DOUBLE_PIPE) ) {
-                    int LA40_2 = input.LA(2);
+                if ( (LA43_0==DOUBLE_PIPE) ) {
+                    int LA43_2 = input.LA(2);
 
-                    if ( (synpred59()) ) {
-                        alt40=1;
+                    if ( (synpred62()) ) {
+                        alt43=1;
                     }
 
 
                 }
 
 
-                switch (alt40) {
+                switch (alt43) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:30: DOUBLE_PIPE and_restr_connective[or]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1095:5: t= DOUBLE_PIPE and_restr_connective[or]
             	    {
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2694); if (failed) return ;
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2696);
+            	    t=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2763); if (failed) return ;
+            	    if ( backtracking==0 ) {
+
+            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2775);
             	    and_restr_connective(or);
             	    _fsp--;
             	    if (failed) return ;
@@ -3905,7 +4027,7 @@
             	    break;
 
             	default :
-            	    break loop40;
+            	    break loop43;
                 }
             } while (true);
 
@@ -3934,7 +4056,7 @@
 
 
     // $ANTLR start and_restr_connective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:1: and_restr_connective[ RestrictionConnectiveDescr base ] : constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1111:1: and_restr_connective[ RestrictionConnectiveDescr base ] : constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )* ;
     public final void and_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
         Token t=null;
 
@@ -3942,37 +4064,42 @@
         		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:3: ( constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:3: constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1116:3: ( constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1116:3: constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )*
             {
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2727);
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2809);
             constraint_expression(and);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:30: (t= DOUBLE_AMPER constraint_expression[and] )*
-            loop41:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:3: (t= DOUBLE_AMPER constraint_expression[and] )*
+            loop44:
             do {
-                int alt41=2;
-                int LA41_0 = input.LA(1);
+                int alt44=2;
+                int LA44_0 = input.LA(1);
 
-                if ( (LA41_0==DOUBLE_AMPER) ) {
-                    int LA41_2 = input.LA(2);
+                if ( (LA44_0==DOUBLE_AMPER) ) {
+                    int LA44_2 = input.LA(2);
 
-                    if ( (synpred60()) ) {
-                        alt41=1;
+                    if ( (synpred63()) ) {
+                        alt44=1;
                     }
 
 
                 }
 
 
-                switch (alt41) {
+                switch (alt44) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:32: t= DOUBLE_AMPER constraint_expression[and]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:5: t= DOUBLE_AMPER constraint_expression[and]
             	    {
             	    t=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2734); if (failed) return ;
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2736);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2819); if (failed) return ;
+            	    if ( backtracking==0 ) {
+
+            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2829);
             	    constraint_expression(and);
             	    _fsp--;
             	    if (failed) return ;
@@ -3981,7 +4108,7 @@
             	    break;
 
             	default :
-            	    break loop41;
+            	    break loop44;
                 }
             } while (true);
 
@@ -4010,34 +4137,34 @@
 
 
     // $ANTLR start constraint_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:1: constraint_expression[RestrictionConnectiveDescr base] : ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1132:1: constraint_expression[RestrictionConnectiveDescr base] : ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN ) ;
     public final void constraint_expression(RestrictionConnectiveDescr base) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:3: ( ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1134:3: ( ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1134:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )
-            int alt42=3;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1134:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )
+            int alt45=3;
             switch ( input.LA(1) ) {
             case IN:
                 {
-                alt42=1;
+                alt45=1;
                 }
                 break;
             case NOT:
                 {
-                int LA42_2 = input.LA(2);
+                int LA45_2 = input.LA(2);
 
-                if ( (LA42_2==MEMBEROF) ) {
-                    alt42=2;
+                if ( (LA45_2==MEMBEROF) ) {
+                    alt45=2;
                 }
-                else if ( (LA42_2==IN) ) {
-                    alt42=1;
+                else if ( (LA45_2==IN) ) {
+                    alt45=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )", 42, 2, input);
+                        new NoViableAltException("1134:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )", 45, 2, input);
 
                     throw nvae;
                 }
@@ -4054,27 +4181,27 @@
             case 78:
             case 79:
                 {
-                alt42=2;
+                alt45=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt42=3;
+                alt45=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )", 42, 0, input);
+                    new NoViableAltException("1134:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )", 45, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt42) {
+            switch (alt45) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:5: compound_operator[base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1134:5: compound_operator[base]
                     {
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2768);
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2864);
                     compound_operator(base);
                     _fsp--;
                     if (failed) return ;
@@ -4082,9 +4209,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:5: simple_operator[base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:5: simple_operator[base]
                     {
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2775);
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2871);
                     simple_operator(base);
                     _fsp--;
                     if (failed) return ;
@@ -4092,14 +4219,19 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:5: LEFT_PAREN or_restr_connective[base] RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:5: LEFT_PAREN or_restr_connective[base] RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2782); if (failed) return ;
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2784);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2878); if (failed) return ;
+                    if ( backtracking==0 ) {
+
+                      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+                      		
+                    }
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2887);
                     or_restr_connective(base);
                     _fsp--;
                     if (failed) return ;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2787); if (failed) return ;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2893); if (failed) return ;
 
                     }
                     break;
@@ -4122,7 +4254,7 @@
 
 
     // $ANTLR start simple_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:1: simple_operator[RestrictionConnectiveDescr base] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1145:1: simple_operator[RestrictionConnectiveDescr base] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op] ;
     public final void simple_operator(RestrictionConnectiveDescr base) throws RecognitionException {
         Token t=null;
         Token n=null;
@@ -4133,163 +4265,163 @@
         		String op = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:3: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:3: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op]
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )
-            int alt43=11;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )
+            int alt46=11;
             switch ( input.LA(1) ) {
             case 74:
                 {
-                alt43=1;
+                alt46=1;
                 }
                 break;
             case 75:
                 {
-                alt43=2;
+                alt46=2;
                 }
                 break;
             case 76:
                 {
-                alt43=3;
+                alt46=3;
                 }
                 break;
             case 77:
                 {
-                alt43=4;
+                alt46=4;
                 }
                 break;
             case 78:
                 {
-                alt43=5;
+                alt46=5;
                 }
                 break;
             case 79:
                 {
-                alt43=6;
+                alt46=6;
                 }
                 break;
             case CONTAINS:
                 {
-                alt43=7;
+                alt46=7;
                 }
                 break;
             case MATCHES:
                 {
-                alt43=8;
+                alt46=8;
                 }
                 break;
             case EXCLUDES:
                 {
-                alt43=9;
+                alt46=9;
                 }
                 break;
             case MEMBEROF:
                 {
-                alt43=10;
+                alt46=10;
                 }
                 break;
             case NOT:
                 {
-                alt43=11;
+                alt46=11;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1072:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )", 43, 0, input);
+                    new NoViableAltException("1150:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )", 46, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt43) {
+            switch (alt46) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:5: t= '=='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:5: t= '=='
                     {
                     t=(Token)input.LT(1);
-                    match(input,74,FOLLOW_74_in_simple_operator2818); if (failed) return ;
+                    match(input,74,FOLLOW_74_in_simple_operator2924); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:5: t= '>'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1151:5: t= '>'
                     {
                     t=(Token)input.LT(1);
-                    match(input,75,FOLLOW_75_in_simple_operator2826); if (failed) return ;
+                    match(input,75,FOLLOW_75_in_simple_operator2932); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:5: t= '>='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:5: t= '>='
                     {
                     t=(Token)input.LT(1);
-                    match(input,76,FOLLOW_76_in_simple_operator2834); if (failed) return ;
+                    match(input,76,FOLLOW_76_in_simple_operator2940); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1075:5: t= '<'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1153:5: t= '<'
                     {
                     t=(Token)input.LT(1);
-                    match(input,77,FOLLOW_77_in_simple_operator2842); if (failed) return ;
+                    match(input,77,FOLLOW_77_in_simple_operator2948); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:5: t= '<='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:5: t= '<='
                     {
                     t=(Token)input.LT(1);
-                    match(input,78,FOLLOW_78_in_simple_operator2850); if (failed) return ;
+                    match(input,78,FOLLOW_78_in_simple_operator2956); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:5: t= '!='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1155:5: t= '!='
                     {
                     t=(Token)input.LT(1);
-                    match(input,79,FOLLOW_79_in_simple_operator2858); if (failed) return ;
+                    match(input,79,FOLLOW_79_in_simple_operator2964); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:5: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:5: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator2866); if (failed) return ;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator2972); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1079:5: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:5: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator2874); if (failed) return ;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator2980); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1080:5: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1158:5: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator2882); if (failed) return ;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator2988); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:5: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:5: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2890); if (failed) return ;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2996); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:5: n= NOT t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:5: n= NOT t= MEMBEROF
                     {
                     n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator2898); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_simple_operator3004); if (failed) return ;
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2902); if (failed) return ;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator3008); if (failed) return ;
 
                     }
                     break;
@@ -4298,6 +4430,8 @@
 
             if ( backtracking==0 ) {
 
+                		    location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
+                                  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, t.getText());
               		    if( n != null ) {
               		        op = "not "+t.getText();
               		    } else {
@@ -4305,13 +4439,14 @@
               		    }
               		
             }
-            pushFollow(FOLLOW_expression_value_in_simple_operator2916);
+            pushFollow(FOLLOW_expression_value_in_simple_operator3022);
             rd=expression_value(op);
             _fsp--;
             if (failed) return ;
             if ( backtracking==0 ) {
 
               			    if( rd != null ) {
+              				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
               			        base.addRestriction( rd );
               			    } else if ( rd == null && op != null ) {
               			        base.addRestriction( new LiteralRestrictionDescr(op, null) );
@@ -4334,7 +4469,7 @@
 
 
     // $ANTLR start compound_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:1: compound_operator[RestrictionConnectiveDescr base] : ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1182:1: compound_operator[RestrictionConnectiveDescr base] : ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ;
     public final void compound_operator(RestrictionConnectiveDescr base) throws RecognitionException {
         RestrictionDescr rd = null;
 
@@ -4344,51 +4479,55 @@
         		RestrictionConnectiveDescr group = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:3: ( ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:3: ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:3: ( ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:3: ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:3: ( IN | NOT IN )
-            int alt44=2;
-            int LA44_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:3: ( IN | NOT IN )
+            int alt47=2;
+            int LA47_0 = input.LA(1);
 
-            if ( (LA44_0==IN) ) {
-                alt44=1;
+            if ( (LA47_0==IN) ) {
+                alt47=1;
             }
-            else if ( (LA44_0==NOT) ) {
-                alt44=2;
+            else if ( (LA47_0==NOT) ) {
+                alt47=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1107:3: ( IN | NOT IN )", 44, 0, input);
+                    new NoViableAltException("1188:3: ( IN | NOT IN )", 47, 0, input);
 
                 throw nvae;
             }
-            switch (alt44) {
+            switch (alt47) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:5: IN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:5: IN
                     {
-                    match(input,IN,FOLLOW_IN_in_compound_operator2945); if (failed) return ;
+                    match(input,IN,FOLLOW_IN_in_compound_operator3051); if (failed) return ;
                     if ( backtracking==0 ) {
 
                       			  op = "==";
                       			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
                       			  base.addRestriction( group );
+                        		    	  location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
+                                          	  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, "in");
                       			
                     }
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:5: NOT IN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1196:5: NOT IN
                     {
-                    match(input,NOT,FOLLOW_NOT_in_compound_operator2957); if (failed) return ;
-                    match(input,IN,FOLLOW_IN_in_compound_operator2959); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_compound_operator3063); if (failed) return ;
+                    match(input,IN,FOLLOW_IN_in_compound_operator3065); if (failed) return ;
                     if ( backtracking==0 ) {
 
                       			  op = "!=";
                       			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
                       			  base.addRestriction( group );
+                        		    	  location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
+                                          	  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, "in");
                       			
                     }
 
@@ -4397,8 +4536,8 @@
 
             }
 
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator2974); if (failed) return ;
-            pushFollow(FOLLOW_expression_value_in_compound_operator2978);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3080); if (failed) return ;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3084);
             rd=expression_value(op);
             _fsp--;
             if (failed) return ;
@@ -4409,23 +4548,23 @@
               			    }
               			
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:3: ( COMMA rd= expression_value[op] )*
-            loop45:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1211:3: ( COMMA rd= expression_value[op] )*
+            loop48:
             do {
-                int alt45=2;
-                int LA45_0 = input.LA(1);
+                int alt48=2;
+                int LA48_0 = input.LA(1);
 
-                if ( (LA45_0==COMMA) ) {
-                    alt45=1;
+                if ( (LA48_0==COMMA) ) {
+                    alt48=1;
                 }
 
 
-                switch (alt45) {
+                switch (alt48) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:5: COMMA rd= expression_value[op]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1211:5: COMMA rd= expression_value[op]
             	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator2990); if (failed) return ;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator2994);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3096); if (failed) return ;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3100);
             	    rd=expression_value(op);
             	    _fsp--;
             	    if (failed) return ;
@@ -4441,14 +4580,19 @@
             	    break;
 
             	default :
-            	    break loop45;
+            	    break loop48;
                 }
             } while (true);
 
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3010); if (failed) return ;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3116); if (failed) return ;
+            if ( backtracking==0 ) {
 
+              			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
+              		
             }
 
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -4462,7 +4606,7 @@
 
 
     // $ANTLR start expression_value
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:1: expression_value[String op] returns [RestrictionDescr rd] : (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:1: expression_value[String op] returns [RestrictionDescr rd] : (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) ;
     public final RestrictionDescr expression_value(String op) throws RecognitionException {
         RestrictionDescr rd = null;
 
@@ -4473,26 +4617,26 @@
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:3: ( (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1226:3: ( (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1226:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-            int alt46=4;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1226:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+            int alt49=4;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                int LA46_1 = input.LA(2);
+                int LA49_1 = input.LA(2);
 
-                if ( (LA46_1==71) ) {
-                    alt46=2;
+                if ( (LA49_1==71) ) {
+                    alt49=2;
                 }
-                else if ( (LA46_1==EOF||LA46_1==RIGHT_PAREN||(LA46_1>=DOUBLE_PIPE && LA46_1<=DOUBLE_AMPER)||LA46_1==COMMA) ) {
-                    alt46=1;
+                else if ( (LA49_1==EOF||LA49_1==COMMA||LA49_1==RIGHT_PAREN||(LA49_1>=DOUBLE_PIPE && LA49_1<=DOUBLE_AMPER)) ) {
+                    alt49=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return rd;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 46, 1, input);
+                        new NoViableAltException("1226:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 49, 1, input);
 
                     throw nvae;
                 }
@@ -4504,28 +4648,28 @@
             case FLOAT:
             case NULL:
                 {
-                alt46=3;
+                alt49=3;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt46=4;
+                alt49=4;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return rd;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 46, 0, input);
+                    new NoViableAltException("1226:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 49, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt46) {
+            switch (alt49) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:5: bvc= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1226:5: bvc= ID
                     {
                     bvc=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_expression_value3034); if (failed) return rd;
+                    match(input,ID,FOLLOW_ID_in_expression_value3144); if (failed) return rd;
                     if ( backtracking==0 ) {
 
                       				rd = new VariableRestrictionDescr(op, bvc.getText());
@@ -4535,9 +4679,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1143:4: lc= enum_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1231:4: lc= enum_constraint
                     {
-                    pushFollow(FOLLOW_enum_constraint_in_expression_value3050);
+                    pushFollow(FOLLOW_enum_constraint_in_expression_value3160);
                     lc=enum_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -4550,9 +4694,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:4: lc= literal_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1236:4: lc= literal_constraint
                     {
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value3073);
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3183);
                     lc=literal_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -4565,9 +4709,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:5: rvc= retval_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1240:5: rvc= retval_constraint
                     {
-                    pushFollow(FOLLOW_retval_constraint_in_expression_value3087);
+                    pushFollow(FOLLOW_retval_constraint_in_expression_value3197);
                     rvc=retval_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -4582,9 +4726,14 @@
 
             }
 
+            if ( backtracking==0 ) {
 
+              			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
+              		
             }
 
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -4598,7 +4747,7 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1250:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
     public final String literal_constraint() throws RecognitionException {
         String text = null;
 
@@ -4608,51 +4757,51 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:4: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1254:4: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1254:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
-            int alt47=5;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1254:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            int alt50=5;
             switch ( input.LA(1) ) {
             case STRING:
                 {
-                alt47=1;
+                alt50=1;
                 }
                 break;
             case INT:
                 {
-                alt47=2;
+                alt50=2;
                 }
                 break;
             case FLOAT:
                 {
-                alt47=3;
+                alt50=3;
                 }
                 break;
             case BOOL:
                 {
-                alt47=4;
+                alt50=4;
                 }
                 break;
             case NULL:
                 {
-                alt47=5;
+                alt50=5;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return text;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1163:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 47, 0, input);
+                    new NoViableAltException("1254:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 50, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt47) {
+            switch (alt50) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:6: t= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1254:6: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint3126); if (failed) return text;
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint3240); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = getString( t ); 
                     }
@@ -4660,10 +4809,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1164:5: t= INT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1255:5: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint3137); if (failed) return text;
+                    match(input,INT,FOLLOW_INT_in_literal_constraint3251); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4671,10 +4820,10 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1165:5: t= FLOAT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1256:5: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint3150); if (failed) return text;
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint3264); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4682,10 +4831,10 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1166:5: t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:5: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint3161); if (failed) return text;
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint3275); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4693,10 +4842,10 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1167:5: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1258:5: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_literal_constraint3173); if (failed) return text;
+                    match(input,NULL,FOLLOW_NULL_in_literal_constraint3287); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = null; 
                     }
@@ -4722,7 +4871,7 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1171:1: enum_constraint returns [String text] : id= ID ( '.' ident= identifier )+ ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1262:1: enum_constraint returns [String text] : id= ID ( '.' ident= identifier )+ ;
     public final String enum_constraint() throws RecognitionException {
         String text = null;
 
@@ -4734,32 +4883,32 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:3: (id= ID ( '.' ident= identifier )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:3: id= ID ( '.' ident= identifier )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:3: (id= ID ( '.' ident= identifier )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:3: id= ID ( '.' ident= identifier )+
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint3208); if (failed) return text;
+            match(input,ID,FOLLOW_ID_in_enum_constraint3322); if (failed) return text;
             if ( backtracking==0 ) {
                text=id.getText(); 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:32: ( '.' ident= identifier )+
-            int cnt48=0;
-            loop48:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:32: ( '.' ident= identifier )+
+            int cnt51=0;
+            loop51:
             do {
-                int alt48=2;
-                int LA48_0 = input.LA(1);
+                int alt51=2;
+                int LA51_0 = input.LA(1);
 
-                if ( (LA48_0==71) ) {
-                    alt48=1;
+                if ( (LA51_0==71) ) {
+                    alt51=1;
                 }
 
 
-                switch (alt48) {
+                switch (alt51) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:34: '.' ident= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:34: '.' ident= identifier
             	    {
-            	    match(input,71,FOLLOW_71_in_enum_constraint3214); if (failed) return text;
-            	    pushFollow(FOLLOW_identifier_in_enum_constraint3218);
+            	    match(input,71,FOLLOW_71_in_enum_constraint3328); if (failed) return text;
+            	    pushFollow(FOLLOW_identifier_in_enum_constraint3332);
             	    ident=identifier();
             	    _fsp--;
             	    if (failed) return text;
@@ -4771,13 +4920,13 @@
             	    break;
 
             	default :
-            	    if ( cnt48 >= 1 ) break loop48;
+            	    if ( cnt51 >= 1 ) break loop51;
             	    if (backtracking>0) {failed=true; return text;}
                         EarlyExitException eee =
-                            new EarlyExitException(48, input);
+                            new EarlyExitException(51, input);
                         throw eee;
                 }
-                cnt48++;
+                cnt51++;
             } while (true);
 
 
@@ -4796,7 +4945,7 @@
 
 
     // $ANTLR start predicate
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:1: predicate[ConditionalElementDescr base] : text= paren_chunk[d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1271:1: predicate[ConditionalElementDescr base] : text= paren_chunk[d] ;
     public final void predicate(ConditionalElementDescr base) throws RecognitionException {
         String text = null;
 
@@ -4805,15 +4954,15 @@
         		PredicateDescr d = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:3: (text= paren_chunk[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:3: text= paren_chunk[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:3: (text= paren_chunk[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:3: text= paren_chunk[d]
             {
             if ( backtracking==0 ) {
 
               			d = new PredicateDescr( );
               		
             }
-            pushFollow(FOLLOW_paren_chunk_in_predicate3260);
+            pushFollow(FOLLOW_paren_chunk_in_predicate3374);
             text=paren_chunk(d);
             _fsp--;
             if (failed) return ;
@@ -4842,7 +4991,7 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1198:1: paren_chunk[BaseDescr descr] returns [String text] : loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1289:1: paren_chunk[BaseDescr descr] returns [String text] : loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN ;
     public final String paren_chunk(BaseDescr descr) throws RecognitionException {
         String text = null;
 
@@ -4855,8 +5004,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:10: (loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:10: loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1295:10: (loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1295:10: loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN
             {
             if ( backtracking==0 ) {
 
@@ -4866,32 +5015,31 @@
               	        
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk3309); if (failed) return text;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk3423); if (failed) return text;
             if ( backtracking==0 ) {
 
               		    buf.append( loc.getText());
-               
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:3: (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )*
-            loop49:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1304:3: (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )*
+            loop52:
             do {
-                int alt49=3;
-                int LA49_0 = input.LA(1);
+                int alt52=3;
+                int LA52_0 = input.LA(1);
 
-                if ( ((LA49_0>=ATTRIBUTES && LA49_0<=ID)||(LA49_0>=OR && LA49_0<=79)) ) {
-                    alt49=1;
+                if ( ((LA52_0>=ATTRIBUTES && LA52_0<=ACCUMULATE)||(LA52_0>=COMMA && LA52_0<=RESULT)||(LA52_0>=COLLECT && LA52_0<=79)) ) {
+                    alt52=1;
                 }
-                else if ( (LA49_0==LEFT_PAREN) ) {
-                    alt49=2;
+                else if ( (LA52_0==LEFT_PAREN) ) {
+                    alt52=2;
                 }
 
 
-                switch (alt49) {
+                switch (alt52) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1215:4: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1305:4: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=ID)||(input.LA(1)>=OR && input.LA(1)<=79) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=ACCUMULATE)||(input.LA(1)>=COMMA && input.LA(1)<=RESULT)||(input.LA(1)>=COLLECT && input.LA(1)<=79) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4899,7 +5047,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk3325);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk3439);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4911,9 +5059,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1220:4: chunk= paren_chunk[null]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1310:4: chunk= paren_chunk[null]
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk3349);
+            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk3463);
             	    chunk=paren_chunk(null);
             	    _fsp--;
             	    if (failed) return text;
@@ -4927,7 +5075,7 @@
             	    break;
 
             	default :
-            	    break loop49;
+            	    break loop52;
                 }
             } while (true);
 
@@ -4941,7 +5089,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk3386); if (failed) return text;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk3500); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4967,7 +5115,7 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:1: curly_chunk[BaseDescr descr] returns [String text] : loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1332:1: curly_chunk[BaseDescr descr] returns [String text] : loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY ;
     public final String curly_chunk(BaseDescr descr) throws RecognitionException {
         String text = null;
 
@@ -4980,11 +5128,11 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1248:3: (loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1248:3: loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1338:3: (loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1338:3: loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY
             {
             loc=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk3437); if (failed) return text;
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk3551); if (failed) return text;
             if ( backtracking==0 ) {
 
               	            channel = ((SwitchingCommonTokenStream)input).getTokenTypeChannel( WS ); 
@@ -4994,23 +5142,23 @@
               		    buf.append( loc.getText() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1256:3: (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )*
-            loop50:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1346:3: (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )*
+            loop53:
             do {
-                int alt50=3;
-                int LA50_0 = input.LA(1);
+                int alt53=3;
+                int LA53_0 = input.LA(1);
 
-                if ( ((LA50_0>=ATTRIBUTES && LA50_0<=NULL)||(LA50_0>=LEFT_SQUARE && LA50_0<=79)) ) {
-                    alt50=1;
+                if ( ((LA53_0>=ATTRIBUTES && LA53_0<=NULL)||(LA53_0>=LEFT_SQUARE && LA53_0<=79)) ) {
+                    alt53=1;
                 }
-                else if ( (LA50_0==LEFT_CURLY) ) {
-                    alt50=2;
+                else if ( (LA53_0==LEFT_CURLY) ) {
+                    alt53=2;
                 }
 
 
-                switch (alt50) {
+                switch (alt53) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:4: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1347:4: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_SQUARE && input.LA(1)<=79) ) {
             	        input.consume();
@@ -5020,7 +5168,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk3453);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk3567);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -5032,9 +5180,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1262:4: chunk= curly_chunk[descr]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1352:4: chunk= curly_chunk[descr]
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk3477);
+            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk3591);
             	    chunk=curly_chunk(descr);
             	    _fsp--;
             	    if (failed) return text;
@@ -5048,7 +5196,7 @@
             	    break;
 
             	default :
-            	    break loop50;
+            	    break loop53;
                 }
             } while (true);
 
@@ -5062,7 +5210,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk3514); if (failed) return text;
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk3628); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -5088,7 +5236,7 @@
 
 
     // $ANTLR start square_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1284:1: square_chunk[BaseDescr descr] returns [String text] : loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1374:1: square_chunk[BaseDescr descr] returns [String text] : loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE ;
     public final String square_chunk(BaseDescr descr) throws RecognitionException {
         String text = null;
 
@@ -5101,8 +5249,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1290:10: (loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1290:10: loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1380:10: (loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1380:10: loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE
             {
             if ( backtracking==0 ) {
 
@@ -5112,30 +5260,30 @@
               	        
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk3577); if (failed) return text;
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk3691); if (failed) return text;
             if ( backtracking==0 ) {
 
               		    buf.append( loc.getText());
                
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:3: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )*
-            loop51:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1390:3: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )*
+            loop54:
             do {
-                int alt51=3;
-                int LA51_0 = input.LA(1);
+                int alt54=3;
+                int LA54_0 = input.LA(1);
 
-                if ( ((LA51_0>=ATTRIBUTES && LA51_0<=RIGHT_CURLY)||(LA51_0>=AND && LA51_0<=79)) ) {
-                    alt51=1;
+                if ( ((LA54_0>=ATTRIBUTES && LA54_0<=RIGHT_CURLY)||(LA54_0>=AND && LA54_0<=79)) ) {
+                    alt54=1;
                 }
-                else if ( (LA51_0==LEFT_SQUARE) ) {
-                    alt51=2;
+                else if ( (LA54_0==LEFT_SQUARE) ) {
+                    alt54=2;
                 }
 
 
-                switch (alt51) {
+                switch (alt54) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:4: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1391:4: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=RIGHT_CURLY)||(input.LA(1)>=AND && input.LA(1)<=79) ) {
             	        input.consume();
@@ -5145,7 +5293,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk3593);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk3707);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -5157,9 +5305,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1306:4: chunk= square_chunk[null]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1396:4: chunk= square_chunk[null]
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_square_chunk3617);
+            	    pushFollow(FOLLOW_square_chunk_in_square_chunk3731);
             	    chunk=square_chunk(null);
             	    _fsp--;
             	    if (failed) return text;
@@ -5173,7 +5321,7 @@
             	    break;
 
             	default :
-            	    break loop51;
+            	    break loop54;
                 }
             } while (true);
 
@@ -5187,7 +5335,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk3654); if (failed) return text;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk3768); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -5213,7 +5361,7 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1328:1: retval_constraint returns [String text] : c= paren_chunk[null] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1418:1: retval_constraint returns [String text] : c= paren_chunk[null] ;
     public final String retval_constraint() throws RecognitionException {
         String text = null;
 
@@ -5224,10 +5372,10 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1333:3: (c= paren_chunk[null] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1333:3: c= paren_chunk[null]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1423:3: (c= paren_chunk[null] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1423:3: c= paren_chunk[null]
             {
-            pushFollow(FOLLOW_paren_chunk_in_retval_constraint3699);
+            pushFollow(FOLLOW_paren_chunk_in_retval_constraint3813);
             c=paren_chunk(null);
             _fsp--;
             if (failed) return text;
@@ -5250,7 +5398,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1336:1: lhs_or returns [BaseDescr d] : left= lhs_and ( ( OR | '||' ) right= lhs_and )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1426:1: lhs_or returns [BaseDescr d] : left= lhs_and ( ( OR | '||' ) right= lhs_and )* ;
     public final BaseDescr lhs_or() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5264,30 +5412,30 @@
         		OrDescr or = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1342:3: (left= lhs_and ( ( OR | '||' ) right= lhs_and )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1342:3: left= lhs_and ( ( OR | '||' ) right= lhs_and )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1432:3: (left= lhs_and ( ( OR | '||' ) right= lhs_and )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1432:3: left= lhs_and ( ( OR | '||' ) right= lhs_and )*
             {
-            pushFollow(FOLLOW_lhs_and_in_lhs_or3727);
+            pushFollow(FOLLOW_lhs_and_in_lhs_or3841);
             left=lhs_and();
             _fsp--;
             if (failed) return d;
             if ( backtracking==0 ) {
               d = left; 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1343:3: ( ( OR | '||' ) right= lhs_and )*
-            loop52:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:3: ( ( OR | '||' ) right= lhs_and )*
+            loop55:
             do {
-                int alt52=2;
-                int LA52_0 = input.LA(1);
+                int alt55=2;
+                int LA55_0 = input.LA(1);
 
-                if ( ((LA52_0>=OR && LA52_0<=DOUBLE_PIPE)) ) {
-                    alt52=1;
+                if ( ((LA55_0>=OR && LA55_0<=DOUBLE_PIPE)) ) {
+                    alt55=1;
                 }
 
 
-                switch (alt52) {
+                switch (alt55) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1343:5: ( OR | '||' ) right= lhs_and
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:5: ( OR | '||' ) right= lhs_and
             	    {
             	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
             	        input.consume();
@@ -5297,10 +5445,15 @@
             	        if (backtracking>0) {failed=true; return d;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3735);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3849);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_lhs_and_in_lhs_or3746);
+            	    if ( backtracking==0 ) {
+
+            	      				location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_lhs_and_in_lhs_or3865);
             	    right=lhs_and();
             	    _fsp--;
             	    if (failed) return d;
@@ -5320,7 +5473,7 @@
             	    break;
 
             	default :
-            	    break loop52;
+            	    break loop55;
                 }
             } while (true);
 
@@ -5340,7 +5493,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1357:1: lhs_and returns [BaseDescr d] : left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1450:1: lhs_and returns [BaseDescr d] : left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* ;
     public final BaseDescr lhs_and() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5354,30 +5507,30 @@
         		AndDescr and = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1363:3: (left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1363:3: left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1456:3: (left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1456:3: left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
             {
-            pushFollow(FOLLOW_lhs_unary_in_lhs_and3782);
+            pushFollow(FOLLOW_lhs_unary_in_lhs_and3901);
             left=lhs_unary();
             _fsp--;
             if (failed) return d;
             if ( backtracking==0 ) {
                d = left; 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1364:3: ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
-            loop53:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1457:3: ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
+            loop56:
             do {
-                int alt53=2;
-                int LA53_0 = input.LA(1);
+                int alt56=2;
+                int LA56_0 = input.LA(1);
 
-                if ( (LA53_0==DOUBLE_AMPER||LA53_0==AND) ) {
-                    alt53=1;
+                if ( (LA56_0==DOUBLE_AMPER||LA56_0==AND) ) {
+                    alt56=1;
                 }
 
 
-                switch (alt53) {
+                switch (alt56) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1364:5: ( AND | DOUBLE_AMPER ) right= lhs_unary
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1457:5: ( AND | DOUBLE_AMPER ) right= lhs_unary
             	    {
             	    if ( input.LA(1)==DOUBLE_AMPER||input.LA(1)==AND ) {
             	        input.consume();
@@ -5387,10 +5540,15 @@
             	        if (backtracking>0) {failed=true; return d;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3790);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3909);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_lhs_unary_in_lhs_and3801);
+            	    if ( backtracking==0 ) {
+
+            	      				location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_lhs_unary_in_lhs_and3925);
             	    right=lhs_unary();
             	    _fsp--;
             	    if (failed) return d;
@@ -5410,7 +5568,7 @@
             	    break;
 
             	default :
-            	    break loop53;
+            	    break loop56;
                 }
             } while (true);
 
@@ -5430,7 +5588,7 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1378:1: lhs_unary returns [BaseDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1474:1: lhs_unary returns [BaseDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon ;
     public final BaseDescr lhs_unary() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5447,55 +5605,55 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:4: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1478:4: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1478:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )
-            int alt56=6;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1478:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )
+            int alt59=6;
             switch ( input.LA(1) ) {
             case EXISTS:
                 {
-                alt56=1;
+                alt59=1;
                 }
                 break;
             case NOT:
                 {
-                alt56=2;
+                alt59=2;
                 }
                 break;
             case EVAL:
                 {
-                alt56=3;
+                alt59=3;
                 }
                 break;
             case ID:
                 {
-                alt56=4;
+                alt59=4;
                 }
                 break;
             case FORALL:
                 {
-                alt56=5;
+                alt59=5;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt56=6;
+                alt59=6;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1382:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )", 56, 0, input);
+                    new NoViableAltException("1478:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )", 59, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt56) {
+            switch (alt59) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:6: u= lhs_exist
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1478:6: u= lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary3838);
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary3962);
                     u=lhs_exist();
                     _fsp--;
                     if (failed) return d;
@@ -5503,9 +5661,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1383:5: u= lhs_not
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1479:5: u= lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary3846);
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary3970);
                     u=lhs_not();
                     _fsp--;
                     if (failed) return d;
@@ -5513,9 +5671,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1384:5: u= lhs_eval
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1480:5: u= lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary3854);
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary3978);
                     u=lhs_eval();
                     _fsp--;
                     if (failed) return d;
@@ -5523,85 +5681,181 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1385:5: u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1481:5: u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary3862);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary3986);
                     u=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1385:19: ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
-                    int alt55=2;
-                    int LA55_0 = input.LA(1);
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1481:19: ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
+                    int alt58=2;
+                    int LA58_0 = input.LA(1);
 
-                    if ( (LA55_0==FROM) ) {
-                        alt55=1;
+                    if ( (LA58_0==FROM) ) {
+                        alt58=1;
                     }
-                    switch (alt55) {
+                    switch (alt58) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1386:13: FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1482:13: FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
                             {
-                            match(input,FROM,FOLLOW_FROM_in_lhs_unary3878); if (failed) return d;
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
-                            int alt54=3;
-                            int LA54_0 = input.LA(1);
+                            match(input,FROM,FOLLOW_FROM_in_lhs_unary4002); if (failed) return d;
+                            if ( backtracking==0 ) {
 
-                            if ( (LA54_0==ACCUMULATE) && ((synpred99()||synpred102()))) {
-                                int LA54_1 = input.LA(2);
+                              				location.setType(Location.LOCATION_LHS_FROM);
+                              				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
+                              		          
+                            }
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1487:13: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
+                            int alt57=3;
+                            int LA57_0 = input.LA(1);
 
-                                if ( (synpred99()) ) {
-                                    alt54=1;
+                            if ( (LA57_0==ACCUMULATE) ) {
+                                int LA57_1 = input.LA(2);
+
+                                if ( (synpred102()) ) {
+                                    alt57=1;
                                 }
-                                else if ( (synpred102()) ) {
-                                    alt54=3;
+                                else if ( (synpred105()) ) {
+                                    alt57=3;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return d;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 54, 1, input);
+                                        new NoViableAltException("1487:13: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 57, 1, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA54_0==COLLECT) && ((synpred100()||synpred102()))) {
-                                int LA54_2 = input.LA(2);
+                            else if ( (LA57_0==COLLECT) ) {
+                                int LA57_2 = input.LA(2);
 
-                                if ( (synpred100()) ) {
-                                    alt54=2;
+                                if ( (synpred103()) ) {
+                                    alt57=2;
                                 }
-                                else if ( (synpred102()) ) {
-                                    alt54=3;
+                                else if ( (synpred105()) ) {
+                                    alt57=3;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return d;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 54, 2, input);
+                                        new NoViableAltException("1487:13: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 57, 2, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( ((LA54_0>=ATTRIBUTES && LA54_0<=WHEN)||LA54_0==ENABLED||LA54_0==SALIENCE||LA54_0==DURATION||(LA54_0>=INIT && LA54_0<=RESULT)||LA54_0==ID||LA54_0==OR||(LA54_0>=EVAL && LA54_0<=IN)||LA54_0==NULL||(LA54_0>=AND && LA54_0<=THEN)) && (synpred102())) {
-                                alt54=3;
+                            else if ( (LA57_0==ID) && (synpred105())) {
+                                alt57=3;
                             }
+                            else if ( (LA57_0==PACKAGE) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==FUNCTION) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==GLOBAL) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==IMPORT) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==RULE) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==QUERY) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==TEMPLATE) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==ATTRIBUTES) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==ENABLED) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==SALIENCE) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==DURATION) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==FROM) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==INIT) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==ACTION) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==RESULT) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==OR) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==AND) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==CONTAINS) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==EXCLUDES) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==MEMBEROF) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==MATCHES) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==NULL) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==EXISTS) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==NOT) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==EVAL) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==FORALL) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==WHEN) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==THEN) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==END) && (synpred105())) {
+                                alt57=3;
+                            }
+                            else if ( (LA57_0==IN) && (synpred105())) {
+                                alt57=3;
+                            }
                             else {
                                 if (backtracking>0) {failed=true; return d;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 54, 0, input);
+                                    new NoViableAltException("1487:13: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 57, 0, input);
 
                                 throw nvae;
                             }
-                            switch (alt54) {
+                            switch (alt57) {
                                 case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:14: ( ACCUMULATE )=> (ac= accumulate_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:14: ( ACCUMULATE )=> (ac= accumulate_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:32: (ac= accumulate_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:33: ac= accumulate_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:32: (ac= accumulate_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:33: ac= accumulate_statement
                                     {
-                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary3906);
+                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary4057);
                                     ac=accumulate_statement();
                                     _fsp--;
                                     if (failed) return d;
                                     if ( backtracking==0 ) {
-                                      ac.setResultPattern((PatternDescr) u); u=ac;
+                                      ac.setResultPattern((PatternDescr) u); u=ac; 
                                     }
 
                                     }
@@ -5610,17 +5864,17 @@
                                     }
                                     break;
                                 case 2 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:14: ( COLLECT )=> (cs= collect_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:14: ( COLLECT )=> (cs= collect_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:29: (cs= collect_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:30: cs= collect_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:29: (cs= collect_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:30: cs= collect_statement
                                     {
-                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary3935);
+                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary4086);
                                     cs=collect_statement();
                                     _fsp--;
                                     if (failed) return d;
                                     if ( backtracking==0 ) {
-                                      cs.setResultPattern((PatternDescr) u); u=cs;
+                                      cs.setResultPattern((PatternDescr) u); u=cs; 
                                     }
 
                                     }
@@ -5629,17 +5883,17 @@
                                     }
                                     break;
                                 case 3 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:14: (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:14: (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:43: (fm= from_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:44: fm= from_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:43: (fm= from_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:44: fm= from_statement
                                     {
-                                    pushFollow(FOLLOW_from_statement_in_lhs_unary3970);
+                                    pushFollow(FOLLOW_from_statement_in_lhs_unary4121);
                                     fm=from_statement();
                                     _fsp--;
                                     if (failed) return d;
                                     if ( backtracking==0 ) {
-                                      fm.setPattern((PatternDescr) u); u=fm;
+                                      fm.setPattern((PatternDescr) u); u=fm; 
                                     }
 
                                     }
@@ -5660,9 +5914,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:5: u= lhs_forall
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1493:5: u= lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary4009);
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary4160);
                     u=lhs_forall();
                     _fsp--;
                     if (failed) return d;
@@ -5670,14 +5924,14 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1393:5: '(' u= lhs_or ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1494:5: '(' u= lhs_or ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary4017); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary4021);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary4168); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary4172);
                     u=lhs_or();
                     _fsp--;
                     if (failed) return d;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary4023); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary4174); if (failed) return d;
 
                     }
                     break;
@@ -5687,7 +5941,7 @@
             if ( backtracking==0 ) {
                d = u; 
             }
-            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary4033);
+            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary4184);
             opt_semicolon();
             _fsp--;
             if (failed) return d;
@@ -5707,7 +5961,7 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1398:1: lhs_exist returns [BaseDescr d] : loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1499:1: lhs_exist returns [BaseDescr d] : loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
     public final BaseDescr lhs_exist() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5720,44 +5974,45 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1402:4: (loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1402:4: loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1503:4: (loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1503:4: loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
             {
             loc=(Token)input.LT(1);
-            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist4057); if (failed) return d;
+            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist4208); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new ExistsDescr( ); 
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
-            int alt57=2;
-            int LA57_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            int alt60=2;
+            int LA60_0 = input.LA(1);
 
-            if ( (LA57_0==LEFT_PAREN) ) {
-                alt57=1;
+            if ( (LA60_0==LEFT_PAREN) ) {
+                alt60=1;
             }
-            else if ( (LA57_0==ID) ) {
-                alt57=2;
+            else if ( (LA60_0==ID) ) {
+                alt60=2;
             }
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1408:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 57, 0, input);
+                    new NoViableAltException("1510:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 60, 0, input);
 
                 throw nvae;
             }
-            switch (alt57) {
+            switch (alt60) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:12: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:12: ( '(' pattern= lhs_or end= ')' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:12: ( '(' pattern= lhs_or end= ')' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:14: '(' pattern= lhs_or end= ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:12: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:14: '(' pattern= lhs_or end= ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist4077); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist4081);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist4228); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist4232);
                     pattern=lhs_or();
                     _fsp--;
                     if (failed) return d;
@@ -5765,7 +6020,7 @@
                        if ( pattern != null ) ((ExistsDescr)d).addDescr( pattern ); 
                     }
                     end=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist4113); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist4264); if (failed) return d;
                     if ( backtracking==0 ) {
                        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() ); 
                     }
@@ -5776,9 +6031,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1413:12: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:12: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist4163);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist4314);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -5812,7 +6067,7 @@
 
 
     // $ANTLR start lhs_not
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1423:1: lhs_not returns [NotDescr d] : loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:1: lhs_not returns [NotDescr d] : loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
     public final NotDescr lhs_not() throws RecognitionException {
         NotDescr d = null;
 
@@ -5825,44 +6080,45 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1427:4: (loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1427:4: loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:4: (loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:4: loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
             {
             loc=(Token)input.LT(1);
-            match(input,NOT,FOLLOW_NOT_in_lhs_not4217); if (failed) return d;
+            match(input,NOT,FOLLOW_NOT_in_lhs_not4368); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new NotDescr( ); 
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
-            int alt58=2;
-            int LA58_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            int alt61=2;
+            int LA61_0 = input.LA(1);
 
-            if ( (LA58_0==LEFT_PAREN) ) {
-                alt58=1;
+            if ( (LA61_0==LEFT_PAREN) ) {
+                alt61=1;
             }
-            else if ( (LA58_0==ID) ) {
-                alt58=2;
+            else if ( (LA61_0==ID) ) {
+                alt61=2;
             }
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1433:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 58, 0, input);
+                    new NoViableAltException("1536:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 61, 0, input);
 
                 throw nvae;
             }
-            switch (alt58) {
+            switch (alt61) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:5: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:5: ( '(' pattern= lhs_or end= ')' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:5: ( '(' pattern= lhs_or end= ')' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:7: '(' pattern= lhs_or end= ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:5: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:7: '(' pattern= lhs_or end= ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not4230); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not4234);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not4381); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not4385);
                     pattern=lhs_or();
                     _fsp--;
                     if (failed) return d;
@@ -5870,7 +6126,7 @@
                        if ( pattern != null ) d.addDescr( pattern ); 
                     }
                     end=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not4267); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not4418); if (failed) return d;
                     if ( backtracking==0 ) {
                        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() ); 
                     }
@@ -5881,9 +6137,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1439:3: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:3: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not4304);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not4455);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -5917,7 +6173,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1449:1: lhs_eval returns [BaseDescr d] : loc= EVAL c= paren_chunk[d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1552:1: lhs_eval returns [BaseDescr d] : loc= EVAL c= paren_chunk[d] ;
     public final BaseDescr lhs_eval() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5929,12 +6185,17 @@
         		d = new EvalDescr( );
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1454:3: (loc= EVAL c= paren_chunk[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1454:3: loc= EVAL c= paren_chunk[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1557:3: (loc= EVAL c= paren_chunk[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1557:3: loc= EVAL c= paren_chunk[d]
             {
             loc=(Token)input.LT(1);
-            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval4352); if (failed) return d;
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval4356);
+            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval4503); if (failed) return d;
+            if ( backtracking==0 ) {
+
+              			location.setType( Location.LOCATION_LHS_INSIDE_EVAL );
+              		
+            }
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval4514);
             c=paren_chunk(d);
             _fsp--;
             if (failed) return d;
@@ -5942,9 +6203,11 @@
                
               			if ( loc != null ) d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		        if( c != null ) {
-              		            String body = c.substring(1, c.length()-1);
+              	  		    this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
+              		            String body = c.length() > 1 ? c.substring(1, c.length()-1) : "";
               			    checkTrailingSemicolon( body, offset(loc.getLine()) );
               			    ((EvalDescr) d).setContent( body );
+              			    location.setProperty(Location.LOCATION_EVAL_CONTENT, body);
               			}
               		
             }
@@ -5964,7 +6227,7 @@
 
 
     // $ANTLR start lhs_forall
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1465:1: lhs_forall returns [ForallDescr d] : loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:1: lhs_forall returns [ForallDescr d] : loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' ;
     public final ForallDescr lhs_forall() throws RecognitionException {
         ForallDescr d = null;
 
@@ -5979,13 +6242,13 @@
         		d = factory.createForall();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:4: (loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:4: loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1578:4: (loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1578:4: loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')'
             {
             loc=(Token)input.LT(1);
-            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall4385); if (failed) return d;
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall4387); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4391);
+            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall4543); if (failed) return d;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall4545); if (failed) return d;
+            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4549);
             base=lhs_pattern();
             _fsp--;
             if (failed) return d;
@@ -5997,41 +6260,41 @@
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:3: ( ( ',' )? pattern= lhs_pattern )+
-            int cnt60=0;
-            loop60:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:3: ( ( ',' )? pattern= lhs_pattern )+
+            int cnt63=0;
+            loop63:
             do {
-                int alt60=2;
-                int LA60_0 = input.LA(1);
+                int alt63=2;
+                int LA63_0 = input.LA(1);
 
-                if ( (LA60_0==ID||LA60_0==COMMA) ) {
-                    alt60=1;
+                if ( (LA63_0==COMMA||LA63_0==ID) ) {
+                    alt63=1;
                 }
 
 
-                switch (alt60) {
+                switch (alt63) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:5: ( ',' )? pattern= lhs_pattern
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:5: ( ',' )? pattern= lhs_pattern
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:5: ( ',' )?
-            	    int alt59=2;
-            	    int LA59_0 = input.LA(1);
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:5: ( ',' )?
+            	    int alt62=2;
+            	    int LA62_0 = input.LA(1);
 
-            	    if ( (LA59_0==COMMA) ) {
-            	        alt59=1;
+            	    if ( (LA62_0==COMMA) ) {
+            	        alt62=1;
             	    }
-            	    switch (alt59) {
+            	    switch (alt62) {
             	        case 1 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:6: ','
+            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:6: ','
             	            {
-            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall4405); if (failed) return d;
+            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall4563); if (failed) return d;
 
             	            }
             	            break;
 
             	    }
 
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4411);
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4569);
             	    pattern=lhs_pattern();
             	    _fsp--;
             	    if (failed) return d;
@@ -6046,17 +6309,17 @@
             	    break;
 
             	default :
-            	    if ( cnt60 >= 1 ) break loop60;
+            	    if ( cnt63 >= 1 ) break loop63;
             	    if (backtracking>0) {failed=true; return d;}
                         EarlyExitException eee =
-                            new EarlyExitException(60, input);
+                            new EarlyExitException(63, input);
                         throw eee;
                 }
-                cnt60++;
+                cnt63++;
             } while (true);
 
             end=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall4426); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall4584); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() );
@@ -6078,7 +6341,7 @@
 
 
     // $ANTLR start dotted_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:1: dotted_name[BaseDescr descr] returns [String name] : id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1597:1: dotted_name[BaseDescr descr] returns [String name] : id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* ;
     public final String dotted_name(BaseDescr descr) throws RecognitionException {
         String name = null;
 
@@ -6091,11 +6354,11 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1493:3: (id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1493:3: id= ID ( '.' ident= identifier )* ( '[' loc= ']' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1602:3: (id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1602:3: id= ID ( '.' ident= identifier )* ( '[' loc= ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name4457); if (failed) return name;
+            match(input,ID,FOLLOW_ID_in_dotted_name4615); if (failed) return name;
             if ( backtracking==0 ) {
                
               		    name=id.getText(); 
@@ -6105,23 +6368,23 @@
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:3: ( '.' ident= identifier )*
-            loop61:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1610:3: ( '.' ident= identifier )*
+            loop64:
             do {
-                int alt61=2;
-                int LA61_0 = input.LA(1);
+                int alt64=2;
+                int LA64_0 = input.LA(1);
 
-                if ( (LA61_0==71) ) {
-                    alt61=1;
+                if ( (LA64_0==71) ) {
+                    alt64=1;
                 }
 
 
-                switch (alt61) {
+                switch (alt64) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:5: '.' ident= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1610:5: '.' ident= identifier
             	    {
-            	    match(input,71,FOLLOW_71_in_dotted_name4469); if (failed) return name;
-            	    pushFollow(FOLLOW_identifier_in_dotted_name4473);
+            	    match(input,71,FOLLOW_71_in_dotted_name4627); if (failed) return name;
+            	    pushFollow(FOLLOW_identifier_in_dotted_name4631);
             	    ident=identifier();
             	    _fsp--;
             	    if (failed) return name;
@@ -6138,28 +6401,28 @@
             	    break;
 
             	default :
-            	    break loop61;
+            	    break loop64;
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1509:3: ( '[' loc= ']' )*
-            loop62:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:3: ( '[' loc= ']' )*
+            loop65:
             do {
-                int alt62=2;
-                int LA62_0 = input.LA(1);
+                int alt65=2;
+                int LA65_0 = input.LA(1);
 
-                if ( (LA62_0==LEFT_SQUARE) ) {
-                    alt62=1;
+                if ( (LA65_0==LEFT_SQUARE) ) {
+                    alt65=1;
                 }
 
 
-                switch (alt62) {
+                switch (alt65) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1509:5: '[' loc= ']'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:5: '[' loc= ']'
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4495); if (failed) return name;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4653); if (failed) return name;
             	    loc=(Token)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4499); if (failed) return name;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4657); if (failed) return name;
             	    if ( backtracking==0 ) {
             	       
             	      		        name = name + "[]";
@@ -6173,7 +6436,7 @@
             	    break;
 
             	default :
-            	    break loop62;
+            	    break loop65;
                 }
             } while (true);
 
@@ -6193,7 +6456,7 @@
 
 
     // $ANTLR start argument
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1519:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1628:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
     public final String argument() throws RecognitionException {
         String name = null;
 
@@ -6204,33 +6467,33 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:3: (id= identifier ( '[' ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:3: id= identifier ( '[' ']' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:3: (id= identifier ( '[' ']' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:3: id= identifier ( '[' ']' )*
             {
-            pushFollow(FOLLOW_identifier_in_argument4538);
+            pushFollow(FOLLOW_identifier_in_argument4696);
             id=identifier();
             _fsp--;
             if (failed) return name;
             if ( backtracking==0 ) {
                name=id.getText(); 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:40: ( '[' ']' )*
-            loop63:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:40: ( '[' ']' )*
+            loop66:
             do {
-                int alt63=2;
-                int LA63_0 = input.LA(1);
+                int alt66=2;
+                int LA66_0 = input.LA(1);
 
-                if ( (LA63_0==LEFT_SQUARE) ) {
-                    alt63=1;
+                if ( (LA66_0==LEFT_SQUARE) ) {
+                    alt66=1;
                 }
 
 
-                switch (alt63) {
+                switch (alt66) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:42: '[' ']'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:42: '[' ']'
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument4544); if (failed) return name;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument4546); if (failed) return name;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument4702); if (failed) return name;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument4704); if (failed) return name;
             	    if ( backtracking==0 ) {
             	       name = name + "[]";
             	    }
@@ -6239,7 +6502,7 @@
             	    break;
 
             	default :
-            	    break loop63;
+            	    break loop66;
                 }
             } while (true);
 
@@ -6259,7 +6522,7 @@
 
 
     // $ANTLR start rhs_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:1: rhs_chunk[RuleDescr rule] : start= THEN (~ END )* loc= END ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:1: rhs_chunk[RuleDescr rule] : start= THEN (~ END )* loc= END ;
     public final void rhs_chunk(RuleDescr rule) throws RecognitionException {
         Token start=null;
         Token loc=null;
@@ -6269,8 +6532,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:10: (start= THEN (~ END )* loc= END )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:10: start= THEN (~ END )* loc= END
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1642:10: (start= THEN (~ END )* loc= END )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1642:10: start= THEN (~ END )* loc= END
             {
             if ( backtracking==0 ) {
 
@@ -6280,21 +6543,26 @@
               	        
             }
             start=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4590); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1539:3: (~ END )*
-            loop64:
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4748); if (failed) return ;
+            if ( backtracking==0 ) {
+
+              			location.setType( Location.LOCATION_RHS );
+              		
+            }
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:3: (~ END )*
+            loop67:
             do {
-                int alt64=2;
-                int LA64_0 = input.LA(1);
+                int alt67=2;
+                int LA67_0 = input.LA(1);
 
-                if ( ((LA64_0>=ATTRIBUTES && LA64_0<=QUERY)||(LA64_0>=TEMPLATE && LA64_0<=79)) ) {
-                    alt64=1;
+                if ( ((LA67_0>=ATTRIBUTES && LA67_0<=QUERY)||(LA67_0>=TEMPLATE && LA67_0<=79)) ) {
+                    alt67=1;
                 }
 
 
-                switch (alt64) {
+                switch (alt67) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:6: ~ END
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:6: ~ END
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=79) ) {
             	        input.consume();
@@ -6304,7 +6572,7 @@
             	        if (backtracking>0) {failed=true; return ;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4602);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4764);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -6317,7 +6585,7 @@
             	    break;
 
             	default :
-            	    break loop64;
+            	    break loop67;
                 }
             } while (true);
 
@@ -6331,7 +6599,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk4639); if (failed) return ;
+            match(input,END,FOLLOW_END_in_rhs_chunk4801); if (failed) return ;
             if ( backtracking==0 ) {
 
                                   // ignoring first line in the consequence
@@ -6347,6 +6615,7 @@
               		    rule.setConsequence( buf.substring( index ) );
                    		    rule.setConsequenceLocation(offset(start.getLine()), start.getCharPositionInLine());
                		    rule.setEndCharacter( ((CommonToken)loc).getStopIndex() );
+               		    location.setProperty( Location.LOCATION_RHS_CONTENT, rule.getConsequence() );
                               
             }
 
@@ -6365,7 +6634,7 @@
 
 
     // $ANTLR start name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1570:1: name returns [String s] : (tok= ID | str= STRING ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:1: name returns [String s] : (tok= ID | str= STRING ) ;
     public final String name() throws RecognitionException {
         String s = null;
 
@@ -6373,32 +6642,32 @@
         Token str=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:2: ( (tok= ID | str= STRING ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:2: (tok= ID | str= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:2: ( (tok= ID | str= STRING ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:2: (tok= ID | str= STRING )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:2: (tok= ID | str= STRING )
-            int alt65=2;
-            int LA65_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:2: (tok= ID | str= STRING )
+            int alt68=2;
+            int LA68_0 = input.LA(1);
 
-            if ( (LA65_0==ID) ) {
-                alt65=1;
+            if ( (LA68_0==ID) ) {
+                alt68=1;
             }
-            else if ( (LA65_0==STRING) ) {
-                alt65=2;
+            else if ( (LA68_0==STRING) ) {
+                alt68=2;
             }
             else {
                 if (backtracking>0) {failed=true; return s;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1572:2: (tok= ID | str= STRING )", 65, 0, input);
+                    new NoViableAltException("1685:2: (tok= ID | str= STRING )", 68, 0, input);
 
                 throw nvae;
             }
-            switch (alt65) {
+            switch (alt68) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1573:6: tok= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1686:6: tok= ID
                     {
                     tok=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_name4683); if (failed) return s;
+                    match(input,ID,FOLLOW_ID_in_name4845); if (failed) return s;
                     if ( backtracking==0 ) {
 
                       	        s = tok.getText();
@@ -6408,10 +6677,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1578:6: str= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:6: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_name4702); if (failed) return s;
+                    match(input,STRING,FOLLOW_STRING_in_name4864); if (failed) return s;
                     if ( backtracking==0 ) {
 
                       	       s = getString( str );
@@ -6439,454 +6708,454 @@
 
 
     // $ANTLR start identifier
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:1: identifier returns [Token tok] : (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:1: identifier returns [Token tok] : (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) ;
     public final Token identifier() throws RecognitionException {
         Token tok = null;
 
         Token t=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:2: ( (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1700:2: ( (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1700:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
-            int alt66=33;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1700:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
+            int alt69=33;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt66=1;
+                alt69=1;
                 }
                 break;
             case PACKAGE:
                 {
-                alt66=2;
+                alt69=2;
                 }
                 break;
             case FUNCTION:
                 {
-                alt66=3;
+                alt69=3;
                 }
                 break;
             case GLOBAL:
                 {
-                alt66=4;
+                alt69=4;
                 }
                 break;
             case IMPORT:
                 {
-                alt66=5;
+                alt69=5;
                 }
                 break;
             case RULE:
                 {
-                alt66=6;
+                alt69=6;
                 }
                 break;
             case QUERY:
                 {
-                alt66=7;
+                alt69=7;
                 }
                 break;
             case TEMPLATE:
                 {
-                alt66=8;
+                alt69=8;
                 }
                 break;
             case ATTRIBUTES:
                 {
-                alt66=9;
+                alt69=9;
                 }
                 break;
             case ENABLED:
                 {
-                alt66=10;
+                alt69=10;
                 }
                 break;
             case SALIENCE:
                 {
-                alt66=11;
+                alt69=11;
                 }
                 break;
             case DURATION:
                 {
-                alt66=12;
+                alt69=12;
                 }
                 break;
             case FROM:
                 {
-                alt66=13;
+                alt69=13;
                 }
                 break;
             case ACCUMULATE:
                 {
-                alt66=14;
+                alt69=14;
                 }
                 break;
             case INIT:
                 {
-                alt66=15;
+                alt69=15;
                 }
                 break;
             case ACTION:
                 {
-                alt66=16;
+                alt69=16;
                 }
                 break;
             case RESULT:
                 {
-                alt66=17;
+                alt69=17;
                 }
                 break;
             case COLLECT:
                 {
-                alt66=18;
+                alt69=18;
                 }
                 break;
             case OR:
                 {
-                alt66=19;
+                alt69=19;
                 }
                 break;
             case AND:
                 {
-                alt66=20;
+                alt69=20;
                 }
                 break;
             case CONTAINS:
                 {
-                alt66=21;
+                alt69=21;
                 }
                 break;
             case EXCLUDES:
                 {
-                alt66=22;
+                alt69=22;
                 }
                 break;
             case MEMBEROF:
                 {
-                alt66=23;
+                alt69=23;
                 }
                 break;
             case MATCHES:
                 {
-                alt66=24;
+                alt69=24;
                 }
                 break;
             case NULL:
                 {
-                alt66=25;
+                alt69=25;
                 }
                 break;
             case EXISTS:
                 {
-                alt66=26;
+                alt69=26;
                 }
                 break;
             case NOT:
                 {
-                alt66=27;
+                alt69=27;
                 }
                 break;
             case EVAL:
                 {
-                alt66=28;
+                alt69=28;
                 }
                 break;
             case FORALL:
                 {
-                alt66=29;
+                alt69=29;
                 }
                 break;
             case WHEN:
                 {
-                alt66=30;
+                alt69=30;
                 }
                 break;
             case THEN:
                 {
-                alt66=31;
+                alt69=31;
                 }
                 break;
             case END:
                 {
-                alt66=32;
+                alt69=32;
                 }
                 break;
             case IN:
                 {
-                alt66=33;
+                alt69=33;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return tok;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1587:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )", 66, 0, input);
+                    new NoViableAltException("1700:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )", 69, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt66) {
+            switch (alt69) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:10: t= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1700:10: t= ID
                     {
                     t=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_identifier4740); if (failed) return tok;
+                    match(input,ID,FOLLOW_ID_in_identifier4902); if (failed) return tok;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:4: t= PACKAGE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: t= PACKAGE
                     {
                     t=(Token)input.LT(1);
-                    match(input,PACKAGE,FOLLOW_PACKAGE_in_identifier4753); if (failed) return tok;
+                    match(input,PACKAGE,FOLLOW_PACKAGE_in_identifier4915); if (failed) return tok;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:4: t= FUNCTION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1702:4: t= FUNCTION
                     {
                     t=(Token)input.LT(1);
-                    match(input,FUNCTION,FOLLOW_FUNCTION_in_identifier4760); if (failed) return tok;
+                    match(input,FUNCTION,FOLLOW_FUNCTION_in_identifier4922); if (failed) return tok;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:4: t= GLOBAL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:4: t= GLOBAL
                     {
                     t=(Token)input.LT(1);
-                    match(input,GLOBAL,FOLLOW_GLOBAL_in_identifier4767); if (failed) return tok;
+                    match(input,GLOBAL,FOLLOW_GLOBAL_in_identifier4929); if (failed) return tok;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1591:4: t= IMPORT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1704:4: t= IMPORT
                     {
                     t=(Token)input.LT(1);
-                    match(input,IMPORT,FOLLOW_IMPORT_in_identifier4774); if (failed) return tok;
+                    match(input,IMPORT,FOLLOW_IMPORT_in_identifier4936); if (failed) return tok;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1592:4: t= RULE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:4: t= RULE
                     {
                     t=(Token)input.LT(1);
-                    match(input,RULE,FOLLOW_RULE_in_identifier4783); if (failed) return tok;
+                    match(input,RULE,FOLLOW_RULE_in_identifier4945); if (failed) return tok;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1593:4: t= QUERY
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1706:4: t= QUERY
                     {
                     t=(Token)input.LT(1);
-                    match(input,QUERY,FOLLOW_QUERY_in_identifier4790); if (failed) return tok;
+                    match(input,QUERY,FOLLOW_QUERY_in_identifier4952); if (failed) return tok;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1594:17: t= TEMPLATE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:17: t= TEMPLATE
                     {
                     t=(Token)input.LT(1);
-                    match(input,TEMPLATE,FOLLOW_TEMPLATE_in_identifier4811); if (failed) return tok;
+                    match(input,TEMPLATE,FOLLOW_TEMPLATE_in_identifier4973); if (failed) return tok;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1595:17: t= ATTRIBUTES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1708:17: t= ATTRIBUTES
                     {
                     t=(Token)input.LT(1);
-                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_identifier4839); if (failed) return tok;
+                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_identifier5001); if (failed) return tok;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:17: t= ENABLED
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:17: t= ENABLED
                     {
                     t=(Token)input.LT(1);
-                    match(input,ENABLED,FOLLOW_ENABLED_in_identifier4865); if (failed) return tok;
+                    match(input,ENABLED,FOLLOW_ENABLED_in_identifier5027); if (failed) return tok;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1597:17: t= SALIENCE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1710:17: t= SALIENCE
                     {
                     t=(Token)input.LT(1);
-                    match(input,SALIENCE,FOLLOW_SALIENCE_in_identifier4894); if (failed) return tok;
+                    match(input,SALIENCE,FOLLOW_SALIENCE_in_identifier5056); if (failed) return tok;
 
                     }
                     break;
                 case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:17: t= DURATION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:17: t= DURATION
                     {
                     t=(Token)input.LT(1);
-                    match(input,DURATION,FOLLOW_DURATION_in_identifier4916); if (failed) return tok;
+                    match(input,DURATION,FOLLOW_DURATION_in_identifier5078); if (failed) return tok;
 
                     }
                     break;
                 case 13 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1599:17: t= FROM
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1712:17: t= FROM
                     {
                     t=(Token)input.LT(1);
-                    match(input,FROM,FOLLOW_FROM_in_identifier4938); if (failed) return tok;
+                    match(input,FROM,FOLLOW_FROM_in_identifier5100); if (failed) return tok;
 
                     }
                     break;
                 case 14 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:17: t= ACCUMULATE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1713:17: t= ACCUMULATE
                     {
                     t=(Token)input.LT(1);
-                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_identifier4967); if (failed) return tok;
+                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_identifier5129); if (failed) return tok;
 
                     }
                     break;
                 case 15 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:17: t= INIT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:17: t= INIT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INIT,FOLLOW_INIT_in_identifier4989); if (failed) return tok;
+                    match(input,INIT,FOLLOW_INIT_in_identifier5151); if (failed) return tok;
 
                     }
                     break;
                 case 16 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1602:17: t= ACTION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1715:17: t= ACTION
                     {
                     t=(Token)input.LT(1);
-                    match(input,ACTION,FOLLOW_ACTION_in_identifier5018); if (failed) return tok;
+                    match(input,ACTION,FOLLOW_ACTION_in_identifier5180); if (failed) return tok;
 
                     }
                     break;
                 case 17 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:17: t= RESULT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1716:17: t= RESULT
                     {
                     t=(Token)input.LT(1);
-                    match(input,RESULT,FOLLOW_RESULT_in_identifier5047); if (failed) return tok;
+                    match(input,RESULT,FOLLOW_RESULT_in_identifier5209); if (failed) return tok;
 
                     }
                     break;
                 case 18 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:17: t= COLLECT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:17: t= COLLECT
                     {
                     t=(Token)input.LT(1);
-                    match(input,COLLECT,FOLLOW_COLLECT_in_identifier5076); if (failed) return tok;
+                    match(input,COLLECT,FOLLOW_COLLECT_in_identifier5238); if (failed) return tok;
 
                     }
                     break;
                 case 19 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:17: t= OR
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1718:17: t= OR
                     {
                     t=(Token)input.LT(1);
-                    match(input,OR,FOLLOW_OR_in_identifier5105); if (failed) return tok;
+                    match(input,OR,FOLLOW_OR_in_identifier5267); if (failed) return tok;
 
                     }
                     break;
                 case 20 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:17: t= AND
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1719:17: t= AND
                     {
                     t=(Token)input.LT(1);
-                    match(input,AND,FOLLOW_AND_in_identifier5134); if (failed) return tok;
+                    match(input,AND,FOLLOW_AND_in_identifier5296); if (failed) return tok;
 
                     }
                     break;
                 case 21 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:17: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:17: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_identifier5163); if (failed) return tok;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_identifier5325); if (failed) return tok;
 
                     }
                     break;
                 case 22 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1608:17: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1721:17: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_identifier5185); if (failed) return tok;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_identifier5347); if (failed) return tok;
 
                     }
                     break;
                 case 23 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1609:17: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1722:17: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_identifier5207); if (failed) return tok;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_identifier5369); if (failed) return tok;
 
                     }
                     break;
                 case 24 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1610:17: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1723:17: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_identifier5227); if (failed) return tok;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_identifier5389); if (failed) return tok;
 
                     }
                     break;
                 case 25 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:17: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1724:17: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_identifier5256); if (failed) return tok;
+                    match(input,NULL,FOLLOW_NULL_in_identifier5418); if (failed) return tok;
 
                     }
                     break;
                 case 26 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:17: t= EXISTS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1725:17: t= EXISTS
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXISTS,FOLLOW_EXISTS_in_identifier5285); if (failed) return tok;
+                    match(input,EXISTS,FOLLOW_EXISTS_in_identifier5447); if (failed) return tok;
 
                     }
                     break;
                 case 27 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1613:17: t= NOT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:17: t= NOT
                     {
                     t=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_identifier5314); if (failed) return tok;
+                    match(input,NOT,FOLLOW_NOT_in_identifier5476); if (failed) return tok;
 
                     }
                     break;
                 case 28 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:17: t= EVAL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1727:17: t= EVAL
                     {
                     t=(Token)input.LT(1);
-                    match(input,EVAL,FOLLOW_EVAL_in_identifier5343); if (failed) return tok;
+                    match(input,EVAL,FOLLOW_EVAL_in_identifier5505); if (failed) return tok;
 
                     }
                     break;
                 case 29 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1615:17: t= FORALL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1728:17: t= FORALL
                     {
                     t=(Token)input.LT(1);
-                    match(input,FORALL,FOLLOW_FORALL_in_identifier5372); if (failed) return tok;
+                    match(input,FORALL,FOLLOW_FORALL_in_identifier5534); if (failed) return tok;
 
                     }
                     break;
                 case 30 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:17: t= WHEN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:17: t= WHEN
                     {
                     t=(Token)input.LT(1);
-                    match(input,WHEN,FOLLOW_WHEN_in_identifier5410); if (failed) return tok;
+                    match(input,WHEN,FOLLOW_WHEN_in_identifier5572); if (failed) return tok;
 
                     }
                     break;
                 case 31 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1617:17: t= THEN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1730:17: t= THEN
                     {
                     t=(Token)input.LT(1);
-                    match(input,THEN,FOLLOW_THEN_in_identifier5442); if (failed) return tok;
+                    match(input,THEN,FOLLOW_THEN_in_identifier5604); if (failed) return tok;
 
                     }
                     break;
                 case 32 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:17: t= END
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:17: t= END
                     {
                     t=(Token)input.LT(1);
-                    match(input,END,FOLLOW_END_in_identifier5471); if (failed) return tok;
+                    match(input,END,FOLLOW_END_in_identifier5633); if (failed) return tok;
 
                     }
                     break;
                 case 33 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1619:11: t= IN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1732:11: t= IN
                     {
                     t=(Token)input.LT(1);
-                    match(input,IN,FOLLOW_IN_in_identifier5490); if (failed) return tok;
+                    match(input,IN,FOLLOW_IN_in_identifier5652); if (failed) return tok;
 
                     }
                     break;
@@ -6914,10 +7183,10 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: ( function_import_statement )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: function_import_statement
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:208:4: ( function_import_statement )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:208:4: function_import_statement
         {
-        pushFollow(FOLLOW_function_import_statement_in_synpred7150);
+        pushFollow(FOLLOW_function_import_statement_in_synpred7156);
         function_import_statement();
         _fsp--;
         if (failed) return ;
@@ -6928,10 +7197,10 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: ( import_statement )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: import_statement
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:209:4: ( import_statement )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:209:4: import_statement
         {
-        pushFollow(FOLLOW_import_statement_in_synpred8156);
+        pushFollow(FOLLOW_import_statement_in_synpred8162);
         import_statement();
         _fsp--;
         if (failed) return ;
@@ -6942,10 +7211,10 @@
 
     // $ANTLR start synpred42
     public final void synpred42_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: ( paren_chunk[from] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: paren_chunk[from]
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:4: ( paren_chunk[from] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:4: paren_chunk[from]
         {
-        pushFollow(FOLLOW_paren_chunk_in_synpred421876);
+        pushFollow(FOLLOW_paren_chunk_in_synpred421882);
         paren_chunk(from);
         _fsp--;
         if (failed) return ;
@@ -6956,10 +7225,10 @@
 
     // $ANTLR start synpred44
     public final void synpred44_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:6: ( LEFT_SQUARE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:8: LEFT_SQUARE
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:6: ( LEFT_SQUARE )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:8: LEFT_SQUARE
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred441942); if (failed) return ;
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred441952); if (failed) return ;
 
         }
     }
@@ -6967,19 +7236,19 @@
 
     // $ANTLR start synpred45
     public final void synpred45_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:6: ( LEFT_PAREN )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:8: LEFT_PAREN
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:6: ( LEFT_PAREN )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:8: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred451976); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred451986); if (failed) return ;
 
         }
     }
     // $ANTLR end synpred45
 
-    // $ANTLR start synpred49
-    public final void synpred49_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:6: ( ( OR | DOUBLE_PIPE ) fact )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:6: ( OR | DOUBLE_PIPE ) fact
+    // $ANTLR start synpred52
+    public final void synpred52_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918:6: ( ( OR | DOUBLE_PIPE ) fact )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918:6: ( OR | DOUBLE_PIPE ) fact
         {
         if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
             input.consume();
@@ -6989,90 +7258,90 @@
             if (backtracking>0) {failed=true; return ;}
             MismatchedSetException mse =
                 new MismatchedSetException(null,input);
-            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred492284);    throw mse;
+            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred522309);    throw mse;
         }
 
-        pushFollow(FOLLOW_fact_in_synpred492302);
+        pushFollow(FOLLOW_fact_in_synpred522327);
         fact();
         _fsp--;
         if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred49
+    // $ANTLR end synpred52
 
-    // $ANTLR start synpred54
-    public final void synpred54_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:5: ( field_constraint[base] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:5: field_constraint[base]
+    // $ANTLR start synpred57
+    public final void synpred57_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:5: ( field_constraint[base] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:5: field_constraint[base]
         {
-        pushFollow(FOLLOW_field_constraint_in_synpred542554);
+        pushFollow(FOLLOW_field_constraint_in_synpred572617);
         field_constraint(base);
         _fsp--;
         if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred54
+    // $ANTLR end synpred57
 
-    // $ANTLR start synpred59
-    public final void synpred59_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:30: ( DOUBLE_PIPE and_restr_connective[or] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:30: DOUBLE_PIPE and_restr_connective[or]
+    // $ANTLR start synpred62
+    public final void synpred62_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1095:5: ( DOUBLE_PIPE and_restr_connective[or] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1095:5: DOUBLE_PIPE and_restr_connective[or]
         {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred592694); if (failed) return ;
-        pushFollow(FOLLOW_and_restr_connective_in_synpred592696);
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred622763); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred622775);
         and_restr_connective(or);
         _fsp--;
         if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred59
+    // $ANTLR end synpred62
 
-    // $ANTLR start synpred60
-    public final void synpred60_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:32: ( DOUBLE_AMPER constraint_expression[and] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:32: DOUBLE_AMPER constraint_expression[and]
+    // $ANTLR start synpred63
+    public final void synpred63_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:5: ( DOUBLE_AMPER constraint_expression[and] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:5: DOUBLE_AMPER constraint_expression[and]
         {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred602734); if (failed) return ;
-        pushFollow(FOLLOW_constraint_expression_in_synpred602736);
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred632819); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred632829);
         constraint_expression(and);
         _fsp--;
         if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred60
+    // $ANTLR end synpred63
 
-    // $ANTLR start synpred99
-    public final void synpred99_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:14: ( ACCUMULATE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:16: ACCUMULATE
+    // $ANTLR start synpred102
+    public final void synpred102_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:14: ( ACCUMULATE )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:16: ACCUMULATE
         {
-        match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_synpred993897); if (failed) return ;
+        match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_synpred1024048); if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred99
+    // $ANTLR end synpred102
 
-    // $ANTLR start synpred100
-    public final void synpred100_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:14: ( COLLECT )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:16: COLLECT
+    // $ANTLR start synpred103
+    public final void synpred103_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:14: ( COLLECT )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:16: COLLECT
         {
-        match(input,COLLECT,FOLLOW_COLLECT_in_synpred1003926); if (failed) return ;
+        match(input,COLLECT,FOLLOW_COLLECT_in_synpred1034077); if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred100
+    // $ANTLR end synpred103
 
-    // $ANTLR start synpred102
-    public final void synpred102_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:14: (~ ( ACCUMULATE | COLLECT ) )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:16: ~ ( ACCUMULATE | COLLECT )
+    // $ANTLR start synpred105
+    public final void synpred105_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:14: (~ ( ACCUMULATE | COLLECT ) )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:16: ~ ( ACCUMULATE | COLLECT )
         {
-        if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=LOCK_ON_ACTIVE)||(input.LA(1)>=INIT && input.LA(1)<=RESULT)||(input.LA(1)>=ID && input.LA(1)<=79) ) {
+        if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=LOCK_ON_ACTIVE)||(input.LA(1)>=LEFT_PAREN && input.LA(1)<=RIGHT_PAREN)||(input.LA(1)>=ID && input.LA(1)<=79) ) {
             input.consume();
             errorRecovery=false;failed=false;
         }
@@ -7080,13 +7349,13 @@
             if (backtracking>0) {failed=true; return ;}
             MismatchedSetException mse =
                 new MismatchedSetException(null,input);
-            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred1023956);    throw mse;
+            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred1054107);    throw mse;
         }
 
 
         }
     }
-    // $ANTLR end synpred102
+    // $ANTLR end synpred105
 
     public final boolean synpred44() {
         backtracking++;
@@ -7102,11 +7371,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred49() {
+    public final boolean synpred7() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred49_fragment(); // can never throw exception
+            synpred7_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7116,11 +7385,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred7() {
+    public final boolean synpred52() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred7_fragment(); // can never throw exception
+            synpred52_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7130,11 +7399,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred100() {
+    public final boolean synpred45() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred100_fragment(); // can never throw exception
+            synpred45_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7144,11 +7413,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred99() {
+    public final boolean synpred63() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred99_fragment(); // can never throw exception
+            synpred63_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7158,11 +7427,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred45() {
+    public final boolean synpred105() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred45_fragment(); // can never throw exception
+            synpred105_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7172,11 +7441,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred59() {
+    public final boolean synpred102() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred59_fragment(); // can never throw exception
+            synpred102_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7186,11 +7455,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred54() {
+    public final boolean synpred8() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred54_fragment(); // can never throw exception
+            synpred8_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7200,11 +7469,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred102() {
+    public final boolean synpred103() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred102_fragment(); // can never throw exception
+            synpred103_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7214,11 +7483,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred60() {
+    public final boolean synpred57() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred60_fragment(); // can never throw exception
+            synpred57_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7228,11 +7497,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred8() {
+    public final boolean synpred62() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred8_fragment(); // can never throw exception
+            synpred62_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -7265,24 +7534,25 @@
     static final String DFA11_eofS =
         "\6\uffff";
     static final String DFA11_minS =
-        "\2\4\1\uffff\1\65\1\uffff\1\4";
+        "\2\4\2\uffff\1\65\1\4";
     static final String DFA11_maxS =
-        "\1\72\1\107\1\uffff\1\65\1\uffff\1\72";
+        "\1\72\1\107\2\uffff\1\65\1\72";
     static final String DFA11_acceptS =
-        "\2\uffff\1\2\1\uffff\1\1\1\uffff";
+        "\2\uffff\1\2\1\1\2\uffff";
     static final String DFA11_specialS =
         "\6\uffff}>";
     static final String[] DFA11_transitionS = {
-            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\5\2\1\1\2"+
-            "\uffff\1\2\2\uffff\7\2\2\uffff\1\2\4\uffff\5\2",
-            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\6\4\1\uffff"+
-            "\1\2\1\4\2\uffff\7\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\5\4"+
-            "\14\uffff\1\4",
+            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\1\2\2\uffff"+
+            "\3\2\1\uffff\1\2\1\1\1\2\2\uffff\7\2\1\uffff\1\2\4\uffff\5\2",
+            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\1\3\1\uffff"+
+            "\1\2\3\3\1\2\3\3\2\uffff\7\3\1\uffff\1\3\2\uffff\1\4\1\uffff"+
+            "\5\3\14\uffff\1\3",
             "",
+            "",
             "\1\5",
-            "",
-            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\6\4\1\uffff"+
-            "\1\2\1\4\2\uffff\7\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\5\4"
+            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\1\3\1\uffff"+
+            "\1\2\3\3\1\2\3\3\2\uffff\7\3\1\uffff\1\3\2\uffff\1\4\1\uffff"+
+            "\5\3"
     };
 
     static final short[] DFA11_eot = DFA.unpackEncodedString(DFA11_eotS);
@@ -7315,7 +7585,7 @@
             this.transition = DFA11_transition;
         }
         public String getDescription() {
-            return "317:6: (paramType= dotted_name[null] )?";
+            return "326:6: (paramType= dotted_name[null] )?";
         }
     }
     static final String DFA12_eotS =
@@ -7331,16 +7601,17 @@
     static final String DFA12_specialS =
         "\6\uffff}>";
     static final String[] DFA12_transitionS = {
-            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\5\2\1\1\2"+
-            "\uffff\1\2\2\uffff\7\2\2\uffff\1\2\4\uffff\5\2",
-            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\6\3\1\uffff"+
-            "\1\2\1\3\2\uffff\7\3\1\2\1\uffff\1\3\2\uffff\1\4\1\uffff\5\3"+
-            "\14\uffff\1\3",
+            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\1\2\2\uffff"+
+            "\3\2\1\uffff\1\2\1\1\1\2\2\uffff\7\2\1\uffff\1\2\4\uffff\5\2",
+            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\1\3\1\uffff"+
+            "\1\2\3\3\1\2\3\3\2\uffff\7\3\1\uffff\1\3\2\uffff\1\4\1\uffff"+
+            "\5\3\14\uffff\1\3",
             "",
             "",
             "\1\5",
-            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\6\3\1\uffff"+
-            "\1\2\1\3\2\uffff\7\3\1\2\1\uffff\1\3\2\uffff\1\4\1\uffff\5\3"
+            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\1\3\1\uffff"+
+            "\1\2\3\3\1\2\3\3\2\uffff\7\3\1\uffff\1\3\2\uffff\1\4\1\uffff"+
+            "\5\3"
     };
 
     static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
@@ -7373,338 +7644,338 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "321:11: (paramType= dotted_name[null] )?";
+            return "330:11: (paramType= dotted_name[null] )?";
         }
     }
  
 
     public static final BitSet FOLLOW_69_in_opt_semicolon46 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_prolog_in_compilation_unit58 = new BitSet(new long[]{0x0000000000001BC0L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit65 = new BitSet(new long[]{0x0000000000001BC2L});
-    public static final BitSet FOLLOW_package_statement_in_prolog90 = new BitSet(new long[]{0x000080001FEB4012L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_prolog105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-    public static final BitSet FOLLOW_70_in_prolog107 = new BitSet(new long[]{0x000080001FEB4002L});
-    public static final BitSet FOLLOW_COMMA_in_prolog116 = new BitSet(new long[]{0x000000001FEB4000L});
-    public static final BitSet FOLLOW_rule_attribute_in_prolog121 = new BitSet(new long[]{0x000080001FEB4002L});
-    public static final BitSet FOLLOW_function_import_statement_in_statement150 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_statement156 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_statement162 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_statement168 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_in_statement182 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_in_statement191 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_in_statement203 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_PACKAGE_in_package_statement232 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_dotted_name_in_package_statement236 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_package_statement239 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_import_statement271 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_import_name_in_import_statement294 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_import_statement297 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_function_import_statement323 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_FUNCTION_in_function_import_statement325 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement348 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_function_import_statement351 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_import_name379 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
-    public static final BitSet FOLLOW_71_in_import_name391 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_import_name395 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
-    public static final BitSet FOLLOW_72_in_import_name419 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_GLOBAL_in_global455 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_dotted_name_in_global466 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_global478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_global480 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_function507 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function512 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_function519 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_function528 = new BitSet(new long[]{0x07C27F37E40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function538 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_argument_in_function545 = new BitSet(new long[]{0x0000801000000000L});
-    public static final BitSet FOLLOW_COMMA_in_function559 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function564 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_argument_in_function571 = new BitSet(new long[]{0x0000801000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_function595 = new BitSet(new long[]{0x0004000000000000L});
-    public static final BitSet FOLLOW_curly_chunk_in_function601 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUERY_in_query633 = new BitSet(new long[]{0x0000000400008000L});
-    public static final BitSet FOLLOW_name_in_query637 = new BitSet(new long[]{0x0300210C00000400L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query650 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_END_in_query667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TEMPLATE_in_template697 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_template701 = new BitSet(new long[]{0x0000000400000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_template703 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_template_slot_in_template718 = new BitSet(new long[]{0x0000000400000400L});
-    public static final BitSet FOLLOW_END_in_template735 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_template737 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_template_slot783 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_template_slot801 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_template_slot803 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_in_rule836 = new BitSet(new long[]{0x0000000400008000L});
-    public static final BitSet FOLLOW_name_in_rule840 = new BitSet(new long[]{0x040080001FEB6010L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule849 = new BitSet(new long[]{0x0400000000002000L});
-    public static final BitSet FOLLOW_WHEN_in_rule858 = new BitSet(new long[]{0x0700210C00000000L,0x0000000000000040L});
-    public static final BitSet FOLLOW_70_in_rule860 = new BitSet(new long[]{0x0700210C00000000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_rule878 = new BitSet(new long[]{0x0400000000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_in_rule899 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_rule_attributes920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-    public static final BitSet FOLLOW_70_in_rule_attributes922 = new BitSet(new long[]{0x000080001FEB4002L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes931 = new BitSet(new long[]{0x000000001FEB4000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes936 = new BitSet(new long[]{0x000080001FEB4002L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute977 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute998 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1011 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1025 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1036 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1057 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1067 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1077 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1087 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1096 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DATE_EFFECTIVE_in_date_effective1128 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1132 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DATE_EXPIRES_in_date_expires1165 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1169 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENABLED_in_enabled1204 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1208 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SALIENCE_in_salience1253 = new BitSet(new long[]{0x0000000000100000L});
-    public static final BitSet FOLLOW_INT_in_salience1257 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NO_LOOP_in_no_loop1295 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NO_LOOP_in_no_loop1323 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1327 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AUTO_FOCUS_in_auto_focus1376 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AUTO_FOCUS_in_auto_focus1404 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1408 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACTIVATION_GROUP_in_activation_group1453 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1457 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1489 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1493 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AGENDA_GROUP_in_agenda_group1525 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1529 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DURATION_in_duration1563 = new BitSet(new long[]{0x0000000000100000L});
-    public static final BitSet FOLLOW_INT_in_duration1567 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DIALECT_in_dialect1599 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_STRING_in_dialect1603 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1652 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1680 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active1684 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1722 = new BitSet(new long[]{0x0300210C00000002L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1759 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern1787 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern1796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_from_statement1823 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_from_source1865 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source1876 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source1890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_71_in_expression_chain1915 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_expression_chain1919 = new BitSet(new long[]{0x0010000800000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain1950 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1984 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain2005 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2046 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2056 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2060 = new BitSet(new long[]{0x0000800000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2062 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_INIT_in_accumulate_statement2071 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2075 = new BitSet(new long[]{0x0000800000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2078 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_ACTION_in_accumulate_statement2087 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2091 = new BitSet(new long[]{0x0000800000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2094 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_RESULT_in_accumulate_statement2103 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2107 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2112 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_collect_statement2155 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2165 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_collect_statement2169 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2173 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding2207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-    public static final BitSet FOLLOW_70_in_fact_binding2209 = new BitSet(new long[]{0x0000000C00000000L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_binding2222 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_expression2254 = new BitSet(new long[]{0x0000000C00000000L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression2258 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_expression2261 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2272 = new BitSet(new long[]{0x0000006000000002L});
-    public static final BitSet FOLLOW_set_in_fact_expression2284 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2302 = new BitSet(new long[]{0x0000006000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_fact2363 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2377 = new BitSet(new long[]{0x07C27F3FE40A3FF0L});
-    public static final BitSet FOLLOW_constraints_in_fact2387 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints2420 = new BitSet(new long[]{0x0000800000000002L});
-    public static final BitSet FOLLOW_COMMA_in_constraints2427 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
-    public static final BitSet FOLLOW_constraint_in_constraints2429 = new BitSet(new long[]{0x0000800000000002L});
-    public static final BitSet FOLLOW_or_constr_in_constraint2459 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2482 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2489 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2491 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2520 = new BitSet(new long[]{0x0000008000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2527 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2529 = new BitSet(new long[]{0x0000008000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr2554 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2562 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr2564 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2567 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_unary_constr2573 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_predicate_in_unary_constr2575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_field_constraint2607 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-    public static final BitSet FOLLOW_70_in_field_constraint2609 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_field_constraint2630 = new BitSet(new long[]{0x00007E0800000002L,0x000000000000FE00L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2644 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_73_in_field_constraint2659 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_predicate_in_field_constraint2661 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2689 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2694 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2696 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2727 = new BitSet(new long[]{0x0000008000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2734 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2736 = new BitSet(new long[]{0x0000008000000002L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2768 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2775 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2782 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2784 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2787 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_74_in_simple_operator2818 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_75_in_simple_operator2826 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_76_in_simple_operator2834 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_77_in_simple_operator2842 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_78_in_simple_operator2850 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_79_in_simple_operator2858 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_CONTAINS_in_simple_operator2866 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_MATCHES_in_simple_operator2874 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator2882 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2890 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator2898 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2902 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator2916 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IN_in_compound_operator2945 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_NOT_in_compound_operator2957 = new BitSet(new long[]{0x0000400000000000L});
-    public static final BitSet FOLLOW_IN_in_compound_operator2959 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator2974 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator2978 = new BitSet(new long[]{0x0000801000000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator2990 = new BitSet(new long[]{0x0003000C00148000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator2994 = new BitSet(new long[]{0x0000801000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3010 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_expression_value3034 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enum_constraint_in_expression_value3050 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value3073 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_retval_constraint_in_expression_value3087 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint3126 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint3137 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint3150 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint3161 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_literal_constraint3173 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint3208 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_71_in_enum_constraint3214 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_enum_constraint3218 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate3260 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk3309 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk3325 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3349 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk3386 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk3437 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk3453 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3477 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk3514 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk3577 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk3593 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_square_chunk_in_square_chunk3617 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk3654 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3699 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3727 = new BitSet(new long[]{0x0000006000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_or3735 = new BitSet(new long[]{0x0300210C00000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3746 = new BitSet(new long[]{0x0000006000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3782 = new BitSet(new long[]{0x0040008000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_and3790 = new BitSet(new long[]{0x0300210C00000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3801 = new BitSet(new long[]{0x0040008000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3838 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3846 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3854 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_unary3862 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_FROM_in_lhs_unary3878 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary3906 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_collect_statement_in_lhs_unary3935 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_from_statement_in_lhs_unary3970 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary4009 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary4017 = new BitSet(new long[]{0x0300210C00000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary4021 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary4023 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary4033 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_lhs_exist4057 = new BitSet(new long[]{0x0000000C00000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist4077 = new BitSet(new long[]{0x0300210C00000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist4081 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist4113 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist4163 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_lhs_not4217 = new BitSet(new long[]{0x0000000C00000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not4230 = new BitSet(new long[]{0x0300210C00000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not4234 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not4267 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not4304 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_lhs_eval4352 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval4356 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_lhs_forall4385 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall4387 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4391 = new BitSet(new long[]{0x0000800400000000L});
-    public static final BitSet FOLLOW_COMMA_in_lhs_forall4405 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4411 = new BitSet(new long[]{0x0000801400000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall4426 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dotted_name4457 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_71_in_dotted_name4469 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name4473 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4495 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4499 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_identifier_in_argument4538 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument4544 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument4546 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk4590 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk4602 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk4639 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_name4683 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_name4702 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_identifier4740 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_PACKAGE_in_identifier4753 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_identifier4760 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_GLOBAL_in_identifier4767 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_identifier4774 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_in_identifier4783 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUERY_in_identifier4790 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TEMPLATE_in_identifier4811 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_identifier4839 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENABLED_in_identifier4865 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SALIENCE_in_identifier4894 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DURATION_in_identifier4916 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FROM_in_identifier4938 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_identifier4967 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INIT_in_identifier4989 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACTION_in_identifier5018 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RESULT_in_identifier5047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_identifier5076 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_OR_in_identifier5105 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AND_in_identifier5134 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONTAINS_in_identifier5163 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXCLUDES_in_identifier5185 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MEMBEROF_in_identifier5207 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MATCHES_in_identifier5227 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_identifier5256 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_identifier5285 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_identifier5314 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_identifier5343 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_identifier5372 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_WHEN_in_identifier5410 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_identifier5442 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_END_in_identifier5471 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IN_in_identifier5490 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_synpred7150 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_synpred8156 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_synpred421876 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred441942 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred451976 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_set_in_synpred492284 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_fact_in_synpred492302 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_synpred542554 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred592694 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
-    public static final BitSet FOLLOW_and_restr_connective_in_synpred592696 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred602734 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
-    public static final BitSet FOLLOW_constraint_expression_in_synpred602736 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_synpred993897 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_synpred1003926 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_set_in_synpred1023956 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_prolog_in_compilation_unit64 = new BitSet(new long[]{0x0000000000001BC0L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit71 = new BitSet(new long[]{0x0000000000001BC2L});
+    public static final BitSet FOLLOW_package_statement_in_prolog96 = new BitSet(new long[]{0x000000009FEB4012L});
+    public static final BitSet FOLLOW_ATTRIBUTES_in_prolog111 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_prolog113 = new BitSet(new long[]{0x000000009FEB4002L});
+    public static final BitSet FOLLOW_COMMA_in_prolog122 = new BitSet(new long[]{0x000000001FEB4000L});
+    public static final BitSet FOLLOW_rule_attribute_in_prolog127 = new BitSet(new long[]{0x000000009FEB4002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement156 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement162 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement174 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement197 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement209 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_PACKAGE_in_package_statement238 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_dotted_name_in_package_statement242 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_package_statement245 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IMPORT_in_import_statement277 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_import_name_in_import_statement300 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_import_statement303 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IMPORT_in_function_import_statement329 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_FUNCTION_in_function_import_statement331 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement354 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_function_import_statement357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_import_name385 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
+    public static final BitSet FOLLOW_71_in_import_name397 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_import_name401 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
+    public static final BitSet FOLLOW_72_in_import_name425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_GLOBAL_in_global461 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_dotted_name_in_global472 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_global484 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_global486 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_function513 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_dotted_name_in_function518 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_function525 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_function534 = new BitSet(new long[]{0x07C2FE7F240A3FF0L});
+    public static final BitSet FOLLOW_dotted_name_in_function544 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_argument_in_function551 = new BitSet(new long[]{0x0000000880000000L});
+    public static final BitSet FOLLOW_COMMA_in_function565 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_dotted_name_in_function570 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_argument_in_function577 = new BitSet(new long[]{0x0000000880000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_function601 = new BitSet(new long[]{0x0004000000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function607 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_QUERY_in_query639 = new BitSet(new long[]{0x0000002000008000L});
+    public static final BitSet FOLLOW_name_in_query643 = new BitSet(new long[]{0x0300422040000400L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query656 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_END_in_query673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_TEMPLATE_in_template703 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_template707 = new BitSet(new long[]{0x0000002000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_template709 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_template_slot_in_template724 = new BitSet(new long[]{0x0000002000000400L});
+    public static final BitSet FOLLOW_END_in_template741 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_template743 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_template_slot789 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_template_slot807 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_template_slot809 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_in_rule842 = new BitSet(new long[]{0x0000002000008000L});
+    public static final BitSet FOLLOW_name_in_rule846 = new BitSet(new long[]{0x040000009FEB6010L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule855 = new BitSet(new long[]{0x0400000000002000L});
+    public static final BitSet FOLLOW_WHEN_in_rule864 = new BitSet(new long[]{0x0700422040000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_rule866 = new BitSet(new long[]{0x0700422040000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_rule884 = new BitSet(new long[]{0x0400000000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule905 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ATTRIBUTES_in_rule_attributes926 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_rule_attributes928 = new BitSet(new long[]{0x000000009FEB4002L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes937 = new BitSet(new long[]{0x000000001FEB4000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes942 = new BitSet(new long[]{0x000000009FEB4002L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute983 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute993 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1004 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1017 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1031 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1042 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1053 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1063 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1073 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1083 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1093 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1102 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DATE_EFFECTIVE_in_date_effective1134 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DATE_EXPIRES_in_date_expires1171 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1175 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ENABLED_in_enabled1210 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SALIENCE_in_salience1259 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_INT_in_salience1263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NO_LOOP_in_no_loop1301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NO_LOOP_in_no_loop1329 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1333 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AUTO_FOCUS_in_auto_focus1382 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AUTO_FOCUS_in_auto_focus1410 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1414 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACTIVATION_GROUP_in_activation_group1459 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1463 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1495 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1499 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AGENDA_GROUP_in_agenda_group1531 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1535 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DURATION_in_duration1569 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_INT_in_duration1573 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DIALECT_in_dialect1605 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1609 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1658 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1686 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1690 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1728 = new BitSet(new long[]{0x0300422040000002L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1765 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern1793 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern1802 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_from_statement1829 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_from_source1871 = new BitSet(new long[]{0x0000000040000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source1882 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source1896 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_71_in_expression_chain1925 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_expression_chain1929 = new BitSet(new long[]{0x0010000040000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain1960 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1994 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2056 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2066 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2070 = new BitSet(new long[]{0x0000000180000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2072 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_INIT_in_accumulate_statement2082 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2093 = new BitSet(new long[]{0x0000000280000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2096 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_ACTION_in_accumulate_statement2105 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2109 = new BitSet(new long[]{0x0000000480000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2112 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_RESULT_in_accumulate_statement2121 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2125 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2137 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_collect_statement2180 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2190 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_collect_statement2194 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2198 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_fact_binding2232 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_fact_binding2234 = new BitSet(new long[]{0x0000002040000000L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_binding2247 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_expression2279 = new BitSet(new long[]{0x0000002040000000L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2283 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_expression2286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2297 = new BitSet(new long[]{0x000000C000000002L});
+    public static final BitSet FOLLOW_set_in_fact_expression2309 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2327 = new BitSet(new long[]{0x000000C000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_fact2388 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2402 = new BitSet(new long[]{0x07C2FE7F640A3FF0L});
+    public static final BitSet FOLLOW_constraints_in_fact2412 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints2445 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_COMMA_in_constraints2452 = new BitSet(new long[]{0x07C2FE77640A3FF0L});
+    public static final BitSet FOLLOW_constraint_in_constraints2461 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_or_constr_in_constraint2494 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2517 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2527 = new BitSet(new long[]{0x07C2FE77640A3FF0L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2537 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2569 = new BitSet(new long[]{0x0000010000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2579 = new BitSet(new long[]{0x07C2FE77640A3FF0L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2589 = new BitSet(new long[]{0x0000010000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr2617 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2625 = new BitSet(new long[]{0x07C2FE77640A3FF0L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr2627 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2630 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_unary_constr2636 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_predicate_in_unary_constr2638 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_field_constraint2670 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_field_constraint2672 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_field_constraint2693 = new BitSet(new long[]{0x0000FC0040000002L,0x000000000000FE00L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2707 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_73_in_field_constraint2722 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_predicate_in_field_constraint2724 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2753 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2763 = new BitSet(new long[]{0x0000FC0040000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2775 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2809 = new BitSet(new long[]{0x0000010000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2819 = new BitSet(new long[]{0x0000FC0040000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2829 = new BitSet(new long[]{0x0000010000000002L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2871 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2878 = new BitSet(new long[]{0x0000FC0040000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2887 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_74_in_simple_operator2924 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_75_in_simple_operator2932 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_76_in_simple_operator2940 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_77_in_simple_operator2948 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_78_in_simple_operator2956 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_79_in_simple_operator2964 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_CONTAINS_in_simple_operator2972 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_MATCHES_in_simple_operator2980 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator2988 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2996 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_NOT_in_simple_operator3004 = new BitSet(new long[]{0x0000200000000000L});
+    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator3008 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3022 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IN_in_compound_operator3051 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_NOT_in_compound_operator3063 = new BitSet(new long[]{0x0000800000000000L});
+    public static final BitSet FOLLOW_IN_in_compound_operator3065 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3080 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3084 = new BitSet(new long[]{0x0000000880000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3096 = new BitSet(new long[]{0x0003002040148000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3100 = new BitSet(new long[]{0x0000000880000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3116 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_expression_value3144 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enum_constraint_in_expression_value3160 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3183 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_retval_constraint_in_expression_value3197 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint3240 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint3251 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint3264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint3275 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_literal_constraint3287 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint3322 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_71_in_enum_constraint3328 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_enum_constraint3332 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate3374 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk3423 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk3439 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3463 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk3500 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk3551 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk3567 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3591 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk3628 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk3691 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk3707 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_square_chunk_in_square_chunk3731 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk3768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3813 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3841 = new BitSet(new long[]{0x000000C000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_or3849 = new BitSet(new long[]{0x0300422040000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3865 = new BitSet(new long[]{0x000000C000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3901 = new BitSet(new long[]{0x0040010000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_and3909 = new BitSet(new long[]{0x0300422040000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3925 = new BitSet(new long[]{0x0040010000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3962 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3970 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3978 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_unary3986 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_FROM_in_lhs_unary4002 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary4057 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_collect_statement_in_lhs_unary4086 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_from_statement_in_lhs_unary4121 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary4160 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary4168 = new BitSet(new long[]{0x0300422040000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary4172 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary4174 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary4184 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXISTS_in_lhs_exist4208 = new BitSet(new long[]{0x0000002040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist4228 = new BitSet(new long[]{0x0300422040000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist4232 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist4264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist4314 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_lhs_not4368 = new BitSet(new long[]{0x0000002040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not4381 = new BitSet(new long[]{0x0300422040000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not4385 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not4418 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not4455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_lhs_eval4503 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval4514 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FORALL_in_lhs_forall4543 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall4545 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4549 = new BitSet(new long[]{0x0000002080000000L});
+    public static final BitSet FOLLOW_COMMA_in_lhs_forall4563 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4569 = new BitSet(new long[]{0x0000002880000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall4584 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dotted_name4615 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_71_in_dotted_name4627 = new BitSet(new long[]{0x07C2FE77240A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_dotted_name4631 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4653 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4657 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_identifier_in_argument4696 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument4702 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument4704 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk4748 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk4764 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk4801 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_name4845 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_name4864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_identifier4902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_PACKAGE_in_identifier4915 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_identifier4922 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_GLOBAL_in_identifier4929 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IMPORT_in_identifier4936 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_in_identifier4945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_QUERY_in_identifier4952 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_TEMPLATE_in_identifier4973 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ATTRIBUTES_in_identifier5001 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ENABLED_in_identifier5027 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SALIENCE_in_identifier5056 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DURATION_in_identifier5078 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FROM_in_identifier5100 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_identifier5129 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INIT_in_identifier5151 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACTION_in_identifier5180 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RESULT_in_identifier5209 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_identifier5238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OR_in_identifier5267 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AND_in_identifier5296 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_CONTAINS_in_identifier5325 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXCLUDES_in_identifier5347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MEMBEROF_in_identifier5369 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MATCHES_in_identifier5389 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_identifier5418 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXISTS_in_identifier5447 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_identifier5476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_identifier5505 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FORALL_in_identifier5534 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_WHEN_in_identifier5572 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_identifier5604 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_END_in_identifier5633 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IN_in_identifier5652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_synpred7156 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_synpred8162 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_synpred421882 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred441952 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred451986 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_set_in_synpred522309 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_fact_in_synpred522327 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_synpred572617 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred622763 = new BitSet(new long[]{0x0000FC0040000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred622775 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred632819 = new BitSet(new long[]{0x0000FC0040000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred632829 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_synpred1024048 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_synpred1034077 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_set_in_synpred1054107 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g	2007-05-23 16:20:50 UTC (rev 12105)
@@ -15,7 +15,7 @@
 T78 : '<=' ;
 T79 : '!=' ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1626
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1739
 WS      :       (	' '
                 |	'\t'
                 |	'\f'
@@ -24,7 +24,7 @@
                 { $channel=HIDDEN; }
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1634
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1747
 fragment
 EOL 	:	     
    		(       ( '\r\n' )=> '\r\n'  // Evil DOS
@@ -33,27 +33,27 @@
                 )
         ;  
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1642
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1755
 INT	
 	:	('-')?('0'..'9')+
 		;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1646
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1759
 FLOAT
 	:	('-')?('0'..'9')+ '.' ('0'..'9')+
 	;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1650
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1763
 STRING
     :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
      | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1655
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1768
 fragment
 HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1658
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1771
 fragment
 EscapeSequence
     :   '\\' ('b'|'B'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.'|'o'|'x'|'a'|'e'|'c'|'d'|'D'|'s'|'S'|'w'|'W'|'p'|'A'|'G'|'Z'|'z'|'Q'|'E')
@@ -61,7 +61,7 @@
     |   OctalEscape
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1665
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1778
 fragment
 OctalEscape
     :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
@@ -69,223 +69,223 @@
     |   '\\' ('0'..'7')
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1672
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1785
 fragment
 UnicodeEscape
     :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1677
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1790
 BOOL
 	:	('true'|'false') 
 	;	
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1681
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1794
 PACKAGE	:	'package';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1683
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1796
 IMPORT	:	'import';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1685
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1798
 FUNCTION :	'function';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1687
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1800
 GLOBAL	:	'global';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1689
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1802
 RULE    :	'rule';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1691
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1804
 QUERY	:	'query';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1693
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1806
 TEMPLATE :	'template';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1695
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1808
 ATTRIBUTES :	'attributes';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1697
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1810
 DATE_EFFECTIVE 
 	:	'date-effective';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1700
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1813
 DATE_EXPIRES 
 	:	'date-expires';	
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1703
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1816
 ENABLED :	'enabled';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1705
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1818
 SALIENCE 
 	:	'salience';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1708
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1821
 NO_LOOP :	'no-loop';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1710
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1823
 AUTO_FOCUS 
 	:	'auto-focus';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1713
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1826
 ACTIVATION_GROUP 
 	:	'activation-group';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1716
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1829
 AGENDA_GROUP 
 	:	'agenda-group';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1719
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1832
 DIALECT 
 	:	'dialect';	
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1722
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1835
 RULEFLOW_GROUP 
 	:	'ruleflow-group';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1725
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1838
 DURATION 
 	:	'duration';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1728
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1841
 LOCK_ON_ACTIVE
 	:	'lock-on-active';	
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1731
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1844
 FROM	:	'from';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1733
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1846
 ACCUMULATE 
 	:	'accumulate';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1736
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1849
 INIT	:	'init';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1738
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1851
 ACTION	:	'action';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1740
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1853
 RESULT	:	'result';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1742
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1855
 COLLECT :	'collect';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1744
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1857
 OR	:	'or';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1746
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1859
 AND	:	'and';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1748
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1861
 CONTAINS 
 	:	'contains';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1751
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1864
 EXCLUDES 
 	:	'excludes';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1754
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1867
 MEMBEROF
 	:	'memberOf';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1757
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1870
 MATCHES :	'matches';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1759
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1872
 IN	:	'in';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1761
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1874
 NULL	:	'null';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1763
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1876
 EXISTS	:	'exists';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1765
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1878
 NOT	:	'not';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1767
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1880
 EVAL	:	'eval';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1769
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1882
 FORALL	:	'forall';							
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1771
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1884
 WHEN    :	'when'; 
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1773
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1886
 THEN	:    	'then';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1775
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1888
 END     :	'end';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1777
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1890
 ID	
 	:	('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')* 
 	;
 		
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1781
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1894
 LEFT_PAREN
         :	'('
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1785
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1898
 RIGHT_PAREN
         :	')'
         ;
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1789
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1902
 LEFT_SQUARE
         :	'['
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1793
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1906
 RIGHT_SQUARE
         :	']'
         ;        
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1797
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1910
 LEFT_CURLY
         :	'{'
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1801
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1914
 RIGHT_CURLY
         :	'}'
         ;
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1805
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1918
 COMMA	:	','
 	;
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1808
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1921
 DOUBLE_AMPER
 	:	'&&'
 	;
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1812
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1925
 DOUBLE_PIPE
 	:	'||'
 	;				
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1816
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1929
 SH_STYLE_SINGLE_LINE_COMMENT	
 	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
                 { $channel=HIDDEN; }
 	;
         
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1822
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1935
 C_STYLE_SINGLE_LINE_COMMENT	
 	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
                 { $channel=HIDDEN; }
 	;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1827
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1940
 MULTI_LINE_COMMENT
 	:	'/*' (options{greedy=false;} : .)* '*/'
                 { $channel=HIDDEN; }
 	;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1832
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1945
 MISC 	:
 		'!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '=' | '/' | '\'' | '\\' | '|' | '&'
 	;

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/Location.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/Location.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/Location.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ *
+ * Created on May 22, 2007
+ */
+package org.drools.lang;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A class to hold contextual information during DRL parsing
+ * 
+ * @author etirelli, krisv
+ */
+public class Location {
+    
+    public static final int LOCATION_UNKNOWN = 0;
+    
+    public static final int LOCATION_LHS_BEGIN_OF_CONDITION = 1;
+    public static final int LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS = 2;
+    public static final int LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR = 3;
+    public static final int LOCATION_LHS_BEGIN_OF_CONDITION_NOT = 4;
+    
+    public static final int LOCATION_LHS_INSIDE_CONDITION_START = 100;
+    public static final int LOCATION_LHS_INSIDE_CONDITION_OPERATOR = 101;
+    public static final int LOCATION_LHS_INSIDE_CONDITION_ARGUMENT = 102;
+    public static final int LOCATION_LHS_INSIDE_CONDITION_END = 103;
+
+    public static final int LOCATION_LHS_INSIDE_EVAL = 200;
+    
+    public static final int LOCATION_LHS_FROM = 300;
+    public static final int LOCATION_LHS_FROM_COLLECT = 301;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE = 302;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE_INIT = 303;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE = 304;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE_ACTION = 305;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE = 306;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE_RESULT = 307;
+    public static final int LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE = 308;
+    
+    public static final int LOCATION_RHS = 1000;
+    public static final int LOCATION_RULE_HEADER = 2000;
+    
+    public static final String LOCATION_PROPERTY_CLASS_NAME = "ClassName";
+    public static final String LOCATION_PROPERTY_PROPERTY_NAME = "PropertyName";
+    public static final String LOCATION_PROPERTY_OPERATOR = "Operator";
+    public static final String LOCATION_EVAL_CONTENT = "EvalContent";
+    public static final String LOCATION_FROM_CONTENT = "FromContent";
+    public static final String LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT = "FromAccumulateInitContent";
+    public static final String LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT = "FromAccumulateActionContent";
+    public static final String LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT = "FromAccumulateResultContent";
+    public static final String LOCATION_LHS_CONTENT = "LHSContent";
+    public static final String LOCATION_RHS_CONTENT = "RHSContent";
+    public static final String LOCATION_HEADER_CONTENT = "HeaderContent";
+    
+	private int type;
+	private Map properties = new HashMap();
+	
+	public Location(int type) {
+		this.type = type;
+	}
+	
+	public int getType() {
+		return type;
+	}
+	
+	public void setProperty(String name, Object value) {
+		properties.put(name, value);
+	}
+	
+	public Object getProperty(String name) {
+		return properties.get(name);
+	}
+	
+	public void setType(int type) {
+		this.type = type;
+	}
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-05-23 16:20:50 UTC (rev 12105)
@@ -19,6 +19,7 @@
 	private int lineOffset = 0;
 	private DescrFactory factory = new DescrFactory();
 	private boolean parserDebug = false;
+	private Location location = new Location( Location.LOCATION_UNKNOWN );
 	
 	// THE FOLLOWING LINES ARE DUMMY ATTRIBUTES TO WORK AROUND AN ANTLR BUG
 	private BaseDescr from = null;
@@ -162,6 +163,10 @@
         		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
         	}
         }
+        
+        public Location getLocation() {
+                return this.location;
+        }
       
 }
 
@@ -174,6 +179,10 @@
 	;
 
 compilation_unit
+	@init {
+		// reset Location information
+		this.location = new Location( Location.LOCATION_UNKNOWN );
+	}
 	:	prolog 
 		( statement )+
 	;
@@ -412,6 +421,7 @@
 	:
 		loc=RULE ruleName=name 
 		{ 
+			location.setType( Location.LOCATION_RULE_HEADER );
 			debug( "start rule: " + ruleName );
 			rule = new RuleDescr( ruleName, null ); 
 			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
@@ -420,6 +430,7 @@
 		rule_attributes[rule]
 		(	loc=WHEN ':'?
 			{ 
+				this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
 				lhs = new AndDescr(); rule.setLhs( lhs ); 
 				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
 				lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );
@@ -742,6 +753,7 @@
 			ad.setStartCharacter( ((CommonToken)ident).getStartIndex() );
 			ad.setEndCharacter( ((CommonToken)ident).getStopIndex() );
 			ds = ad;
+			location.setProperty(Location.LOCATION_FROM_CONTENT, ident.getText());
 		}
 		(args=paren_chunk[from]
 		{
@@ -753,10 +765,16 @@
 				fc.setStartCharacter( ((CommonToken)ident).getStartIndex() );
 				fc.setEndCharacter( ((CommonToken)ident).getStopIndex() );
 				ad.addInvoker(fc);
+				location.setProperty(Location.LOCATION_FROM_CONTENT, args);
 			}
 		}
 		)?
 		expression_chain[from, ad]?
+		{
+			if( ad != null ) {
+				location.setProperty(Location.LOCATION_FROM_CONTENT, ad.toString() );
+			}
+		}
 	;	
 	
 expression_chain[FromDescr from, AccessorDescr as]
@@ -805,22 +823,42 @@
 		{ 
 			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
 			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE );
 		}	
-		'(' pattern=lhs_pattern ',' 
+		LEFT_PAREN pattern=lhs_pattern COMMA? 
 		{
 		        d.setSourcePattern( (PatternDescr)pattern );
 		}
-		INIT text=paren_chunk[null] ',' 
+		INIT 
 		{
-		        d.setInitCode( text.substring(1, text.length()-1) );
+			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_INIT );
 		}
-		ACTION text=paren_chunk[null] ',' 
+		text=paren_chunk[null] COMMA?
 		{
-		        d.setActionCode( text.substring(1, text.length()-1) );
+			if( text != null ) {
+			        d.setInitCode( text.substring(1, text.length()-1) );
+				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, d.getInitCode());
+				location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION );
+			}
 		}
-		RESULT text=paren_chunk[null] loc=')'
+		ACTION text=paren_chunk[null] COMMA?
 		{
-		        d.setResultCode( text.substring(1, text.length()-1) );
+			if( text != null ) {
+			        d.setActionCode( text.substring(1, text.length()-1) );
+	       			location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, d.getActionCode());
+				location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT );
+			}
+		}
+		RESULT text=paren_chunk[null] 
+		{
+			if( text != null ) {
+			        d.setResultCode( text.substring(1, text.length()-1) );
+				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, d.getResultCode());
+			}
+		}
+		loc=RIGHT_PAREN
+		{
+			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
 			d.setEndCharacter( ((CommonToken)loc).getStopIndex() );
 		} 
 	; 		
@@ -834,11 +872,13 @@
 		{ 
 			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
 			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+			location.setType( Location.LOCATION_LHS_FROM_COLLECT );
 		}	
-		'(' pattern=lhs_pattern loc=')'
+		LEFT_PAREN pattern=lhs_pattern loc=RIGHT_PAREN
 		{
 		        d.setSourcePattern( (PatternDescr)pattern );
 			d.setEndCharacter( ((CommonToken)loc).getStopIndex() );
+			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
 		}
 	; 		
 
@@ -907,6 +947,9 @@
  		        pattern.setEndCharacter( -1 );
  		}
  		loc=LEFT_PAREN {
+		                location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START );
+            			location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME, id );
+ 				
  				pattern.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
  			        pattern.setLeftParentCharacter( ((CommonToken)loc).getStartIndex() );
  			} 
@@ -914,6 +957,7 @@
  		endLoc=RIGHT_PAREN
 		{
 		        if( endLoc.getType() == RIGHT_PAREN ) {
+				this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
 				pattern.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
 				pattern.setEndCharacter( ((CommonToken)endLoc).getStopIndex() );
  			        pattern.setRightParentCharacter( ((CommonToken)endLoc).getStartIndex() );
@@ -924,7 +968,9 @@
 	
 constraints[PatternDescr pattern]
 	:	constraint[pattern]
-		( ',' constraint[pattern] )* 
+		( ',' { location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START ); } 
+		  constraint[pattern] 
+		)* 
 	;
 	
 constraint[PatternDescr pattern]
@@ -943,7 +989,13 @@
 		OrDescr or = new OrDescr();
 	}
 	:
-		and_constr[or] ( t=DOUBLE_PIPE and_constr[or] )*
+		and_constr[or] 
+		( t=DOUBLE_PIPE 
+			{
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
+			}
+		and_constr[or] 
+		)*
 		{
 		        if( or.getDescrs().size() == 1 ) {
 		                base.addOrMerge( (BaseDescr) or.getDescrs().get(0) );
@@ -958,7 +1010,13 @@
 		AndDescr and = new AndDescr();
 	}
 	:
-		unary_constr[and] ( t=DOUBLE_AMPER unary_constr[and] )*
+		unary_constr[and] 
+		( t=DOUBLE_AMPER 
+			{
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
+			}
+		unary_constr[and] 
+		)*
 		{
 		        if( and.getDescrs().size() == 1) {
 		                base.addOrMerge( (BaseDescr) and.getDescrs().get(0) );
@@ -996,6 +1054,8 @@
 		f=identifier	
 		{
 		    if( f != null ) {
+			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+			location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, f.getText());
 		    
 			if ( fbd != null ) {
 			    fbd.setFieldName( f.getText() );
@@ -1025,12 +1085,19 @@
 		)?
 	;
 	
+
 or_restr_connective[ RestrictionConnectiveDescr base ]
 	@init {
 		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
 	}
 	:
-		and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )*
+		and_restr_connective[or] 
+		( t=DOUBLE_PIPE 
+			{
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+			}
+		  and_restr_connective[or] 
+		)*
 		{
 		        if( or.getRestrictions().size() == 1 ) {
 		                base.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
@@ -1046,7 +1113,13 @@
 		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
 	}
 	:
-		constraint_expression[and] ( t=DOUBLE_AMPER constraint_expression[and] )*
+		constraint_expression[and] 
+		( t=DOUBLE_AMPER 
+			{
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+			}
+		constraint_expression[and] 
+		)*
 		{
 		        if( and.getRestrictions().size() == 1) {
 		                base.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
@@ -1060,7 +1133,12 @@
         :	
 		( compound_operator[base]
 		| simple_operator[base]
-		| LEFT_PAREN or_restr_connective[base] RIGHT_PAREN
+		| LEFT_PAREN 
+		{
+			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+		}
+		or_restr_connective[base] 
+		RIGHT_PAREN
  		)
 	;	
 	
@@ -1082,6 +1160,8 @@
 		|	n=NOT t=MEMBEROF
 		)
 		{
+  		    location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
+                    location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, t.getText());
 		    if( n != null ) {
 		        op = "not "+t.getText();
 		    } else {
@@ -1091,6 +1171,7 @@
 		rd=expression_value[op]
 		{
 			    if( rd != null ) {
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
 			        base.addRestriction( rd );
 			    } else if ( rd == null && op != null ) {
 			        base.addRestriction( new LiteralRestrictionDescr(op, null) );
@@ -1109,12 +1190,16 @@
 			  op = "==";
 			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
 			  base.addRestriction( group );
+  		    	  location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
+                    	  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, "in");
 			}
 		| NOT IN 
 			{
 			  op = "!=";
 			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
 			  base.addRestriction( group );
+  		    	  location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
+                    	  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, "in");
 			}	
 		)
 		LEFT_PAREN rd=expression_value[op]
@@ -1131,6 +1216,9 @@
 			}
 		)* 
 		RIGHT_PAREN 
+		{
+			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
+		}
 	;
 	
 expression_value[String op] returns [RestrictionDescr rd]
@@ -1154,6 +1242,9 @@
 				rd = new ReturnValueRestrictionDescr(op, rvc);							
 			} 
 		)	
+		{
+			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
+		}
 	;	
 	
 literal_constraint returns [String text]
@@ -1209,7 +1300,6 @@
 		loc=LEFT_PAREN 
 		{
 		    buf.append( loc.getText());
- 
 		} 
 		( 
 			~(LEFT_PAREN|RIGHT_PAREN)
@@ -1341,6 +1431,9 @@
 	:	
 		left=lhs_and {d = left; }
 		( (OR|'||')
+			{
+				location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
+			}
 			right=lhs_and 
 			{
 				if ( or == null ) {
@@ -1362,6 +1455,9 @@
 	:
 		left=lhs_unary { d = left; }
 		( (AND|DOUBLE_AMPER)
+			{
+				location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
+			}
 			right=lhs_unary
 			{
 				if ( and == null ) {
@@ -1383,10 +1479,15 @@
 		|	u=lhs_not
 		|	u=lhs_eval
 		|	u=lhs_pattern (
-		          FROM (
-		           ( ACCUMULATE ) => (ac=accumulate_statement {ac.setResultPattern((PatternDescr) u); u=ac;})
-		          |( COLLECT ) => (cs=collect_statement {cs.setResultPattern((PatternDescr) u); u=cs;}) 
-		          |( ~(ACCUMULATE|COLLECT) ) => (fm=from_statement {fm.setPattern((PatternDescr) u); u=fm;}) 
+		          FROM 
+		          {
+				location.setType(Location.LOCATION_LHS_FROM);
+				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
+		          }
+		          (
+		           ( ACCUMULATE ) => (ac=accumulate_statement {ac.setResultPattern((PatternDescr) u); u=ac; })
+		          |( COLLECT ) => (cs=collect_statement {cs.setResultPattern((PatternDescr) u); u=cs; }) 
+		          |( ~(ACCUMULATE|COLLECT) ) => (fm=from_statement {fm.setPattern((PatternDescr) u); u=fm; }) 
 		          )
 		        )?
 		|	u=lhs_forall  
@@ -1404,6 +1505,7 @@
 			d = new ExistsDescr( ); 
 			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
 			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS );
 		}
 	        ( ( '(' pattern=lhs_or 
 	           	{ if ( pattern != null ) ((ExistsDescr)d).addDescr( pattern ); }
@@ -1429,6 +1531,7 @@
 			d = new NotDescr( ); 
 			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
 			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT );
 		}
 		( ( '(' pattern=lhs_or  
 	           	{ if ( pattern != null ) d.addDescr( pattern ); }
@@ -1451,13 +1554,19 @@
 		d = new EvalDescr( );
 	}
 	:
-		loc=EVAL c=paren_chunk[d]
+		loc=EVAL 
+		{
+			location.setType( Location.LOCATION_LHS_INSIDE_EVAL );
+		}
+		c=paren_chunk[d]
 		{ 
 			if ( loc != null ) d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
 		        if( c != null ) {
-		            String body = c.substring(1, c.length()-1);
+	  		    this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
+		            String body = c.length() > 1 ? c.substring(1, c.length()-1) : "";
 			    checkTrailingSemicolon( body, offset(loc.getLine()) );
 			    ((EvalDescr) d).setContent( body );
+			    location.setProperty(Location.LOCATION_EVAL_CONTENT, body);
 			}
 		}
 	;
@@ -1536,6 +1645,9 @@
 		    buf = new StringBuffer();
 	        }
 		start=THEN
+		{
+			location.setType( Location.LOCATION_RHS );
+		}
 		( 
 			  ~END
 			  {
@@ -1564,6 +1676,7 @@
 		    rule.setConsequence( buf.substring( index ) );
      		    rule.setConsequenceLocation(offset(start.getLine()), start.getCharPositionInLine());
  		    rule.setEndCharacter( ((CommonToken)loc).getStopIndex() );
+ 		    location.setProperty( Location.LOCATION_RHS_CONTENT, rule.getConsequence() );
                 }
 	;
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -12,7 +12,7 @@
 import org.drools.eclipse.editors.AbstractRuleEditor;
 import org.drools.eclipse.editors.completion.RuleCompletionProcessor;
 import org.drools.eclipse.editors.completion.RuleCompletionProposal;
-import org.drools.eclipse.editors.completion.LocationDeterminator.Location;
+import org.drools.lang.Location;
 import org.eclipse.swt.graphics.Image;
 
 /**

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,567 +1,624 @@
 package org.drools.eclipse.editors.completion;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
+import org.drools.lang.Location;
 import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.RuleDescr;
 
 public class LocationDeterminator {
 
-    static final Pattern PATTERN_PATTERN_START = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_OPERATOR = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_CONTAINS_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+contains\\s+[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_MATCHES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+matches\\s+[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_EXCLUDES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+excludes\\s+[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_IN_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?in\\s+[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_MEMBER_OF_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?memberOf\\s+[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_COMPARATOR_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s*([<>=!]+)\\s*[^\\s<>!=:]*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_CONTAINS_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+contains\\s+[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_MATCHES_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+matches\\s+[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_EXCLUDES_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+excludes\\s+[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_IN_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?in\\s+\\([^\\)]+\\)\\s*", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_MEMBER_OF_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?memberOf\\s+[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
-    static final Pattern PATTERN_PATTERN_COMPARATOR_END = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s*([<>=!]+)\\s*[^\\s<>!=:,]+\\s+", Pattern.DOTALL);
+//    private static final Pattern PATTERN_PATTERN_START               = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*[^\\s<>!=:]*",
+//                                                                                Pattern.DOTALL );
+    static final Pattern PATTERN_PATTERN_OPERATOR            = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)(\\s*([<>=!]+)\\s*[^\\s<>!=:]*\\s*(&&|\\|\\|))*\\s+",
+                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_CONTAINS_ARGUMENT   = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+contains\\s+[^\\s<>!=:]*",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_MATCHES_ARGUMENT    = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+matches\\s+[^\\s<>!=:]*",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_EXCLUDES_ARGUMENT   = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+excludes\\s+[^\\s<>!=:]*",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_IN_ARGUMENT         = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?in\\s+[^\\s<>!=:]*",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_MEMBER_OF_ARGUMENT  = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?memberOf\\s+[^\\s<>!=:]*",
+//                                                                                Pattern.DOTALL );
+    static final Pattern PATTERN_PATTERN_COMPARATOR_ARGUMENT = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s*(([<>=!]+)\\s*[^\\s<>!=:]+\\s*(&&|\\|\\|)\\s*)*([<>=!]+)\\s*[^\\s<>!=:]*",
+                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_CONTAINS_END        = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+contains\\s+[^\\s<>!=:,]+\\s+",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_MATCHES_END         = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+matches\\s+[^\\s<>!=:,]+\\s+",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_EXCLUDES_END        = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+excludes\\s+[^\\s<>!=:,]+\\s+",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_IN_END              = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?in\\s+\\([^\\)]+\\)\\s*",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_MEMBER_OF_END       = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+(not\\s+)?memberOf\\s+[^\\s<>!=:,]+\\s+",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern PATTERN_PATTERN_COMPARATOR_END      = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s*([<>=!]+)\\s*[^\\s<>!=:,]+\\s+",
+//                                                                                Pattern.DOTALL );
 
-    static final Pattern PATTERN_PATTERN = Pattern.compile("((\\S+)\\s*:\\s*)?(\\S+)\\s*(\\(.*)", Pattern.DOTALL);
-    static final Pattern EXISTS_PATTERN = Pattern.compile(".*\\s+exists\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*", Pattern.DOTALL);
-    static final Pattern NOT_PATTERN = Pattern.compile(".*\\s+not\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*", Pattern.DOTALL);
-    static final Pattern EVAL_PATTERN = Pattern.compile(".*\\s+eval\\s*\\(\\s*([(^\\))(\\([^\\)]*\\)?)]*)", Pattern.DOTALL);
-    static final Pattern FROM_PATTERN = Pattern.compile(".*\\)\\s+from\\s+", Pattern.DOTALL);
-    static final Pattern ACCUMULATE_PATTERN = Pattern.compile(".*\\)\\s+from\\s+accumulate\\s*\\(\\s*", Pattern.DOTALL);
-    static final Pattern ACCUMULATE_PATTERN_INIT = Pattern.compile(".*,\\s*init\\s*\\(\\s*(.*)", Pattern.DOTALL);
-    static final Pattern ACCUMULATE_PATTERN_ACTION = Pattern.compile(".*,\\s*init\\s*\\(\\s*(.*)\\)\\s*,\\s*action\\s*\\(\\s*(.*)", Pattern.DOTALL);
-    static final Pattern ACCUMULATE_PATTERN_RESULT = Pattern.compile(".*,\\s*init\\s*\\(\\s*(.*)\\)\\s*,\\s*action\\s*\\(\\s*(.*)\\)\\s*,\\s*result\\s*\\(\\s*(.*)", Pattern.DOTALL);
-    static final Pattern COLLECT_PATTERN = Pattern.compile(".*\\)\\s+from\\s+collect\\s*\\(\\s*", Pattern.DOTALL);
-    
-    static final Pattern THEN_PATTERN = Pattern.compile(".*\n\\s*when\\s*(.*)\n\\s*then\\s*(.*)", Pattern.DOTALL);
+//    private static final Pattern PATTERN_PATTERN                     = Pattern.compile( "((\\S+)\\s*:\\s*)?(\\S+)\\s*(\\(.*)",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern EXISTS_PATTERN                      = Pattern.compile( ".*\\s+exists\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern NOT_PATTERN                         = Pattern.compile( ".*\\s+not\\s*\\(?\\s*((\\S*)\\s*:)?\\s*\\S*",
+//                                                                                Pattern.DOTALL );
+    static final Pattern EVAL_PATTERN                        = Pattern.compile( ".*\\s+eval\\s*\\(\\s*([(^\\))(\\([^\\)]*\\)?)]*)",
+                                                                                Pattern.DOTALL );
+//    private static final Pattern FROM_PATTERN                        = Pattern.compile( ".*\\)\\s+from\\s+",
+//                                                                                Pattern.DOTALL );
+//    private static final Pattern ACCUMULATE_PATTERN                  = Pattern.compile( ".*\\)\\s+from\\s+accumulate\\s*\\(\\s*",
+//                                                                                Pattern.DOTALL );
+    static final Pattern ACCUMULATE_PATTERN_INIT             = Pattern.compile( ".*,?\\s*init\\s*\\(\\s*(.*)",
+                                                                                Pattern.DOTALL );
+    static final Pattern ACCUMULATE_PATTERN_ACTION           = Pattern.compile( ".*,?\\s*init\\s*\\(\\s*(.*)\\)\\s*,?\\s*action\\s*\\(\\s*(.*)",
+                                                                                Pattern.DOTALL );
+    static final Pattern ACCUMULATE_PATTERN_RESULT           = Pattern.compile( ".*,?\\s*init\\s*\\(\\s*(.*)\\)\\s*,?\\s*action\\s*\\(\\s*(.*)\\)\\s*,?\\s*result\\s*\\(\\s*(.*)",
+                                                                                Pattern.DOTALL );
+//    private static final Pattern COLLECT_PATTERN                     = Pattern.compile( ".*\\)\\s+from\\s+collect\\s*\\(\\s*",
+//                                                                                Pattern.DOTALL );
 
-    static final int LOCATION_UNKNOWN = 0;
-	
-	static final int LOCATION_LHS_BEGIN_OF_CONDITION = 1;
-	static final int LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS = 2;
-	static final int LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR = 3;
-	static final int LOCATION_LHS_BEGIN_OF_CONDITION_NOT = 4;
-	
-	static final int LOCATION_LHS_INSIDE_CONDITION_START = 100;
-	static final int LOCATION_LHS_INSIDE_CONDITION_OPERATOR = 101;
-	static final int LOCATION_LHS_INSIDE_CONDITION_ARGUMENT = 102;
-	static final int LOCATION_LHS_INSIDE_CONDITION_END = 103;
+    static final Pattern THEN_PATTERN                        = Pattern.compile( ".*\n\\s*when\\s*(.*)\n\\s*then\\s*(.*)",
+                                                                                Pattern.DOTALL );
 
-	static final int LOCATION_LHS_INSIDE_EVAL = 200;
-	
-	static final int LOCATION_LHS_FROM = 300;
-	static final int LOCATION_LHS_FROM_COLLECT = 301;
-	static final int LOCATION_LHS_FROM_ACCUMULATE = 302;
-	static final int LOCATION_LHS_FROM_ACCUMULATE_INIT = 303;
-	static final int LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE = 304;
-	static final int LOCATION_LHS_FROM_ACCUMULATE_ACTION = 305;
-	static final int LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE = 306;
-	static final int LOCATION_LHS_FROM_ACCUMULATE_RESULT = 307;
-	static final int LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE = 308;
-	
-	static final int LOCATION_RHS = 1000;
-	static final int LOCATION_RULE_HEADER = 2000;
-	
-	static final String LOCATION_PROPERTY_CLASS_NAME = "ClassName";
-	static final String LOCATION_PROPERTY_PROPERTY_NAME = "PropertyName";
-	static final String LOCATION_PROPERTY_OPERATOR = "Operator";
-	static final String LOCATION_EVAL_CONTENT = "EvalContent";
-	static final String LOCATION_FROM_CONTENT = "FromContent";
-	static final String LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT = "FromAccumulateInitContent";
-	static final String LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT = "FromAccumulateActionContent";
-	static final String LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT = "FromAccumulateResultContent";
-	static final String LOCATION_LHS_CONTENT = "LHSContent";
-	static final String LOCATION_RHS_CONTENT = "RHSContent";
-	static final String LOCATION_HEADER_CONTENT = "HeaderContent";
-	
+    static final Pattern ENDS_WITH_SPACES                    = Pattern.compile( ".*\\s+",
+                                                                                Pattern.DOTALL );
+
     private LocationDeterminator() {
-	}
-	
-    public static class Location {
-    	private int type;
-    	private Map properties = new HashMap();
-    	
-    	public Location(int type) {
-    		this.type = type;
-    	}
-    	
-    	public int getType() {
-    		return type;
-    	}
-    	
-    	public void setProperty(String name, Object value) {
-    		properties.put(name, value);
-    	}
-    	
-    	public Object getProperty(String name) {
-    		return properties.get(name);
-    	}
-    	
-    	void setType(int type) {
-    		this.type = type;
-    	}
     }
-    
-	public static Location getLocation(String backText) {
-		DrlParser parser = new DrlParser();
-    	try {
-    		PackageDescr packageDescr = parser.parse(backText);
-    		List rules = packageDescr.getRules();
-    		if (rules != null && rules.size() == 1) {
-    			return determineLocationForDescr((RuleDescr) rules.get(0), backText);
-    		}
-    	} catch (DroolsParserException exc) {
-    		// do nothing
-    	}
-    	return new Location(LOCATION_UNKNOWN);
-	}
-	
-	public static Location determineLocationForDescr(BaseDescr descr, String backText) {
-		if (descr instanceof RuleDescr) {
-			RuleDescr ruleDescr = (RuleDescr) descr;
-			Object o = ruleDescr.getConsequence();
-			if (o == null) {
-				Matcher matcher = THEN_PATTERN.matcher(backText);
-				if (matcher.matches()) {
-					Location location = new Location(LOCATION_RHS);
-					location.setProperty(LOCATION_LHS_CONTENT, matcher.group(1));
-					location.setProperty(LOCATION_RHS_CONTENT, matcher.group(2));
-					return location;
-				}
-			}
-			AndDescr lhs = ruleDescr.getLhs();
-			if (lhs == null) {
-				return new Location(LOCATION_RULE_HEADER);
-			}
-			List subDescrs = lhs.getDescrs();
-			if (subDescrs.size() == 0) {
-				Matcher matcher = EXISTS_PATTERN.matcher(backText);
-				if (matcher.matches()) {
-					return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
-				}
-				matcher = NOT_PATTERN.matcher(backText);
-				if (matcher.matches()) {
-					return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
-				}
-				matcher = FROM_PATTERN.matcher(backText);
-				if (matcher.matches()) {
-					Location location = new Location(LOCATION_LHS_FROM);
-					location.setProperty(LOCATION_FROM_CONTENT, "");
-					return location;
-				}
-				return new Location(LOCATION_LHS_BEGIN_OF_CONDITION);
-			}
-			BaseDescr subDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
-			if (subDescr == null) {
-				return new Location(LOCATION_LHS_BEGIN_OF_CONDITION);
-			}
-			if (endReached(subDescr)) {
-				return new Location(LOCATION_LHS_BEGIN_OF_CONDITION);
-			}
-			return determineLocationForDescr(subDescr, backText);
-		} else if (descr instanceof PatternDescr) {
-			PatternDescr patternDescr = (PatternDescr) descr;
-//			int locationType;
-//			String propertyName = null;
-//			String evaluator = null;
-//			boolean endOfConstraint = false;
-//			List subDescrs = columnDescr.getDescrs();
-//			if (subDescrs.size() > 0) {
-//				BaseDescr lastDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
-//				if (lastDescr.getEndCharacter() != -1) {
-//					endOfConstraint = true;
-//				}
-//				if (lastDescr instanceof FieldConstraintDescr) {
-//					FieldConstraintDescr lastFieldDescr = (FieldConstraintDescr) lastDescr;
-//					propertyName = lastFieldDescr.getFieldName();
-//					List restrictions = lastFieldDescr.getRestrictions();
-//					if (restrictions.size() > 0) {
-//						RestrictionDescr restriction = (RestrictionDescr) restrictions.get(restrictions.size() - 1);
-//						if (restriction instanceof LiteralRestrictionDescr) {
-//							LiteralRestrictionDescr literal = (LiteralRestrictionDescr) restriction;
-//							evaluator = literal.getEvaluator();
-//						} else if (restriction instanceof VariableRestrictionDescr) {
-//							VariableRestrictionDescr variable = (VariableRestrictionDescr) restriction;
-//							evaluator = variable.getEvaluator();
-//						}
-//					}
-//				}
-//			}
-//			if (endOfConstraint) {
-//				locationType = LOCATION_INSIDE_CONDITION_END;
-//			} else if (evaluator != null) {
-//				locationType = LOCATION_INSIDE_CONDITION_ARGUMENT;
-//			} else if (propertyName != null) {
-//				locationType = LOCATION_INSIDE_CONDITION_OPERATOR;
-//			} else {
-//				locationType = LOCATION_INSIDE_CONDITION_START;
-//			}
-//			Location location = new Location(locationType);
-//			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
-//			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
-//			location.setProperty(LOCATION_PROPERTY_OPERATOR, evaluator); 
-//			return location;
-			// TODO: this is not completely safe, there are rare occasions where this could fail
-			Pattern pattern = Pattern.compile(".*(" + patternDescr.getObjectType() + ")\\s*\\((.*)", Pattern.DOTALL);
-			Matcher matcher = pattern.matcher(backText);
-			String patternContents = null;
-			while (matcher.find()) {
-				patternContents = "(" + matcher.group(2);
-			}
-			if (patternContents == null) {
-				return new Location(LOCATION_LHS_BEGIN_OF_CONDITION);
-			}
-			List subDescrs = patternDescr.getDescrs();
-			if (subDescrs.size() > 0) {
-				Object lastDescr = subDescrs.get(subDescrs.size() - 1);
-				if (lastDescr instanceof FieldConstraintDescr) {
-					FieldConstraintDescr lastFieldDescr = (FieldConstraintDescr) lastDescr;
-					List restrictions = lastFieldDescr.getRestrictions();
-					// if there are multiple restrictions, filter out all the rest so that
-					// only the last one remains
-					if (restrictions.size() > 2) {
-						Object last = restrictions.get(restrictions.size() - 2);
-						if (last instanceof RestrictionConnectiveDescr) {
-							RestrictionConnectiveDescr lastRestr = (RestrictionConnectiveDescr) last;
-							String connective = "&&";
-							if (lastRestr.getConnective() == RestrictionConnectiveDescr.OR) {
-								connective = "||";
-							}
-							int connectiveLocation = patternContents.lastIndexOf(connective);
-							patternContents = "( " + lastFieldDescr.getFieldName() + " " + patternContents.substring(connectiveLocation + 1);
-						}
-					}
-					if (restrictions.size() > 1) {
-						Object last = restrictions.get(restrictions.size() - 1);
-						if (last instanceof RestrictionConnectiveDescr) {
-							RestrictionConnectiveDescr lastRestr = (RestrictionConnectiveDescr) last;
-							String connective = "&&";
-							if (lastRestr.getConnective() == RestrictionConnectiveDescr.OR) {
-								connective = "||";
-							}
-							int connectiveLocation = patternContents.lastIndexOf(connective);
-							patternContents = "( " + lastFieldDescr.getFieldName() + " " + patternContents.substring(connectiveLocation + 1);
-						}
-					}
-				}
-			}
-			return getLocationForPatttern(patternContents, patternDescr.getObjectType());
-		} else if (descr instanceof ExistsDescr) {
-			List subDescrs = ((ExistsDescr) descr).getDescrs();
-			if (subDescrs.size() == 0) {
-				return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
-			}
-			if (subDescrs.size() == 1) {
-				BaseDescr subDescr = (BaseDescr) subDescrs.get(0);
-				if (subDescr == null) {
-					return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
-				}
-				Location result = determineLocationForDescr(subDescr, backText);
-				if (result.getType() == LOCATION_LHS_BEGIN_OF_CONDITION) {
-					result.setType(LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
-				}
-				return result;
-			}
-			return determineLocationForDescr(descr, backText);
-		} else if (descr instanceof NotDescr) {
-			List subDescrs = ((NotDescr) descr).getDescrs();
-			if (subDescrs.size() == 0) {
-				return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
-			}
-			if (subDescrs.size() == 1) {
-				BaseDescr subDescr = (BaseDescr) subDescrs.get(0);
-				if (subDescr == null) {
-					return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
-				}
-				Location location = determineLocationForDescr(subDescr, backText);
-				if (location.getType() == LOCATION_LHS_BEGIN_OF_CONDITION) {
-					return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
-				}
-				return location;
-			}
-			return determineLocationForDescr(descr, backText);
-		} else if (descr instanceof AndDescr) {
-			List subDescrs = ((AndDescr) descr).getDescrs();
-			int size = subDescrs.size();
-			if (size == 2) {
-				BaseDescr subDescr = (BaseDescr) subDescrs.get(1);
-				if (subDescr == null) {
-					Matcher matcher = EXISTS_PATTERN.matcher(backText);
-					if (matcher.matches()) {
-						return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
-					}
-					matcher = NOT_PATTERN.matcher(backText);
-					if (matcher.matches()) {
-						return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
-					}
-					return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
-				} else {
-					Location location = determineLocationForDescr(subDescr, backText);
-					if (location.getType() == LOCATION_LHS_BEGIN_OF_CONDITION) {
-						return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
-					}
-					return location;
-				}
-			}
-			return new Location(LOCATION_UNKNOWN);
-		} else if (descr instanceof OrDescr) {
-			List subDescrs = ((OrDescr) descr).getDescrs();
-			int size = subDescrs.size();
-			if (size == 2) {
-				BaseDescr subDescr = (BaseDescr) subDescrs.get(1);
-				if (subDescr == null) {
-					Matcher matcher = EXISTS_PATTERN.matcher(backText);
-					if (matcher.matches()) {
-						return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
-					}
-					matcher = NOT_PATTERN.matcher(backText);
-					if (matcher.matches()) {
-						return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
-					}return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
-				} else {
-					Location location = determineLocationForDescr(subDescr, backText);
-					if (location.getType() == LOCATION_LHS_BEGIN_OF_CONDITION) {
-						return new Location(LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
-					}
-					return location;
-				}
-			}
-			return new Location(LOCATION_UNKNOWN);
-		} else if (descr instanceof FromDescr) {
-			Location location = new Location(LOCATION_LHS_FROM);
-			String content = CompletionUtil.stripWhiteSpace(backText);
-			location.setProperty(LOCATION_FROM_CONTENT, content);
-			return location;
-		} else if (descr instanceof AccumulateDescr) {
-			Matcher matcher = ACCUMULATE_PATTERN.matcher(backText);
-			int end = -1;
-			while (matcher.find()) {
-				end = matcher.end();
-			}
-			String accumulateText = backText.substring(end);
-			matcher = ACCUMULATE_PATTERN_RESULT.matcher(accumulateText);
-			if (matcher.matches()) {
-				Location location = new Location(LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE);
-				location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
-				location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, matcher.group(2));
-				location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, matcher.group(3));
-				return location;
-			}
-			matcher = ACCUMULATE_PATTERN_ACTION.matcher(accumulateText);
-			if (matcher.matches()) {
-				Location location =  new Location(LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE);
-				location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
-				location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, matcher.group(2));
-				return location;
-			}
-			matcher = ACCUMULATE_PATTERN_INIT.matcher(accumulateText);
-			if (matcher.matches()) {
-				Location location =  new Location(LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE);
-				location.setProperty(LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
-				return location;
-			}
-			matcher = PATTERN_PATTERN.matcher(accumulateText);
-			if (matcher.matches()) {
-				String className = matcher.group(3);
-				String patternContents = matcher.group(4);
-				return getLocationForPatttern(patternContents, className);
-			}
-			return new Location(LOCATION_LHS_FROM_ACCUMULATE);
-		} else if (descr instanceof CollectDescr) {
-			Matcher matcher = COLLECT_PATTERN.matcher(backText);
-			int end = -1;
-			while (matcher.find()) {
-				end = matcher.end();
-			}
-			String collectText = backText.substring(end);
-			matcher = PATTERN_PATTERN.matcher(collectText);
-			if (matcher.matches()) {
-				String className = matcher.group(3);
-				String columnContents = matcher.group(4);
-				return getLocationForPatttern(columnContents, className);
-			}
-			return new Location(LOCATION_LHS_FROM_COLLECT);
-		} else if (descr instanceof EvalDescr) {
-			Matcher matcher = EVAL_PATTERN.matcher(backText);
-			if (matcher.matches()) {
-				String content = matcher.group(1);
-				Location location = new Location(LOCATION_LHS_INSIDE_EVAL);
-				location.setProperty(LOCATION_EVAL_CONTENT, content);
-				return location;
-			}
-		}
-		
-		return new Location(LOCATION_UNKNOWN);
-	}
-	
-	private static boolean endReached(BaseDescr descr) {
-		if (descr == null) {
-			return false;
-		}
-		if (descr instanceof PatternDescr) {
-			return descr.getEndCharacter() != -1;
-		} else if (descr instanceof ExistsDescr) {
-			List descrs = ((ExistsDescr) descr).getDescrs();
-			if (descrs.isEmpty()) {
-				return false;
-			}
-			return endReached((BaseDescr) descrs.get(0));
-		} else if (descr instanceof NotDescr) {
-			List descrs = ((NotDescr) descr).getDescrs();
-			if (descrs.isEmpty()) {
-				return false;
-			}
-			return endReached((BaseDescr) descrs.get(0));
-		} else if (descr instanceof NotDescr) {
-			List descrs = ((NotDescr) descr).getDescrs();
-			if (descrs.isEmpty()) {
-				return false;
-			}
-			return endReached((BaseDescr) descrs.get(0));
-		} else if (descr instanceof AndDescr) {
-			List descrs = ((AndDescr) descr).getDescrs();
-			if (descrs.size() != 2) {
-				return false;
-			}
-			return endReached((BaseDescr) descrs.get(0))
-				&& endReached((BaseDescr) descrs.get(1));
-		} else if (descr instanceof OrDescr) {
-			List descrs = ((OrDescr) descr).getDescrs();
-			if (descrs.size() != 2) {
-				return false;
-			}
-			return endReached((BaseDescr) descrs.get(0))
-				&& endReached((BaseDescr) descrs.get(1));
-		} else if (descr instanceof EvalDescr) {
-			return ((EvalDescr) descr).getContent() != null;
-		}
-		return descr.getEndCharacter() != -1;
-//		else if (descr instanceof AccumulateDescr) {
-//			return ((AccumulateDescr) descr).getResultCode() != null;
-//		} else if (descr instanceof CollectDescr) {
-//			return ((CollectDescr) descr).getSourceColumn() != null;
-//		}
-//		return false;
-	}
-	
-	private static Location getLocationForPatttern(String patternContents, String className) {
-		Matcher matcher = PATTERN_PATTERN_OPERATOR.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			return location;
+
+    public static Location getLocation(String backText) {
+        DrlParser parser = new DrlParser();
+        try {
+            PackageDescr packageDescr = parser.parse( backText );
+            List rules = packageDescr.getRules();
+            if ( rules != null && rules.size() == 1 ) {
+                return determineLocationForDescr( (RuleDescr) rules.get( 0 ),
+                                                  parser.getLocation(),
+                                                  backText );
+            }
+        } catch ( DroolsParserException exc ) {
+            // do nothing
         }
-        matcher = PATTERN_PATTERN_COMPARATOR_ARGUMENT.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			location.setProperty(LOCATION_PROPERTY_OPERATOR, matcher.group(4));
-			return location;
+        return new Location( Location.LOCATION_UNKNOWN );
+    }
+
+    public static Location determineLocationForDescr(BaseDescr descr,
+                                                     Location location,
+                                                     String backText) {
+        if ( location.getType() == Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR ) {
+            if ( !ENDS_WITH_SPACES.matcher( backText ).matches() ) {
+                location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START );
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_INSIDE_CONDITION_END ) {
+            if ( !backText.endsWith( " " ) ) {
+                location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_INSIDE_EVAL ) {
+            Matcher matcher = EVAL_PATTERN.matcher( backText );
+            if ( matcher.matches() ) {
+                String content = matcher.group( 1 );
+                location.setProperty( Location.LOCATION_EVAL_CONTENT,
+                                      content );
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_INSIDE_CONDITION_START ) {
+            Matcher matcher = PATTERN_PATTERN_COMPARATOR_ARGUMENT.matcher( backText );
+            if ( matcher.matches() ) {
+                location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+                location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+                                      matcher.group( 7 ) );
+                return location;
+            }
+
+            matcher = PATTERN_PATTERN_OPERATOR.matcher( backText );
+            if ( matcher.matches() ) {
+                location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR );
+                return location;
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_FROM ) {
+            if ( location.getProperty( Location.LOCATION_FROM_CONTENT ) == null ) {
+                location.setProperty( Location.LOCATION_FROM_CONTENT,
+                                      "" );
+            } else if ( ((String) location.getProperty( Location.LOCATION_FROM_CONTENT )).length() > 0 && ENDS_WITH_SPACES.matcher( backText ).matches() ) {
+                location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_FROM_ACCUMULATE_INIT ) {
+            Matcher matcher = ACCUMULATE_PATTERN_INIT.matcher( backText );
+            if ( matcher.matches() ) {
+                location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE );
+                location.setProperty( Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT,
+                                      matcher.group( 1 ) );
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION ) {
+            Matcher matcher = ACCUMULATE_PATTERN_ACTION.matcher( backText );
+            if ( matcher.matches() ) {
+                location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE );
+                location.setProperty( Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT,
+                                      matcher.group( 2 ) );
+            }
+        } else if ( location.getType() == Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT ) {
+            Matcher matcher = ACCUMULATE_PATTERN_RESULT.matcher( backText );
+            if ( matcher.matches() ) {
+                location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE );
+                location.setProperty( Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT,
+                                      matcher.group( 3 ) );
+            }
+        } else if ( location.getType() == Location.LOCATION_RHS ) {
+            Matcher matcher = THEN_PATTERN.matcher( backText );
+            if ( matcher.matches() ) {
+                location.setProperty( Location.LOCATION_LHS_CONTENT,
+                                      matcher.group( 1 ) );
+                location.setProperty( Location.LOCATION_RHS_CONTENT,
+                                      matcher.group( 2 ) );
+                return location;
+            }
         }
-        matcher = PATTERN_PATTERN_CONTAINS_ARGUMENT.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			location.setProperty(LOCATION_PROPERTY_OPERATOR, "contains");
-			return location;
-        }
-        matcher = PATTERN_PATTERN_EXCLUDES_ARGUMENT.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			location.setProperty(LOCATION_PROPERTY_OPERATOR, "excludes");
-			return location;
-        }
-        matcher = PATTERN_PATTERN_IN_ARGUMENT.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			location.setProperty(LOCATION_PROPERTY_OPERATOR, "in");
-			return location;
-        }
-        matcher = PATTERN_PATTERN_MEMBER_OF_ARGUMENT.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			location.setProperty(LOCATION_PROPERTY_OPERATOR, "memberOf");
-			return location;
-        }
-        matcher = PATTERN_PATTERN_MATCHES_ARGUMENT.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
-			location.setProperty(LOCATION_PROPERTY_OPERATOR, "matches");
-			return location;
-        }
-        matcher = PATTERN_PATTERN_CONTAINS_END.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-        matcher = PATTERN_PATTERN_MATCHES_END.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-        matcher = PATTERN_PATTERN_EXCLUDES_END.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-        matcher = PATTERN_PATTERN_IN_END.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-        matcher = PATTERN_PATTERN_MEMBER_OF_END.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-        matcher = PATTERN_PATTERN_COMPARATOR_END.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-		matcher = PATTERN_PATTERN_START.matcher(patternContents);
-        if (matcher.matches()) {
-			Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_START);
-			location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-			return location;
-        }
-		Location location = new Location(LOCATION_LHS_INSIDE_CONDITION_END);
-		location.setProperty(LOCATION_PROPERTY_CLASS_NAME, className);
-		return location;
-	}
+
+        return location;
+        //		if (descr instanceof RuleDescr) {
+        //			RuleDescr ruleDescr = (RuleDescr) descr;
+        //			Object o = ruleDescr.getConsequence();
+        //			if (o == null) {
+        //				Matcher matcher = THEN_PATTERN.matcher(backText);
+        //				if (matcher.matches()) {
+        //					Location location = new Location(Location.LOCATION_RHS);
+        //					location.setProperty(Location.LOCATION_LHS_CONTENT, matcher.group(1));
+        //					location.setProperty(Location.LOCATION_RHS_CONTENT, matcher.group(2));
+        //					return location;
+        //				}
+        //			}
+        //			AndDescr lhs = ruleDescr.getLhs();
+        //			if (lhs == null) {
+        //				return new Location(Location.LOCATION_RULE_HEADER);
+        //			}
+        //			List subDescrs = lhs.getDescrs();
+        //			if (subDescrs.size() == 0) {
+        //				Matcher matcher = EXISTS_PATTERN.matcher(backText);
+        //				if (matcher.matches()) {
+        //					return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
+        //				}
+        //				matcher = NOT_PATTERN.matcher(backText);
+        //				if (matcher.matches()) {
+        //					return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
+        //				}
+        //				matcher = FROM_PATTERN.matcher(backText);
+        //				if (matcher.matches()) {
+        //					Location location = new Location(Location.LOCATION_LHS_FROM);
+        //					location.setProperty(Location.LOCATION_FROM_CONTENT, "");
+        //					return location;
+        //				}
+        //				return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
+        //			}
+        //			BaseDescr subDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
+        //			if (subDescr == null) {
+        //				return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
+        //			}
+        //			if (endReached(subDescr)) {
+        //				return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
+        //			}
+        //			return determineLocationForDescr(subDescr, backText);
+        //		} else if (descr instanceof PatternDescr) {
+        //			PatternDescr patternDescr = (PatternDescr) descr;
+        ////			int locationType;
+        ////			String propertyName = null;
+        ////			String evaluator = null;
+        ////			boolean endOfConstraint = false;
+        ////			List subDescrs = columnDescr.getDescrs();
+        ////			if (subDescrs.size() > 0) {
+        ////				BaseDescr lastDescr = (BaseDescr) subDescrs.get(subDescrs.size() - 1);
+        ////				if (lastDescr.getEndCharacter() != -1) {
+        ////					endOfConstraint = true;
+        ////				}
+        ////				if (lastDescr instanceof FieldConstraintDescr) {
+        ////					FieldConstraintDescr lastFieldDescr = (FieldConstraintDescr) lastDescr;
+        ////					propertyName = lastFieldDescr.getFieldName();
+        ////					List restrictions = lastFieldDescr.getRestrictions();
+        ////					if (restrictions.size() > 0) {
+        ////						RestrictionDescr restriction = (RestrictionDescr) restrictions.get(restrictions.size() - 1);
+        ////						if (restriction instanceof LiteralRestrictionDescr) {
+        ////							LiteralRestrictionDescr literal = (LiteralRestrictionDescr) restriction;
+        ////							evaluator = literal.getEvaluator();
+        ////						} else if (restriction instanceof VariableRestrictionDescr) {
+        ////							VariableRestrictionDescr variable = (VariableRestrictionDescr) restriction;
+        ////							evaluator = variable.getEvaluator();
+        ////						}
+        ////					}
+        ////				}
+        ////			}
+        ////			if (endOfConstraint) {
+        ////				locationType = Location.LOCATION_INSIDE_CONDITION_END;
+        ////			} else if (evaluator != null) {
+        ////				locationType = Location.LOCATION_INSIDE_CONDITION_ARGUMENT;
+        ////			} else if (propertyName != null) {
+        ////				locationType = Location.LOCATION_INSIDE_CONDITION_OPERATOR;
+        ////			} else {
+        ////				locationType = Location.LOCATION_INSIDE_CONDITION_START;
+        ////			}
+        ////			Location location = new Location(locationType);
+        ////			location.setProperty(Location.LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+        ////			location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
+        ////			location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, evaluator); 
+        ////			return location;
+        //			// TODO: this is not completely safe, there are rare occasions where this could fail
+        //			Pattern pattern = Pattern.compile(".*(" + patternDescr.getObjectType() + ")\\s*\\((.*)", Pattern.DOTALL);
+        //			Matcher matcher = pattern.matcher(backText);
+        //			String patternContents = null;
+        //			while (matcher.find()) {
+        //				patternContents = "(" + matcher.group(2);
+        //			}
+        //			if (patternContents == null) {
+        //				return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
+        //			}
+        //			List subDescrs = patternDescr.getDescrs();
+        //			if (subDescrs.size() > 0) {
+        //				Object lastDescr = subDescrs.get(subDescrs.size() - 1);
+        //				if (lastDescr instanceof FieldConstraintDescr) {
+        //					FieldConstraintDescr lastFieldDescr = (FieldConstraintDescr) lastDescr;
+        //					List restrictions = lastFieldDescr.getRestrictions();
+        //					// if there are multiple restrictions, filter out all the rest so that
+        //					// only the last one remains
+        //					if (restrictions.size() > 2) {
+        //						Object last = restrictions.get(restrictions.size() - 2);
+        //						if (last instanceof RestrictionConnectiveDescr) {
+        //							RestrictionConnectiveDescr lastRestr = (RestrictionConnectiveDescr) last;
+        //							String connective = "&&";
+        //							if (lastRestr.getConnective() == RestrictionConnectiveDescr.OR) {
+        //								connective = "||";
+        //							}
+        //							int connectiveLocation = patternContents.lastIndexOf(connective);
+        //							patternContents = "( " + lastFieldDescr.getFieldName() + " " + patternContents.substring(connectiveLocation + 1);
+        //						}
+        //					}
+        //					if (restrictions.size() > 1) {
+        //						Object last = restrictions.get(restrictions.size() - 1);
+        //						if (last instanceof RestrictionConnectiveDescr) {
+        //							RestrictionConnectiveDescr lastRestr = (RestrictionConnectiveDescr) last;
+        //							String connective = "&&";
+        //							if (lastRestr.getConnective() == RestrictionConnectiveDescr.OR) {
+        //								connective = "||";
+        //							}
+        //							int connectiveLocation = patternContents.lastIndexOf(connective);
+        //							patternContents = "( " + lastFieldDescr.getFieldName() + " " + patternContents.substring(connectiveLocation + 1);
+        //						}
+        //					}
+        //				}
+        //			}
+        //			return getLocationForPatttern(patternContents, patternDescr.getObjectType());
+        //		} else if (descr instanceof ExistsDescr) {
+        //			List subDescrs = ((ExistsDescr) descr).getDescrs();
+        //			if (subDescrs.size() == 0) {
+        //				return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
+        //			}
+        //			if (subDescrs.size() == 1) {
+        //				BaseDescr subDescr = (BaseDescr) subDescrs.get(0);
+        //				if (subDescr == null) {
+        //					return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
+        //				}
+        //				Location result = determineLocationForDescr(subDescr, backText);
+        //				if (result.getType() == Location.LOCATION_LHS_BEGIN_OF_CONDITION) {
+        //					result.setType(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
+        //				}
+        //				return result;
+        //			}
+        //			return determineLocationForDescr(descr, backText);
+        //		} else if (descr instanceof NotDescr) {
+        //			List subDescrs = ((NotDescr) descr).getDescrs();
+        //			if (subDescrs.size() == 0) {
+        //				return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
+        //			}
+        //			if (subDescrs.size() == 1) {
+        //				BaseDescr subDescr = (BaseDescr) subDescrs.get(0);
+        //				if (subDescr == null) {
+        //					return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
+        //				}
+        //				Location location = determineLocationForDescr(subDescr, backText);
+        //				if (location.getType() == Location.LOCATION_LHS_BEGIN_OF_CONDITION) {
+        //					return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
+        //				}
+        //				return location;
+        //			}
+        //			return determineLocationForDescr(descr, backText);
+        //		} else if (descr instanceof AndDescr) {
+        //			List subDescrs = ((AndDescr) descr).getDescrs();
+        //			int size = subDescrs.size();
+        //			if (size == 2) {
+        //				BaseDescr subDescr = (BaseDescr) subDescrs.get(1);
+        //				if (subDescr == null) {
+        //					Matcher matcher = EXISTS_PATTERN.matcher(backText);
+        //					if (matcher.matches()) {
+        //						return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
+        //					}
+        //					matcher = NOT_PATTERN.matcher(backText);
+        //					if (matcher.matches()) {
+        //						return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
+        //					}
+        //					return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
+        //				} else {
+        //					Location location = determineLocationForDescr(subDescr, backText);
+        //					if (location.getType() == Location.LOCATION_LHS_BEGIN_OF_CONDITION) {
+        //						return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
+        //					}
+        //					return location;
+        //				}
+        //			}
+        //			return new Location(Location.LOCATION_UNKNOWN);
+        //		} else if (descr instanceof OrDescr) {
+        //			List subDescrs = ((OrDescr) descr).getDescrs();
+        //			int size = subDescrs.size();
+        //			if (size == 2) {
+        //				BaseDescr subDescr = (BaseDescr) subDescrs.get(1);
+        //				if (subDescr == null) {
+        //					Matcher matcher = EXISTS_PATTERN.matcher(backText);
+        //					if (matcher.matches()) {
+        //						return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);
+        //					}
+        //					matcher = NOT_PATTERN.matcher(backText);
+        //					if (matcher.matches()) {
+        //						return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);
+        //					}return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
+        //				} else {
+        //					Location location = determineLocationForDescr(subDescr, backText);
+        //					if (location.getType() == Location.LOCATION_LHS_BEGIN_OF_CONDITION) {
+        //						return new Location(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);
+        //					}
+        //					return location;
+        //				}
+        //			}
+        //			return new Location(Location.LOCATION_UNKNOWN);
+        //		} else if (descr instanceof FromDescr) {
+        //			Location location = new Location(Location.LOCATION_LHS_FROM);
+        //			String content = CompletionUtil.stripWhiteSpace(backText);
+        //			location.setProperty(Location.LOCATION_FROM_CONTENT, content);
+        //			return location;
+        //		} else if (descr instanceof AccumulateDescr) {
+        //			Matcher matcher = ACCUMULATE_PATTERN.matcher(backText);
+        //			int end = -1;
+        //			while (matcher.find()) {
+        //				end = matcher.end();
+        //			}
+        //			String accumulateText = backText.substring(end);
+        //			matcher = ACCUMULATE_PATTERN_RESULT.matcher(accumulateText);
+        //			if (matcher.matches()) {
+        //				Location location = new Location(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE);
+        //				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
+        //				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, matcher.group(2));
+        //				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, matcher.group(3));
+        //				return location;
+        //			}
+        //			matcher = ACCUMULATE_PATTERN_ACTION.matcher(accumulateText);
+        //			if (matcher.matches()) {
+        //				Location location =  new Location(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE);
+        //				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
+        //				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, matcher.group(2));
+        //				return location;
+        //			}
+        //			matcher = ACCUMULATE_PATTERN_INIT.matcher(accumulateText);
+        //			if (matcher.matches()) {
+        //				Location location =  new Location(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE);
+        //				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, matcher.group(1));
+        //				return location;
+        //			}
+        //			matcher = PATTERN_PATTERN.matcher(accumulateText);
+        //			if (matcher.matches()) {
+        //				String className = matcher.group(3);
+        //				String patternContents = matcher.group(4);
+        //				return getLocationForPatttern(patternContents, className);
+        //			}
+        //			return new Location(Location.LOCATION_LHS_FROM_ACCUMULATE);
+        //		} else if (descr instanceof CollectDescr) {
+        //			Matcher matcher = COLLECT_PATTERN.matcher(backText);
+        //			int end = -1;
+        //			while (matcher.find()) {
+        //				end = matcher.end();
+        //			}
+        //			String collectText = backText.substring(end);
+        //			matcher = PATTERN_PATTERN.matcher(collectText);
+        //			if (matcher.matches()) {
+        //				String className = matcher.group(3);
+        //				String columnContents = matcher.group(4);
+        //				return getLocationForPatttern(columnContents, className);
+        //			}
+        //			return new Location(Location.LOCATION_LHS_FROM_COLLECT);
+        //		} else if (descr instanceof EvalDescr) {
+        //			Matcher matcher = EVAL_PATTERN.matcher(backText);
+        //			if (matcher.matches()) {
+        //				String content = matcher.group(1);
+        //				Location location = new Location(Location.LOCATION_LHS_INSIDE_EVAL);
+        //				location.setProperty(Location.LOCATION_EVAL_CONTENT, content);
+        //				return location;
+        //			}
+        //		}
+        //		
+        //		return new Location(Location.LOCATION_UNKNOWN);
+    }
+
+//    private static boolean endReached(BaseDescr descr) {
+//        if ( descr == null ) {
+//            return false;
+//        }
+//        if ( descr instanceof PatternDescr ) {
+//            return descr.getEndCharacter() != -1;
+//        } else if ( descr instanceof ExistsDescr ) {
+//            List descrs = ((ExistsDescr) descr).getDescrs();
+//            if ( descrs.isEmpty() ) {
+//                return false;
+//            }
+//            return endReached( (BaseDescr) descrs.get( 0 ) );
+//        } else if ( descr instanceof NotDescr ) {
+//            List descrs = ((NotDescr) descr).getDescrs();
+//            if ( descrs.isEmpty() ) {
+//                return false;
+//            }
+//            return endReached( (BaseDescr) descrs.get( 0 ) );
+//        } else if ( descr instanceof NotDescr ) {
+//            List descrs = ((NotDescr) descr).getDescrs();
+//            if ( descrs.isEmpty() ) {
+//                return false;
+//            }
+//            return endReached( (BaseDescr) descrs.get( 0 ) );
+//        } else if ( descr instanceof AndDescr ) {
+//            List descrs = ((AndDescr) descr).getDescrs();
+//            if ( descrs.size() != 2 ) {
+//                return false;
+//            }
+//            return endReached( (BaseDescr) descrs.get( 0 ) ) && endReached( (BaseDescr) descrs.get( 1 ) );
+//        } else if ( descr instanceof OrDescr ) {
+//            List descrs = ((OrDescr) descr).getDescrs();
+//            if ( descrs.size() != 2 ) {
+//                return false;
+//            }
+//            return endReached( (BaseDescr) descrs.get( 0 ) ) && endReached( (BaseDescr) descrs.get( 1 ) );
+//        } else if ( descr instanceof EvalDescr ) {
+//            return ((EvalDescr) descr).getContent() != null;
+//        }
+//        return descr.getEndCharacter() != -1;
+//        //		else if (descr instanceof AccumulateDescr) {
+//        //			return ((AccumulateDescr) descr).getResultCode() != null;
+//        //		} else if (descr instanceof CollectDescr) {
+//        //			return ((CollectDescr) descr).getSourceColumn() != null;
+//        //		}
+//        //		return false;
+//    }
+//
+//    private static Location getLocationForPatttern(String patternContents,
+//                                                   String className) {
+//        Matcher matcher = PATTERN_PATTERN_OPERATOR.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_START.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_START );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_COMPARATOR_ARGUMENT.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            if ( matcher.group( 8 ) != null ) {
+//                location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                      matcher.group( 8 ) );
+//            } else {
+//                location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                      matcher.group( 4 ) );
+//            }
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_CONTAINS_ARGUMENT.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                  "contains" );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_EXCLUDES_ARGUMENT.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                  "excludes" );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_IN_ARGUMENT.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                  "in" );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_MEMBER_OF_ARGUMENT.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                  "memberOf" );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_MATCHES_ARGUMENT.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            location.setProperty( Location.LOCATION_PROPERTY_PROPERTY_NAME,
+//                                  matcher.group( 3 ) );
+//            location.setProperty( Location.LOCATION_PROPERTY_OPERATOR,
+//                                  "matches" );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_CONTAINS_END.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_MATCHES_END.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_EXCLUDES_END.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_IN_END.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_MEMBER_OF_END.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        matcher = PATTERN_PATTERN_COMPARATOR_END.matcher( patternContents );
+//        if ( matcher.matches() ) {
+//            Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//            location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                                  className );
+//            return location;
+//        }
+//        Location location = new Location( Location.LOCATION_LHS_INSIDE_CONDITION_END );
+//        location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME,
+//                              className );
+//        return location;
+//    }
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -14,8 +14,8 @@
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.DroolsPluginImages;
 import org.drools.eclipse.editors.AbstractRuleEditor;
-import org.drools.eclipse.editors.completion.LocationDeterminator.Location;
 import org.drools.eclipse.util.ProjectClassLoader;
+import org.drools.lang.Location;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.BaseDescr;
@@ -64,12 +64,12 @@
 			}
 
 			Location location = LocationDeterminator.getLocation(backText);
-			if (location.getType() == LocationDeterminator.LOCATION_RULE_HEADER) {
+			if (location.getType() == Location.LOCATION_RULE_HEADER) {
 				addRuleHeaderProposals(list, prefix, backText);
-			} else if (location.getType() == LocationDeterminator.LOCATION_RHS) {
+			} else if (location.getType() == Location.LOCATION_RHS) {
 				addRHSCompletionProposals(list, prefix, backText,
-					(String) location.getProperty(LocationDeterminator.LOCATION_LHS_CONTENT),
-					(String) location.getProperty(LocationDeterminator.LOCATION_RHS_CONTENT));
+					(String) location.getProperty(Location.LOCATION_LHS_CONTENT),
+					(String) location.getProperty(Location.LOCATION_RHS_CONTENT));
 			} else {
 				addLHSCompletionProposals(list, location, prefix, backText);
 			}
@@ -98,7 +98,7 @@
 	protected void addLHSCompletionProposals(List list,
 			Location location, String prefix, String backText) {
 		switch (location.getType()) {
-		case LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION:
+		case Location.LOCATION_LHS_BEGIN_OF_CONDITION:
 			// if we are at the beginning of a new condition
 			// add drools keywords
 			list.add(new RuleCompletionProposal(prefix.length(), "and",
@@ -117,19 +117,19 @@
 			list.add(prop);
 			// we do not break but also add all elements that are needed for
 			// and/or
-		case LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR:
+		case Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR:
 			list.add(new RuleCompletionProposal(prefix.length(), "not",
 					"not ", DROOLS_ICON));
 			// we do not break but also add all elements that are needed for
 			// not
-		case LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_NOT:
+		case Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT:
 			list.add(new RuleCompletionProposal(prefix.length(), "exists",
 					"exists ", DROOLS_ICON));
 			// we do not break but also add all elements that are needed for
 			// exists
-		case LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE:
-		case LocationDeterminator.LOCATION_LHS_FROM_COLLECT:
-		case LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS:
+		case Location.LOCATION_LHS_FROM_ACCUMULATE:
+		case Location.LOCATION_LHS_FROM_COLLECT:
+		case Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS:
 			// and add imported classes
 			List imports = getDRLEditor().getImports();
 			Iterator iterator = imports.iterator();
@@ -173,9 +173,9 @@
 				list.add(p);
 			}
 			break;
-		case LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START:
+		case Location.LOCATION_LHS_INSIDE_CONDITION_START:
 			String className = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+					.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME);
 			if (className != null) {
 				boolean isTemplate = addFactTemplatePropertyProposals(
 						prefix, className, list);
@@ -205,11 +205,11 @@
 				}
 			}
 			break;
-		case LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR:
+		case Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR:
 			className = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+					.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME);
 			String property = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
+					.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME);
 			String type = getPropertyClass(className, property);
 
 			list.add(new RuleCompletionProposal(prefix.length(), "==",
@@ -250,14 +250,14 @@
 						"excludes", "excludes ", DROOLS_ICON));
 			}
 			break;
-		case LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT:
+		case Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT:
 			// determine type
 			className = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+					.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME);
 			property = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
+					.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME);
 			String operator = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR);
+					.getProperty(Location.LOCATION_PROPERTY_OPERATOR);
 			type = getPropertyClass(className, property);
 			
 			if ("in".equals(operator)) {
@@ -325,13 +325,13 @@
 				// do nothing
 			}
 			break;
-		case LocationDeterminator.LOCATION_LHS_INSIDE_EVAL:
+		case Location.LOCATION_LHS_INSIDE_EVAL:
 			String content = (String) location
-					.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT);
+					.getProperty(Location.LOCATION_EVAL_CONTENT);
 			list.addAll(getJavaCompletionProposals(content, prefix,
 					getRuleParameters(backText)));
 			break;
-		case LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END:
+		case Location.LOCATION_LHS_INSIDE_CONDITION_END:
 			list.add(new RuleCompletionProposal(prefix.length(), "&", "& ",
 					DROOLS_ICON));
 			list.add(new RuleCompletionProposal(prefix.length(), "|", "| ",
@@ -339,9 +339,9 @@
 			list.add(new RuleCompletionProposal(prefix.length(), ",", ", ",
 					DROOLS_ICON));
 			break;
-		case LocationDeterminator.LOCATION_LHS_FROM:
+		case Location.LOCATION_LHS_FROM:
 			String fromText = (String) location
-					.getProperty(LocationDeterminator.LOCATION_FROM_CONTENT);
+					.getProperty(Location.LOCATION_FROM_CONTENT);
 			int index = fromText.indexOf('.');
 			if (index == -1) {
 				// add accumulate and collect keyword
@@ -370,27 +370,27 @@
 						getRuleParameters(backText)));
 			}
 			break;
-		case LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE:
+		case Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE:
 			content = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
+					.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
 			list.addAll(getJavaCompletionProposals(content, prefix,
 					getRuleParameters(backText)));
 			break;
-		case LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE:
+		case Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE:
 			content = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
+					.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
 			content += (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
+					.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
 			list.addAll(getJavaCompletionProposals(content, prefix,
 					getRuleParameters(backText)));
 			break;
-		case LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE:
+		case Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE:
 			content = (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
+					.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
 			content += (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
+					.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
 			content += (String) location
-					.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT);
+					.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT);
 			list.addAll(getJavaCompletionProposals(content, prefix,
 					getRuleParameters(backText)));
 			break;

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -416,11 +416,11 @@
         assertEquals(1, pattern.getDescrs().size());
         field = (FieldConstraintDescr) pattern.getDescrs().get(0);
         assertEquals("property", field.getFieldName());
-        assertEquals(2, field.getRestrictions().size());
+        assertEquals(1, field.getRestrictions().size());
         literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
         assertEquals(">", literal.getEvaluator());
         assertEquals("0", literal.getText());
-        RestrictionConnectiveDescr connective = (RestrictionConnectiveDescr) field.getRestrictions().get(1);
+        RestrictionConnectiveDescr connective = (RestrictionConnectiveDescr) field.getRestriction();
         assertEquals(RestrictionConnectiveDescr.AND, connective.getConnective());
 
         input = 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java	2007-05-23 16:20:50 UTC (rev 12105)
@@ -1,5 +1,7 @@
 package org.drools.eclipse.editors.completion;
 
+import org.drools.lang.Location;
+
 import junit.framework.TestCase;
 
 /**
@@ -51,8 +53,6 @@
     	assertTrue(LocationDeterminator.PATTERN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property1 == \"value\",  property2  ==  ").matches());
     	assertTrue(LocationDeterminator.PATTERN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property == otherProp").matches());
     	assertTrue(LocationDeterminator.PATTERN_PATTERN_COMPARATOR_ARGUMENT.matcher("(property==otherProp").matches());
-    	assertTrue(LocationDeterminator.PATTERN_PATTERN_CONTAINS_ARGUMENT.matcher("( property contains ").matches());
-    	assertTrue(LocationDeterminator.PATTERN_PATTERN_EXCLUDES_ARGUMENT.matcher("(   property   excludes   ").matches());
     }
     
     public void testCheckLHSLocationDetermination() {
@@ -60,8 +60,8 @@
         	"rule MyRule \n" +
         	"	when \n" +
         	"		";
-        LocationDeterminator.Location location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        Location location = LocationDeterminator.getLocation(input);
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
         
         input = 
         	"rule MyRule \n" +
@@ -69,7 +69,7 @@
         	"		Class( condition == true ) \n" +
         	"		";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
         
         input = 
         	"rule MyRule \n" +
@@ -77,14 +77,14 @@
         	"		class: Class( condition == true, condition2 == null ) \n" +
         	"		";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -92,21 +92,21 @@
         	"		Class( condition == true ) \n" +
         	"		Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		class: Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		class:Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         /** Inside of condition: start */
         input = 
@@ -114,32 +114,32 @@
         	"	when \n" +
         	"		Class (";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( na";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( condition == true, ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( condition == true, na";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
@@ -147,8 +147,8 @@
         	"		Class ( \n" +
         	"			";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
@@ -156,32 +156,32 @@
         	"		Class ( condition == true, \n" +
         	"			";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name : ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name: ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name:";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     
         /** Inside of condition: Operator */
         input = 
@@ -189,72 +189,72 @@
         	"	when \n" +
         	"		Class ( property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class(property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name : property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class (name:property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class (name:property   ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name1 : property1, name : property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name1 : property1 == \"value\", name : property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name1 : property1 == \"value\",property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -262,9 +262,9 @@
         	"		Class ( name1 : property1, \n" + 
         	"			name : property ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         /** Inside of condition: argument */
         input = 
@@ -272,214 +272,214 @@
         	"	when \n" +
         	"		Class ( property == ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("==", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property== ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("==", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name : property <= ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("<=", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("<=", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name:property != ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("!=", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("!=", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name1 : property1, property2 == ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property2", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("==", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class (name:property== ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("==", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property == otherPropertyN";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("==", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property == \"someth";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("==", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("==", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property contains ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("contains", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("contains", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property excludes ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("excludes", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("excludes", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property matches \"prop";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("matches", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("matches", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property in ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("in", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("in", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
        
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property in ('1', '2') ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property in ('1', '2'), ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property not in ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("in", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("in", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
        
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property not in ('1', '2') ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property not in ('1', '2'), ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property memberOf ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("memberOf", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("memberOf", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
        
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property memberOf collection ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property memberOf collection, ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property not memberOf ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("memberOf", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("memberOf", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
        
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property not memberOf collection ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property not memberOf collection, ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
         
         
         /** EXISTS */
@@ -488,50 +488,50 @@
         	"	when \n" +
         	"		exists ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists ( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists(";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists ( Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists ( name : Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists Class (";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -539,7 +539,7 @@
         	"		exists Class ( ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         /** NOT */
         input = 
@@ -547,36 +547,36 @@
         	"	when \n" +
         	"		not ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		not Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		not exists ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		not exists Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		not Class (";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         // TODO        
 //        input = 
@@ -584,16 +584,16 @@
 //        	"	when \n" +
 //        	"		not exists Class (";
 //        location = LocationDeterminator.getLocationInCondition(input);
-//        assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
-//        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+//        assertEquals(Location.LOCATION_INSIDE_CONDITION_START, location.getType());
+//        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
 //        input = 
 //        	"rule MyRule \n" +
 //        	"	when \n" +
 //        	"		not exists name : Class (";
 //        location = LocationDeterminator.getLocationInCondition(input);
-//        assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
-//        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+//        assertEquals(Location.LOCATION_INSIDE_CONDITION_START, location.getType());
+//        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -601,7 +601,7 @@
         	"		not Class () \n" +
         	"		";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
     
         /** AND */
         input = 
@@ -609,28 +609,28 @@
         	"	when \n" +
         	"		Class ( ) and ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) &&  ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class () and   ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		name : Class ( name: property ) and ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -638,28 +638,28 @@
         	"		Class ( name: property ) \n" + 
         	"       and ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) and Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) and name : Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) && name : Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -667,7 +667,7 @@
         	"		Class ( ) and Class ( ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -675,7 +675,7 @@
         	"		Class ( ) and not Class ( ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -683,43 +683,43 @@
         	"		Class ( ) and exists Class ( ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) and Class ( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) and Class ( name ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("name", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("name", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) and Class ( name == ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists Class ( ) and not ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists Class ( ) and exists ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -727,7 +727,7 @@
         	"		Class ( ) and not Class ( ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         /** OR */
         input = 
@@ -735,28 +735,28 @@
         	"	when \n" +
         	"		Class ( ) or ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) || ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class () or   ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
     
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		name : Class ( name: property ) or ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -764,28 +764,28 @@
         	"		Class ( name: property ) \n" + 
         	"       or ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) or Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) or name : Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) || name : Cl";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -793,43 +793,43 @@
         	"		Class ( ) or Class ( ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) or Class ( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) or Class ( name ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("name", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("name", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( ) or Class ( name == ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists Class ( ) or not ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		exists Class ( ) or exists ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS, location.getType());
 
         /** EVAL */
         input = 
@@ -837,100 +837,100 @@
         	"	when \n" +
         	"		eval ( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval(";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( myCla";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("myCla", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("myCla", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getMetho";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("param.getMetho", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMetho", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getMethod(";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("param.getMethod(", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod(", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getMethod().get";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("param.getMethod().get", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod().get", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getMethod(\"someStringWith)))\").get";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("param.getMethod(\"someStringWith)))\").get", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod(\"someStringWith)))\").get", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getMethod(\"someStringWith(((\").get";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("param.getMethod(\"someStringWith(((\").get", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod(\"someStringWith(((\").get", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( true )";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getProperty(name).isTrue() )";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getProperty(\"someStringWith(((\").isTrue() )";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getProperty((((String) s) )";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_EVAL, location.getType());
-        assertEquals("param.getProperty((((String) s) )", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+        assertEquals(Location.LOCATION_LHS_INSIDE_EVAL, location.getType());
+        assertEquals("param.getProperty((((String) s) )", location.getProperty(Location.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		eval( param.getProperty((((String) s))))";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -938,80 +938,70 @@
         	"		eval( true ) \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         /** MULTIPLE RESTRICTIONS */
+
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 && ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 && " +
-        	"       ";
-        location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-
-        input = 
-        	"rule MyRule \n" +
-        	"	when \n" +
         	"		Class ( name : property1, property2 > 0 && ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property2", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property1 < 20, property2 > 0 && ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property2", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 && < ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
-        assertEquals("<", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_OPERATOR));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals("<", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 && < 10 ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 && < 10, ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 || ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -1019,34 +1009,34 @@
         	"		Class ( property > 0 || \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( name : property1, property2 > 0 || ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property2", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property1 < 20, property2 > 0 || ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("property2", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -1054,28 +1044,28 @@
         	"		Class ( property > 0 \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 && < 10 ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 || < 10 ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property == \"test\" || == \"test2\" ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         /** FROM */
         input = 
@@ -1083,38 +1073,38 @@
         	"	when \n" +
         	"		Class ( property > 0 ) ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ) fr";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ) from ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM, location.getType());
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_FROM_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM, location.getType());
+        assertEquals("", location.getProperty(Location.LOCATION_FROM_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ) from myGlob";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM, location.getType());
-        assertEquals("myGlob", location.getProperty(LocationDeterminator.LOCATION_FROM_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM, location.getType());
+        assertEquals("myGlob", location.getProperty(Location.LOCATION_FROM_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ) from myGlobal.get";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM, location.getType());
-        assertEquals("myGlobal.get", location.getProperty(LocationDeterminator.LOCATION_FROM_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM, location.getType());
+        assertEquals("myGlobal.get", location.getProperty(Location.LOCATION_FROM_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1122,7 +1112,7 @@
         	"		Class ( property > 0 ) from myGlobal.getList() \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -1130,7 +1120,7 @@
         	"		Class ( property > 0 ) from getDroolsFunction() \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         /** FROM ACCUMULATE */
         input = 
@@ -1138,14 +1128,14 @@
         	"	when \n" +
         	"		Class ( property > 0 ) from accumulate ( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE, location.getType());
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ) from accumulate(";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE, location.getType());
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -1158,7 +1148,7 @@
         	"		) \n" +
         	"		";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -1167,8 +1157,8 @@
         	"			$cheese : Cheese( type == $likes ), \n" +
         	"			init( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, location.getType());
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, location.getType());
+        assertEquals("", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1178,9 +1168,9 @@
         	"			init( int total = 0; ), \n" +
         	"			action( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
-        assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
+        assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals("", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1191,10 +1181,10 @@
         	"			action( total += $cheese.getPrice(); ), \n" +
         	"           result( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
-        assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
-        assertEquals("total += $cheese.getPrice(); ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
+        assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals(" total += $cheese.getPrice(); ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+        assertEquals("", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1203,8 +1193,8 @@
         	"			$cheese : Cheese( type == $likes ), \n" +
         	"			init( int total =";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, location.getType());
-        assertEquals("int total =", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, location.getType());
+        assertEquals("int total =", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1214,9 +1204,9 @@
         	"			init( int total = 0; ), \n" +
         	"			action( total += $ch";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
-        assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
-        assertEquals("total += $ch", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
+        assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals("total += $ch", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1227,10 +1217,10 @@
         	"			action( total += $cheese.getPrice(); ), \n" +
         	"           result( new Integer( tot";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
-        assertEquals("int total = 0; ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
-        assertEquals("total += $cheese.getPrice(); ", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
-        assertEquals("new Integer( tot", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
+        assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
+        assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals(" total += $cheese.getPrice(); ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+        assertEquals("new Integer( tot", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1238,8 +1228,8 @@
         	"		Class ( property > 0 ) from accumulate( \n" +
         	"			$cheese : Cheese( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Cheese", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -1247,9 +1237,9 @@
         	"		Class ( property > 0 ) from accumulate( \n" +
         	"			$cheese : Cheese( type ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("type", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Cheese", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("type", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -1257,9 +1247,9 @@
         	"		Class ( property > 0 ) from accumulate( \n" +
         	"			$cheese : Cheese( type == ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("type", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Cheese", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("type", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         /** FROM COLLECT */
         input = 
@@ -1267,14 +1257,14 @@
         	"	when \n" +
         	"		Class ( property > 0 ) from collect ( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_COLLECT, location.getType());
+        assertEquals(Location.LOCATION_LHS_FROM_COLLECT, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
         	"		Class ( property > 0 ) from collect(";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_FROM_COLLECT, location.getType());
+        assertEquals(Location.LOCATION_LHS_FROM_COLLECT, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -1284,7 +1274,7 @@
         	"		) \n" +
         	"		";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
 
         input = 
         	"rule MyRule \n" +
@@ -1292,8 +1282,8 @@
         	"		Class ( property > 0 ) from collect ( \n" +
         	"			Cheese( ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
-        assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
+        assertEquals("Cheese", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -1301,9 +1291,9 @@
         	"		Class ( property > 0 ) from collect ( \n" +
         	"			Cheese( type ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
-        assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("type", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
+        assertEquals("Cheese", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("type", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
 
         input = 
         	"rule MyRule \n" +
@@ -1311,9 +1301,9 @@
         	"		Class ( property > 0 ) from collect ( \n" +
         	"			Cheese( type == ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
-        assertEquals("Cheese", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
-        assertEquals("type", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+        assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
+        assertEquals("Cheese", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
+        assertEquals("type", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
     }
     
     public void testCheckRHSLocationDetermination() {
@@ -1323,9 +1313,9 @@
         	"		Class ( )\n" +
         	"   then\n" +
         	"       ";
-        LocationDeterminator.Location location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_RHS, location.getType());
-        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_RHS_CONTENT));
+        Location location = LocationDeterminator.getLocation(input);
+        assertEquals(Location.LOCATION_RHS, location.getType());
+        assertEquals("", location.getProperty(Location.LOCATION_RHS_CONTENT));
         
         input = 
         	"rule MyRule \n" +
@@ -1335,8 +1325,8 @@
         	"       assert(null);\n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_RHS, location.getType());
-        assertEquals("assert(null);\n       ", location.getProperty(LocationDeterminator.LOCATION_RHS_CONTENT));
+        assertEquals(Location.LOCATION_RHS, location.getType());
+        assertEquals("assert(null);\n       ", location.getProperty(Location.LOCATION_RHS_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -1345,20 +1335,20 @@
         	"   then\n" +
         	"       meth";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_RHS, location.getType());
-        assertEquals("meth", location.getProperty(LocationDeterminator.LOCATION_RHS_CONTENT));
+        assertEquals(Location.LOCATION_RHS, location.getType());
+        assertEquals("meth", location.getProperty(Location.LOCATION_RHS_CONTENT));
     }
         
     public void testCheckRuleHeaderLocationDetermination() {
         String input = 
         	"rule MyRule ";
-        LocationDeterminator.Location location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_RULE_HEADER, location.getType());
+        Location location = LocationDeterminator.getLocation(input);
+        assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
         
         input = 
         	"rule MyRule \n" +
         	"	salience 12 activation-group \"my";
         location = LocationDeterminator.getLocation(input);
-        assertEquals(LocationDeterminator.LOCATION_RULE_HEADER, location.getType());
+        assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
     }
 }

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2007-05-23 12:20:42 UTC (rev 12104)
+++ labs/jbossrules/trunk/pom.xml	2007-05-23 16:20:50 UTC (rev 12105)
@@ -658,7 +658,7 @@
       <dependency>
         <groupId>org.antlr</groupId>
         <artifactId>antlr</artifactId>
-        <version>3.0b7</version>
+        <version>3.0</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jdt</groupId>




More information about the jboss-svn-commits mailing list