[jboss-svn-commits] JBL Code SVN: r22318 - in labs/jbossrules/trunk/drools-eclipse: drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 2 08:43:54 EDT 2008


Author: KrisVerlaenen
Date: 2008-09-02 08:43:54 -0400 (Tue, 02 Sep 2008)
New Revision: 22318

Removed:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.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-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java
Log:
JBRULES-1750: Update IDE to new parser

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -34,9 +34,6 @@
 		if (sourcePathName == null || "".equals(sourcePathName)) {
 			throw new IllegalArgumentException("Invalid sourcePathName " + sourcePathName);
 		}
-		if (packageDescr == null) {
-			throw new IllegalArgumentException("Null packageDescr");
-		}
 		this.sourcePathName = sourcePathName;
 		this.packageDescr = packageDescr;
 		this.parserErrors =
@@ -76,7 +73,7 @@
 	}
 
 	public String getPackageName() {
-		return packageDescr.getName();
+		return packageDescr == null ? null : packageDescr.getName();
 	}
 
 	public boolean isCompiled() {
@@ -86,10 +83,12 @@
 	public RuleInfo[] getRuleInfos() {
 		if (ruleInfos == null) {
 			List<RuleInfo> ruleInfosList = new ArrayList<RuleInfo>();
-	        for (RuleDescr ruleDescr: packageDescr.getRules()) {
-	    		RuleInfo ruleInfo = new RuleInfo(ruleDescr);
-	    		ruleInfosList.add(ruleInfo);
-	    	}
+			if (packageDescr != null) {
+		        for (RuleDescr ruleDescr: packageDescr.getRules()) {
+		    		RuleInfo ruleInfo = new RuleInfo(ruleDescr);
+		    		ruleInfosList.add(ruleInfo);
+		    	}
+			}
 	    	ruleInfos = (RuleInfo[]) ruleInfosList.toArray(new RuleInfo[0]);
 		}
 		return ruleInfos;
@@ -133,7 +132,7 @@
                     break;
                 }
             }
-            if (dialectName == null) {
+            if (dialectName == null && packageDescr != null) {
                 for (AttributeDescr attribute: DRLInfo.this.packageDescr.getAttributes()) {
                     if ("dialect".equals(attribute.getName())) {
                         dialectName = (String) attribute.getValue();
@@ -162,7 +161,8 @@
 				throw new IllegalArgumentException("Package has not been compiled");
 			}
 			if (className == null) {
-	    		className = getPackageName() + "." + ruleDescr.getClassName();
+				String packageName = getPackageName(); 
+	    		className = (packageName == null ? "" : packageName + ".") + ruleDescr.getClassName();
 			}
 			return className;
 		}
@@ -190,7 +190,7 @@
 		}
 
 		public String getPackageName() {
-			return packageDescr.getName();
+			return packageDescr == null ? null : packageDescr.getName();
 		}
 
 		public String getRuleName() {
@@ -201,10 +201,12 @@
 	public FunctionInfo[] getFunctionInfos() {
 		if (functionInfos == null) {
 			List<FunctionInfo> functionInfosList = new ArrayList<FunctionInfo>();
-	        for (FunctionDescr functionDescr: packageDescr.getFunctions()) {
-	    		FunctionInfo functionInfo = new FunctionInfo(functionDescr);
-	    		functionInfosList.add(functionInfo);
-	    	}
+			if (packageDescr != null) {
+		        for (FunctionDescr functionDescr: packageDescr.getFunctions()) {
+		    		FunctionInfo functionInfo = new FunctionInfo(functionDescr);
+		    		functionInfosList.add(functionInfo);
+		    	}
+			}
 	        functionInfos = (FunctionInfo[]) functionInfosList.toArray(new FunctionInfo[0]);
 		}
 		return functionInfos;
@@ -269,7 +271,7 @@
 		}
 
 		public String getPackageName() {
-			return packageDescr.getName();
+			return packageDescr == null ? null : packageDescr.getName();
 		}
 
 		public String getFunctionName() {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -385,10 +385,9 @@
 
                 if ( packageDescr == null ) {
                     if ( dslReader != null ) {
-                        packageDescr = parser.parse( content,
-                                                     dslReader );
+                        packageDescr = parser.parse( true, content, dslReader );
                     } else {
-                        packageDescr = parser.parse( content );
+                        packageDescr = parser.parse( true, content );
                     }
                     parserErrors = parser.getErrors();
                 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -1,16 +1,18 @@
 package org.drools.eclipse.editors.completion;
 
+import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.Map;
 import java.util.regex.Pattern;
 
 import org.antlr.runtime.ANTLRStringStream;
 import org.antlr.runtime.CommonTokenStream;
 import org.drools.lang.DRLLexer;
 import org.drools.lang.DRLParser;
+import org.drools.lang.DroolsEditorType;
 import org.drools.lang.DroolsToken;
 import org.drools.lang.DroolsTreeAdaptor;
 import org.drools.lang.Location;
-import org.drools.lang.descr.RuleDescr;
 
 /**
  * A utility class that invokes the DRLParser on some partial drl text, and
@@ -122,33 +124,43 @@
 							} else {
 								propertyName += token;
 							}
+						} else {
+							break;
 						}
 					}
 					location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
 				}
 				break;
 			case Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT:
-				index = findToken("(", Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
-				if (index != -1) {
-					Object o = parserList.get(index - 1);
+				int index1 = findToken("(", Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
+				int index2 = findToken(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, locationIndex);
+				int index3 = findToken(Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
+				if (index1 != -1 && index2 != -1) {
+					Object o = parserList.get(index1 - 1);
 					if (o instanceof DroolsToken) {
 						String className = ((DroolsToken) o).getText(); 
 						location.setProperty(Location.LOCATION_PROPERTY_CLASS_NAME, className);	
 					}
 				}
-				Object o = parserList.get(locationIndex - 1);
-				if (o instanceof DroolsToken) {
-					location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, ((DroolsToken) o).getText());
+				String operator = "";
+				for (i = index2 + 1; i < locationIndex; i++) {
+					Object o = parserList.get(i);
+					if (o instanceof DroolsToken) {
+						operator += ((DroolsToken) o).getText(); 
+					}
+					if (i < locationIndex - 1) {
+						operator += " ";
+					}
 				}
+				location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, operator);
 				propertyName = null;
-				index = findToken(Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex - 1);
-				if (index != -1) {
-					if (index + 1 < locationIndex - 1) {
+				if (index1 != -1) {
+					if (index3 + 1 < locationIndex - 1) {
 						propertyName = "";
 					}
-					i = index + 1;
+					i = index3 + 1;
 					while (i < locationIndex - 1) {
-						o = parserList.get(i++);
+						Object o = parserList.get(i++);
 						if (o instanceof DroolsToken) {
 							String token = ((DroolsToken) o).getText();
 							if (":".equals(token)) {
@@ -156,6 +168,8 @@
 							} else {
 								propertyName += token;
 							}
+						} else {
+							break;
 						}
 					}
 					location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
@@ -164,7 +178,7 @@
 			case Location.LOCATION_LHS_INSIDE_CONDITION_END:
 				index = findToken("(", Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
 				if (index != -1) {
-					o = parserList.get(index - 1);
+					Object o = parserList.get(index - 1);
 					if (o instanceof DroolsToken) {
 						String className = ((DroolsToken) o).getText(); 
 						location.setProperty(Location.LOCATION_PROPERTY_CLASS_NAME, className);	
@@ -175,7 +189,7 @@
 				String eval = "";
 				i = locationIndex + 2;
 				while (i < parserList.size()) {
-					o = parserList.get(i++);
+					Object o = parserList.get(i++);
 					if (o instanceof DroolsToken) {
 						eval += ((DroolsToken) o).getText(); 
 					}
@@ -189,7 +203,7 @@
 				}
 				i = locationIndex + 1;
 				while (i < parserList.size()) {
-					o = parserList.get(i++);
+					Object o = parserList.get(i++);
 					if (o instanceof DroolsToken) {
 						from += ((DroolsToken) o).getText(); 
 					}
@@ -197,45 +211,97 @@
 				location.setProperty(Location.LOCATION_FROM_CONTENT, from);	
 				break;
 			case Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE:
-				System.out.println(parserList);
 				from = "";
 				i = locationIndex + 1;
 				while (i < parserList.size()) {
-					o = parserList.get(i++);
+					Object o = parserList.get(i++);
 					if (o instanceof DroolsToken) {
 						from += ((DroolsToken) o).getText(); 
 					}
+					if (i < parserList.size()) {
+						from += " ";
+					}
 				}
 				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, from);
 				break;
 			case Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE:
-				System.out.println(parserList);
 				from = "";
 				index = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, locationIndex);
-				if (index != -1) {
-					for (i = index + 1; i < locationIndex - 1; i++) {
-						o = parserList.get(i);
+				index2 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION, locationIndex);
+				if (index != -1 && index2 != -1) {
+					for (i = index + 1; i < index2 - 2; i++) {
+						Object o = parserList.get(i);
 						if (o instanceof DroolsToken) {
 							from += ((DroolsToken) o).getText(); 
 						}
+						if (i < index2 - 3) {
+							from += " ";
+						}
 					}
 					location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, from);
 				}
 				from = "";
 				i = locationIndex + 1;
 				while (i < parserList.size()) {
-					o = parserList.get(i++);
+					Object o = parserList.get(i++);
 					if (o instanceof DroolsToken) {
 						from += ((DroolsToken) o).getText(); 
 					}
+					if (i < parserList.size()) {
+						from += " ";
+					}
 				}
 				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, from);
 				break;
+			case Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE:
+				from = "";
+				index = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, locationIndex);
+				index2 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION, locationIndex);
+				index3 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, locationIndex);
+				int index4 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE, locationIndex);
+				if (index != -1 && index2 != -1) {
+					for (i = index + 1; i < index2 - 2; i++) {
+						Object o = parserList.get(i);
+						if (o instanceof DroolsToken) {
+							from += ((DroolsToken) o).getText(); 
+						}
+						if (i < index2 - 3) {
+							from += " ";
+						}
+					}
+					location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, from);
+				}
+				from = "";
+				if (index3 != -1 && index4 != -1) {
+					for (i = index3 + 1; i < index4 - 2; i++) {
+						Object o = parserList.get(i);
+						if (o instanceof DroolsToken) {
+							from += ((DroolsToken) o).getText(); 
+						}
+						if (i < index4 - 3) {
+							from += " ";
+						}
+					}
+					location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, from);
+				}
+				from = "";
+				i = locationIndex + 1;
+				while (i < parserList.size()) {
+					Object o = parserList.get(i++);
+					if (o instanceof DroolsToken) {
+						from += ((DroolsToken) o).getText(); 
+					}
+					if (i < parserList.size()) {
+						from += " ";
+					}
+				}
+				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, from);
+				break;
 			case Location.LOCATION_RHS:
 				String rhs = "";
 				i = locationIndex + 1;
 				while (i < parserList.size()) {
-					o = parserList.get(i++);
+					Object o = parserList.get(i++);
 					if (o instanceof DroolsToken) {
 						rhs += ((DroolsToken) o).getText(); 
 					}
@@ -243,14 +309,36 @@
 				location.setProperty(Location.LOCATION_RHS_CONTENT, rhs);	
 				break;
 			case Location.LOCATION_RULE_HEADER:
-				System.out.println(parserList);
 				String header = "";
 				i = locationIndex + 1;
 				while (i < parserList.size()) {
-					o = parserList.get(i++);
+					Object o = parserList.get(i++);
 					if (o instanceof DroolsToken) {
 						header += ((DroolsToken) o).getText(); 
 					}
+				}
+				location.setProperty(Location.LOCATION_HEADER_CONTENT, header);
+				break;
+			case Location.LOCATION_RULE_HEADER_KEYWORD:
+				header = "";
+				index = findToken(Location.LOCATION_RULE_HEADER, locationIndex);
+				if (index != -1) {
+					for (i = index + 1; i < locationIndex; i++) {
+						Object o = parserList.get(i);
+						if (o instanceof DroolsToken) {
+							header += ((DroolsToken) o).getText(); 
+						}
+					}
+				}
+				if (locationIndex + 1 < parserList.size()) {
+					header += " ";
+				}
+				i = locationIndex + 1;
+				while (i < parserList.size()) {
+					Object o = parserList.get(i++);
+					if (o instanceof DroolsToken) {
+						header += ((DroolsToken) o).getText(); 
+					}
 					if (i != parserList.size()) {
 						header += " ";
 					}
@@ -261,11 +349,96 @@
 		return location;
 	}
 	
-	public RuleDescr getRule() {
-		// TODO
+	public String getRuleName() {
+		if (parserList.size() >= 2) {
+			Object o = parserList.get(1);
+			if (o instanceof DroolsToken) {
+				String name = ((DroolsToken) o).getText();
+				if (name.startsWith("\"") && (name.endsWith("\""))) {
+					name = name.substring(1, name.length() - 1);
+				}
+				return name;
+			}
+		}
 		return null;
 	}
 	
+	/** 
+	 * Returns the variables defined in the given rule (fragment).
+	 * The key is the name of the variable.
+	 * The value is a list of 2 String:
+	 *  - the first one is the class name of the variable
+	 *  - the second one is the property of the given class that defines the type of this variable,
+	 *    note that this property could be nested,
+	 *    if this property is null then the given class is the type of the variable 
+	 */
+	public Map<String, String[]> getRuleParameters() {
+		Map<String, String[]> result = new HashMap<String, String[]>();
+		int i = 0;
+		int lastLocation = -1;
+		for (Object o: parserList) {
+			if (o instanceof DroolsToken) {
+				DroolsToken token = (DroolsToken) o;
+				if (DroolsEditorType.IDENTIFIER_VARIABLE.equals(token.getEditorType())) {
+					String variableName = token.getText();
+					if (lastLocation == Location.LOCATION_LHS_BEGIN_OF_CONDITION) {
+						int j = i + 2;
+						String className = "";
+						while (j < parserList.size()) {
+							Object obj = parserList.get(j++);
+							if (obj instanceof DroolsToken) {
+								String s = ((DroolsToken) obj).getText();
+								if ("(".equals(s)) {
+									result.put(variableName, new String[] { className, null });
+									break;
+								} else {
+									className += s; 
+								}
+								
+							}
+						}
+					} else if (lastLocation == Location.LOCATION_LHS_INSIDE_CONDITION_START) {
+						int index = findToken(Location.LOCATION_LHS_BEGIN_OF_CONDITION, i);
+						int j = index + 3;
+						String className = "";
+						while (j < i) {
+							Object obj = parserList.get(j++);
+							if (obj instanceof DroolsToken) {
+								String s = ((DroolsToken) obj).getText();
+								if ("(".equals(s)) {
+									break;
+								} else {
+									className += s; 
+								}
+								
+							}
+						}
+						j = i + 2;
+						String propertyName = "";
+						while (j < parserList.size()) {
+							Object obj = parserList.get(j++);
+							if (obj instanceof DroolsToken) {
+								String s = ((DroolsToken) obj).getText();
+								if (",".equals(s) || ")".equals(s)) {
+									result.put(variableName, new String[] { className, propertyName });
+									break;
+								} else {
+									propertyName += s; 
+								}
+							} else {
+								result.put(variableName, new String[] { className, propertyName });
+							}
+						}
+					}
+				}
+			} else if (o instanceof Integer) {
+				lastLocation = (Integer) o;
+			}
+			i++;
+		}
+		return result;
+	}
+
 	private int findToken(String token, int integer, int location) {
 		int index = location - 1;
 		while (index >= 0) {

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	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -551,24 +551,21 @@
                                                       2,
                                                       DROOLS_ICON ) );
                 // add parameters with possibly matching type
-                if ( context.getRule() != null ) {
-                    Map result = new HashMap();
-                    addRuleParameters( result,
-                                       context.getRule().getLhs().getDescrs() );
-                    Iterator iterator2 = result.entrySet().iterator();
-                    while ( iterator2.hasNext() ) {
-                        Map.Entry entry = (Map.Entry) iterator2.next();
-                        String paramName = (String) entry.getKey();
-                        String paramType = (String) entry.getValue();
-                        if ( isSubtypeOf( paramType,
-                                          type ) ) {
-                            RuleCompletionProposal proposal = new RuleCompletionProposal( documentOffset - prefix.length(),
-                                                                                          prefix.length(),
-                                                                                          paramName );
-                            proposal.setPriority( -1 );
-                            proposal.setImage( VARIABLE_ICON );
-                            list.add( proposal );
-                        }
+                Map result = new HashMap();
+                addRuleParameters( result, context.getRuleParameters() );
+                Iterator iterator2 = result.entrySet().iterator();
+                while ( iterator2.hasNext() ) {
+                    Map.Entry entry = (Map.Entry) iterator2.next();
+                    String paramName = (String) entry.getKey();
+                    String paramType = (String) entry.getValue();
+                    if ( isSubtypeOf( paramType,
+                                      type ) ) {
+                        RuleCompletionProposal proposal = new RuleCompletionProposal( documentOffset - prefix.length(),
+                                                                                      prefix.length(),
+                                                                                      paramName );
+                        proposal.setPriority( -1 );
+                        proposal.setImage( VARIABLE_ICON );
+                        list.add( proposal );
                     }
                 }
                 // add globals with possibly matching type
@@ -626,7 +623,7 @@
                     PackageBuilderConfiguration config = new PackageBuilderConfiguration( ProjectClassLoader.getProjectClassLoader( getEditor() ),
                                                                                           null );
                     Map accumulateFunctions = config.getAccumulateFunctionsMap();
-                    for ( Iterator iterator2 = accumulateFunctions.keySet().iterator(); iterator2.hasNext(); ) {
+                    for ( iterator2 = accumulateFunctions.keySet().iterator(); iterator2.hasNext(); ) {
                         String accumulateFunction = (String) iterator2.next();
                         list.add( new RuleCompletionProposal( documentOffset - prefix.length(),
                                                               prefix.length(),
@@ -772,12 +769,7 @@
         if ( context == null ) {
             context = new CompletionContext( backText );
         }
-        if ( context.getRule() == null ) {
-            return result;
-        }
-        // add parameters defined in conditions
-        addRuleParameters( result,
-                           context.getRule().getLhs().getDescrs() );
+        addRuleParameters( result, context.getRuleParameters() );
         return result;
     }
 
@@ -1162,7 +1154,7 @@
 
         String macroMvel = processMacros( mvel );
 
-        String name = context.getRule().getName();
+        String name = context.getRuleName();
         RuleInfo currentRule = getCurrentRule( drlInfo,
                                                name );
         String qName = drlInfo.getPackageName() + "." + currentRule.getRuleName();
@@ -1372,71 +1364,22 @@
         return false;
     }
 
-    private void addRuleParameters(Map result,
-                                   List descrs) {
-        if ( descrs == null ) {
-            return;
-        }
-        Iterator iterator = descrs.iterator();
-        while ( iterator.hasNext() ) {
-            BaseDescr descr = (BaseDescr) iterator.next();
-            addRuleParameters( result,
-                               descr );
-        }
-    }
-
-    private void addRuleParameters(Map result,
-                                   BaseDescr descr) {
-        if ( descr == null ) {
-            return;
-        }
-        if ( descr instanceof PatternDescr ) {
-            String name = ((PatternDescr) descr).getIdentifier();
-            if ( name != null ) {
-                result.put( name,
-                            ((PatternDescr) descr).getObjectType() );
+    private void addRuleParameters(Map<String, String> result,
+                                   Map<String, String[]> ruleParameters) {
+        for (Map.Entry<String, String[]> entry: ruleParameters.entrySet()) {
+            String name = entry.getKey();
+            String clazz = entry.getValue()[0];
+            String field = entry.getValue()[1];
+            String type;
+            if (field == null) {
+            	type = clazz;
+            } else {
+            	type = getPropertyClass( clazz, field );
             }
-            addRuleSubParameters( result,
-                                  ((PatternDescr) descr).getDescrs(),
-                                  ((PatternDescr) descr).getObjectType() );
-        } else if ( descr instanceof AndDescr ) {
-            addRuleParameters( result,
-                               ((AndDescr) descr).getDescrs() );
-        } else if ( descr instanceof OrDescr ) {
-            addRuleParameters( result,
-                               ((OrDescr) descr).getDescrs() );
-        } else if ( descr instanceof ExistsDescr ) {
-            addRuleParameters( result,
-                               ((ExistsDescr) descr).getDescrs() );
-        } else if ( descr instanceof NotDescr ) {
-            addRuleParameters( result,
-                               ((NotDescr) descr).getDescrs() );
+            result.put( name, type );
         }
     }
 
-    private void addRuleSubParameters(Map result,
-                                      List descrs,
-                                      String clazz) {
-        if ( descrs == null ) {
-            return;
-        }
-        Iterator iterator = descrs.iterator();
-        while ( iterator.hasNext() ) {
-            BaseDescr descr = (BaseDescr) iterator.next();
-            if ( descr instanceof FieldBindingDescr ) {
-                FieldBindingDescr fieldDescr = (FieldBindingDescr) descr;
-                String name = fieldDescr.getIdentifier();
-                String field = fieldDescr.getFieldName();
-                String type = getPropertyClass( clazz,
-                                                field );
-                if ( name != null ) {
-                    result.put( name,
-                                type );
-                }
-            }
-        }
-    }
-
     private void addRuleHeaderProposals(List list,
                                         int documentOffset,
                                         String prefix,

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -234,10 +234,12 @@
     		DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource(editor, true, false);
     		if (drlInfo != null) {
 		    	PackageDescr packageDescr = drlInfo.getPackageDescr();
-	    		for (Iterator iterator = packageDescr.getRules().iterator(); iterator.hasNext(); ) {
-	    			RuleDescr ruleDescr = (RuleDescr) iterator.next();
-	    			rules.put(ruleDescr.getName(), ruleDescr);
-	    		}
+		    	if (packageDescr != null) {
+		    		for (Iterator iterator = packageDescr.getRules().iterator(); iterator.hasNext(); ) {
+		    			RuleDescr ruleDescr = (RuleDescr) iterator.next();
+		    			rules.put(ruleDescr.getName(), ruleDescr);
+		    		}	
+		    	}
     		}
     	} catch (DroolsParserException e) {
     		DroolsEclipsePlugin.log(e);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -1,9 +1,11 @@
 package org.drools.eclipse.editors.completion;
 
-import org.drools.lang.Location;
+import java.util.Map;
 
 import junit.framework.TestCase;
 
+import org.drools.lang.Location;
+
 /**
  * Test to check the location determination when doing code completion inside
  * rule condtions.
@@ -13,6 +15,30 @@
  */
 public class CompletionContextTest extends TestCase {
 
+    public void testCheckLHSLocationDetermination_RULE_NAME_1() {
+        String input =
+        	"rule \"MyRule\" ";
+        assertEquals("MyRule", new CompletionContext(input).getRuleName());
+    }
+
+    public void testCheckLHSLocationDetermination_RULE_NAME_2() {
+        String input =
+        	"rule \"MyRule\"";
+        assertEquals("MyRule", new CompletionContext(input).getRuleName());
+    }
+
+    public void testCheckLHSLocationDetermination_RULE_NAME_3() {
+        String input =
+        	"rule MyRule ";
+        assertEquals("MyRule", new CompletionContext(input).getRuleName());
+    }
+	
+    public void testCheckLHSLocationDetermination_RULE_NAME_4() {
+        String input =
+        	"rule MyRule";
+        assertEquals("MyRule", new CompletionContext(input).getRuleName());
+    }
+
     public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION1() {
         String input =
         	"rule MyRule \n" +
@@ -20,6 +46,7 @@
         	"		";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertNull(location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     }
 
     public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION2() {
@@ -30,6 +57,7 @@
         	"		";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertNull(location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     }
 
     public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION3() {
@@ -40,6 +68,7 @@
         	"		";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+        assertNull(location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     }
 
     public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION4() {
@@ -476,7 +505,7 @@
         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));
+        assertEquals("not in", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         }
 
     public void testCheckLHSLocationDetermination_INSIDE_CONDITION_END2() {
@@ -542,7 +571,7 @@
         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));
+        assertEquals("not memberOf", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
         }
 
     public void testCheckLHSLocationDetermination_INSIDE_CONDITION_END4() {
@@ -1430,11 +1459,11 @@
         	"	when \n" +
         	"		Class ( property > 0 ) from accumulate( \n" +
         	"			$cheese : Cheese( type == $likes ), \n" +
-        	"			init( int total = 0; ), \n" +
+        	"			init( int total = 0 ; ), \n" +
         	"			action( ";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
-        assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        assertEquals("int total = 0 ;", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
         assertEquals("", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
         }
 
@@ -1450,7 +1479,7 @@
         	"           result( ";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
-        assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+        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));
         }
@@ -1475,12 +1504,12 @@
         	"	when \n" +
         	"		Class ( property > 0 ) from accumulate( \n" +
         	"			$cheese : Cheese( type == $likes ), \n" +
-        	"			init( int total = 0; ), \n" +
+        	"			init( int total = 0 ; ), \n" +
         	"			action( total += $ch";
         Location location = new CompletionContext(input).getLocation();
         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));
+        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));
         }
 
     // TODO
@@ -1490,14 +1519,14 @@
         	"	when \n" +
         	"		Class ( property > 0 ) from accumulate( \n" +
         	"			$cheese : Cheese( type == $likes ), \n" +
-        	"			init( int total = 0; ), \n" +
+        	"			init( int total = 0 ; ), \n" +
         	"			action( total += $cheese.getPrice(); ), \n" +
-        	"           result( new Integer( tot";
+        	"           result( new Integer ( tot";
         Location location = new CompletionContext(input).getLocation();
         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));
+        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));
         }
 
     public void testCheckLHSLocationDetermination_INSIDE_CONDITION_START() {
@@ -1795,8 +1824,8 @@
         	"rule MyRule \n" +
         	"	salience 12 activation-group \"my";
         Location location = new CompletionContext(input).getLocation();
-        assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
-        assertEquals("salience 12 activation-group \"my", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+        assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+        assertEquals("activation-group", location.getProperty(Location.LOCATION_HEADER_CONTENT));
     }
 
     public void testCheckRuleHeaderLocationDetermination3() {
@@ -1804,7 +1833,7 @@
           "rule \"Hello World\" ruleflow-group \"hello\" s";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
-        assertEquals("ruleflow-group \"hello\" s", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+        assertEquals("s", location.getProperty(Location.LOCATION_HEADER_CONTENT));
     }
 
     public void testCheckRuleHeaderLocationDetermination_dialect1() {
@@ -1813,7 +1842,7 @@
         	"	dialect \"java\"";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
-        assertEquals("dialect \"java\"", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+        assertEquals("", location.getProperty(Location.LOCATION_HEADER_CONTENT));
     }
 
     public void testCheckRuleHeaderLocationDetermination_dialect2() {
@@ -1822,7 +1851,7 @@
         	"	dialect \"mvel\"";
         Location location = new CompletionContext(input).getLocation();
         assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
-        assertEquals("dialect \"mvel\"", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+        assertEquals("", location.getProperty(Location.LOCATION_HEADER_CONTENT));
     }
 
     public void testCheckRuleHeaderLocationDetermination_dialect3() {
@@ -1830,8 +1859,8 @@
         	"rule MyRule \n" +
         	"	dialect ";
         Location location = new CompletionContext(input).getLocation();
-        assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
-        assertEquals("dialect ", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+        assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+        assertEquals("dialect", location.getProperty(Location.LOCATION_HEADER_CONTENT));
     }
 
     public void testCheckRuleHeaderLocationDetermination_dialect4() {
@@ -1839,10 +1868,19 @@
         	"rule MyRule \n" +
         	"	dialect \"";
         Location location = new CompletionContext(input).getLocation();
-        assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
-        assertEquals("dialect \"", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+        assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+        assertEquals("dialect", location.getProperty(Location.LOCATION_HEADER_CONTENT));
     }
 
+    public void testCheckRuleHeaderLocationDetermination_dialect5() {
+        String input  =
+        	"rule MyRule \n" +
+        	"	dialect";
+        Location location = new CompletionContext(input).getLocation();
+        assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+        assertEquals("dialect", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+    }
+
     public void testCheckQueryLocationDetermination_RULE_HEADER1() {
         String input =
         	"query MyQuery ";
@@ -1873,4 +1911,128 @@
         assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
     }
     
+    public void testRuleParameters_PATTERN_1() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class (";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(1, parameters.size());
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+    }
+    
+    public void testRuleParameters_PATTERN_2() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class ( ) \n" +
+        	"	    c2: Class2 ( ) \n" +
+        	"	    l: java.util.List ( ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(3, parameters.size());
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+        assertEquals("Class2", parameters.get("c2")[0]);
+        assertNull(parameters.get("c2")[1]);
+        assertEquals("java.util.List", parameters.get("l")[0]);
+        assertNull(parameters.get("l")[1]);
+    }
+    
+    public void testRuleParameters_PATTERN_3() {
+        String input =
+        	"rule MyRule \n" + 
+        	"	when \n" + 
+        	"		name : Class ( name2: property ) and ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(2, parameters.size());
+        assertEquals("Class", parameters.get("name")[0]);
+        assertNull(parameters.get("name")[1]);
+        assertEquals("Class", parameters.get("name2")[0]);
+        assertEquals("property", parameters.get("name2")[1]);
+    }
+    
+    public void testRuleParameters_PATTERN_4() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class.SubClass (";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(1, parameters.size());
+        assertEquals("Class.SubClass", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+    }
+    
+    public void testRuleParameters_FIELD_1() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class ( param: property, ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(2, parameters.size());
+        assertEquals("Class", parameters.get("param")[0]);
+        assertEquals("property", parameters.get("param")[1]);
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+    }
+
+    public void testRuleParameters_FIELD_2() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class ( param: prop1.prop2.prop3, ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(2, parameters.size());
+        assertEquals("Class", parameters.get("param")[0]);
+        assertEquals("prop1.prop2.prop3", parameters.get("param")[1]);
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+    }
+
+    public void testRuleParameters_FIELD_3() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class ( param: this.prop1[\"key\"], ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(2, parameters.size());
+        assertEquals("Class", parameters.get("param")[0]);
+        assertEquals("this.prop1[\"key\"]", parameters.get("param")[1]);
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+    }
+
+    public void testRuleParameters_FIELD_4() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class ( prop1 > 10, param: prop1, ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(2, parameters.size());
+        assertEquals("Class", parameters.get("param")[0]);
+        assertEquals("prop1", parameters.get("param")[1]);
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+    }
+
+    public void testRuleParameters_FIELD_5() {
+        String input =
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		c: Class ( prop1 > 10, param: prop1 ) \n" +
+        	"   	Class ( ) \n" +
+        	"   	c2: Class2 ( name: name, ";
+        Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+        assertEquals(4, parameters.size());
+        assertEquals("Class", parameters.get("param")[0]);
+        assertEquals("prop1", parameters.get("param")[1]);
+        assertEquals("Class", parameters.get("c")[0]);
+        assertNull(parameters.get("c")[1]);
+        assertEquals("Class2", parameters.get("name")[0]);
+        assertEquals("name", parameters.get("name")[1]);
+        assertEquals("Class2", parameters.get("c2")[0]);
+        assertNull(parameters.get("c2")[1]);
+    }
+ 
+    // TODO: and, or, exists, not
 }
\ No newline at end of file

Deleted: 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	2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java	2008-09-02 12:43:54 UTC (rev 22318)
@@ -1,589 +0,0 @@
-package org.drools.eclipse.editors.completion;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.drools.compiler.DrlParser;
-import org.drools.compiler.DroolsParserException;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.LiteralRestrictionDescr;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.RestrictionConnectiveDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.lang.descr.VariableRestrictionDescr;
-
-/**
- * Test to check the results from parsing incomplete rule fragments.
- *
- * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
- */
-public class IncompleteParsingTest extends TestCase {
-
-	private RuleDescr parseRuleString(String s) {
-		PackageDescr packageDescr = parseString(s);
-		if (packageDescr != null) {
-			List rules = packageDescr.getRules();
-			if (rules != null && rules.size() == 1) {
-				return (RuleDescr) rules.get(0);
-			}
-		}
-		return null;
-	}
-
-	private PackageDescr parseString(String s) {
-		DrlParser parser = new DrlParser();
-		try {
-			return parser.parse(s);
-		} catch (DroolsParserException exc) {
-			exc.printStackTrace();
-		}
-		return null;
-	}
-
-
-    public void testParsingColumn() {
-        String input =
-        	"rule MyRule \n" +
-        	"  when \n" +
-        	"    ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(0, rule.getLhs().getDescrs().size());
-
-
-        /**
-         * This is how the parsed tree should look like:
-         *
-         * RuleDescr
-         *   PatternDescr [objectType = "Class"]
-         *     FieldConstraintDescr [fieldName = "condition"]
-         *       LiteralRestrictionDescr [evaluator = "==", text = "true"]
-         */
-    }
-
-
-    public void testParsingColumn1() {
-        String input =
-        	"rule MyRule \n" +
-        	"  when \n" +
-        	"    Class( condition == true ) \n" +
-        	"    ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertTrue(pattern.getEndLine() != -1 || pattern.getEndColumn() != -1);
-        assertEquals(1, pattern.getDescrs().size());
-        assertEquals(input.indexOf( "Class" ), pattern.getStartCharacter());
-        assertEquals(input.indexOf( "(" ), pattern.getLeftParentCharacter());
-        assertEquals(input.indexOf( ")" ), pattern.getRightParentCharacter());
-        assertEquals(input.indexOf( ")" ), pattern.getEndCharacter());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("condition", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        LiteralRestrictionDescr restriction = (LiteralRestrictionDescr) field.getRestrictions().get(0);
-        assertEquals("==", restriction.getEvaluator());
-        assertEquals("true", restriction.getText());
-    }
-
-
-    public void testParsingColumn2() {
-        String input =
-
-        	"rule MyRule \n" +
-	    	"  when \n" +
-	    	"    class: Class( condition == true, condition2 == null ) \n" +
-	    	"    ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertTrue(pattern.getEndCharacter() != -1);
-    }
-
-
-    public void testParsingColumn3() {
-        String input =
-	    	"rule MyRule \n" +
-	    	"  when \n" +
-	    	"    Cl";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(0, rule.getLhs().getDescrs().size());
-
-    }
-
-
-    public void testParsingColumn4() {
-        String input =
-	    	"rule MyRule \n" +
-	    	"  when \n" +
-	    	"    Class( condition == true ) \n" +
-	    	"    Cl";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertTrue(pattern.getEndCharacter() != -1);
-
-    }
-
-
-    public void testParsingColumn5() {
-        String input =
-			"rule MyRule \n" +
-			"  when \n" +
-			"    class:";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("class", pattern.getIdentifier());
-        assertNull(pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn6() {
-        String input =
-			"rule MyRule \n" +
-			"  when \n" +
-			"    class: Cl";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("class", pattern.getIdentifier());
-        assertEquals("Cl", pattern.getObjectType());
-        assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
-        assertEquals(0, pattern.getDescrs().size());
-        assertEquals(-1, pattern.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn7() {
-        String input =
-			"rule MyRule \n" +
-			"  when \n" +
-			"    class:Cl";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("class", pattern.getIdentifier());
-        assertEquals("Cl", pattern.getObjectType());
-        assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
-        assertEquals(0, pattern.getDescrs().size());
-        assertEquals(-1, pattern.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn8() {
-        /** Inside of condition: start */
-        String input =
-			"rule MyRule \n" +
-			"  when \n" +
-			"    Class (";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
-        assertEquals(0, pattern.getDescrs().size());
-        assertEquals(-1, pattern.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn9() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( na";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals( "na", field.getFieldName() );
-        assertEquals(-1, field.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn10() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( name['xyz'].subname.subsubn";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals( "name['xyz'].subname.subsubn", field.getFieldName() );
-        assertEquals(-1, field.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn11() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( condition == true, ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals(-1, field.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn12() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( c : condition, ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern.getDescrs().get(0);
-        assertEquals(-1, fieldBinding.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn13() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( condition == true, na";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(2, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals(-1, field.getEndCharacter());
-        assertEquals( "condition", field.getFieldName() );
-         field = (FieldConstraintDescr) pattern.getDescrs().get(1);
-        assertEquals( "na", field.getFieldName() );
-        assertEquals(-1, field.getEndCharacter());
-
-    }
-
-
-    public void FAILINGtestParsingColumn14() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( name:";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldBindingDescr binding1 = (FieldBindingDescr) pattern.getDescrs().get(0);
-        assertEquals("name", binding1.getIdentifier());
-        assertNull(binding1.getFieldName());
-
-    }
-
-
-    public void testParsingColumn15() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( property ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("property", field.getFieldName());
-        assertEquals(0, field.getRestrictions().size());
-        assertEquals(-1, field.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn16() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( name: property ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
-        assertEquals("name", binding.getIdentifier());
-        assertEquals("property", binding.getFieldName());
-
-    }
-
-
-    public void testParsingColumn17() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( name1: property1 == \"value1\", name2: property2 ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(3, pattern.getDescrs().size());
-        FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
-        assertEquals("name1", binding.getIdentifier());
-        assertEquals("property1", binding.getFieldName());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(1);
-        assertEquals("property1", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
-        assertEquals("==", literal.getEvaluator());
-        assertEquals("value1", literal.getText());
-        binding = (FieldBindingDescr) pattern.getDescrs().get(2);
-        assertEquals("name2", binding.getIdentifier());
-        assertEquals("property2", binding.getFieldName());
-
-    }
-
-
-    public void testParsingColumn18() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class(name:property==";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(2, pattern.getDescrs().size());
-        FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
-        assertEquals("name", binding.getIdentifier());
-        assertEquals("property", binding.getFieldName());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(1);
-        assertEquals("property", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-
-    }
-
-
-    public void testParsingColumn19() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class( property == otherPropertyN";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("property", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        VariableRestrictionDescr variable = (VariableRestrictionDescr) field.getRestrictions().get(0);
-        assertEquals("==", variable.getEvaluator());
-        assertEquals("otherPropertyN", variable.getIdentifier());
-        assertEquals(-1, field.getEndCharacter());
-    }
-
-
-    public void testParsingColumn20() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class( property == \"someth";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("property", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
-        // KRISV: for now, it would be really messy to make this work. String is a
-        // lexer rule (not parser), and changing that or controling the behavior of it
-        // is not simple. Can we leave the way it is for now?
-        //
-        // TODO literal should be a LiteralRestrictionDescr with filled in evaluator and text, not null
-        // assertEquals("==", literal.getEvaluator());
-        // assertEquals("someth", literal.getText());
-        // TODO this method does not yet exist
-        // assertEquals(-1, field.getEndCharacter());
-
-    }
-
-
-    public void testParsingColumn21() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class( property contains ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("property", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        // KRISV: you are right
-        //
-        // now I would like to access the evaluator 'contains', but this seems
-        // not possible because the parser cannot create this descr yet
-        // since it does not know what class to create (VariableRestrictionDescr
-        // or LiteralRestrictionDescr or ?)
-        // so maybe I should just extract this info myself, based on the
-        // starting character of this FieldConstraintDescr?
-        // TODO this method does not yet exist
-        assertEquals(-1, field.getEndCharacter());
-    }
-
-
-    public void testParsingColumn22() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class( property matches \"someth";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("property", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
-        // KRISV: see comments above
-        //
-        // TODO literal should be a LiteralRestrictionDescr with filled in evaluator and text, not null
-        // assertEquals("matches", literal.getEvaluator());
-        // assertEquals("someth", literal.getText());
-        // TODO this method does not yet exist
-        // assertEquals(-1, field.getEndCharacter());
-    }
-
-
-    public void testParsingColumn23() {
-        String input =
-            "rule MyRule \n" +
-            "   when \n" +
-            "       eval ( ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals(input.indexOf( "eval" ), eval.getStartCharacter());
-        assertEquals(-1, eval.getEndCharacter());
-    }
-
-
-    public void testParsingColumn24() {
-        String input =
-            "rule MyRule \n" +
-            "   when \n" +
-            "       Class ( property > 0 & ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        assertEquals(-1, pattern.getEndCharacter());
-        assertEquals(1, pattern.getDescrs().size());
-        FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
-        assertEquals("property", field.getFieldName());
-        assertEquals(1, field.getRestrictions().size());
-        LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
-        assertEquals(">", literal.getEvaluator());
-        assertEquals("0", literal.getText());
-        RestrictionConnectiveDescr connective = (RestrictionConnectiveDescr) field.getRestriction();
-        assertEquals(RestrictionConnectiveDescr.AND, connective.getConnective());
-    }
-
-
-    public void testParsingColumn25() {
-        String input =
-            "rule MyRule \n" +
-            "   when \n" +
-            "       Class ( ) from a";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals("Class", pattern.getObjectType());
-        FromDescr from = (FromDescr) pattern.getSource();
-        assertEquals(-1, from.getEndCharacter());
-        assertTrue(pattern.getEndCharacter() != -1);
-    }
-
-
-    public void testParsingColumn26() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( property > 0 ) from myGlobal.getList() \n" +
-        	"       ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        FromDescr from = (FromDescr) pattern.getSource();
-        assertTrue(from.getEndCharacter() != -1);
-    }
-
-
-    public void testParsingColumn27() {
-        String input =
-        	"rule MyRule \n" +
-        	"	when \n" +
-        	"		Class ( property > 0 ) from getDroolsFunction() \n" +
-        	"       ";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(1, rule.getLhs().getDescrs().size());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        FromDescr from = (FromDescr) pattern.getSource();
-        assertTrue(from.getEndCharacter() != -1);
-    }
-
-    public void testParsingCharactersStartEnd() {
-        String input =
-        	"package test; \n" +
-        	"rule MyRule \n" +
-        	"  when \n" +
-        	"    Class( condition == true ) \n" +
-        	"  then \n" +
-        	"    System.out.println(\"Done\") \n" +
-        	"end \n";
-        RuleDescr rule = parseRuleString(input);
-        assertEquals(input.indexOf( "rule" ), rule.getStartCharacter());
-        assertEquals(input.indexOf( "end" )+2, rule.getEndCharacter());
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
-        assertEquals(input.indexOf( "Class" ), pattern.getStartCharacter());
-        assertEquals(input.indexOf( "(" ), pattern.getLeftParentCharacter());
-        assertEquals(input.indexOf( ")" ), pattern.getRightParentCharacter());
-        assertEquals(input.indexOf( ")" ), pattern.getEndCharacter());
-    }
-}




More information about the jboss-svn-commits mailing list