package com.anjlab.eclipse.tapestry5.hyperlink; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.texteditor.ITextEditor; import com.anjlab.eclipse.tapestry5.EclipseUtils; import com.anjlab.eclipse.tapestry5.Member; import com.anjlab.eclipse.tapestry5.TapestryFile; import com.anjlab.eclipse.tapestry5.TextEditorCallback; import com.anjlab.eclipse.tapestry5.hyperlink.XmlFragment.XmlAtomicFragment; public class MemberHyperlink implements IHyperlink { private XmlAtomicFragment atomicFragment; private Member member; private TapestryFile tapestryFile; public MemberHyperlink(XmlAtomicFragment atomicFragment, TapestryFile tapestryFile, Member member) { this.atomicFragment = atomicFragment; this.member = member; this.tapestryFile = tapestryFile; } @Override public IRegion getHyperlinkRegion() { return atomicFragment.region; } @Override public String getTypeLabel() { return member.getName(); } @Override public String getHyperlinkText() { return member.getName(); } @Override public void open() { EclipseUtils.openFile(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), tapestryFile, new TextEditorCallback() { @Override public void editorOpened(ITextEditor textEditor) { if (member.getNameRange() != null) { textEditor.selectAndReveal( member.getNameRange().getOffset(), member.getNameRange().getLength()); } } }); } }