[jboss-svn-commits] JBL Code SVN: r22318 - in labs/jbossrules/trunk/drools-eclipse: drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 2 08:43:54 EDT 2008
Author: KrisVerlaenen
Date: 2008-09-02 08:43:54 -0400 (Tue, 02 Sep 2008)
New Revision: 22318
Removed:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java
Modified:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java
Log:
JBRULES-1750: Update IDE to new parser
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -34,9 +34,6 @@
if (sourcePathName == null || "".equals(sourcePathName)) {
throw new IllegalArgumentException("Invalid sourcePathName " + sourcePathName);
}
- if (packageDescr == null) {
- throw new IllegalArgumentException("Null packageDescr");
- }
this.sourcePathName = sourcePathName;
this.packageDescr = packageDescr;
this.parserErrors =
@@ -76,7 +73,7 @@
}
public String getPackageName() {
- return packageDescr.getName();
+ return packageDescr == null ? null : packageDescr.getName();
}
public boolean isCompiled() {
@@ -86,10 +83,12 @@
public RuleInfo[] getRuleInfos() {
if (ruleInfos == null) {
List<RuleInfo> ruleInfosList = new ArrayList<RuleInfo>();
- for (RuleDescr ruleDescr: packageDescr.getRules()) {
- RuleInfo ruleInfo = new RuleInfo(ruleDescr);
- ruleInfosList.add(ruleInfo);
- }
+ if (packageDescr != null) {
+ for (RuleDescr ruleDescr: packageDescr.getRules()) {
+ RuleInfo ruleInfo = new RuleInfo(ruleDescr);
+ ruleInfosList.add(ruleInfo);
+ }
+ }
ruleInfos = (RuleInfo[]) ruleInfosList.toArray(new RuleInfo[0]);
}
return ruleInfos;
@@ -133,7 +132,7 @@
break;
}
}
- if (dialectName == null) {
+ if (dialectName == null && packageDescr != null) {
for (AttributeDescr attribute: DRLInfo.this.packageDescr.getAttributes()) {
if ("dialect".equals(attribute.getName())) {
dialectName = (String) attribute.getValue();
@@ -162,7 +161,8 @@
throw new IllegalArgumentException("Package has not been compiled");
}
if (className == null) {
- className = getPackageName() + "." + ruleDescr.getClassName();
+ String packageName = getPackageName();
+ className = (packageName == null ? "" : packageName + ".") + ruleDescr.getClassName();
}
return className;
}
@@ -190,7 +190,7 @@
}
public String getPackageName() {
- return packageDescr.getName();
+ return packageDescr == null ? null : packageDescr.getName();
}
public String getRuleName() {
@@ -201,10 +201,12 @@
public FunctionInfo[] getFunctionInfos() {
if (functionInfos == null) {
List<FunctionInfo> functionInfosList = new ArrayList<FunctionInfo>();
- for (FunctionDescr functionDescr: packageDescr.getFunctions()) {
- FunctionInfo functionInfo = new FunctionInfo(functionDescr);
- functionInfosList.add(functionInfo);
- }
+ if (packageDescr != null) {
+ for (FunctionDescr functionDescr: packageDescr.getFunctions()) {
+ FunctionInfo functionInfo = new FunctionInfo(functionDescr);
+ functionInfosList.add(functionInfo);
+ }
+ }
functionInfos = (FunctionInfo[]) functionInfosList.toArray(new FunctionInfo[0]);
}
return functionInfos;
@@ -269,7 +271,7 @@
}
public String getPackageName() {
- return packageDescr.getName();
+ return packageDescr == null ? null : packageDescr.getName();
}
public String getFunctionName() {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -385,10 +385,9 @@
if ( packageDescr == null ) {
if ( dslReader != null ) {
- packageDescr = parser.parse( content,
- dslReader );
+ packageDescr = parser.parse( true, content, dslReader );
} else {
- packageDescr = parser.parse( content );
+ packageDescr = parser.parse( true, content );
}
parserErrors = parser.getErrors();
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -1,16 +1,18 @@
package org.drools.eclipse.editors.completion;
+import java.util.HashMap;
import java.util.LinkedList;
+import java.util.Map;
import java.util.regex.Pattern;
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import org.drools.lang.DRLLexer;
import org.drools.lang.DRLParser;
+import org.drools.lang.DroolsEditorType;
import org.drools.lang.DroolsToken;
import org.drools.lang.DroolsTreeAdaptor;
import org.drools.lang.Location;
-import org.drools.lang.descr.RuleDescr;
/**
* A utility class that invokes the DRLParser on some partial drl text, and
@@ -122,33 +124,43 @@
} else {
propertyName += token;
}
+ } else {
+ break;
}
}
location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
}
break;
case Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT:
- index = findToken("(", Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
- if (index != -1) {
- Object o = parserList.get(index - 1);
+ int index1 = findToken("(", Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
+ int index2 = findToken(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, locationIndex);
+ int index3 = findToken(Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
+ if (index1 != -1 && index2 != -1) {
+ Object o = parserList.get(index1 - 1);
if (o instanceof DroolsToken) {
String className = ((DroolsToken) o).getText();
location.setProperty(Location.LOCATION_PROPERTY_CLASS_NAME, className);
}
}
- Object o = parserList.get(locationIndex - 1);
- if (o instanceof DroolsToken) {
- location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, ((DroolsToken) o).getText());
+ String operator = "";
+ for (i = index2 + 1; i < locationIndex; i++) {
+ Object o = parserList.get(i);
+ if (o instanceof DroolsToken) {
+ operator += ((DroolsToken) o).getText();
+ }
+ if (i < locationIndex - 1) {
+ operator += " ";
+ }
}
+ location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, operator);
propertyName = null;
- index = findToken(Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex - 1);
- if (index != -1) {
- if (index + 1 < locationIndex - 1) {
+ if (index1 != -1) {
+ if (index3 + 1 < locationIndex - 1) {
propertyName = "";
}
- i = index + 1;
+ i = index3 + 1;
while (i < locationIndex - 1) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
String token = ((DroolsToken) o).getText();
if (":".equals(token)) {
@@ -156,6 +168,8 @@
} else {
propertyName += token;
}
+ } else {
+ break;
}
}
location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, propertyName);
@@ -164,7 +178,7 @@
case Location.LOCATION_LHS_INSIDE_CONDITION_END:
index = findToken("(", Location.LOCATION_LHS_INSIDE_CONDITION_START, locationIndex);
if (index != -1) {
- o = parserList.get(index - 1);
+ Object o = parserList.get(index - 1);
if (o instanceof DroolsToken) {
String className = ((DroolsToken) o).getText();
location.setProperty(Location.LOCATION_PROPERTY_CLASS_NAME, className);
@@ -175,7 +189,7 @@
String eval = "";
i = locationIndex + 2;
while (i < parserList.size()) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
eval += ((DroolsToken) o).getText();
}
@@ -189,7 +203,7 @@
}
i = locationIndex + 1;
while (i < parserList.size()) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
from += ((DroolsToken) o).getText();
}
@@ -197,45 +211,97 @@
location.setProperty(Location.LOCATION_FROM_CONTENT, from);
break;
case Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE:
- System.out.println(parserList);
from = "";
i = locationIndex + 1;
while (i < parserList.size()) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
from += ((DroolsToken) o).getText();
}
+ if (i < parserList.size()) {
+ from += " ";
+ }
}
location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, from);
break;
case Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE:
- System.out.println(parserList);
from = "";
index = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, locationIndex);
- if (index != -1) {
- for (i = index + 1; i < locationIndex - 1; i++) {
- o = parserList.get(i);
+ index2 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION, locationIndex);
+ if (index != -1 && index2 != -1) {
+ for (i = index + 1; i < index2 - 2; i++) {
+ Object o = parserList.get(i);
if (o instanceof DroolsToken) {
from += ((DroolsToken) o).getText();
}
+ if (i < index2 - 3) {
+ from += " ";
+ }
}
location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, from);
}
from = "";
i = locationIndex + 1;
while (i < parserList.size()) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
from += ((DroolsToken) o).getText();
}
+ if (i < parserList.size()) {
+ from += " ";
+ }
}
location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, from);
break;
+ case Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE:
+ from = "";
+ index = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE, locationIndex);
+ index2 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION, locationIndex);
+ index3 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, locationIndex);
+ int index4 = findToken(Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE, locationIndex);
+ if (index != -1 && index2 != -1) {
+ for (i = index + 1; i < index2 - 2; i++) {
+ Object o = parserList.get(i);
+ if (o instanceof DroolsToken) {
+ from += ((DroolsToken) o).getText();
+ }
+ if (i < index2 - 3) {
+ from += " ";
+ }
+ }
+ location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, from);
+ }
+ from = "";
+ if (index3 != -1 && index4 != -1) {
+ for (i = index3 + 1; i < index4 - 2; i++) {
+ Object o = parserList.get(i);
+ if (o instanceof DroolsToken) {
+ from += ((DroolsToken) o).getText();
+ }
+ if (i < index4 - 3) {
+ from += " ";
+ }
+ }
+ location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, from);
+ }
+ from = "";
+ i = locationIndex + 1;
+ while (i < parserList.size()) {
+ Object o = parserList.get(i++);
+ if (o instanceof DroolsToken) {
+ from += ((DroolsToken) o).getText();
+ }
+ if (i < parserList.size()) {
+ from += " ";
+ }
+ }
+ location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, from);
+ break;
case Location.LOCATION_RHS:
String rhs = "";
i = locationIndex + 1;
while (i < parserList.size()) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
rhs += ((DroolsToken) o).getText();
}
@@ -243,14 +309,36 @@
location.setProperty(Location.LOCATION_RHS_CONTENT, rhs);
break;
case Location.LOCATION_RULE_HEADER:
- System.out.println(parserList);
String header = "";
i = locationIndex + 1;
while (i < parserList.size()) {
- o = parserList.get(i++);
+ Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
header += ((DroolsToken) o).getText();
}
+ }
+ location.setProperty(Location.LOCATION_HEADER_CONTENT, header);
+ break;
+ case Location.LOCATION_RULE_HEADER_KEYWORD:
+ header = "";
+ index = findToken(Location.LOCATION_RULE_HEADER, locationIndex);
+ if (index != -1) {
+ for (i = index + 1; i < locationIndex; i++) {
+ Object o = parserList.get(i);
+ if (o instanceof DroolsToken) {
+ header += ((DroolsToken) o).getText();
+ }
+ }
+ }
+ if (locationIndex + 1 < parserList.size()) {
+ header += " ";
+ }
+ i = locationIndex + 1;
+ while (i < parserList.size()) {
+ Object o = parserList.get(i++);
+ if (o instanceof DroolsToken) {
+ header += ((DroolsToken) o).getText();
+ }
if (i != parserList.size()) {
header += " ";
}
@@ -261,11 +349,96 @@
return location;
}
- public RuleDescr getRule() {
- // TODO
+ public String getRuleName() {
+ if (parserList.size() >= 2) {
+ Object o = parserList.get(1);
+ if (o instanceof DroolsToken) {
+ String name = ((DroolsToken) o).getText();
+ if (name.startsWith("\"") && (name.endsWith("\""))) {
+ name = name.substring(1, name.length() - 1);
+ }
+ return name;
+ }
+ }
return null;
}
+ /**
+ * Returns the variables defined in the given rule (fragment).
+ * The key is the name of the variable.
+ * The value is a list of 2 String:
+ * - the first one is the class name of the variable
+ * - the second one is the property of the given class that defines the type of this variable,
+ * note that this property could be nested,
+ * if this property is null then the given class is the type of the variable
+ */
+ public Map<String, String[]> getRuleParameters() {
+ Map<String, String[]> result = new HashMap<String, String[]>();
+ int i = 0;
+ int lastLocation = -1;
+ for (Object o: parserList) {
+ if (o instanceof DroolsToken) {
+ DroolsToken token = (DroolsToken) o;
+ if (DroolsEditorType.IDENTIFIER_VARIABLE.equals(token.getEditorType())) {
+ String variableName = token.getText();
+ if (lastLocation == Location.LOCATION_LHS_BEGIN_OF_CONDITION) {
+ int j = i + 2;
+ String className = "";
+ while (j < parserList.size()) {
+ Object obj = parserList.get(j++);
+ if (obj instanceof DroolsToken) {
+ String s = ((DroolsToken) obj).getText();
+ if ("(".equals(s)) {
+ result.put(variableName, new String[] { className, null });
+ break;
+ } else {
+ className += s;
+ }
+
+ }
+ }
+ } else if (lastLocation == Location.LOCATION_LHS_INSIDE_CONDITION_START) {
+ int index = findToken(Location.LOCATION_LHS_BEGIN_OF_CONDITION, i);
+ int j = index + 3;
+ String className = "";
+ while (j < i) {
+ Object obj = parserList.get(j++);
+ if (obj instanceof DroolsToken) {
+ String s = ((DroolsToken) obj).getText();
+ if ("(".equals(s)) {
+ break;
+ } else {
+ className += s;
+ }
+
+ }
+ }
+ j = i + 2;
+ String propertyName = "";
+ while (j < parserList.size()) {
+ Object obj = parserList.get(j++);
+ if (obj instanceof DroolsToken) {
+ String s = ((DroolsToken) obj).getText();
+ if (",".equals(s) || ")".equals(s)) {
+ result.put(variableName, new String[] { className, propertyName });
+ break;
+ } else {
+ propertyName += s;
+ }
+ } else {
+ result.put(variableName, new String[] { className, propertyName });
+ }
+ }
+ }
+ }
+ } else if (o instanceof Integer) {
+ lastLocation = (Integer) o;
+ }
+ i++;
+ }
+ return result;
+ }
+
private int findToken(String token, int integer, int location) {
int index = location - 1;
while (index >= 0) {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -551,24 +551,21 @@
2,
DROOLS_ICON ) );
// add parameters with possibly matching type
- if ( context.getRule() != null ) {
- Map result = new HashMap();
- addRuleParameters( result,
- context.getRule().getLhs().getDescrs() );
- Iterator iterator2 = result.entrySet().iterator();
- while ( iterator2.hasNext() ) {
- Map.Entry entry = (Map.Entry) iterator2.next();
- String paramName = (String) entry.getKey();
- String paramType = (String) entry.getValue();
- if ( isSubtypeOf( paramType,
- type ) ) {
- RuleCompletionProposal proposal = new RuleCompletionProposal( documentOffset - prefix.length(),
- prefix.length(),
- paramName );
- proposal.setPriority( -1 );
- proposal.setImage( VARIABLE_ICON );
- list.add( proposal );
- }
+ Map result = new HashMap();
+ addRuleParameters( result, context.getRuleParameters() );
+ Iterator iterator2 = result.entrySet().iterator();
+ while ( iterator2.hasNext() ) {
+ Map.Entry entry = (Map.Entry) iterator2.next();
+ String paramName = (String) entry.getKey();
+ String paramType = (String) entry.getValue();
+ if ( isSubtypeOf( paramType,
+ type ) ) {
+ RuleCompletionProposal proposal = new RuleCompletionProposal( documentOffset - prefix.length(),
+ prefix.length(),
+ paramName );
+ proposal.setPriority( -1 );
+ proposal.setImage( VARIABLE_ICON );
+ list.add( proposal );
}
}
// add globals with possibly matching type
@@ -626,7 +623,7 @@
PackageBuilderConfiguration config = new PackageBuilderConfiguration( ProjectClassLoader.getProjectClassLoader( getEditor() ),
null );
Map accumulateFunctions = config.getAccumulateFunctionsMap();
- for ( Iterator iterator2 = accumulateFunctions.keySet().iterator(); iterator2.hasNext(); ) {
+ for ( iterator2 = accumulateFunctions.keySet().iterator(); iterator2.hasNext(); ) {
String accumulateFunction = (String) iterator2.next();
list.add( new RuleCompletionProposal( documentOffset - prefix.length(),
prefix.length(),
@@ -772,12 +769,7 @@
if ( context == null ) {
context = new CompletionContext( backText );
}
- if ( context.getRule() == null ) {
- return result;
- }
- // add parameters defined in conditions
- addRuleParameters( result,
- context.getRule().getLhs().getDescrs() );
+ addRuleParameters( result, context.getRuleParameters() );
return result;
}
@@ -1162,7 +1154,7 @@
String macroMvel = processMacros( mvel );
- String name = context.getRule().getName();
+ String name = context.getRuleName();
RuleInfo currentRule = getCurrentRule( drlInfo,
name );
String qName = drlInfo.getPackageName() + "." + currentRule.getRuleName();
@@ -1372,71 +1364,22 @@
return false;
}
- private void addRuleParameters(Map result,
- List descrs) {
- if ( descrs == null ) {
- return;
- }
- Iterator iterator = descrs.iterator();
- while ( iterator.hasNext() ) {
- BaseDescr descr = (BaseDescr) iterator.next();
- addRuleParameters( result,
- descr );
- }
- }
-
- private void addRuleParameters(Map result,
- BaseDescr descr) {
- if ( descr == null ) {
- return;
- }
- if ( descr instanceof PatternDescr ) {
- String name = ((PatternDescr) descr).getIdentifier();
- if ( name != null ) {
- result.put( name,
- ((PatternDescr) descr).getObjectType() );
+ private void addRuleParameters(Map<String, String> result,
+ Map<String, String[]> ruleParameters) {
+ for (Map.Entry<String, String[]> entry: ruleParameters.entrySet()) {
+ String name = entry.getKey();
+ String clazz = entry.getValue()[0];
+ String field = entry.getValue()[1];
+ String type;
+ if (field == null) {
+ type = clazz;
+ } else {
+ type = getPropertyClass( clazz, field );
}
- addRuleSubParameters( result,
- ((PatternDescr) descr).getDescrs(),
- ((PatternDescr) descr).getObjectType() );
- } else if ( descr instanceof AndDescr ) {
- addRuleParameters( result,
- ((AndDescr) descr).getDescrs() );
- } else if ( descr instanceof OrDescr ) {
- addRuleParameters( result,
- ((OrDescr) descr).getDescrs() );
- } else if ( descr instanceof ExistsDescr ) {
- addRuleParameters( result,
- ((ExistsDescr) descr).getDescrs() );
- } else if ( descr instanceof NotDescr ) {
- addRuleParameters( result,
- ((NotDescr) descr).getDescrs() );
+ result.put( name, type );
}
}
- private void addRuleSubParameters(Map result,
- List descrs,
- String clazz) {
- if ( descrs == null ) {
- return;
- }
- Iterator iterator = descrs.iterator();
- while ( iterator.hasNext() ) {
- BaseDescr descr = (BaseDescr) iterator.next();
- if ( descr instanceof FieldBindingDescr ) {
- FieldBindingDescr fieldDescr = (FieldBindingDescr) descr;
- String name = fieldDescr.getIdentifier();
- String field = fieldDescr.getFieldName();
- String type = getPropertyClass( clazz,
- field );
- if ( name != null ) {
- result.put( name,
- type );
- }
- }
- }
- }
-
private void addRuleHeaderProposals(List list,
int documentOffset,
String prefix,
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/outline/RuleContentOutlinePage.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -234,10 +234,12 @@
DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource(editor, true, false);
if (drlInfo != null) {
PackageDescr packageDescr = drlInfo.getPackageDescr();
- for (Iterator iterator = packageDescr.getRules().iterator(); iterator.hasNext(); ) {
- RuleDescr ruleDescr = (RuleDescr) iterator.next();
- rules.put(ruleDescr.getName(), ruleDescr);
- }
+ if (packageDescr != null) {
+ for (Iterator iterator = packageDescr.getRules().iterator(); iterator.hasNext(); ) {
+ RuleDescr ruleDescr = (RuleDescr) iterator.next();
+ rules.put(ruleDescr.getName(), ruleDescr);
+ }
+ }
}
} catch (DroolsParserException e) {
DroolsEclipsePlugin.log(e);
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -1,9 +1,11 @@
package org.drools.eclipse.editors.completion;
-import org.drools.lang.Location;
+import java.util.Map;
import junit.framework.TestCase;
+import org.drools.lang.Location;
+
/**
* Test to check the location determination when doing code completion inside
* rule condtions.
@@ -13,6 +15,30 @@
*/
public class CompletionContextTest extends TestCase {
+ public void testCheckLHSLocationDetermination_RULE_NAME_1() {
+ String input =
+ "rule \"MyRule\" ";
+ assertEquals("MyRule", new CompletionContext(input).getRuleName());
+ }
+
+ public void testCheckLHSLocationDetermination_RULE_NAME_2() {
+ String input =
+ "rule \"MyRule\"";
+ assertEquals("MyRule", new CompletionContext(input).getRuleName());
+ }
+
+ public void testCheckLHSLocationDetermination_RULE_NAME_3() {
+ String input =
+ "rule MyRule ";
+ assertEquals("MyRule", new CompletionContext(input).getRuleName());
+ }
+
+ public void testCheckLHSLocationDetermination_RULE_NAME_4() {
+ String input =
+ "rule MyRule";
+ assertEquals("MyRule", new CompletionContext(input).getRuleName());
+ }
+
public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION1() {
String input =
"rule MyRule \n" +
@@ -20,6 +46,7 @@
" ";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+ assertNull(location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
}
public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION2() {
@@ -30,6 +57,7 @@
" ";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+ assertNull(location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
}
public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION3() {
@@ -40,6 +68,7 @@
" ";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_BEGIN_OF_CONDITION, location.getType());
+ assertNull(location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
}
public void testCheckLHSLocationDetermination_BEGIN_OF_CONDITION4() {
@@ -476,7 +505,7 @@
assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
- assertEquals("in", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
+ assertEquals("not in", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
}
public void testCheckLHSLocationDetermination_INSIDE_CONDITION_END2() {
@@ -542,7 +571,7 @@
assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
assertEquals("property", location.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME));
- assertEquals("memberOf", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
+ assertEquals("not memberOf", location.getProperty(Location.LOCATION_PROPERTY_OPERATOR));
}
public void testCheckLHSLocationDetermination_INSIDE_CONDITION_END4() {
@@ -1430,11 +1459,11 @@
" when \n" +
" Class ( property > 0 ) from accumulate( \n" +
" $cheese : Cheese( type == $likes ), \n" +
- " init( int total = 0; ), \n" +
+ " init( int total = 0 ; ), \n" +
" action( ";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
- assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("int total = 0 ;", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
assertEquals("", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
}
@@ -1450,7 +1479,7 @@
" result( ";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
- assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("int total = 0;", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
assertEquals(" total += $cheese.getPrice(); ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
assertEquals("", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
}
@@ -1475,12 +1504,12 @@
" when \n" +
" Class ( property > 0 ) from accumulate( \n" +
" $cheese : Cheese( type == $likes ), \n" +
- " init( int total = 0; ), \n" +
+ " init( int total = 0 ; ), \n" +
" action( total += $ch";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE, location.getType());
- assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
- assertEquals("total += $ch", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+ assertEquals("int total = 0 ;", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("total + = $ch", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
}
// TODO
@@ -1490,14 +1519,14 @@
" when \n" +
" Class ( property > 0 ) from accumulate( \n" +
" $cheese : Cheese( type == $likes ), \n" +
- " init( int total = 0; ), \n" +
+ " init( int total = 0 ; ), \n" +
" action( total += $cheese.getPrice(); ), \n" +
- " result( new Integer( tot";
+ " result( new Integer ( tot";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE, location.getType());
- assertEquals(" int total = 0; ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
- assertEquals(" total += $cheese.getPrice(); ", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
- assertEquals("new Integer( tot", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
+ assertEquals("int total = 0 ;", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT));
+ assertEquals("total + = $cheese . getPrice ( ) ;", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT));
+ assertEquals("new Integer ( tot", location.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT));
}
public void testCheckLHSLocationDetermination_INSIDE_CONDITION_START() {
@@ -1795,8 +1824,8 @@
"rule MyRule \n" +
" salience 12 activation-group \"my";
Location location = new CompletionContext(input).getLocation();
- assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
- assertEquals("salience 12 activation-group \"my", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+ assertEquals("activation-group", location.getProperty(Location.LOCATION_HEADER_CONTENT));
}
public void testCheckRuleHeaderLocationDetermination3() {
@@ -1804,7 +1833,7 @@
"rule \"Hello World\" ruleflow-group \"hello\" s";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
- assertEquals("ruleflow-group \"hello\" s", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ assertEquals("s", location.getProperty(Location.LOCATION_HEADER_CONTENT));
}
public void testCheckRuleHeaderLocationDetermination_dialect1() {
@@ -1813,7 +1842,7 @@
" dialect \"java\"";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
- assertEquals("dialect \"java\"", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ assertEquals("", location.getProperty(Location.LOCATION_HEADER_CONTENT));
}
public void testCheckRuleHeaderLocationDetermination_dialect2() {
@@ -1822,7 +1851,7 @@
" dialect \"mvel\"";
Location location = new CompletionContext(input).getLocation();
assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
- assertEquals("dialect \"mvel\"", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ assertEquals("", location.getProperty(Location.LOCATION_HEADER_CONTENT));
}
public void testCheckRuleHeaderLocationDetermination_dialect3() {
@@ -1830,8 +1859,8 @@
"rule MyRule \n" +
" dialect ";
Location location = new CompletionContext(input).getLocation();
- assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
- assertEquals("dialect ", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+ assertEquals("dialect", location.getProperty(Location.LOCATION_HEADER_CONTENT));
}
public void testCheckRuleHeaderLocationDetermination_dialect4() {
@@ -1839,10 +1868,19 @@
"rule MyRule \n" +
" dialect \"";
Location location = new CompletionContext(input).getLocation();
- assertEquals(Location.LOCATION_RULE_HEADER, location.getType());
- assertEquals("dialect \"", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+ assertEquals("dialect", location.getProperty(Location.LOCATION_HEADER_CONTENT));
}
+ public void testCheckRuleHeaderLocationDetermination_dialect5() {
+ String input =
+ "rule MyRule \n" +
+ " dialect";
+ Location location = new CompletionContext(input).getLocation();
+ assertEquals(Location.LOCATION_RULE_HEADER_KEYWORD, location.getType());
+ assertEquals("dialect", location.getProperty(Location.LOCATION_HEADER_CONTENT));
+ }
+
public void testCheckQueryLocationDetermination_RULE_HEADER1() {
String input =
"query MyQuery ";
@@ -1873,4 +1911,128 @@
assertEquals("Class", location.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME));
}
+ public void testRuleParameters_PATTERN_1() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class (";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(1, parameters.size());
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ }
+
+ public void testRuleParameters_PATTERN_2() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class ( ) \n" +
+ " c2: Class2 ( ) \n" +
+ " l: java.util.List ( ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(3, parameters.size());
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ assertEquals("Class2", parameters.get("c2")[0]);
+ assertNull(parameters.get("c2")[1]);
+ assertEquals("java.util.List", parameters.get("l")[0]);
+ assertNull(parameters.get("l")[1]);
+ }
+
+ public void testRuleParameters_PATTERN_3() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " name : Class ( name2: property ) and ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(2, parameters.size());
+ assertEquals("Class", parameters.get("name")[0]);
+ assertNull(parameters.get("name")[1]);
+ assertEquals("Class", parameters.get("name2")[0]);
+ assertEquals("property", parameters.get("name2")[1]);
+ }
+
+ public void testRuleParameters_PATTERN_4() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class.SubClass (";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(1, parameters.size());
+ assertEquals("Class.SubClass", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ }
+
+ public void testRuleParameters_FIELD_1() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class ( param: property, ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(2, parameters.size());
+ assertEquals("Class", parameters.get("param")[0]);
+ assertEquals("property", parameters.get("param")[1]);
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ }
+
+ public void testRuleParameters_FIELD_2() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class ( param: prop1.prop2.prop3, ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(2, parameters.size());
+ assertEquals("Class", parameters.get("param")[0]);
+ assertEquals("prop1.prop2.prop3", parameters.get("param")[1]);
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ }
+
+ public void testRuleParameters_FIELD_3() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class ( param: this.prop1[\"key\"], ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(2, parameters.size());
+ assertEquals("Class", parameters.get("param")[0]);
+ assertEquals("this.prop1[\"key\"]", parameters.get("param")[1]);
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ }
+
+ public void testRuleParameters_FIELD_4() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class ( prop1 > 10, param: prop1, ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(2, parameters.size());
+ assertEquals("Class", parameters.get("param")[0]);
+ assertEquals("prop1", parameters.get("param")[1]);
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ }
+
+ public void testRuleParameters_FIELD_5() {
+ String input =
+ "rule MyRule \n" +
+ " when \n" +
+ " c: Class ( prop1 > 10, param: prop1 ) \n" +
+ " Class ( ) \n" +
+ " c2: Class2 ( name: name, ";
+ Map<String, String[]> parameters = new CompletionContext(input).getRuleParameters();
+ assertEquals(4, parameters.size());
+ assertEquals("Class", parameters.get("param")[0]);
+ assertEquals("prop1", parameters.get("param")[1]);
+ assertEquals("Class", parameters.get("c")[0]);
+ assertNull(parameters.get("c")[1]);
+ assertEquals("Class2", parameters.get("name")[0]);
+ assertEquals("name", parameters.get("name")[1]);
+ assertEquals("Class2", parameters.get("c2")[0]);
+ assertNull(parameters.get("c2")[1]);
+ }
+
+ // TODO: and, or, exists, not
}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java 2008-09-02 12:30:34 UTC (rev 22317)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/IncompleteParsingTest.java 2008-09-02 12:43:54 UTC (rev 22318)
@@ -1,589 +0,0 @@
-package org.drools.eclipse.editors.completion;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.drools.compiler.DrlParser;
-import org.drools.compiler.DroolsParserException;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.LiteralRestrictionDescr;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.RestrictionConnectiveDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.lang.descr.VariableRestrictionDescr;
-
-/**
- * Test to check the results from parsing incomplete rule fragments.
- *
- * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
- */
-public class IncompleteParsingTest extends TestCase {
-
- private RuleDescr parseRuleString(String s) {
- PackageDescr packageDescr = parseString(s);
- if (packageDescr != null) {
- List rules = packageDescr.getRules();
- if (rules != null && rules.size() == 1) {
- return (RuleDescr) rules.get(0);
- }
- }
- return null;
- }
-
- private PackageDescr parseString(String s) {
- DrlParser parser = new DrlParser();
- try {
- return parser.parse(s);
- } catch (DroolsParserException exc) {
- exc.printStackTrace();
- }
- return null;
- }
-
-
- public void testParsingColumn() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(0, rule.getLhs().getDescrs().size());
-
-
- /**
- * This is how the parsed tree should look like:
- *
- * RuleDescr
- * PatternDescr [objectType = "Class"]
- * FieldConstraintDescr [fieldName = "condition"]
- * LiteralRestrictionDescr [evaluator = "==", text = "true"]
- */
- }
-
-
- public void testParsingColumn1() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class( condition == true ) \n" +
- " ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertTrue(pattern.getEndLine() != -1 || pattern.getEndColumn() != -1);
- assertEquals(1, pattern.getDescrs().size());
- assertEquals(input.indexOf( "Class" ), pattern.getStartCharacter());
- assertEquals(input.indexOf( "(" ), pattern.getLeftParentCharacter());
- assertEquals(input.indexOf( ")" ), pattern.getRightParentCharacter());
- assertEquals(input.indexOf( ")" ), pattern.getEndCharacter());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("condition", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- LiteralRestrictionDescr restriction = (LiteralRestrictionDescr) field.getRestrictions().get(0);
- assertEquals("==", restriction.getEvaluator());
- assertEquals("true", restriction.getText());
- }
-
-
- public void testParsingColumn2() {
- String input =
-
- "rule MyRule \n" +
- " when \n" +
- " class: Class( condition == true, condition2 == null ) \n" +
- " ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertTrue(pattern.getEndCharacter() != -1);
- }
-
-
- public void testParsingColumn3() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Cl";
- RuleDescr rule = parseRuleString(input);
- assertEquals(0, rule.getLhs().getDescrs().size());
-
- }
-
-
- public void testParsingColumn4() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class( condition == true ) \n" +
- " Cl";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertTrue(pattern.getEndCharacter() != -1);
-
- }
-
-
- public void testParsingColumn5() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " class:";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("class", pattern.getIdentifier());
- assertNull(pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
-
- }
-
-
- public void testParsingColumn6() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " class: Cl";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("class", pattern.getIdentifier());
- assertEquals("Cl", pattern.getObjectType());
- assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
- assertEquals(0, pattern.getDescrs().size());
- assertEquals(-1, pattern.getEndCharacter());
-
- }
-
-
- public void testParsingColumn7() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " class:Cl";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("class", pattern.getIdentifier());
- assertEquals("Cl", pattern.getObjectType());
- assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
- assertEquals(0, pattern.getDescrs().size());
- assertEquals(-1, pattern.getEndCharacter());
-
- }
-
-
- public void testParsingColumn8() {
- /** Inside of condition: start */
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class (";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertTrue(pattern.getEndLine() == -1 && pattern.getEndColumn() == -1);
- assertEquals(0, pattern.getDescrs().size());
- assertEquals(-1, pattern.getEndCharacter());
-
- }
-
-
- public void testParsingColumn9() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( na";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals( "na", field.getFieldName() );
- assertEquals(-1, field.getEndCharacter());
-
- }
-
-
- public void testParsingColumn10() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( name['xyz'].subname.subsubn";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals( "name['xyz'].subname.subsubn", field.getFieldName() );
- assertEquals(-1, field.getEndCharacter());
-
- }
-
-
- public void testParsingColumn11() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( condition == true, ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals(-1, field.getEndCharacter());
-
- }
-
-
- public void testParsingColumn12() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( c : condition, ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern.getDescrs().get(0);
- assertEquals(-1, fieldBinding.getEndCharacter());
-
- }
-
-
- public void testParsingColumn13() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( condition == true, na";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(2, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals(-1, field.getEndCharacter());
- assertEquals( "condition", field.getFieldName() );
- field = (FieldConstraintDescr) pattern.getDescrs().get(1);
- assertEquals( "na", field.getFieldName() );
- assertEquals(-1, field.getEndCharacter());
-
- }
-
-
- public void FAILINGtestParsingColumn14() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( name:";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldBindingDescr binding1 = (FieldBindingDescr) pattern.getDescrs().get(0);
- assertEquals("name", binding1.getIdentifier());
- assertNull(binding1.getFieldName());
-
- }
-
-
- public void testParsingColumn15() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( property ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("property", field.getFieldName());
- assertEquals(0, field.getRestrictions().size());
- assertEquals(-1, field.getEndCharacter());
-
- }
-
-
- public void testParsingColumn16() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( name: property ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
- assertEquals("name", binding.getIdentifier());
- assertEquals("property", binding.getFieldName());
-
- }
-
-
- public void testParsingColumn17() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( name1: property1 == \"value1\", name2: property2 ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(3, pattern.getDescrs().size());
- FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
- assertEquals("name1", binding.getIdentifier());
- assertEquals("property1", binding.getFieldName());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(1);
- assertEquals("property1", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
- assertEquals("==", literal.getEvaluator());
- assertEquals("value1", literal.getText());
- binding = (FieldBindingDescr) pattern.getDescrs().get(2);
- assertEquals("name2", binding.getIdentifier());
- assertEquals("property2", binding.getFieldName());
-
- }
-
-
- public void testParsingColumn18() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class(name:property==";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(2, pattern.getDescrs().size());
- FieldBindingDescr binding = (FieldBindingDescr) pattern.getDescrs().get(0);
- assertEquals("name", binding.getIdentifier());
- assertEquals("property", binding.getFieldName());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(1);
- assertEquals("property", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
-
- }
-
-
- public void testParsingColumn19() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class( property == otherPropertyN";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("property", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- VariableRestrictionDescr variable = (VariableRestrictionDescr) field.getRestrictions().get(0);
- assertEquals("==", variable.getEvaluator());
- assertEquals("otherPropertyN", variable.getIdentifier());
- assertEquals(-1, field.getEndCharacter());
- }
-
-
- public void testParsingColumn20() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class( property == \"someth";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("property", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
- // KRISV: for now, it would be really messy to make this work. String is a
- // lexer rule (not parser), and changing that or controling the behavior of it
- // is not simple. Can we leave the way it is for now?
- //
- // TODO literal should be a LiteralRestrictionDescr with filled in evaluator and text, not null
- // assertEquals("==", literal.getEvaluator());
- // assertEquals("someth", literal.getText());
- // TODO this method does not yet exist
- // assertEquals(-1, field.getEndCharacter());
-
- }
-
-
- public void testParsingColumn21() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class( property contains ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("property", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- // KRISV: you are right
- //
- // now I would like to access the evaluator 'contains', but this seems
- // not possible because the parser cannot create this descr yet
- // since it does not know what class to create (VariableRestrictionDescr
- // or LiteralRestrictionDescr or ?)
- // so maybe I should just extract this info myself, based on the
- // starting character of this FieldConstraintDescr?
- // TODO this method does not yet exist
- assertEquals(-1, field.getEndCharacter());
- }
-
-
- public void testParsingColumn22() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class( property matches \"someth";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("property", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
- // KRISV: see comments above
- //
- // TODO literal should be a LiteralRestrictionDescr with filled in evaluator and text, not null
- // assertEquals("matches", literal.getEvaluator());
- // assertEquals("someth", literal.getText());
- // TODO this method does not yet exist
- // assertEquals(-1, field.getEndCharacter());
- }
-
-
- public void testParsingColumn23() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " eval ( ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get(0);
- assertEquals(input.indexOf( "eval" ), eval.getStartCharacter());
- assertEquals(-1, eval.getEndCharacter());
- }
-
-
- public void testParsingColumn24() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( property > 0 & ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- assertEquals(-1, pattern.getEndCharacter());
- assertEquals(1, pattern.getDescrs().size());
- FieldConstraintDescr field = (FieldConstraintDescr) pattern.getDescrs().get(0);
- assertEquals("property", field.getFieldName());
- assertEquals(1, field.getRestrictions().size());
- LiteralRestrictionDescr literal = (LiteralRestrictionDescr) field.getRestrictions().get(0);
- assertEquals(">", literal.getEvaluator());
- assertEquals("0", literal.getText());
- RestrictionConnectiveDescr connective = (RestrictionConnectiveDescr) field.getRestriction();
- assertEquals(RestrictionConnectiveDescr.AND, connective.getConnective());
- }
-
-
- public void testParsingColumn25() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( ) from a";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals("Class", pattern.getObjectType());
- FromDescr from = (FromDescr) pattern.getSource();
- assertEquals(-1, from.getEndCharacter());
- assertTrue(pattern.getEndCharacter() != -1);
- }
-
-
- public void testParsingColumn26() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( property > 0 ) from myGlobal.getList() \n" +
- " ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- FromDescr from = (FromDescr) pattern.getSource();
- assertTrue(from.getEndCharacter() != -1);
- }
-
-
- public void testParsingColumn27() {
- String input =
- "rule MyRule \n" +
- " when \n" +
- " Class ( property > 0 ) from getDroolsFunction() \n" +
- " ";
- RuleDescr rule = parseRuleString(input);
- assertEquals(1, rule.getLhs().getDescrs().size());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- FromDescr from = (FromDescr) pattern.getSource();
- assertTrue(from.getEndCharacter() != -1);
- }
-
- public void testParsingCharactersStartEnd() {
- String input =
- "package test; \n" +
- "rule MyRule \n" +
- " when \n" +
- " Class( condition == true ) \n" +
- " then \n" +
- " System.out.println(\"Done\") \n" +
- "end \n";
- RuleDescr rule = parseRuleString(input);
- assertEquals(input.indexOf( "rule" ), rule.getStartCharacter());
- assertEquals(input.indexOf( "end" )+2, rule.getEndCharacter());
- PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
- assertEquals(input.indexOf( "Class" ), pattern.getStartCharacter());
- assertEquals(input.indexOf( "(" ), pattern.getLeftParentCharacter());
- assertEquals(input.indexOf( ")" ), pattern.getRightParentCharacter());
- assertEquals(input.indexOf( ")" ), pattern.getEndCharacter());
- }
-}
More information about the jboss-svn-commits
mailing list