[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