[jbosstools-commits] JBoss Tools SVN: r30444 - trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Fri Apr 8 17:16:26 EDT 2011
Author: dazarov
Date: 2011-04-08 17:16:26 -0400 (Fri, 08 Apr 2011)
New Revision: 30444
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlink.java
trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlinkDetector.java
Log:
https://issues.jboss.org/browse/JBIDE-5475
Modified: trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlink.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlink.java 2011-04-08 19:48:17 UTC (rev 30443)
+++ trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlink.java 2011-04-08 21:16:26 UTC (rev 30444)
@@ -18,17 +18,15 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.Region;
import org.eclipse.ui.IEditorPart;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.jboss.tools.common.model.XModel;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.util.FindObjectHelper;
import org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlink;
-import org.jboss.tools.jst.text.ext.hyperlink.jsp.JSPRootHyperlinkPartitioner;
import org.jboss.tools.common.text.ext.util.StructuredModelWrapper;
import org.jboss.tools.common.text.ext.util.Utils;
import org.jboss.tools.jsf.text.ext.JSFTextExtMessages;
+import org.jboss.tools.jst.text.ext.hyperlink.jsp.JSPRootHyperlinkPartitioner;
import org.jboss.tools.jst.web.kb.KbProjectFactory;
import org.jboss.tools.jst.web.kb.internal.taglib.AbstractComponent;
import org.jboss.tools.jst.web.kb.taglib.IComponent;
@@ -43,7 +41,11 @@
* @author Jeremy
*/
public class JsfJSPTagNameHyperlink extends AbstractHyperlink {
-
+ private IRegion fLastRegion = null;
+
+ public JsfJSPTagNameHyperlink(IRegion region){
+ fLastRegion = region;
+ }
/**
* @see com.ibm.sse.editor.AbstractHyperlink#doHyperlink(org.eclipse.jface.text.IRegion)
*/
@@ -184,40 +186,13 @@
}
}
- IRegion fLastRegion = null;
/**
* @see com.ibm.sse.editor.AbstractHyperlink#doGetHyperlinkRegion(int)
*/
protected IRegion doGetHyperlinkRegion(int offset) {
- fLastRegion = getRegion(offset);
return fLastRegion;
}
- protected IRegion getRegion (int offset) {
- StructuredModelWrapper smw = new StructuredModelWrapper();
- smw.init(getDocument());
- try {
- Document xmlDocument = smw.getDocument();
- if (xmlDocument == null) return null;
-
- Node n = Utils.findNodeForOffset(xmlDocument, offset);
-
- if (n == null || !(n instanceof IDOMElement)) return null;
-
- IDOMElement elem = (IDOMElement)n;
- String tagName = elem.getTagName();
- int start = elem.getStartOffset();
- final int nameStart = start + (elem.isEndTag() ? "</" : "<").length(); //$NON-NLS-1$ //$NON-NLS-2$
- final int nameEnd = nameStart + tagName.length();
-
- if (nameStart > offset || nameEnd <= offset) return null;
-
- return new Region(nameStart,nameEnd - nameStart);
- } finally {
- smw.dispose();
- }
- }
-
/*
* (non-Javadoc)
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlinkDetector.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlinkDetector.java 2011-04-08 19:48:17 UTC (rev 30443)
+++ trunk/jsf/plugins/org.jboss.tools.jsf.text.ext/src/org/jboss/tools/jsf/text/ext/hyperlink/JsfJSPTagNameHyperlinkDetector.java 2011-04-08 21:16:26 UTC (rev 30444)
@@ -13,13 +13,15 @@
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
-import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.jboss.tools.common.core.resources.XModelObjectEditorInput;
+import org.jboss.tools.common.el.core.resolver.ELContext;
import org.jboss.tools.common.text.ext.util.StructuredModelWrapper;
import org.jboss.tools.common.text.ext.util.Utils;
import org.jboss.tools.jst.jsp.jspeditor.JSPTextEditor;
@@ -58,42 +60,26 @@
if (xmlDocument == null)
return null;
- IDOMNode node = (IDOMNode)Utils.findNodeForOffset((Node)xmlDocument, region.getOffset());
- if(node != null){
+ Node n = Utils.findNodeForOffset(xmlDocument, region.getOffset());
+
+ IRegion reg = getRegion(n, region.getOffset());
+
+ if(reg != null){
KbQuery query = new KbQuery();
query.setType(KbQuery.Type.TAG_NAME);
+ query.setOffset(reg.getOffset());
+ query.setValue(n.getNodeName());
+ query.setMask(false);
- IStructuredDocumentRegion sRegion = node.getStartStructuredDocumentRegion();
+ ELContext context = PageContextFactory.createPageContext(file);
- if(sRegion == null)
- return null;
-
- if(region.getOffset() > (sRegion.getStartOffset()+sRegion.getLength()))
- sRegion = node.getEndStructuredDocumentRegion();
-
- final IStructuredDocumentRegion reg = sRegion;
-
- if(reg != null){
- query.setOffset(sRegion.getStartOffset());
- query.setValue(node.getNodeName());
- query.setMask(false);
-
- IPageContext context = (IPageContext)PageContextFactory.createPageContext(file);
-
- IComponent[] components = PageProcessor.getInstance().getComponents(query, context);
+ if(context instanceof IPageContext){
+ IComponent[] components = PageProcessor.getInstance().getComponents(query, (IPageContext)context);
ArrayList<IHyperlink> hyperlinks = new ArrayList<IHyperlink>();
for(IComponent component : components){
if(component instanceof TLDTag || component instanceof FaceletTag){
- TLDTagHyperlink link = new TLDTagHyperlink((AbstractComponent)component, new IRegion(){
- public int getLength() {
- return reg.getLength();
- }
-
- public int getOffset() {
- return reg.getStartOffset();
- }
- });
+ TLDTagHyperlink link = new TLDTagHyperlink((AbstractComponent)component, reg);
link.setDocument(textViewer.getDocument());
hyperlinks.add(link);
}
@@ -102,10 +88,9 @@
if(hyperlinks.size() > 0)
return (IHyperlink[]) hyperlinks.toArray(new IHyperlink[hyperlinks.size()]);
}
-
}
- return null;
+ return parse(textViewer.getDocument(), xmlDocument, region);
}
private void sortHyperlinks(ArrayList<IHyperlink> hyperlinks){
@@ -123,5 +108,35 @@
}
}
}
+
+ private IHyperlink[] parse(IDocument document, Document xmlDocument, IRegion superRegion) {
+ Node n = Utils.findNodeForOffset(xmlDocument, superRegion.getOffset());
+ IRegion r = getRegion(n, superRegion.getOffset());
+ if (r == null) return null;
+
+ JsfJSPTagNameHyperlink link = new JsfJSPTagNameHyperlink(r);
+ link.setDocument(document);
+ return new IHyperlink[]{link};
+ }
+
+ private IRegion getRegion(Node n, int offset) {
+ if (n == null || !(n instanceof IDOMElement)) return null;
+
+ IDOMElement elem = (IDOMElement)n;
+
+ String tagName = elem.getTagName();
+
+ int start = elem.getStartOffset();
+ int nameStart = start + "<".length(); //$NON-NLS-1$
+ int nameEnd = nameStart + tagName.length();
+ if(offset > nameEnd){
+ start = elem.getEndStartOffset();
+ nameStart = start + "</".length(); //$NON-NLS-1$
+ nameEnd = nameStart + tagName.length();
+ }
+
+ return new Region(nameStart,nameEnd - nameStart);
+ }
+
}
More information about the jbosstools-commits
mailing list