[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