From: <jbo...@li...> - 2006-05-18 11:16:44
|
Author: mic...@jb... Date: 2006-05-18 07:16:31 -0400 (Thu, 18 May 2006) New Revision: 4312 Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/ContextScanningTest.java Log: improved LHS RHS detection 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-05-18 04:06:13 UTC (rev 4311) +++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/completion/RuleCompletionProcessor.java 2006-05-18 11:16:31 UTC (rev 4312) @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.StringTokenizer; import java.util.regex.Pattern; import org.drools.compiler.DrlParser; @@ -35,8 +36,6 @@ */ public class RuleCompletionProcessor extends DefaultCompletionProcessor { - private static final Pattern condition = Pattern.compile(".*\\Wwhen\\W.*", Pattern.DOTALL); - private static final Pattern consequence = Pattern.compile(".*\\Wthen\\W.*", Pattern.DOTALL); private static final Pattern query = Pattern.compile(".*\\Wquery\\W.*", Pattern.DOTALL); private static final Image droolsIcon = DroolsPluginImages.getImage(DroolsPluginImages.DROOLS); private static final Image dslIcon = DroolsPluginImages.getImage( DroolsPluginImages.DSL_EXPRESSION ); @@ -65,9 +64,9 @@ return list; } - if (query.matcher(backText).matches()) { + if (query(backText)) { list.addAll(adapter.listConditionItems()); - } else if (consequence.matcher(backText).matches()) { + } else if (consequence(backText)) { List dslConsequences = adapter.listConsequenceItems(); addDSLProposals( list, prefix, @@ -82,40 +81,12 @@ list, prefix ); } - } else if (condition.matcher(backText).matches()) { + } else if (condition(backText)) { List dslConditions = adapter.listConditionItems(); - Iterator iterator; addDSLProposals( list, prefix, dslConditions ); - Image droolsIcon = DroolsPluginImages.getImage(DroolsPluginImages.DROOLS); - if (!adapter.hasConditions()) { - list.add( new RuleCompletionProposal(prefix.length(), "exists", "exists ", droolsIcon)); - 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); - prop.setImage(droolsIcon); - list.add(prop); - - List imports = getImports(viewer); - 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); - p.setPriority(-1); - p.setImage(classIcon); - list.add(p); - } - } - - } - RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), "then", "then\n\t"); - prop.setImage(droolsIcon); - list.add(prop); + addLHSCompletionProposals(viewer, list, adapter, prefix); } else { @@ -132,6 +103,63 @@ return null; } + private void addLHSCompletionProposals(ITextViewer viewer, final List list, DSLAdapter adapter, final String prefix) throws CoreException, DroolsParserException { + Iterator iterator; + Image droolsIcon = DroolsPluginImages.getImage(DroolsPluginImages.DROOLS); + if (!adapter.hasConditions()) { + list.add( new RuleCompletionProposal(prefix.length(), "exists", "exists ", droolsIcon)); + 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 ); + prop.setImage(droolsIcon); + list.add(prop); + + List imports = getImports(viewer); + 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); + p.setPriority(-1); + p.setImage(classIcon); + list.add(p); + } + } + + } + RuleCompletionProposal prop = new RuleCompletionProposal(prefix.length(), "then", "then\n\t"); + prop.setImage(droolsIcon); + list.add(prop); + } + + private boolean consequence(String backText) { + return isKeywordOnLine(backText, "then"); + } + + private boolean condition(String backText) { + return isKeywordOnLine(backText, "when"); + } + + boolean query(String backText) { + return query.matcher(backText).matches(); + } + + /** + * Check to see if the keyword appears on a line by itself. + */ + private boolean isKeywordOnLine(String chunk, String keyword) { + StringTokenizer st = new StringTokenizer(chunk, "\n\t"); + while(st.hasMoreTokens()) { + if (st.nextToken().trim().equals(keyword)) { + return true; + } + } + return false; + } + private void addRHSFunctionCompletionProposals(ITextViewer viewer, final List list, final String prefix) throws CoreException, 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-05-18 04:06:13 UTC (rev 4311) +++ labs/jbossrules/trunk/drools-ide/src/test/java/org/drools/ide/editors/completion/ContextScanningTest.java 2006-05-18 11:16:31 UTC (rev 4312) @@ -1,8 +1,11 @@ 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 { @@ -27,5 +30,8 @@ } + + + } |