[jbosstools-commits] JBoss Tools SVN: r17593 - 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
Tue Sep 15 11:20:29 EDT 2009


Author: vrubezhny
Date: 2009-09-15 11:20:28 -0400 (Tue, 15 Sep 2009)
New Revision: 17593

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
Var's declared using var attribute (<h:dataTable value="#{...}" var="mapItem">) are also processed.

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-15 15:12:06 UTC (rev 17592)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/el/AbstractELCompletionEngine.java	2009-09-15 15:20:28 UTC (rev 17593)
@@ -255,20 +255,37 @@
 		}
 		
 		// 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) {
 			
 			for (Var v : vars) {
 				String prefix = operand.toString();
 				if(v.getName().startsWith(prefix)) {
+					MemberInfo memberInfo = resolveEL(file, v.getElToken(), true, vars, varSearcher);
+					String sourceTypeName = memberInfo == null ? null : memberInfo.getDeclaringTypeQualifiedName();
+					if (sourceTypeName != null && sourceTypeName.indexOf('.') != -1) 
+						sourceTypeName = Signature.getSimpleName(sourceTypeName);
+					String typeName = memberInfo == null ? null : memberInfo.getType().getName();
+					if (typeName != null && typeName.indexOf('.') != -1) 
+						typeName = Signature.getSimpleName(typeName);
+					
+					IJavaElement element = memberInfo == null ? null : memberInfo.getJavaElement();
+					String attachedJavaDoc = null;
+					
+					try {
+							attachedJavaDoc = element == null ? null : element.getAttachedJavadoc(null);
+					} catch (JavaModelException e) {
+						// Ignore
+					}
+					
 					String varNameProposal = v.getName().substring(prefix.length());
 					TextProposal proposal = new TextProposal();
+					proposal.setLabel(v.getName());
 					proposal.setReplacementString(varNameProposal);
 					proposal.setLabel(v.getName());
 					proposal.setImage(getELProposalImage());
+					proposal.setType(typeName);
+					proposal.setSourceType(sourceTypeName);
+					proposal.setContextInfo(attachedJavaDoc);
 					status.getProposals().add(proposal);
 				}
 			}
@@ -294,6 +311,21 @@
 		return status.getMemberOfResolvedOperand();
 	}
 
+	/**
+	 * Returns MemberInfo for last segment of EL. Null if El is not resolved.
+	 * @param seamProject
+	 * @param file
+	 * @param operand EL without #{}
+	 * @return MemberInfo for last segment of EL. Null if El is not resolved.
+	 * @throws BadLocationException
+	 * @throws StringIndexOutOfBoundsException
+	 */
+	public TypeInfoCollector.MemberInfo resolveEL(IFile file, ELExpression operand, boolean returnEqualedVariablesOnly, List<Var> vars, ElVarSearcher varSearcher) throws BadLocationException, StringIndexOutOfBoundsException {
+		if(!(operand instanceof ELInvocationExpression)) return null;
+		ELOperandResolveStatus status = resolveELOperand(file, operand, returnEqualedVariablesOnly, vars, varSearcher);
+		return status.getMemberOfResolvedOperand();
+	}
+	
 	public ELOperandResolveStatus resolveELOperand(IFile file, ELExpression operand,  
 			boolean returnEqualedVariablesOnly, boolean varIsUsed) throws BadLocationException, StringIndexOutOfBoundsException {
 		if(!(operand instanceof ELInvocationExpression) || file == null) {
@@ -371,6 +403,7 @@
 					}
 
 					TextProposal proposal = new TextProposal();
+					proposal.setLabel(varName);
 					proposal.setReplacementString(varName.substring(operand.getLength()));
 					setImage(proposal, var);
 					proposal.setType(typeName);



More information about the jbosstools-commits mailing list