[jbosstools-commits] JBoss Tools SVN: r17570 - trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/el.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Mon Sep 14 18:23:24 EDT 2009


Author: vrubezhny
Date: 2009-09-14 18:23:24 -0400 (Mon, 14 Sep 2009)
New Revision: 17570

Modified:
   trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/el/AbstractELCompletionEngine.java
Log:
JBIDE-512 context variable code completion dropdown should show their "source"
JBIDE-2541 Show java-doc for EL content assist item

The values of type, sourceType and JavaDoc are gathered to be displayed in CA

Modified: trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/el/AbstractELCompletionEngine.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/el/AbstractELCompletionEngine.java	2009-09-14 22:22:38 UTC (rev 17569)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/el/AbstractELCompletionEngine.java	2009-09-14 22:23:24 UTC (rev 17570)
@@ -16,8 +16,11 @@
 import java.util.TreeSet;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.swt.graphics.Image;
@@ -40,6 +43,8 @@
 import org.jboss.tools.common.el.core.resolver.ElVarSearcher;
 import org.jboss.tools.common.el.core.resolver.TypeInfoCollector;
 import org.jboss.tools.common.el.core.resolver.Var;
+import org.jboss.tools.common.el.core.resolver.TypeInfoCollector.MemberInfo;
+import org.jboss.tools.common.el.core.resolver.TypeInfoCollector.MemberPresentation;
 import org.jboss.tools.common.text.TextProposal;
 import org.jboss.tools.jst.web.kb.IPageContext;
 
@@ -248,18 +253,29 @@
 			ELOperandResolveStatus oldElStatus = resolveELOperand(file, operand, returnEqualedVariablesOnly, false);
 			status.getProposals().addAll(oldElStatus.getProposals());
 		}
-
+		
+		// JBIDE-512, JBIDE-2541 related changes ===>>>
+		// TODO: Add type, sourceType and JavaDoc found if possible
+		// Reason of incomplete: there are no resolved members here, 
+		// The var value is to be resolved by the ELResolver to let us know
+		// what is the var's type
 		if(!returnEqualedVariablesOnly && vars!=null) {
-			List<String> varNameProposals = getVarNameProposals(vars, operand.toString());
-			if (varNameProposals != null) {
-				for (String varNameProposal : varNameProposals) {
+			
+			for (Var v : vars) {
+				String prefix = operand.toString();
+				if(v.getName().startsWith(prefix)) {
+					String varNameProposal = v.getName().substring(prefix.length());
 					TextProposal proposal = new TextProposal();
 					proposal.setReplacementString(varNameProposal);
+					proposal.setLabel(v.getName());
 					proposal.setImage(getELProposalImage());
 					status.getProposals().add(proposal);
 				}
 			}
 		}
+		// <<<=== JBIDE-512, JBIDE-2541 related changes
+
+
 		return status;
 	}
 
@@ -330,14 +346,39 @@
 			// no vars are resolved 
 			// the tokens are the part of var name ended with a separator (.)
 			resolvedVariables = resolveVariables(file, expr, true, returnEqualedVariablesOnly);			
+
 			Set<TextProposal> proposals = new TreeSet<TextProposal>(TextProposal.KB_PROPOSAL_ORDER);
 			for (V var : resolvedVariables) {
 				String varName = var.getName();
 				if(varName.startsWith(operand.getText())) {
+					// JBIDE-512, JBIDE-2541 related changes ===>>>
+					MemberInfo member = getMemberInfoByVariable(var, true);
+					
+					String sourceTypeName = member == null ? null : member.getDeclaringTypeQualifiedName();
+					if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+						sourceTypeName = Signature.getSimpleName(sourceTypeName);
+					String typeName = member == null ? null : member.getType().getName();
+					if (typeName != null && typeName.indexOf('.') != -1) 
+						typeName = Signature.getSimpleName(typeName);
+					
+					IJavaElement element = member == null ? null : member.getJavaElement();
+					String attachedJavaDoc = null;
+					
+					try {
+							attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+					} catch (JavaModelException e) {
+						// Ignore
+					}
+
 					TextProposal proposal = new TextProposal();
 					proposal.setReplacementString(varName.substring(operand.getLength()));
 					setImage(proposal, var);
+					proposal.setType(typeName);
+					proposal.setSourceType(sourceTypeName);
+					proposal.setContextInfo(attachedJavaDoc);
+					
 					proposals.add(proposal);
+					// <<<=== JBIDE-512, JBIDE-2541 related changes
 				}
 			}
 			status.setProposals(proposals);
@@ -353,25 +394,53 @@
 			// For example @Factory and @DataModel. We should use @DataModel instead of @Factory
 			// method which returns null.
 			// See https://jira.jboss.org/jira/browse/JBIDE-3694
+			
+			// JBIDE-512, JBIDE-2541 related changes ===>>>
 			TypeInfoCollector.MemberInfo bijectedAttribute = null;
 			for (V var : resolvedVariables) {
 				if(isSingularAttribute(var)) {
 					bijectedAttribute = getMemberInfoByVariable(var, true);
 				}
+				MemberInfo member = getMemberInfoByVariable(var, true);
+				String sourceTypeName = member == null ? null : member.getDeclaringTypeQualifiedName();
+				if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+					sourceTypeName = Signature.getSimpleName(sourceTypeName);
+				String typeName = member == null ? null : member.getType().getName();
+				if (typeName != null && typeName.indexOf('.') != -1) 
+					typeName = Signature.getSimpleName(typeName);
+				IJavaElement element = member == null ? null : member.getJavaElement();
+				String attachedJavaDoc = null;
+				
+				try {
+					attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+				} catch (JavaModelException e) {
+					// Ignore
+				}
+
 				String varName = var.getName();
 				if(operand.getLength()<=varName.length()) {
 					TextProposal proposal = new TextProposal();
 					proposal.setReplacementString(varName.substring(operand.getLength()));
+					proposal.setLabel(varName);
 					setImage(proposal, var);
+					proposal.setType(typeName);
+					proposal.setSourceType(sourceTypeName);
+					proposal.setContextInfo(attachedJavaDoc);
 					proposals.add(proposal);
 				} else if(returnEqualedVariablesOnly) {
 					TextProposal proposal = new TextProposal();
 					proposal.setReplacementString(varName);
+					proposal.setLabel(varName);
 					setImage(proposal, var);
+					proposal.setType(typeName);
+					proposal.setSourceType(sourceTypeName);
+					proposal.setContextInfo(attachedJavaDoc);
 					proposals.add(proposal);
 				}
 				status.setMemberOfResolvedOperand(bijectedAttribute!=null?bijectedAttribute:getMemberInfoByVariable(var, true));
 			}
+			// <<<=== JBIDE-512, JBIDE-2541 related changes
+
 			status.setLastResolvedToken(expr);
 			status.setProposals(proposals);
 			return status;
@@ -505,6 +574,9 @@
 					status.setMapOrCollectionOrBundleAmoungTheTokens();
 				}
 				
+				
+				// JBIDE-512, JBIDE-2541 related changes ===>>>
+				/*
 				Set<String> methodPresentations = 
 						infos.getMethodPresentationStrings();
 				if (methodPresentations != null) {
@@ -516,6 +588,43 @@
 						kbProposals.add(proposal);
 					}
 				}
+				*/
+
+				Set<MemberPresentation> methodPresentations = 
+					infos.getMethodPresentations();
+				
+				if (methodPresentations != null) {
+					for (MemberPresentation presentation : methodPresentations) {
+						String presentationString = presentation.getPresentation();
+						MemberInfo member = presentation.getMember();
+						String sourceTypeName = member == null ? null : member.getDeclaringTypeQualifiedName();
+						if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+							sourceTypeName = Signature.getSimpleName(sourceTypeName);
+						String typeName = member == null ? null : member.getType().getName();
+						if (typeName != null && typeName.indexOf('.') != -1) 
+							typeName = Signature.getSimpleName(typeName);
+						IJavaElement element = member == null ? null : member.getJavaElement();
+						String attachedJavaDoc = null;
+						
+						try {
+							attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+						} catch (JavaModelException e) {
+							// Ignore
+						}
+
+						TextProposal proposal = new TextProposal();
+						proposal.setReplacementString(presentationString);
+						proposal.setLabel(presentationString);
+						proposal.setImage(getELProposalImage());
+						proposal.setType(typeName);
+						proposal.setSourceType(sourceTypeName);
+						proposal.setContextInfo(attachedJavaDoc);
+						
+						kbProposals.add(proposal);
+					}
+				}
+
+				/*
 				Set<String> propertyPresentations = 
 					infos.getPropertyPresentationStrings(status.getUnpairedGettersOrSetters());
 				if (propertyPresentations != null) {
@@ -527,6 +636,43 @@
 						kbProposals.add(proposal);
 					}
 				}
+				*/
+
+				Set<MemberPresentation> propertyPresentations = 
+					infos.getPropertyPresentations(status.getUnpairedGettersOrSetters());
+				
+				if (propertyPresentations != null) {
+					for (MemberPresentation presentation : propertyPresentations) {
+						String presentationString = presentation.getPresentation();
+						MemberInfo member = presentation.getMember();
+						String sourceTypeName = member == null ? null : member.getDeclaringTypeQualifiedName();
+						if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+							sourceTypeName = Signature.getSimpleName(sourceTypeName);
+						String typeName = member == null ? null : member.getType().getName();
+						if (typeName != null && typeName.indexOf('.') != -1) 
+							typeName = Signature.getSimpleName(typeName);
+						IJavaElement element = member == null ? null : member.getJavaElement();
+						String attachedJavaDoc = null;
+						
+						try {
+							attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+						} catch (JavaModelException e) {
+							// Ignore
+						}
+
+						TextProposal proposal = new TextProposal();
+						proposal.setReplacementString(presentationString);
+						proposal.setLabel(presentationString);
+						proposal.setImage(getELProposalImage());
+						proposal.setType(typeName);
+						proposal.setSourceType(sourceTypeName);
+						proposal.setContextInfo(attachedJavaDoc);
+						
+						kbProposals.add(proposal);
+					}
+				}
+				// <<<=== JBIDE-512, JBIDE-2541 related changes
+
 			}
 		} else
 			if(expr.getType() != ELObjectType.EL_ARGUMENT_INVOCATION)
@@ -576,12 +722,35 @@
 						break;
 					}
 				} else if (proposal.getPresentation().startsWith(filter)) {
+					// JBIDE-512, JBIDE-2541 related changes ===>>>
+
 					// This is used for CA.
+					MemberInfo member = proposal.getMember();
+					String sourceTypeName = member == null ? null : member.getDeclaringTypeQualifiedName();
+					if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+						sourceTypeName = Signature.getSimpleName(sourceTypeName);
+					String typeName = member == null ? null : member.getType().getName();
+					if (typeName != null && typeName.indexOf('.') != -1) 
+						typeName = Signature.getSimpleName(typeName);
+					IJavaElement element = member == null ? null : member.getJavaElement();
+					String attachedJavaDoc = null;
+					
+					try {
+						attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+					} catch (JavaModelException e) {
+						// Ignore
+					}
+
 					TextProposal kbProposal = new TextProposal();
 					kbProposal.setReplacementString(proposal.getPresentation().substring(filter.length()));
+					kbProposal.setLabel(proposal.getPresentation());
 					kbProposal.setImage(getELProposalImage());
+					kbProposal.setType(typeName);
+					kbProposal.setSourceType(sourceTypeName);
+					kbProposal.setContextInfo(attachedJavaDoc);
 					
 					kbProposals.add(kbProposal);
+					// <<<=== JBIDE-512, JBIDE-2541 related changes
 				}
 			}
 		} else if(expr.getType() == ELObjectType.EL_ARGUMENT_INVOCATION) {
@@ -645,6 +814,24 @@
 					}
 				} else if (proposal.getPresentation().startsWith(filter)) {
 					// This is used for CA.
+					// JBIDE-512, JBIDE-2541 related changes ===>>>
+
+					MemberInfo member = proposal.getMember();
+					String sourceTypeName = member == null ? null : member.getDeclaringTypeQualifiedName();
+					if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+						sourceTypeName = Signature.getSimpleName(sourceTypeName);
+					String typeName = member == null ? null : member.getType().getName();
+					if (typeName != null && typeName.indexOf('.') != -1) 
+						typeName = Signature.getSimpleName(typeName);
+					IJavaElement element = member == null ? null : member.getJavaElement();
+					String attachedJavaDoc = null;
+					
+					try {
+						attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+					} catch (JavaModelException e) {
+						// Ignore
+					}
+
 					TextProposal kbProposal = new TextProposal();
 					
 					String replacementString = proposal.getPresentation().substring(filter.length());
@@ -654,8 +841,12 @@
 					
 					kbProposal.setReplacementString(replacementString);
 					kbProposal.setImage(getELProposalImage());
-					
+					kbProposal.setType(typeName);
+					kbProposal.setSourceType(sourceTypeName);
+					kbProposal.setContextInfo(attachedJavaDoc);
+				
 					kbProposals.add(kbProposal);
+					// <<<=== JBIDE-512, JBIDE-2541 related changes
 				}
 			}
 		}



More information about the jbosstools-commits mailing list