Author: vrubezhny
Date: 2008-04-10 09:55:21 -0400 (Thu, 10 Apr 2008)
New Revision: 7484
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java
Log:
http://jira.jboss.com/jira/browse/JBIDE-1814 Seam EL Hyper Links don't not recognize
"var" attributes in JSF tags.
fixed
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java 2008-04-10
13:55:14 UTC (rev 7483)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java 2008-04-10
13:55:21 UTC (rev 7484)
@@ -971,12 +971,12 @@
members = newMembers;
}
} else { // Last segment
- Set<IJavaElement> javaElements = new HashSet<IJavaElement>();
+ List<IJavaElement> javaElements = new ArrayList<IJavaElement>();
if (token.getType() == ELOperandToken.EL_VARIABLE_NAME_TOKEN ||
token.getType() == ELOperandToken.EL_PROPERTY_NAME_TOKEN ||
token.getType() == ELOperandToken.EL_METHOD_TOKEN) {
// return filtered methods + properties
- Set<TypeInfoCollector.MemberInfo> javaElementInfosToFilter = new
HashSet<TypeInfoCollector.MemberInfo>();
+ List<TypeInfoCollector.MemberInfo> javaElementInfosToFilter = new
ArrayList<TypeInfoCollector.MemberInfo>();
for (TypeInfoCollector.MemberInfo mbr : members) {
TypeInfoCollector infos = SeamExpressionResolver.collectTypeInfo(mbr);
javaElementInfosToFilter.addAll(infos.getMethods());
@@ -1014,4 +1014,77 @@
}
return res;
}
+
+ /**
+ * Returns list of Seam ELOperandToken which are placed under the cursor position
+ *
+ * @param document
+ * @param offset
+ * @return
+ */
+ public static List<ELOperandToken> findTokensAtOffset(IDocument document, int
offset) {
+ List<ELOperandToken> result = new ArrayList<ELOperandToken>();
+
+ int elStart = getELStart(document, offset);
+
+ if (elStart == -1)
+ elStart = offset;
+
+ SeamELOperandTokenizerForward tokenizer = new SeamELOperandTokenizerForward(document,
elStart);
+ List<ELOperandToken> tokens = tokenizer.getTokens();
+
+ ELOperandToken lastSeparator = null;
+ for (int i = 0; tokens != null && i < tokens.size(); i++) {
+ ELOperandToken token = tokens.get(i);
+ if (token.getType() == ELOperandToken.EL_SEPARATOR_TOKEN) {
+ lastSeparator = token;
+ continue;
+ }
+ if (token.getType() == ELOperandToken.EL_VARIABLE_NAME_TOKEN ||
+ token.getType() == ELOperandToken.EL_METHOD_TOKEN ||
+ token.getType() == ELOperandToken.EL_PROPERTY_NAME_TOKEN) {
+ if (token.getStart() <= offset) {
+ if (lastSeparator != null)
+ result.add(lastSeparator);
+ result.add(token);
+ } else {
+ // Stop processing. We're not interrested of the rest of tokens
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /*
+ * Scans the document from the offset to the beginning to find start of Seam EL operand
+ * Returns the start position of first Seam EL operand token
+ */
+ private static int getELStart(IDocument document, int offset) {
+ SeamELOperandTokenizer tokenizer = new SeamELOperandTokenizer(document, offset);
+ List<ELOperandToken> tokens = tokenizer.getTokens();
+
+ if (tokens == null || tokens.size() == 0)
+ return -1;
+
+ ELOperandToken firstToken = tokens.get(0);
+ return firstToken.getStart();
+ }
+
+ /*
+ * Scans the document from the offset to the beginning to find start of Seam EL operand
+ * Returns the end position of last Seam EL operand token
+ */
+ private static int getELEnd(IDocument document, int offset) {
+ SeamELOperandTokenizer tokenizer = new SeamELOperandTokenizerForward(document,
offset);
+ List<ELOperandToken> tokens = tokenizer.getTokens();
+
+ if (tokens == null || tokens.size() == 0)
+ return -1;
+
+ ELOperandToken lastToken = tokens.get(tokens.size() - 1);
+ return lastToken.getStart() + lastToken.getLength();
+ }
+
}
\ No newline at end of file