Author: scabanovich
Date: 2008-09-29 11:29:53 -0400 (Mon, 29 Sep 2008)
New Revision: 10542
Modified:
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamBeanHyperlinkPartitioner.java
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamELInJavaStringHyperlinkDetector.java
Log:
JBIDE-1497.
Refactoring for usage of ELOperandToken
Modified:
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamBeanHyperlinkPartitioner.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamBeanHyperlinkPartitioner.java 2008-09-29
15:29:44 UTC (rev 10541)
+++
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamBeanHyperlinkPartitioner.java 2008-09-29
15:29:53 UTC (rev 10542)
@@ -18,6 +18,7 @@
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.jboss.tools.common.el.core.model.ELExpression;
import org.jboss.tools.common.el.core.model.ELInvocationExpression;
import org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlinkPartitioner;
@@ -30,7 +31,6 @@
import org.jboss.tools.common.text.ext.util.Utils;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.SeamCorePlugin;
-import org.jboss.tools.seam.internal.core.el.ELOperandToken;
import org.jboss.tools.seam.internal.core.el.ElVarSearcher;
import org.jboss.tools.seam.internal.core.el.SeamELCompletionEngine;
import org.jboss.tools.seam.internal.core.el.Var;
@@ -195,13 +195,20 @@
Node n = Utils.findNodeForOffset(xmlDocument, offset);
if (n == null || !(n instanceof Attr || n instanceof Text)) return null;
+
+ int start = 0;
+ int end = document.getLength();
+ if(n instanceof IDOMNode) {
+ start = ((IDOMNode)n).getStartOffset();
+ end = ((IDOMNode)n).getEndOffset();
+ }
- List<ELOperandToken> tokens =
SeamELCompletionEngine.findTokensAtOffset(document, offset);
- if (tokens == null || tokens.size() == 0)
+ ELInvocationExpression tokens =
SeamELCompletionEngine.findExpressionAtOffset(document, offset, start, end);
+ if (tokens == null /*|| tokens.size() == 0*/)
return null; // No EL Operand found
- int propStart = tokens.get(0).getStart();
- int propLength = tokens.get(tokens.size() - 1).getStart() + tokens.get(tokens.size() -
1).getLength() - propStart;
+ int propStart = tokens.getStartPosition();
+ int propLength = tokens.getEndPosition() - propStart;
if (propStart > offset || propStart + propLength < offset) return null;
@@ -255,7 +262,7 @@
SeamELCompletionEngine engine= new SeamELCompletionEngine();
- String prefix = SeamELCompletionEngine.getPrefix(document.get(), r.getOffset() +
r.getLength());
+ String prefix = propText;
ELExpression expr = SeamELCompletionEngine.parseOperand(prefix);
if (expr == null)
return null; // No EL Operand found
Modified:
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamELInJavaStringHyperlinkDetector.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamELInJavaStringHyperlinkDetector.java 2008-09-29
15:29:44 UTC (rev 10541)
+++
trunk/seam/plugins/org.jboss.tools.seam.text.ext/src/org/jboss/tools/seam/text/ext/hyperlink/SeamELInJavaStringHyperlinkDetector.java 2008-09-29
15:29:53 UTC (rev 10542)
@@ -20,6 +20,7 @@
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.text.FastJavaPartitionScanner;
import org.eclipse.jdt.internal.ui.text.JavaWordFinder;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
@@ -27,6 +28,7 @@
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jface.text.rules.IToken;
import org.eclipse.ui.texteditor.ITextEditor;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.SeamCorePlugin;
@@ -39,7 +41,7 @@
public IHyperlink[] detectHyperlinks(ITextViewer textViewer,
IRegion region, boolean canShowMultipleHyperlinks) {
ITextEditor textEditor= (ITextEditor)getAdapter(ITextEditor.class);
- if (region == null || canShowMultipleHyperlinks || !(textEditor instanceof
JavaEditor))
+ if (region == null /*|| canShowMultipleHyperlinks*/ || !(textEditor instanceof
JavaEditor))
return null;
int offset= region.getOffset();
@@ -53,7 +55,22 @@
if (wordRegion == null)
return null;
-
+
+ int[] range = null;
+ FastJavaPartitionScanner scanner = new FastJavaPartitionScanner();
+ scanner.setRange(document, 0, document.getLength());
+ while(true) {
+ IToken token = scanner.nextToken();
+ if(token == null || token.isEOF()) break;
+ int start = scanner.getTokenOffset();
+ int end = start + scanner.getTokenLength();
+ if(start <= offset && end >= offset) {
+ range = new int[]{start, end};
+ break;
+ }
+ if(start > offset) break;
+ }
+
if (!checkStartPosition(document, offset))
return null;
@@ -67,14 +84,16 @@
// Ignore. It is probably because of Java element's resource is not found
}
- IJavaElement[] elements = findJavaElements(document, file, wordRegion);
+ if(range == null) range = new int[]{0, document.getLength()};
+
+ IJavaElement[] elements = findJavaElements(document, file, wordRegion, range[0],
range[1]);
if (elements != null && elements.length > 0)
return new IHyperlink[] {new SeamELInJavaStringHyperlink(wordRegion, elements)};
return null;
}
- public static IJavaElement[] findJavaElements(IDocument document, IFile file, IRegion
region) {
+ public static IJavaElement[] findJavaElements(IDocument document, IFile file, IRegion
region, int start, int end) {
IProject project = (file == null ? null : file.getProject());
@@ -84,7 +103,7 @@
SeamELCompletionEngine engine= new SeamELCompletionEngine();
- String prefix= engine.getJavaElementExpression(document.get(), region.getOffset(),
region);
+ String prefix= engine.getJavaElementExpression(document, region.getOffset(), region,
start, end);
prefix = (prefix == null ? "" : prefix);
List<IJavaElement> javaElements = null;