diff options
Diffstat (limited to 'platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java')
-rw-r--r-- | platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java b/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java index 1c7855d2eedb..709c3b458112 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java @@ -19,7 +19,9 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.DumbAware; import com.intellij.pom.Navigatable; import com.intellij.pom.NavigatableWithText; +import com.intellij.pom.PomTargetPsiElement; import com.intellij.util.OpenSourceUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public abstract class BaseNavigateToSourceAction extends AnAction implements DumbAware { @@ -37,7 +39,7 @@ public abstract class BaseNavigateToSourceAction extends AnAction implements Dum public void update(AnActionEvent event) { DataContext dataContext = event.getDataContext(); - final Navigatable target = getTarget(dataContext); + final Navigatable target = findTargetForUpdate(dataContext); boolean enabled = target != null; if (ActionPlaces.isPopupPlace(event.getPlace())) { event.getPresentation().setVisible(enabled); @@ -49,36 +51,21 @@ public abstract class BaseNavigateToSourceAction extends AnAction implements Dum else { event.getPresentation().setEnabled(enabled); } - if (target != null && target instanceof NavigatableWithText) { - //as myFocusEditor is always ignored - Main Menu|View always contains 2 actions with the same name and actually same behaviour - if (!myFocusEditor) { - event.getPresentation().setVisible(false); - return; - } - final String navigateActionText = ((NavigatableWithText)target).getNavigateActionText(myFocusEditor); - if (navigateActionText != null) { - event.getPresentation().setText(navigateActionText); - } - else { - event.getPresentation().setText(getTemplatePresentation().getText()); - } - } - else { - event.getPresentation().setText(getTemplatePresentation().getText()); - } + //as myFocusEditor is always ignored - Main Menu|View always contains 2 actions with the same name and actually same behaviour + event.getPresentation().setVisible(target == null || myFocusEditor); + String navigateActionText = myFocusEditor && target instanceof NavigatableWithText? + ((NavigatableWithText)target).getNavigateActionText(true) : null; + event.getPresentation().setText(navigateActionText == null ? getTemplatePresentation().getText() : navigateActionText); } @Nullable - private Navigatable getTarget(final DataContext dataContext) { - if (!myFocusEditor && CommonDataKeys.EDITOR.getData(dataContext) != null) { - // makes no sense in editor and conflicts with another action there (ctrl+enter) - return null; - } - + private Navigatable findTargetForUpdate(@NotNull DataContext dataContext) { Navigatable[] navigatables = getNavigatables(dataContext); - if (navigatables != null) { - for (Navigatable navigatable : navigatables) { - if (navigatable.canNavigate()) return navigatable; + if (navigatables == null) return null; + + for (Navigatable navigatable : navigatables) { + if (navigatable.canNavigate()) { + return navigatable instanceof PomTargetPsiElement ? ((PomTargetPsiElement)navigatable).getTarget() : navigatable; } } return null; |