[jboss-svn-commits] JBL Code SVN: r13091 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors: completion and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 4 18:08:45 EDT 2007
Author: KrisVerlaenen
Date: 2007-07-04 18:08:44 -0400 (Wed, 04 Jul 2007)
New Revision: 13091
Modified:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
Log:
JBRULES-973: Add code completion support for new 4.0 features
- added support for this, [], nested properties and accumulate functions
Classes in the same package as this rule also recognized by code completion
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java 2007-07-04 19:30:41 UTC (rev 13090)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java 2007-07-04 22:08:44 UTC (rev 13091)
@@ -166,6 +166,9 @@
// imports
List allImports = descr.getImports();
this.imports = new ArrayList();
+ if (packageName != null) {
+ imports.addAll(getAllClassesInPackage(packageName));
+ }
Iterator iterator = allImports.iterator();
while (iterator.hasNext()) {
String importName = ((ImportDescr) iterator.next()).getTarget();
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java 2007-07-04 19:30:41 UTC (rev 13090)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java 2007-07-04 22:08:44 UTC (rev 13091)
@@ -15,7 +15,7 @@
// private static final Pattern PATTERN_PATTERN_START = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*[^\\s<>!=:]*",
// Pattern.DOTALL );
- static final Pattern PATTERN_PATTERN_OPERATOR = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)(\\s*([<>=!]+)\\s*[^\\s<>!=:]*\\s*(&&|\\|\\|))*\\s+",
+ static final Pattern PATTERN_PATTERN_OPERATOR = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\),]+)(\\s*([<>=!]+)\\s*[^\\s<>!=:]*\\s*(&&|\\|\\|))*\\s+",
Pattern.DOTALL );
// private static final Pattern PATTERN_PATTERN_CONTAINS_ARGUMENT = Pattern.compile( ".*[(,](\\s*(\\S*)\\s*:)?\\s*([^\\s<>!=:\\(\\)]+)\\s+contains\\s+[^\\s<>!=:]*",
// Pattern.DOTALL );
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 2007-07-04 19:30:41 UTC (rev 13090)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2007-07-04 22:08:44 UTC (rev 13091)
@@ -10,19 +10,18 @@
import org.drools.base.ClassTypeResolver;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.DroolsPluginImages;
import org.drools.eclipse.editors.AbstractRuleEditor;
import org.drools.eclipse.util.ProjectClassLoader;
import org.drools.lang.Location;
-import org.drools.lang.descr.AccumulateDescr;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FactTemplateDescr;
import org.drools.lang.descr.FieldBindingDescr;
import org.drools.lang.descr.FieldTemplateDescr;
-import org.drools.lang.descr.FromDescr;
import org.drools.lang.descr.GlobalDescr;
import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
@@ -173,6 +172,8 @@
case Location.LOCATION_LHS_INSIDE_CONDITION_START:
String className = (String) location
.getProperty(Location.LOCATION_PROPERTY_CLASS_NAME);
+ String propertyName = (String) location
+ .getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME);
if (className != null) {
boolean isTemplate = addFactTemplatePropertyProposals(
prefix, className, list);
@@ -181,17 +182,47 @@
getImports(), ProjectClassLoader
.getProjectClassLoader(getEditor()));
try {
- Class clazz = resolver.resolveType(className);
+ String currentClass = className;
+ if (propertyName != null) {
+ String[] nestedProperties = propertyName.split("\\.");
+ int nbSuperProperties = nestedProperties.length - 1;
+ if (propertyName.endsWith(".")) {
+ nbSuperProperties++;
+ }
+ for (int i = 0; i < nbSuperProperties; i++) {
+ String simplePropertyName = nestedProperties[i];
+ currentClass = getSimplePropertyClass(currentClass, simplePropertyName);
+ currentClass = convertToNonPrimitiveClass(currentClass);
+ }
+ }
+ RuleCompletionProposal p = new RuleCompletionProposal(prefix.length(), "this");
+ p.setImage(METHOD_ICON);
+ list.add(p);
+ Class clazz = resolver.resolveType(currentClass);
if (clazz != null) {
- Iterator iterator2 = new ClassFieldInspector(
- clazz).getFieldNames().keySet()
- .iterator();
+ if (Map.class.isAssignableFrom(clazz)) {
+ p = new RuleCompletionProposal(
+ prefix.length(), "this['']", "this['']", 6);
+ p.setImage(METHOD_ICON);
+ list.add(p);
+ }
+ ClassFieldInspector inspector = new ClassFieldInspector(clazz);
+ Map types = inspector.getFieldTypes();
+ Iterator iterator2 = inspector.getFieldNames().keySet().iterator();
while (iterator2.hasNext()) {
String name = (String) iterator2.next();
- RuleCompletionProposal p = new RuleCompletionProposal(
+ p = new RuleCompletionProposal(
prefix.length(), name, name + " ");
p.setImage(METHOD_ICON);
list.add(p);
+ Class type = (Class) types.get(name);
+ if (type != null && Map.class.isAssignableFrom(type)) {
+ name += "['']";
+ p = new RuleCompletionProposal(
+ prefix.length(), name, name, name.length() - 2);
+ p.setImage(METHOD_ICON);
+ list.add(p);
+ }
}
}
} catch (IOException exc) {
@@ -363,6 +394,17 @@
"accumulate",
"accumulate ( , init ( ), action ( ), result ( ) )",
13, DROOLS_ICON));
+ PackageBuilderConfiguration config = new PackageBuilderConfiguration(
+ ProjectClassLoader.getProjectClassLoader(getEditor()), null);
+ Map accumulateFunctions = config.getAccumulateFunctionsMap();
+ for (Iterator iterator2 = accumulateFunctions.keySet().iterator(); iterator2.hasNext(); ) {
+ String accumulateFunction = (String) iterator2.next();
+ list.add(new RuleCompletionProposal(
+ prefix.length(),
+ "accumulate " + accumulateFunction,
+ "accumulate ( , " + accumulateFunction + "( ) )",
+ 13, DROOLS_ICON));
+ }
list.add(new RuleCompletionProposal(prefix.length(),
"collect", "collect ( )", 10, DROOLS_ICON));
// add all functions
@@ -438,27 +480,45 @@
}
// if not found, return null
} else {
- ClassTypeResolver resolver = new ClassTypeResolver(
- getImports(), ProjectClassLoader
- .getProjectClassLoader(getEditor()));
- try {
- Class clazz = resolver.resolveType(className);
- if (clazz != null) {
- Class clazzz = (Class) new ClassFieldInspector(clazz)
- .getFieldTypes().get(propertyName);
- if (clazzz != null) {
- return clazzz.getName();
- }
- }
- } catch (IOException exc) {
- // Do nothing
- } catch (ClassNotFoundException exc) {
- // Do nothing
+ String[] nestedProperties = propertyName.split("\\.");
+ String currentClass = className;
+ for (int i = 0; i < nestedProperties.length; i++) {
+ String simplePropertyName = nestedProperties[i];
+ currentClass = getSimplePropertyClass(currentClass, simplePropertyName);
}
+ return currentClass;
}
}
return null;
}
+
+ private String getSimplePropertyClass(String className, String propertyName) {
+ if ("this".equals(propertyName)) {
+ return className;
+ }
+ if (propertyName.endsWith("]")) {
+ // TODO can we take advantage of generics here?
+ return "java.lang.Object";
+ }
+ ClassTypeResolver resolver = new ClassTypeResolver(
+ getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
+ try {
+ Class clazz = resolver.resolveType(className);
+ if (clazz != null) {
+ Class clazzz = (Class) new ClassFieldInspector(clazz)
+ .getFieldTypes().get(propertyName);
+ if (clazzz != null) {
+ return clazzz.getName();
+ }
+ }
+ } catch (IOException exc) {
+ // Do nothing
+ } catch (ClassNotFoundException exc) {
+ // Do nothing
+ }
+ return "java.lang.Object";
+ }
private Map getRuleParameters(String backText) {
Map result = new HashMap();
@@ -646,16 +706,7 @@
getRuleParameters(result, ((ExistsDescr) descr).getDescrs());
} else if (descr instanceof NotDescr) {
getRuleParameters(result, ((NotDescr) descr).getDescrs());
- } else if (descr instanceof FromDescr) {
- getRuleParameters(result, ((FromDescr) descr).getDescrs());
- } else if (descr instanceof AccumulateDescr) {
- AccumulateDescr accumulateDescr = (AccumulateDescr) descr;
- getRuleParameters(result, accumulateDescr.getInputPattern());
- if (accumulateDescr.getInputPattern() != null) {
- getRuleParameters(result, accumulateDescr.getInputPattern());
- }
}
-
}
private void getRuleSubParameters(Map result, List descrs, String clazz) {
More information about the jboss-svn-commits
mailing list