[jbosstools-commits] JBoss Tools SVN: r42641 - trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Wed Jul 18 19:32:14 EDT 2012
Author: scabanovich
Date: 2012-07-18 19:32:13 -0400 (Wed, 18 Jul 2012)
New Revision: 42641
Added:
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELVarListHyperlink.java
Modified:
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java
Log:
JBIDE-12295
https://issues.jboss.org/browse/JBIDE-12295
Open-on of multiple declarations of ui:param with the same name are supported.
Modified: trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java 2012-07-18 23:30:55 UTC (rev 42640)
+++ trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java 2012-07-18 23:32:13 UTC (rev 42641)
@@ -33,6 +33,7 @@
import org.jboss.tools.common.el.core.resolver.ELSegment;
import org.jboss.tools.common.el.core.resolver.ELSegmentImpl;
import org.jboss.tools.common.el.core.resolver.IOpenableReference;
+import org.jboss.tools.common.el.core.resolver.ELSegmentImpl.VarOpenable;
import org.jboss.tools.jst.web.kb.PageContextFactory;
public class ELHyperlinkDetector extends AbstractHyperlinkDetector{
@@ -65,9 +66,22 @@
if(openables.length == 0) {
links.add(new ELHyperlink(textViewer.getDocument(), reference, segment, null));
} else {
+ List<ELHyperlink> vars = new ArrayList<ELHyperlink>();
for (IOpenableReference openable: openables) {
- links.add(new ELHyperlink(textViewer.getDocument(), reference, segment, openable));
+ ELHyperlink link = new ELHyperlink(textViewer.getDocument(), reference, segment, openable);
+ if(openable instanceof VarOpenable) {
+ vars.add(link);
+ } else {
+ links.add(link);
+ }
}
+ if(vars.isEmpty()) {
+ // do nothing
+ } else if(vars.size() == 1) {
+ links.add(0, vars.get(0));
+ } else {
+ links.add(0, new ELVarListHyperlink(textViewer, reference, segment, vars.toArray(new ELHyperlink[0])));
+ }
}
} else if(segment != null && ((ELSegmentImpl)segment).getVar() != null && unresolved == null && segment.getOpenable().length > 0) {
unresolved = segment;
Added: trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELVarListHyperlink.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELVarListHyperlink.java (rev 0)
+++ trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELVarListHyperlink.java 2012-07-18 23:32:13 UTC (rev 42641)
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.jst.text.ext.hyperlink;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.jboss.tools.common.el.core.ELReference;
+import org.jboss.tools.common.el.core.resolver.ELSegment;
+import org.jboss.tools.common.el.core.resolver.ELSegmentImpl.VarOpenable;
+import org.jboss.tools.common.el.core.resolver.Var;
+import org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlink;
+import org.jboss.tools.common.text.ext.hyperlink.HyperlinkRegion;
+import org.jboss.tools.common.text.ext.hyperlink.InformationControlManager;
+import org.jboss.tools.common.text.ext.hyperlink.xpl.HierarchyInformationControl;
+import org.jboss.tools.common.util.FileUtil;
+import org.jboss.tools.jst.text.ext.JSTExtensionsPlugin;
+
+public class ELVarListHyperlink extends AbstractHyperlink {
+ ITextViewer viewer;
+ ELHyperlink[] hyperlinks;
+ private ELReference reference;
+ private ELSegment segment;
+
+ public ELVarListHyperlink(ITextViewer viewer, ELReference reference, ELSegment segment, ELHyperlink[] hyperlinks) {
+ this.viewer = viewer;
+ this.hyperlinks = hyperlinks;
+ this.reference = reference;
+ this.segment = segment;
+ setDocument(viewer.getDocument());
+ }
+
+ /**
+ * (non-Javadoc)
+ * @see org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlink#doGetHyperlinkRegion(int)
+ */
+ @Override
+ protected IRegion doGetHyperlinkRegion(int offset) {
+ IRegion region = super.doGetHyperlinkRegion(offset);
+ return (region != null ? region : new HyperlinkRegion(
+ reference.getStartPosition()+segment.getSourceReference().getStartPosition(),
+ segment.getSourceReference().getLength()));
+ }
+
+ @Override
+ protected void doHyperlink(IRegion region) {
+ VarInformationControlManager.instance.showHyperlinks("Open Var Declaration", viewer, hyperlinks); //$NON-NLS-1$
+ }
+
+ @Override
+ public String getHyperlinkText() {
+ return "Open Var Declaration"; //$NON-NLS-1$
+ }
+
+}
+
+class VarInformationControlManager extends InformationControlManager {
+ static VarInformationControlManager instance = new VarInformationControlManager();
+
+ protected IInformationControlCreator getHierarchyPresenterControlCreator(final String title, final IHyperlink[] hyperlinks) {
+ return new IInformationControlCreator() {
+ public IInformationControl createInformationControl(Shell parent) {
+ int shellStyle= SWT.RESIZE;
+ int treeStyle= SWT.V_SCROLL | SWT.H_SCROLL;
+ HierarchyInformationControl iControl = new VarHierarchyInformationControl(parent, title, shellStyle, treeStyle, hyperlinks);
+ iControl.setInput(hyperlinks);
+ return iControl;
+ }
+ };
+ }
+}
+
+class VarHierarchyInformationControl extends HierarchyInformationControl {
+ public VarHierarchyInformationControl(Shell parent, String title, int shellStyle, int tableStyle, IHyperlink[] hyperlinks) {
+ super(parent, title, shellStyle, tableStyle, hyperlinks);
+ }
+
+ protected BeanTableLabelProvider createTableLableProvider() {
+ return new VarTableLabelProvider();
+ }
+
+
+ class VarTableLabelProvider extends BeanTableLabelProvider {
+
+ public StyledString getStyledText(Object element) {
+ StyledString sb = new StyledString();
+ if(element instanceof ELHyperlink) {
+ ELHyperlink el = (ELHyperlink)element;
+ VarOpenable v = (VarOpenable)el.openable;
+ Var var = v.getVar();
+ IDocument doc = new Document(FileUtil.getContentFromEditorOrFile(var.getFile()));
+ int line = -1;
+ try {
+ if(var.getDeclarationOffset() < doc.getLength()) {
+ line = doc.getLineOfOffset(var.getDeclarationOffset()) + 1;
+ }
+ } catch (BadLocationException e) {
+ JSTExtensionsPlugin.getDefault().logError(e);
+ }
+ sb.append(var.getFile().getName(), NAME_STYLE);
+ if(line > 0) {
+ sb.append(", line " + line, NAME_STYLE);
+ }
+ sb.append(" - " + var.getFile().getParent().getFullPath().toString(), PACKAGE_STYLE);
+ } else if(element instanceof IHyperlink){
+ sb.append(((IHyperlink)element).getHyperlinkText(), NAME_STYLE);
+ }
+ return sb;
+ }
+
+ }
+
+
+}
Property changes on: trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELVarListHyperlink.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
More information about the jbosstools-commits
mailing list