diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoDeclarationAction.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoDeclarationAction.java index 64231d05ce2a..0d0bfa845005 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoDeclarationAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/actions/GotoDeclarationAction.java @@ -92,17 +92,8 @@ public class GotoDeclarationAction extends BaseCodeInsightAction implements Code PsiElement navElement = element.getNavigationElement(); navElement = TargetElementUtilBase.getInstance().getGotoDeclarationTarget(element, navElement); - if (navElement instanceof Navigatable) { - if (((Navigatable)navElement).canNavigate()) { - ((Navigatable)navElement).navigate(true); - } - } - else if (navElement != null) { - int navOffset = navElement.getTextOffset(); - VirtualFile virtualFile = PsiUtilCore.getVirtualFile(navElement); - if (virtualFile != null) { - new OpenFileDescriptor(project, virtualFile, navOffset).navigate(true); - } + if (navElement != null) { + gotoTargetElement(navElement); } } catch (IndexNotReadyException e) { @@ -114,10 +105,7 @@ public class GotoDeclarationAction extends BaseCodeInsightAction implements Code PsiElementProcessor navigateProcessor = new PsiElementProcessor() { @Override public boolean execute(@NotNull final PsiElement element) { - Navigatable navigatable = EditSourceUtil.getDescriptor(element); - if (navigatable != null && navigatable.canNavigate()) { - navigatable.navigate(true); - } + gotoTargetElement(element); return true; } }; @@ -128,6 +116,13 @@ public class GotoDeclarationAction extends BaseCodeInsightAction implements Code } } + private static void gotoTargetElement(PsiElement element) { + Navigatable navigatable = element instanceof Navigatable ? (Navigatable)element : EditSourceUtil.getDescriptor(element); + if (navigatable != null && navigatable.canNavigate()) { + navigatable.navigate(true); + } + } + // returns true if processor is run or is going to be run after showing popup public static boolean chooseAmbiguousTarget(@NotNull Editor editor, int offset,