Author: KrisVerlaenen
Date: 2006-06-08 15:39:52 -0400 (Thu, 08 Jun 2006)
New Revision: 4679
Modified:
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLAnnotationModel.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLDocumentProvider.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java
labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProposal.java
labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/ContextScanningTest.java
labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java
Log:
JBRULES-284 LHS object type content assistance to include classes that are imported implicitly
- LHS object type content assistance also includes all classes in package of rule and all classes imported using .*
JBRULES-296 Code completion should suggest operators and arguments inside column constraints
- added more advanced location determination and code completion for this
- added unit tests
JBRULES-297 Code completion in RHS (and possibly LHS) of a rule should include already defined variables
- both LHS and RHS code completion suggests all known LHS variables at that point
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -3,7 +3,6 @@
import java.util.HashMap;
import java.util.Map;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint;
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLAnnotationModel.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLAnnotationModel.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLAnnotationModel.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -1,7 +1,5 @@
package org.drools.ide.editors;
-import java.util.Map;
-
import org.drools.ide.DroolsIDEPlugin;
import org.drools.ide.debug.core.IDroolsDebugConstants;
import org.eclipse.core.resources.IMarker;
@@ -23,7 +21,6 @@
return super.createPositionFromMarker(marker);
}
int line = marker.getAttribute(IDroolsDebugConstants.DRL_LINE_NUMBER, -1);
- Map attributes = marker.getAttributes();
try {
return new Position(fDocument.getLineOffset(line - 1));
} catch (BadLocationException exc) {
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLDocumentProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLDocumentProvider.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLDocumentProvider.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -2,12 +2,10 @@
import org.drools.ide.editors.scanners.DRLPartionScanner;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.rules.FastPartitioner;
import org.eclipse.jface.text.source.IAnnotationModel;
-import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.editors.text.TextFileDocumentProvider;
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DRLRuleEditor.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -1,16 +1,28 @@
package org.drools.ide.editors;
+import java.io.Reader;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.builder.DroolsBuilder;
import org.drools.ide.debug.core.IDroolsDebugConstants;
import org.drools.ide.editors.outline.RuleContentOutlinePage;
import org.drools.ide.editors.scanners.RuleEditorMessages;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.PackageDescr;
import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
+import org.eclipse.jdt.core.CompletionRequestor;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
@@ -22,7 +34,10 @@
import org.eclipse.jface.text.source.projection.ProjectionSupport;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
import org.eclipse.ui.texteditor.TextOperationAction;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
@@ -38,6 +53,8 @@
private DSLAdapter dslAdapter;
private List imports;
private List functions;
+ private String packageName;
+ private List classesInPackage;
private RuleContentOutlinePage ruleContentOutline = null;
private Annotation[] oldAnnotations;
@@ -111,22 +128,99 @@
dslAdapter = adapter;
}
- public void setImports(List imports) {
- this.imports = imports;
- }
-
public List getImports() {
+ if (imports == null) {
+ loadImportsAndFunctions();
+ }
return imports;
}
-
- public void setFunctions(List functions) {
- this.functions = functions;
+
+ private void loadImportsAndFunctions() {
+ try {
+ String content = getSourceViewer().getDocument().get();
+ Reader dslReader = DSLAdapter.getDSLContent(content, ((FileEditorInput) getEditorInput()).getFile());
+ DrlParser parser = new DrlParser();
+ PackageDescr descr = DroolsBuilder.parsePackage(content, parser, dslReader);
+ // package
+ this.packageName = descr.getName();
+ // imports
+ List allImports = descr.getImports();
+ this.imports = new ArrayList();
+ Iterator iterator = allImports.iterator();
+ while (iterator.hasNext()) {
+ String importName = (String) iterator.next();
+ if (importName.endsWith(".*")) {
+ String packageName = importName.substring(0, importName.length() - 2);
+ imports.addAll(getAllClassesInPackage(packageName));
+ } else {
+ imports.add(importName);
+ }
+ }
+ // functions
+ List functionDescrs = descr.getFunctions();
+ List functions = new ArrayList(functionDescrs.size());
+ iterator = functionDescrs.iterator();
+ while (iterator.hasNext()) {
+ functions.add(((FunctionDescr) iterator.next()).getName());
+ }
+ this.functions = functions;
+ } catch (CoreException exc) {
+ DroolsIDEPlugin.log(exc);
+ } catch (DroolsParserException exc) {
+ // do nothing
+ }
}
public List getFunctions() {
+ if (functions == null) {
+ loadImportsAndFunctions();
+ }
return functions;
}
+
+ public String getPackage() {
+ if (packageName == null) {
+ loadImportsAndFunctions();
+ }
+ return packageName;
+ }
+
+ public List getClassesInPackage() {
+ if (classesInPackage == null) {
+ classesInPackage = getAllClassesInPackage(getPackage());
+ }
+ return classesInPackage;
+ }
+
+ private List getAllClassesInPackage(String packageName) {
+ final List list = new ArrayList();
+ if (packageName != null) {
+ IEditorInput input = 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 className = new String(proposal.getCompletion());
+ if (proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF) {
+ list.add(className);
+ }
+ // ignore all other proposals
+ }
+ };
+
+ try {
+ javaProject.newEvaluationContext().codeComplete(packageName + ".", packageName.length() + 1, requestor);
+ } catch (Throwable t) {
+ DroolsIDEPlugin.log(t);
+ }
+ }
+ }
+ return list;
+ }
+
public Object getAdapter(Class adapter) {
if (adapter.equals(IContentOutlinePage.class)) {
return getContentOutline();
@@ -156,6 +250,8 @@
dslAdapter = null;
imports = null;
functions = null;
+ packageName = null;
+ classesInPackage = null;
}
public void gotoMarker(IMarker marker) {
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -6,7 +6,6 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.core.model.ILineBreakpoint;
import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/DefaultCompletionProcessor.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -137,7 +137,7 @@
char[] c = prefix.toCharArray();
int start = 0;
for (int i = c.length - 1; i >=0; i-- ) {
- if (Character.isWhitespace(c[i]) || c[i] == '(') {
+ if (Character.isWhitespace(c[i]) || c[i] == '(' || c[i] == ':' || c[i] == '=' || c[i] == '<' || c[i] == '>') {
start = i + 1;
break;
}
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/LocationDeterminator.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -3,6 +3,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
@@ -15,14 +17,24 @@
public class LocationDeterminator {
+ static final Pattern COLUMN_PATTERN_START = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*[^\\s<>!=:]*", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_OPERATOR = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_CONTAINS_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+contains\\s+", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_MATCHES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+matches\\s+", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_EXCLUDES_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s+excludes\\s+", Pattern.DOTALL);
+ static final Pattern COLUMN_PATTERN_COMPARATOR_ARGUMENT = Pattern.compile(".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:]+)\\s*([<>=!]+)\\s*[^\\s<>!=:]*", Pattern.DOTALL);
+
static final int LOCATION_UNKNOWN = 0;
static final int LOCATION_BEGIN_OF_CONDITION = 1;
static final int LOCATION_INSIDE_CONDITION_START = 100;
+ static final int LOCATION_INSIDE_CONDITION_OPERATOR = 101;
+ static final int LOCATION_INSIDE_CONDITION_ARGUMENT = 102;
static final String LOCATION_PROPERTY_CLASS_NAME = "ClassName";
+ static final String LOCATION_PROPERTY_PROPERTY_NAME = "PropertyName";
- private LocationDeterminator() {
+ private LocationDeterminator() {
}
public static class Location {
@@ -52,7 +64,7 @@
PackageDescr packageDescr = parser.parse(backText);
List rules = packageDescr.getRules();
if (rules != null && rules.size() == 1) {
- return determineLocationForDescr((RuleDescr) rules.get(0));
+ return determineLocationForDescr((RuleDescr) rules.get(0), backText);
}
} catch (DroolsParserException exc) {
// do nothing
@@ -60,7 +72,7 @@
return new Location(LOCATION_UNKNOWN);
}
- public static Location determineLocationForDescr(PatternDescr descr) {
+ public static Location determineLocationForDescr(PatternDescr descr, String backText) {
if (descr instanceof RuleDescr) {
RuleDescr ruleDescr = (RuleDescr) descr;
List subDescrs = ruleDescr.getLhs().getDescrs();
@@ -74,10 +86,61 @@
if (subDescr.getEndLine() != 0 || subDescr.getEndColumn() != 0) {
return new Location(LOCATION_BEGIN_OF_CONDITION);
}
- return determineLocationForDescr(subDescr);
+ return determineLocationForDescr(subDescr, backText);
} else if (descr instanceof ColumnDescr) {
+ ColumnDescr columnDescr = (ColumnDescr) descr;
+ // TODO: this is not completely safe, there are rare occasions where this could fail
+ Pattern pattern = Pattern.compile(".*(" + columnDescr.getObjectType() + ")\\s*\\((.*)");
+ Matcher matcher = pattern.matcher(backText);
+ String columnContents = null;
+ while (matcher.find()) {
+ columnContents = "(" + matcher.group(2);
+ }
+ if (columnContents == null) {
+ return new Location(LOCATION_BEGIN_OF_CONDITION);
+ }
+ matcher = COLUMN_PATTERN_OPERATOR.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_OPERATOR);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ return location;
+ }
+ matcher = COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ return location;
+ }
+ matcher = COLUMN_PATTERN_CONTAINS_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ return location;
+ }
+ matcher = COLUMN_PATTERN_EXCLUDES_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ return location;
+ }
+ matcher = COLUMN_PATTERN_MATCHES_ARGUMENT.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_ARGUMENT);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ location.setProperty(LOCATION_PROPERTY_PROPERTY_NAME, matcher.group(3));
+ return location;
+ }
+ matcher = COLUMN_PATTERN_START.matcher(columnContents);
+ if (matcher.matches()) {
+ Location location = new Location(LOCATION_INSIDE_CONDITION_START);
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
+ return location;
+ }
Location location = new Location(LOCATION_INSIDE_CONDITION_START);
- location.setProperty(LOCATION_PROPERTY_CLASS_NAME, ((ColumnDescr) descr).getObjectType());
+ location.setProperty(LOCATION_PROPERTY_CLASS_NAME, columnDescr.getObjectType());
return location;
} else if (descr instanceof ExistsDescr) {
List subDescrs = ((ExistsDescr) descr).getDescrs();
@@ -92,9 +155,9 @@
if (subDescr.getEndLine() != 0 || subDescr.getEndColumn() != 0) {
return new Location(LOCATION_BEGIN_OF_CONDITION);
}
- return determineLocationForDescr(subDescr);
+ return determineLocationForDescr(subDescr, backText);
}
- return determineLocationForDescr(descr);
+ return determineLocationForDescr(descr, backText);
} else if (descr instanceof NotDescr) {
List subDescrs = ((NotDescr) descr).getDescrs();
if (subDescrs.size() == 0) {
@@ -108,9 +171,9 @@
if (subDescr.getEndLine() != 0 || subDescr.getEndColumn() != 0) {
return new Location(LOCATION_BEGIN_OF_CONDITION);
}
- return determineLocationForDescr(subDescr);
+ return determineLocationForDescr(subDescr, backText);
}
- return determineLocationForDescr(descr);
+ return determineLocationForDescr(descr, backText);
}
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -1,7 +1,6 @@
package org.drools.ide.editors.completion;
import java.io.IOException;
-import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -14,13 +13,11 @@
import org.drools.compiler.DroolsParserException;
import org.drools.ide.DroolsIDEPlugin;
import org.drools.ide.DroolsPluginImages;
-import org.drools.ide.builder.DroolsBuilder;
import org.drools.ide.editors.DRLRuleEditor;
import org.drools.ide.editors.DSLAdapter;
import org.drools.ide.util.ProjectClassLoader;
import org.drools.lang.descr.ColumnDescr;
import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.PatternDescr;
import org.drools.lang.descr.RuleDescr;
@@ -98,7 +95,7 @@
list,
prefix );
-// addRHSJavaCompletionProposals(list, backText, prefix);
+ addRHSJavaCompletionProposals(list, backText, prefix);
}
} else if (condition(backText)) {
List dslConditions = adapter.listConditionItems();
@@ -135,23 +132,36 @@
list.add( new RuleCompletionProposal(prefix.length(), "not", "not ", droolsIcon));
list.add( new RuleCompletionProposal(prefix.length(), "and", "and ", droolsIcon));
list.add( new RuleCompletionProposal(prefix.length(), "or", "or ", droolsIcon));
- RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), "eval", "eval()", 5 );
+ RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), "eval", "eval( )", 6 );
prop.setImage(droolsIcon);
list.add(prop);
// and add imported classes
- List imports = getImports(viewer);
+ List imports = getDRLEditor().getImports();
iterator = imports.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
int index = name.lastIndexOf(".");
if (index != -1) {
String className = name.substring(index + 1);
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), className, className + "()", className.length() + 1);
+ RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), className, className + "( )", className.length() + 2);
p.setPriority(-1);
p.setImage(classIcon);
list.add(p);
}
}
+ List classesInPackage = getDRLEditor().getClassesInPackage();
+ iterator = classesInPackage.iterator();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next();
+ int index = name.lastIndexOf(".");
+ if (index != -1) {
+ String className = name.substring(index + 1);
+ RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), className, className + "( )", className.length() + 2);
+ p.setPriority(-1);
+ p.setImage(classIcon);
+ list.add(p);
+ }
+ }
prop = new RuleCompletionProposal(prefix.length(), "then", "then" + System.getProperty("line.separator") + "\t");
prop.setImage(droolsIcon);
list.add(prop);
@@ -159,14 +169,14 @@
case LocationDeterminator.LOCATION_INSIDE_CONDITION_START :
String className = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
if (className != null) {
- ClassTypeResolver resolver = new ClassTypeResolver(getImports(viewer), ProjectClassLoader.getProjectClassLoader(getEditor()));
+ ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(className);
if (clazz != null) {
Iterator iterator2 = new ClassFieldInspector(clazz).getFieldNames().keySet().iterator();
while (iterator2.hasNext()) {
String name = (String) iterator2.next();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), name);
+ RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), name, name + " ");
p.setImage(methodIcon);
list.add(p);
}
@@ -178,6 +188,73 @@
}
}
break;
+ case LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR :
+ list.add( new RuleCompletionProposal(prefix.length(), "<", "< ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "<=", "<= ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), ">", "> ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), ">=", ">= ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "==", "== ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "!=", "!= ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "matches", "matches ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "contains", "contains ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "excludes", "excludes ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), ":", ": ", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "->", "-> ( )", 5, droolsIcon));
+ break;
+ case LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT :
+ // determine type
+ className = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME);
+ String property = (String) location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME);
+ String type = null;
+ if (className != null) {
+ ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor().getImports(), ProjectClassLoader.getProjectClassLoader(getEditor()));
+ try {
+ Class clazz = resolver.resolveType(className);
+ if (clazz != null) {
+ Class clazzz = (Class) new ClassFieldInspector(clazz).getFieldTypes().get(property);
+ if (clazzz != null) {
+ type = clazzz.getName();
+ }
+ }
+ } catch (IOException exc) {
+ // Do nothing
+ } catch (ClassNotFoundException exc) {
+ // Do nothing
+ }
+ }
+
+ list.add( new RuleCompletionProposal(prefix.length(), "null", "null", droolsIcon));
+ if (type == null || "boolean".equals(type)) {
+ list.add( new RuleCompletionProposal(prefix.length(), "true", "true", droolsIcon));
+ list.add( new RuleCompletionProposal(prefix.length(), "false", "false", droolsIcon));
+ }
+ if (type == null || "java.lang.String".equals(type)) {
+ list.add( new RuleCompletionProposal(prefix.length(), "\"\"", "\"\"", 1, droolsIcon));
+ }
+ if (type == null || "java.util.Date".equals(type)) {
+ list.add( new RuleCompletionProposal(prefix.length(), "\"dd-mmm-yyyy\"", "\"dd-mmm-yyyy\"", 1, droolsIcon));
+ }
+ list.add( new RuleCompletionProposal(prefix.length(), "()", "( )", 2, droolsIcon));
+ DrlParser parser = new DrlParser();
+ try {
+ 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);
+ }
+ }
+ } catch (DroolsParserException exc) {
+ // do nothing
+ }
+ break;
}
}
}
@@ -213,7 +290,7 @@
DroolsParserException {
Iterator iterator;
RuleCompletionProposal prop;
- List functions = getFunctions(viewer);
+ List functions = getDRLEditor().getFunctions();
iterator = functions.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next() + "()";
@@ -262,8 +339,8 @@
} catch (DroolsParserException exc) {
// do nothing
}
- String consequence = backText.substring(thenPosition + 4);
- list.addAll(getRHSJavaCompletionProposals(consequence, prefix));
+ // String consequence = backText.substring(thenPosition + 4);
+ // list.addAll(getRHSJavaCompletionProposals(consequence, prefix));
}
private void getRuleParameters(Map result, List descrs) {
@@ -361,39 +438,4 @@
return adapter;
}
- private List getImports(ITextViewer viewer) throws CoreException, DroolsParserException {
- List imports = getDRLEditor().getImports();
- if (imports == null) {
- loadImportsAndFunctions(viewer);
- imports = getDRLEditor().getImports();
- }
- return imports;
- }
-
- private void loadImportsAndFunctions(ITextViewer viewer) throws CoreException, DroolsParserException {
- String content = viewer.getDocument().get();
- Reader dslReader = DSLAdapter.getDSLContent(content, ((FileEditorInput) getEditor().getEditorInput()).getFile());
- DrlParser parser = new DrlParser();
- PackageDescr descr = DroolsBuilder.parsePackage(content, parser, dslReader);
- // imports
- getDRLEditor().setImports(descr.getImports());
- // functions
- List functionDescrs = descr.getFunctions();
- List functions = new ArrayList(functionDescrs.size());
- Iterator iterator = functionDescrs.iterator();
- while (iterator.hasNext()) {
- functions.add(((FunctionDescr) iterator.next()).getName());
- }
- getDRLEditor().setFunctions(functions);
- }
-
- private List getFunctions(ITextViewer viewer) throws CoreException, DroolsParserException {
- List functions = getDRLEditor().getFunctions();
- if (functions == null) {
- loadImportsAndFunctions(viewer);
- functions = getDRLEditor().getFunctions();
- }
- return functions;
- }
-
}
Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProposal.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProposal.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProposal.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -30,18 +30,21 @@
}
/** Also allows an icon to be used */
- public RuleCompletionProposal(int replacementLength, String display, String content, Image icon) {
- this(replacementLength, display, content, content.length());
- this.image = icon;
-
+ public RuleCompletionProposal(int replacementLength, String display, String content, Image image) {
+ this(replacementLength, display, content, content.length(), image);
}
+ public RuleCompletionProposal(int replacementLength, String display, String content, int cursorPosition) {
+ this(replacementLength, display, content, cursorPosition, null);
+ }
+
/** This is used when a different display value is shown to what is put in when selected. */
- public RuleCompletionProposal(int replacementLength, String display, String content, int cursorPosition) {
+ public RuleCompletionProposal(int replacementLength, String display, String content, int cursorPosition, Image image) {
this.replacementLength = replacementLength;
this.content = content;
this.display = display;
this.cursorPosition = cursorPosition;
+ this.image = image;
}
public String getContent() {
Modified: labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/ContextScanningTest.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/ContextScanningTest.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/ContextScanningTest.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -1,11 +1,8 @@
package org.drools.ide.editors.completion;
-import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.drools.ide.editors.DRLRuleEditor;
-
import junit.framework.TestCase;
public class ContextScanningTest extends TestCase {
Modified: labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java 2006-06-08 18:47:25 UTC (rev 4678)
+++ labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/LocationDeterminatorTest.java 2006-06-08 19:39:52 UTC (rev 4679)
@@ -17,6 +17,50 @@
*/
public class LocationDeterminatorTest extends TestCase {
+ public void testColumnOperatorPattern() {
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name : property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("(name:property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name:property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name:property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name : property ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property1 == \"value\", property2 ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property1 == \"value\", name : property2 ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property1 == \"value\", name:property2 ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property1 == \"value\", name : property2 ").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("(prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name:prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("(name:prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name : prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name : prop").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property <= ").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( name : property == ").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("(property==").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property contains ").matches());
+ assertFalse(LocationDeterminator.COLUMN_PATTERN_OPERATOR.matcher("( property1 == \"value\", property2 >= ").matches());
+ }
+
+ public void testColumnArgumentPattern() {
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property == ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property >= ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("(property== ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property == ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( name : property == ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("(name:property== ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( name : property == ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property1 == \"value\", property2 == ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property1 == \"value\",property2== ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property1 == \"value\", property2 == ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("( property == otherProp").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_COMPARATOR_ARGUMENT.matcher("(property==otherProp").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_CONTAINS_ARGUMENT.matcher("( property contains ").matches());
+ assertTrue(LocationDeterminator.COLUMN_PATTERN_EXCLUDES_ARGUMENT.matcher("( property excludes ").matches());
+ }
+
public void testCheckLocationDetermination() {
String input =
"rule MyRule \n" +
@@ -44,7 +88,6 @@
input =
"rule MyRule \n" +
" when \n" +
- " Class( condition == true ) \n" +
" Cl";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
@@ -52,6 +95,7 @@
input =
"rule MyRule \n" +
" when \n" +
+ " Class( condition == true ) \n" +
" Cl";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
@@ -59,6 +103,21 @@
input =
"rule MyRule \n" +
" when \n" +
+ " class: Cl";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " class:Cl";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_BEGIN_OF_CONDITION, location.getType());
+
+ /** Inside of condition: start */
+ input =
+ "rule MyRule \n" +
+ " when \n" +
" Class (";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
@@ -67,6 +126,14 @@
input =
"rule MyRule \n" +
" when \n" +
+ " Class ( na";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
" Class ( condition == true, ";
location = LocationDeterminator.getLocationInCondition(input);
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
@@ -75,6 +142,14 @@
input =
"rule MyRule \n" +
" when \n" +
+ " Class ( condition == true, na";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
" Class ( \n" +
" ";
location = LocationDeterminator.getLocationInCondition(input);
@@ -90,6 +165,177 @@
assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name : ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name: ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name:";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_START, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ /** Inside of condition: Operator */
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class(property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name : property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class (name:property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class (name:property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name1 : property1, name : property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name1 : property1 == \"value\", name : property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name1 : property1 == \"value\",property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name1 : property1, \n" +
+ " name : property ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_OPERATOR, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+
+ /** Inside of condition: argument */
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property == ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property== ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name : property == ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name:property == ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( name1 : property1, property2 == ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property2", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class (name:property== ";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property == otherPropertyN";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
+ input =
+ "rule MyRule \n" +
+ " when \n" +
+ " Class ( property == \"someth";
+ location = LocationDeterminator.getLocationInCondition(input);
+ assertEquals(LocationDeterminator.LOCATION_INSIDE_CONDITION_ARGUMENT, location.getType());
+ assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
+ assertEquals("property", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_PROPERTY_NAME));
+
/** EXISTS */
input =
"rule MyRule \n" +
|