[jboss-svn-commits] JBL Code SVN: r5131 - in labs/jbossrules/branches/3.0.x/drools-ide: icons src/main/java/org/drools/ide src/main/java/org/drools/ide/editors/completion src/test/java/org/drools/ide/editors/completion

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 17 19:36:44 EDT 2006


Author: KrisVerlaenen
Date: 2006-07-17 19:36:38 -0400 (Mon, 17 Jul 2006)
New Revision: 5131

Added:
   labs/jbossrules/branches/3.0.x/drools-ide/icons/field_private_obj.gif
Modified:
   labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java
   labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java
   labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java
   labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java
   labs/jbossrules/branches/3.0.x/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java
Log:
JBRULES-376: Add Java code completion for consequences, eval and functions
 - LocationDeterminator updated for better location determination
 - Added support for functions and query
 - Added Java code completion for consequences, eval and functions
 - Fixed minor issue for Column constraints values when using primitive data types

Added: labs/jbossrules/branches/3.0.x/drools-ide/icons/field_private_obj.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/branches/3.0.x/drools-ide/icons/field_private_obj.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java	2006-07-17 22:56:16 UTC (rev 5130)
+++ labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java	2006-07-17 23:36:38 UTC (rev 5131)
@@ -45,6 +45,7 @@
     public static final String CLASS = "Class";
     public static final String PACKAGE = "Package";
     public static final String METHOD = "Method";
+    public static final String VARIABLE = "Variable";
     public static final String DROOLS = "Drools";
     public static final String DSL_EXPRESSION = "DslExpression";
     
@@ -70,6 +71,7 @@
         declareRegistryImage(CLASS, "class_obj.gif");
         declareRegistryImage(PACKAGE, "package_obj.gif");
         declareRegistryImage(METHOD, "methpub_obj.gif");
+        declareRegistryImage(VARIABLE, "field_private_obj.gif");
         declareRegistryImage(DROOLS, "drools.gif");
         declareRegistryImage(DSL_EXPRESSION, "dsl_expression.gif");
     }

Modified: labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java	2006-07-17 22:56:16 UTC (rev 5130)
+++ labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java	2006-07-17 23:36:38 UTC (rev 5131)
@@ -1,21 +1,29 @@
 package org.drools.ide.editors.completion;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang.StringUtils;
 import org.drools.ide.DroolsIDEPlugin;
 import org.drools.ide.DroolsPluginImages;
+import org.drools.ide.editors.DRLRuleEditor;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.CompletionProposal;
 import org.eclipse.jdt.core.CompletionRequestor;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.eval.IEvaluationContext;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.part.EditorPart;
 
 
 /**
@@ -34,11 +42,19 @@
     private static final String NEW_QUERY_TEMPLATE = "query \"query name\"" + System.getProperty("line.separator") + "\t#conditions" + System.getProperty("line.separator") + "end";
     private static final String NEW_FUNCTION_TEMPLATE = "function void yourFunction(Type arg) {" + System.getProperty("line.separator") + "\t/* code goes here*/" + System.getProperty("line.separator") + "}";
     private static final Pattern IMPORT_PATTERN = Pattern.compile(".*\n\\W*import\\W[^;]*", Pattern.DOTALL);
+    // TODO: doesn't work for { inside functions
+    private static final Pattern FUNCTION_PATTERN = Pattern.compile( ".*\n\\W*function\\s+(\\S+)\\s+(\\S+)\\s*\\(([^\\)]*)\\)\\s*\\{([^\\}]*)", Pattern.DOTALL);
+    protected static final Image VARIABLE_ICON = DroolsPluginImages.getImage(DroolsPluginImages.VARIABLE);
+    protected static final Image methodIcon = DroolsPluginImages.getImage(DroolsPluginImages.METHOD);
 
-    public DefaultCompletionProcessor(EditorPart editor) {
+    public DefaultCompletionProcessor(DRLRuleEditor editor) {
     	super(editor);
     }
     
+    protected DRLRuleEditor getDRLEditor() {
+    	return (DRLRuleEditor) getEditor();
+    }
+    
 	protected List getCompletionProposals(ITextViewer viewer, int documentOffset) {
         try {
 	        IDocument doc = viewer.getDocument();
@@ -48,11 +64,20 @@
 	        prefix = stripWhiteSpace(backText);
 	        
 	        List props = null;
-	        if (IMPORT_PATTERN.matcher(backText).matches()) {
+	        Matcher matcher = IMPORT_PATTERN.matcher(backText); 
+	        if (matcher.matches()) {
 	        	String classNameStart = backText.substring(backText.lastIndexOf("import") + 7);
 	        	props = getAllClassProposals(classNameStart, documentOffset);
 	        } else {
-	        	props = getPossibleProposals(viewer, documentOffset, backText, prefix);
+	        	matcher = FUNCTION_PATTERN.matcher(backText);
+	        	if (matcher.matches()) {
+		        	Map params = extractParams(matcher.group(3));
+		        	String functionText = matcher.group(4);
+	        		props = getJavaCompletionProposals(functionText, prefix, params);
+	        		filterProposalsOnPrefix(prefix, props);
+	        	} else {
+	        		props = getPossibleProposals(viewer, documentOffset, backText, prefix);
+	        	}
 	        }
 	        return props;
         } catch (Throwable t) {
@@ -60,6 +85,18 @@
         }
         return null;
 	}
+	
+	private Map extractParams(String params) {
+		Map result = new HashMap();
+		String[] parameters = StringUtils.split(params, ",");
+		for (int i = 0; i < parameters.length; i++) {
+			String[] typeAndName = StringUtils.split(parameters[i]);
+			if (typeAndName.length == 2) {
+				result.put(typeAndName[1], typeAndName[0]);
+			}
+		}
+		return result;
+	}
 
 	private List getAllClassProposals(final String classNameStart, final int documentOffset) {
 		final List list = new ArrayList();
@@ -101,7 +138,7 @@
         list.add(new RuleCompletionProposal(prefix.length(), "global", "global "));
         list.add(new RuleCompletionProposal(prefix.length(), "package", "package "));
         list.add(new RuleCompletionProposal(prefix.length(), "query", NEW_QUERY_TEMPLATE));
-        list.add(new RuleCompletionProposal(prefix.length(), "function", NEW_FUNCTION_TEMPLATE));
+        list.add(new RuleCompletionProposal(prefix.length(), "function", NEW_FUNCTION_TEMPLATE, 14));
         filterProposalsOnPrefix(prefix, list);
         return list;
     }
@@ -114,13 +151,13 @@
      */
     protected String readBackwards(int documentOffset, IDocument doc) throws BadLocationException {
         int startPart = doc.getPartition(documentOffset).getOffset();
-        if (startPart == 0) {
-            if (documentOffset < 32) {
-                startPart = 0;
-            } else {
-                startPart = documentOffset - 32;
-            }
-        }
+//        if (startPart == 0) {
+//            if (documentOffset < 32) {
+//                startPart = 0;
+//            } else {
+//                startPart = documentOffset - 32;
+//            }
+//        }
         
         String prefix = doc.get(startPart, documentOffset - startPart);
         return prefix;
@@ -137,7 +174,7 @@
 	        char[] c = prefix.toCharArray();
 	        int start = 0;
 	        for (int i = c.length - 1; i >=0; i-- ) {
-	            if (Character.isWhitespace(c[i]) || c[i] == '(' || c[i] == ':' || c[i] == '=' || c[i] == '<' || c[i] == '>') {
+	            if (Character.isWhitespace(c[i]) || c[i] == '(' || c[i] == ':' || c[i] == '=' || c[i] == '<' || c[i] == '>' || c[i] == '.' || c[i] == '{' || c[i] == '}') {
 	                start = i + 1;
 	                break;
 	            }
@@ -146,4 +183,58 @@
 	        return prefix;
     	}
     }
+    
+	protected List getJavaCompletionProposals(final String javaText, final String prefix, Map params) {
+		final List list = new ArrayList();
+		IEditorInput input = getEditor().getEditorInput();
+		if (input instanceof IFileEditorInput) {
+			IProject project = ((IFileEditorInput) input).getFile().getProject();
+			IJavaProject javaProject = JavaCore.create(project);
+			
+			CompletionRequestor requestor = new CompletionRequestor() {
+				public void accept(CompletionProposal proposal) {
+					// TODO set other proposal properties too (display name, icon, ...)
+					String completion = new String(proposal.getCompletion());
+					RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), completion);
+					switch (proposal.getKind()) {
+						case CompletionProposal.LOCAL_VARIABLE_REF: 
+							prop.setImage(VARIABLE_ICON);
+							break;
+						case CompletionProposal.METHOD_REF:
+							// TODO: Object methods are proposed when in the start of a line
+							if ("".equals(javaText)) {
+								return;
+							}
+							prop.setImage(methodIcon);
+							break;
+						default:
+					}
+					list.add(prop);
+				}
+			};
+
+			try {
+				IEvaluationContext evalContext = javaProject.newEvaluationContext();
+				List imports = getDRLEditor().getImports();
+				if (imports != null && imports.size() > 0) {
+					evalContext.setImports((String[]) imports.toArray(new String[imports.size()]));
+				}
+				StringBuffer javaTextWithParams = new StringBuffer();
+				Iterator iterator = params.entrySet().iterator();
+				while (iterator.hasNext()) {
+					Map.Entry entry = (Map.Entry) iterator.next();
+					// this does not seem to work, so adding variables manually
+					// evalContext.newVariable((String) entry.getValue(), (String) entry.getKey(), null);
+					javaTextWithParams.append(entry.getValue() + " " + entry.getKey() + ";\n");
+				}
+				javaTextWithParams.append(javaText);
+				String text = javaTextWithParams.toString();
+				evalContext.codeComplete(text, text.length(), requestor);
+			} catch (Throwable t) {
+				DroolsIDEPlugin.log(t);
+			}
+		}
+		return list;
+	}
+
 }

Modified: labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java	2006-07-17 22:56:16 UTC (rev 5130)
+++ labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java	2006-07-17 23:36:38 UTC (rev 5131)
@@ -29,7 +29,7 @@
 
     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 EVAL_PATTERN = Pattern.compile(".*\\s+eval\\s*\\(\\s*([(^\\))(\\([^\\)]*\\)?)]*)", Pattern.DOTALL);
     
 	static final int LOCATION_UNKNOWN = 0;
 	static final int LOCATION_BEGIN_OF_CONDITION = 1;
@@ -46,6 +46,7 @@
 	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";
 	
     private LocationDeterminator() {
 	}
@@ -104,7 +105,10 @@
 				}
 				matcher = EVAL_PATTERN.matcher(backText);
 				if (matcher.matches()) {
-					return new Location(LOCATION_INSIDE_EVAL);
+					String content = matcher.group(1);
+					Location location = new Location(LOCATION_INSIDE_EVAL);
+					location.setProperty(LOCATION_EVAL_CONTENT, content);
+					return location;
 				}
 				return new Location(LOCATION_BEGIN_OF_CONDITION);
 			}

Modified: labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java	2006-07-17 22:56:16 UTC (rev 5130)
+++ labs/jbossrules/branches/3.0.x/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java	2006-07-17 23:36:38 UTC (rev 5131)
@@ -1,4 +1,4 @@
-package org.drools.ide.editors.completion;
+package org.drools.ide.editors.completion; 
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -7,7 +7,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
-import java.util.Map.Entry;
 import java.util.regex.Pattern;
 
 import org.drools.compiler.DrlParser;
@@ -28,17 +27,10 @@
 import org.drools.lang.descr.RuleDescr;
 import org.drools.semantics.java.ClassTypeResolver;
 import org.drools.util.asm.ClassFieldInspector;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jdt.core.CompletionRequestor;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.eval.IEvaluationContext;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.part.FileEditorInput;
 
 /**
@@ -58,17 +50,12 @@
     private static final Pattern query = Pattern.compile(".*\\Wquery\\W.*", Pattern.DOTALL);
     private static final Image droolsIcon = DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
     private static final Image dslIcon = DroolsPluginImages.getImage( DroolsPluginImages.DSL_EXPRESSION );
-    private static final Image methodIcon = DroolsPluginImages.getImage(DroolsPluginImages.METHOD);
     private static final Image classIcon = DroolsPluginImages.getImage(DroolsPluginImages.CLASS);
     
     public RuleCompletionProcessor(DRLRuleEditor editor) {
     	super(editor);
     }
     
-    protected DRLRuleEditor getDRLEditor() {
-    	return (DRLRuleEditor) getEditor();
-    }
-    
 	protected List getCompletionProposals(ITextViewer viewer, final int documentOffset) {
         try {
 	        final List list = new ArrayList();
@@ -83,9 +70,7 @@
 	        	return list;
 	        }
             
-	        if (query(backText)) {
-	            list.addAll(adapter.listConditionItems());
-	        } else if (consequence(backText)) {
+        	if (consequence(backText)) {
 	        	List dslConsequences = adapter.listConsequenceItems();
                 addDSLProposals( list,
                                  prefix,
@@ -102,16 +87,13 @@
         			
         			addRHSJavaCompletionProposals(list, backText, prefix);
 	            }
-	        } else if (condition(backText)) {
+	        } else if (condition(backText) || query(backText)) {
 	        	List dslConditions = adapter.listConditionItems();
-	        	addDSLProposals( list,
-                                 prefix,
-                                 dslConditions );
+	        	addDSLProposals(list, prefix, dslConditions);
 	            addLHSCompletionProposals(viewer, list, adapter, prefix, backText);
 	        } else {             
 	            //we are in rule header
-	            addRuleHeaderItems( list,
-                                    prefix );
+	            addRuleHeaderItems(list, prefix);
 	        }
             
             filterProposalsOnPrefix(prefix, list);
@@ -124,7 +106,6 @@
 
 	private void addLHSCompletionProposals(ITextViewer viewer, final List list, DSLAdapter adapter, final String prefix, String backText) throws CoreException, DroolsParserException {
 		Iterator iterator;
-		Image droolsIcon = DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
 		if (!adapter.hasConditions()) {
 			// determine location in condition
 			LocationDeterminator.Location location = LocationDeterminator.getLocationInCondition(backText);
@@ -276,25 +257,29 @@
 			    	}
 				    break;
 				case LocationDeterminator.LOCATION_INSIDE_EVAL :
+					String content = (String) location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT);
+	    			Map params = new HashMap();
 					try {
 				    	parser = new DrlParser();
 			    		PackageDescr descr = parser.parse(backText);
 			    		List rules = descr.getRules();
 			    		if (rules != null && rules.size() == 1) {
-			    			Map result = new HashMap();
-			    			getRuleParameters(result, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
-			    			Iterator iterator2 = result.keySet().iterator();
-			    			while (iterator2.hasNext()) {
-			    				String name = (String) iterator2.next();
-			    				RuleCompletionProposal proposal = new RuleCompletionProposal(prefix.length(), name);
-			    				proposal.setPriority(-1);
-			    				proposal.setImage(methodIcon);
-								list.add(proposal);
-			    			}
+			    			getRuleParameters(params, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
+			    			// rule params are already added by JavaCompletionProposals
+			    			// 
+			    			// Iterator iterator2 = params.keySet().iterator();
+			    			// while (iterator2.hasNext()) {
+			    			// 	String name = (String) iterator2.next();
+			    			// 	RuleCompletionProposal proposal = new RuleCompletionProposal(prefix.length(), name);
+			    			// 	proposal.setPriority(-1);
+			    			// 	proposal.setImage(methodIcon);
+							// 	list.add(proposal);
+			    			// }
 			    		}
 			    	} catch (DroolsParserException exc) {
 			    		// do nothing
 			    	}
+			    	list.addAll(getJavaCompletionProposals(content, prefix, params));
 			    	break;
 			}
 		}
@@ -324,10 +309,7 @@
 		if (type == null) {
 			return false;
 		}
-		if (type.equals("byte") || type.equals("short")
-				|| type.equals("int") || type.equals("long")
-				|| type.equals("float") || type.equals("double")
-				|| type.equals("char")) {
+		if (isPrimitiveNumericType(type)) {
 			return true;
 		}
 		if (isSubtypeOf(type, "java.lang.Comparable")) {
@@ -336,6 +318,18 @@
 		return false;
 	}
 	
+	private boolean isPrimitiveType(String type) {
+		return isPrimitiveNumericType(type)
+			|| type.equals("boolean");
+	}
+	
+	private boolean isPrimitiveNumericType(String type) {
+		return type.equals("byte") || type.equals("short")
+				|| type.equals("int") || type.equals("long")
+				|| type.equals("float") || type.equals("double")
+				|| type.equals("char");
+	}
+	
 	/**
 	 * Returns true if the first class is the same or a subtype of the second class.
 	 * @param class1
@@ -346,6 +340,9 @@
 		if (class1 == null || class2 == null) {
 			return false;
 		}
+		class1 = convertToNonPrimitiveClass(class1);
+		class2 = convertToNonPrimitiveClass(class2);
+		// TODO add code to take primitive types into account
 		ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
 		try {
 			Class clazz1 = resolver.resolveType(class1);
@@ -359,6 +356,31 @@
 		}
 	}
 	
+	private String convertToNonPrimitiveClass(String clazz) {
+		if (!isPrimitiveType(clazz)) {
+			return clazz;
+		}
+		if ("byte".equals(clazz)) {
+			return "java.lang.Byte";
+		} else if ("short".equals(clazz)) {
+			return "java.lang.Short";
+		} else if ("int".equals(clazz)) {
+			return "java.lang.Integer";
+		} else if ("long".equals(clazz)) {
+			return "java.lang.Long";
+		} else if ("float".equals(clazz)) {
+			return "java.lang.Float";
+		} else if ("double".equals(clazz)) {
+			return "java.lang.Double";
+		} else if ("char".equals(clazz)) {
+			return "java.lang.Char";
+		} else if ("boolean".equals(clazz)) {
+			return "java.lang.Boolean";
+		}
+		// should never occur
+		return null;
+	}
+	
 	private boolean consequence(String backText) {
 		return isKeywordOnLine(backText, "then");
 	}
@@ -420,27 +442,29 @@
     private void addRHSJavaCompletionProposals(List list, String backText, String prefix) {
     	int thenPosition = backText.lastIndexOf("then");
     	String conditions = backText.substring(0, thenPosition);
+		Map params = new HashMap();
     	DrlParser parser = new DrlParser();
     	try {
     		PackageDescr descr = parser.parse(conditions);
     		List rules = descr.getRules();
     		if (rules != null && rules.size() == 1) {
-    			Map result = new HashMap();
-    			getRuleParameters(result, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
-    			Iterator iterator = result.keySet().iterator();
-    			while (iterator.hasNext()) {
-    				String name = (String) iterator.next();
-    				RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), name, name + ".");
-					prop.setPriority(-1);
-					prop.setImage(methodIcon);
-					list.add(prop);
-    			}
+    			getRuleParameters(params, ((RuleDescr) rules.get(0)).getLhs().getDescrs());
+    			// rule params are already added by JavaCompletionProposals
+    			// 
+    			// Iterator iterator = params.keySet().iterator();
+    			// while (iterator.hasNext()) {
+    			// 	String name = (String) iterator.next();
+    			// 	RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), name, name + ".");
+				// 	prop.setPriority(-1);
+				// 	prop.setImage(methodIcon);
+				// 	list.add(prop);
+    			// }
     		}
     	} catch (DroolsParserException exc) {
     		// do nothing
     	}
-    	// String consequence = backText.substring(thenPosition + 4);
-    	// list.addAll(getRHSJavaCompletionProposals(consequence, prefix));
+    	String consequence = backText.substring(thenPosition + 4);
+    	list.addAll(getJavaCompletionProposals(consequence, prefix, params));
     }
     
     private void getRuleParameters(Map result, List descrs) {
@@ -487,35 +511,6 @@
     	}
     }
 
-	private List getRHSJavaCompletionProposals(final String consequenceStart, final String prefix) {
-		final List list = new ArrayList();
-		IEditorInput input = getEditor().getEditorInput();
-		if (input instanceof IFileEditorInput) {
-			IProject project = ((IFileEditorInput) input).getFile().getProject();
-			IJavaProject javaProject = JavaCore.create(project);
-			
-			CompletionRequestor requestor = new CompletionRequestor() {
-				public void accept(org.eclipse.jdt.core.CompletionProposal proposal) {
-					String completion = new String(proposal.getCompletion());
-					RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), completion);
-					list.add(prop);
-				}
-			};
-
-			try {
-				IEvaluationContext evalContext = javaProject.newEvaluationContext();
-				List imports = getDRLEditor().getImports();
-				if (imports != null && imports.size() > 0) {
-					evalContext.setImports((String[]) imports.toArray(new String[imports.size()]));
-				}
-				evalContext.codeComplete(consequenceStart, consequenceStart.length(), requestor);
-			} catch (Throwable t) {
-				DroolsIDEPlugin.log(t);
-			}
-		}
-		return list;
-	}
-			
     private void addRuleHeaderItems(final List list,
                                     final String prefix) {
         list.add(new RuleCompletionProposal(prefix.length(), "salience", "salience ", droolsIcon));

Modified: labs/jbossrules/branches/3.0.x/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java	2006-07-17 22:56:16 UTC (rev 5130)
+++ labs/jbossrules/branches/3.0.x/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java	2006-07-17 23:36:38 UTC (rev 5131)
@@ -739,6 +739,7 @@
         	"		eval ( ";
         location = LocationDeterminator.getLocationInCondition(input);
         assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -746,6 +747,7 @@
         	"		eval(";
         location = LocationDeterminator.getLocationInCondition(input);
         assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
@@ -753,10 +755,51 @@
         	"		eval( myCla";
         location = LocationDeterminator.getLocationInCondition(input);
         assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("myCla", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
+        	"		eval( param.getMetho";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMetho", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getMethod(";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod(", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getMethod().get";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod().get", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getMethod(\"someStringWith)))\").get";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod(\"someStringWith)))\").get", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getMethod(\"someStringWith(((\").get";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("param.getMethod(\"someStringWith(((\").get", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
         	"		eval( true )";
         location = LocationDeterminator.getLocationInCondition(input);
         assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
@@ -764,6 +807,35 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
+        	"		eval( param.getProperty(name).isTrue() )";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getProperty(\"someStringWith(((\").isTrue() )";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getProperty((((String) s) )";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_INSIDE_EVAL, location.getType());
+        assertEquals("param.getProperty((((String) s) )", location.getProperty(LocationDeterminator.LOCATION_EVAL_CONTENT));
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
+        	"		eval( param.getProperty((((String) s))))";
+        location = LocationDeterminator.getLocationInCondition(input);
+        assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+        input = 
+        	"rule MyRule \n" +
+        	"	when \n" +
         	"		eval( true ) \n" +
         	"       ";
         location = LocationDeterminator.getLocationInCondition(input);




More information about the jboss-svn-commits mailing list