From: peter Date: Tue, 16 Feb 2016 16:25:13 +0000 (+0100) Subject: IDEA-151736 Cannot open link in javadoc X-Git-Tag: appcode/146.5~3 X-Git-Url: http://git.jetbrains.org/?p=idea%2Fcommunity.git;a=commitdiff_plain;h=225876bac5ee4f42221a87ee7f5f58207adb9a65 IDEA-151736 Cannot open link in javadoc --- 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 52fdb9d..25930715 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 @@ -48,6 +48,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.pom.Navigatable; import com.intellij.psi.*; import com.intellij.psi.search.PsiElementProcessor; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtilCore; import com.intellij.ui.awt.RelativePoint; import org.jetbrains.annotations.NotNull; @@ -137,10 +138,16 @@ public class GotoDeclarationAction extends BaseCodeInsightAction implements Code private static void gotoTargetElement(@NotNull PsiElement element, @NotNull Editor currentEditor, @NotNull PsiFile currentFile) { if (element.getContainingFile() == currentFile) { - Project project = element.getProject(); - IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); - new OpenFileDescriptor(project, currentFile.getViewProvider().getVirtualFile(), element.getTextOffset()).navigateIn(currentEditor); - return; + int offset = element.getTextOffset(); + PsiElement leaf = currentFile.findElementAt(offset); + // check that element is really physically inside the file + // there are fake elements with custom navigation (e.g. opening URL in browser) that override getContainingFile for various reasons + if (leaf != null && PsiTreeUtil.isAncestor(element, leaf, false)) { + Project project = element.getProject(); + IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); + new OpenFileDescriptor(project, currentFile.getViewProvider().getVirtualFile(), offset).navigateIn(currentEditor); + return; + } } Navigatable navigatable = element instanceof Navigatable ? (Navigatable)element : EditSourceUtil.getDescriptor(element);