@Override public void update(final AnActionEvent event) { if (event.getProject() == null || event.getData(EditorGutter.KEY) != null || Boolean.TRUE.equals(event.getData(CommonDataKeys.EDITOR_VIRTUAL_SPACE))) { event.getPresentation().setEnabled(false); return; } for (GotoDeclarationHandler handler : Extensions.getExtensions(GotoDeclarationHandler.EP_NAME)) { try { String text = handler.getActionText(event.getDataContext()); if (text != null) { Presentation presentation = event.getPresentation(); presentation.setText(text); break; } } catch (AbstractMethodError e) { LOG.error(handler.toString(), e); } } super.update(event); }
@Nullable public static PsiElement[] findTargetElementsNoVS( Project project, Editor editor, int offset, boolean lookupAccepted) { Document document = editor.getDocument(); PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(document); if (file == null) return null; PsiElement elementAt = file.findElementAt(TargetElementUtil.adjustOffset(file, document, offset)); for (GotoDeclarationHandler handler : Extensions.getExtensions(GotoDeclarationHandler.EP_NAME)) { try { PsiElement[] result = handler.getGotoDeclarationTargets(elementAt, offset, editor); if (result != null && result.length > 0) { for (PsiElement element : result) { if (element == null) { LOG.error("Null target element is returned by " + handler.getClass().getName()); return null; } } return result; } } catch (AbstractMethodError e) { LOG.error(new ExtensionException(handler.getClass())); } } int flags = TargetElementUtil.getInstance().getAllAccepted() & ~TargetElementUtil.ELEMENT_NAME_ACCEPTED; if (!lookupAccepted) { flags &= ~TargetElementUtil.LOOKUP_ITEM_ACCEPTED; } PsiElement element = TargetElementUtil.getInstance().findTargetElement(editor, flags, offset); if (element != null) { return new PsiElement[] {element}; } // if no references found in injected fragment, try outer document if (editor instanceof EditorWindow) { EditorWindow window = (EditorWindow) editor; return findTargetElementsNoVS( project, window.getDelegate(), window.getDocument().injectedToHost(offset), lookupAccepted); } return null; }