[jboss-svn-commits] JBL Code SVN: r13740 - labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 23 19:41:03 EDT 2007


Author: pombredanne
Date: 2007-07-23 19:41:03 -0400 (Mon, 23 Jul 2007)
New Revision: 13740

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/RuleCompletionProcessor.java
Log:
Change the logic to get the last type from an expression to using mvel compiled expression' egress. Made completion more relevant.

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	2007-07-23 22:32:10 UTC (rev 13739)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java	2007-07-23 23:41:03 UTC (rev 13740)
@@ -54,6 +54,7 @@
     private RuleDescr    rule;
     private PackageDescr packageDescr;
     private boolean      javaDialect                         = true;
+    private Class        getMvelReturnedType;
 
     public CompletionContext(String ruleText) {
         this.backText = ruleText;
@@ -193,4 +194,11 @@
         return location;
     }
 
-}
+	public Class getGetMvelReturnedType() {
+		return getMvelReturnedType;
+	}
+
+	public void setGetMvelReturnedType(Class getMvelReturnedType) {
+		this.getMvelReturnedType = getMvelReturnedType;
+	}
+}
\ No newline at end of file

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-23 22:32:10 UTC (rev 13739)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java	2007-07-23 23:41:03 UTC (rev 13740)
@@ -30,11 +30,13 @@
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PatternDescr;
+import org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilder;
 import org.drools.rule.builder.dialect.mvel.MVELDialect;
 import org.drools.util.asm.ClassFieldInspector;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.swt.graphics.Image;
+import org.mvel.CompiledExpression;
 import org.mvel.ExpressionCompiler;
 import org.mvel.ParserContext;
 import org.mvel.PropertyVerifier;
@@ -312,8 +314,8 @@
 			if (type.equals("java.lang.String")) {
 				list.add(new RuleCompletionProposal(prefix.length(), "matches",
 						"matches \"\"", 9, DROOLS_ICON));
-				list.add(new RuleCompletionProposal(prefix.length(), "not matches",
-						"not matches \"\"", 13, DROOLS_ICON));
+				list.add(new RuleCompletionProposal(prefix.length(),
+						"not matches", "not matches \"\"", 13, DROOLS_ICON));
 			}
 			if (isSubtypeOf(type, "java.util.Collection")) {
 				list.add(new RuleCompletionProposal(prefix.length(),
@@ -731,8 +733,11 @@
 			return proposals;
 		}
 
+		// TODO: add logic from MVELConsequenceBuilder
 		String compilableConsequence = CompletionUtil
 				.getCompilableText(consequence);
+		compilableConsequence = MVELConsequenceBuilder
+				.delimitExpressions(compilableConsequence);
 
 		// attempt to compile and analyze
 		try {
@@ -755,28 +760,26 @@
 				// variable
 				// find the last type in the expression to complete against
 
-				String analyzableExpression = compilableConsequence;
-				if (compilableConsequence.contains(";")) {
-					String[] lines = compilableConsequence.split(";");
-					analyzableExpression = lines[lines.length - 1];
-				}
-				if (!"".equals(analyzableExpression.trim())) {
+				if (!"".equals(compilableConsequence.trim())) {
 
-					Class lastType = new PropertyVerifier(analyzableExpression,
-							compilationContext).analyze();
+					// Class lastType = new
+					// PropertyVerifier(analyzableExpression,
+					// compilationContext).analyze();
+					Class lastType = context.getGetMvelReturnedType();
+					if (lastType == null) {
+						lastType = Object.class;
+					}
 
-					String javaText = "\n" +  lastType.getName() + " o = new " +  lastType.getName()
-							+ "();\no.";
+					String javaText = "\n" + lastType.getName() + " o = new "
+							+ lastType.getName() + "();\no.";
 					Collection jdtProps = getJavaMvelCompletionProposals(
 							javaText, prefix, params);
 					proposals.addAll(jdtProps);
-
 				}
 			}
 
 		} catch (Throwable e) {
 			// do nothing
-			//e.printStackTrace();
 		}
 
 		return proposals;
@@ -794,6 +797,7 @@
 				break;
 			}
 		}
+		// MVEL: test for null
 		MVELDialect dialect = (MVELDialect) currentRule.getDialect();
 
 		ExpressionCompiler compiler = new ExpressionCompiler(
@@ -808,9 +812,11 @@
 		initialContext.setImports(imports);
 		initialContext.setInterceptors(dialect.getInterceptors());
 		initialContext.setInputs(params);
+		initialContext.setCompiled(true);
 
 		try {
-			compiler.compile(initialContext);
+			CompiledExpression expression = compiler.compile(initialContext);
+			context.setGetMvelReturnedType(expression.getKnownEgressType());
 			ParserContext compilationContext = compiler.getParserContextState();
 			return compilationContext;
 		} catch (Exception e) {
@@ -828,9 +834,6 @@
 					.length(), prop);
 			rcp.setImage(DefaultCompletionProcessor.VARIABLE_ICON);
 			proposals.add(rcp);
-
-			// System.out.println( " MVEL: added inputs from mvel eval: name:" +
-			// prop + " type:" + inputs.get( prop ).getClass() );
 		}
 	}
 
@@ -843,10 +846,6 @@
 					.length(), prop);
 			rcp.setImage(DefaultCompletionProcessor.VARIABLE_ICON);
 			proposals.add(rcp);
-
-			// System.out.println( " MVEL: added completion: got variable from
-			// mvel eval: name:" + prop + " type:" + variables.get( prop
-			// ).getClass() );
 		}
 	}
 




More information about the jboss-svn-commits mailing list