[jboss-svn-commits] JBL Code SVN: r14612 - 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
Sun Aug 26 17:15:56 EDT 2007


Author: KrisVerlaenen
Date: 2007-08-26 17:15:56 -0400 (Sun, 26 Aug 2007)
New Revision: 14612

Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java
Log:
JBRULES-1129: import does not work with code competion
 - fixed by working around an eclipse jdt code completion bug

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java	2007-08-26 20:39:46 UTC (rev 14611)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java	2007-08-26 21:15:56 UTC (rev 14612)
@@ -22,7 +22,6 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jdt.core.CompletionContext;
 import org.eclipse.jdt.core.CompletionProposal;
-import org.eclipse.jdt.core.CompletionRequestor;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
@@ -32,6 +31,7 @@
 import org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal;
 import org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal;
 import org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal;
+import org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal;
 import org.eclipse.jdt.ui.text.java.CompletionProposalCollector;
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jface.text.IDocument;
@@ -141,37 +141,46 @@
     }
 
 	private List getAllClassProposals(final String classNameStart, final int documentOffset, final String prefix) {
-		final List list = new ArrayList();
+        List result = new ArrayList();
 		IJavaProject javaProject = getCurrentJavaProject();
-		if (javaProject ==null) {
-			return list;
+		if (javaProject == null) {
+			return result;
 		}
-
-		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.PACKAGE_REF) {
-					RuleCompletionProposal prop = new RuleCompletionProposal(documentOffset - prefix.length(), classNameStart.length(), className, className + ".");
-					prop.setImage(DroolsPluginImages.getImage(DroolsPluginImages.PACKAGE));
-					list.add(prop);
-				} else if (proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF) {
-					RuleCompletionProposal prop = new RuleCompletionProposal(documentOffset - prefix.length(), classNameStart.length() - proposal.getReplaceStart(), className, className + ";");
-					prop.setImage(DroolsPluginImages.getImage(DroolsPluginImages.CLASS));
-					list.add(prop);
+		CompletionProposalCollector	collector = new CompletionProposalCollector(javaProject) {
+			public void accept(CompletionProposal proposal) {
+				if (proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.PACKAGE_REF ||
+					proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF) {
+						super.accept(proposal);
 				}
-				// ignore all other proposals
 			}
 		};
-
+		collector.acceptContext(new CompletionContext());
         try {
-            javaProject.newEvaluationContext().codeComplete( classNameStart,
-                                                             classNameStart.length(),
-                                                             requestor );
+            IEvaluationContext evalContext = javaProject.newEvaluationContext();
+            evalContext.codeComplete( classNameStart,
+            						  classNameStart.length(),
+                                      collector );
+			IJavaCompletionProposal[] proposals = collector.getJavaCompletionProposals();
+			for (int i = 0; i < proposals.length; i++) {
+				if (proposals[i] instanceof AbstractJavaCompletionProposal) {
+					AbstractJavaCompletionProposal javaProposal = (AbstractJavaCompletionProposal) proposals[i];
+					int replacementOffset = documentOffset - (classNameStart.length() - javaProposal.getReplacementOffset());
+					javaProposal.setReplacementOffset(replacementOffset);
+					if (javaProposal instanceof LazyJavaTypeCompletionProposal) {
+						String completionPrefix = classNameStart.substring(classNameStart.length() - javaProposal.getReplacementLength());
+						int dotIndex = completionPrefix.lastIndexOf('.');
+						// match up to the last dot in order to make higher level matching still work (camel case...)
+						if (dotIndex != -1) {
+							javaProposal.setReplacementString(((LazyJavaTypeCompletionProposal) javaProposal).getQualifiedTypeName());
+						}
+					}
+					result.add(proposals[i]);
+				}
+			}
         } catch ( Throwable t ) {
             DroolsEclipsePlugin.log( t );
         }
-
-        return list;
+		return result;
     }
 
     protected List getPossibleProposals(ITextViewer viewer,
@@ -332,10 +341,19 @@
                                       text.length(),
                                       collector );
 			IJavaCompletionProposal[] proposals = collector.getJavaCompletionProposals();
-			int replacementOffset = documentOffset - prefix.length();
 			for (int i = 0; i < proposals.length; i++) {
 				if (proposals[i] instanceof AbstractJavaCompletionProposal) {
-					((AbstractJavaCompletionProposal) proposals[i]).setReplacementOffset(replacementOffset);
+					AbstractJavaCompletionProposal javaProposal = (AbstractJavaCompletionProposal) proposals[i];
+					int replacementOffset = documentOffset - (text.length() - javaProposal.getReplacementOffset());
+					javaProposal.setReplacementOffset(replacementOffset);
+					if (javaProposal instanceof LazyJavaTypeCompletionProposal) {
+						String completionPrefix = javaText.substring(javaText.length() - javaProposal.getReplacementLength());
+						int dotIndex = completionPrefix.lastIndexOf('.');
+						// match up to the last dot in order to make higher level matching still work (camel case...)
+						if (dotIndex != -1) {
+							javaProposal.setReplacementString(((LazyJavaTypeCompletionProposal) javaProposal).getQualifiedTypeName());
+						}
+					}
 					if (!filterObjectMethods || !(proposals[i] instanceof JavaMethodCompletionProposal)) {
 						results.add(proposals[i]);
 					}




More information about the jboss-svn-commits mailing list