diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java index 5934bc1c68c3..3ceb4129d47e 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java @@ -531,7 +531,8 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper if (fragmentData == null) return null; final int offset = fragmentData.getSecond().getOffset(); - final PsiElement target = fragmentData.getFirst().getContainingFile().getViewProvider().findElementAt(offset); + final PsiElement target = + JavaDocFragmentAnchorCacheKt.getMaybeSourceClass(fragmentData.getFirst()).getContainingFile().getViewProvider().findElementAt(offset); if (!(target instanceof PsiDocToken)) return null; return new PsiSymbolReference() { diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocFragmentAnchorCache.kt b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocFragmentAnchorCache.kt index fe043eb0d7c6..98544bab7d49 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocFragmentAnchorCache.kt +++ b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocFragmentAnchorCache.kt @@ -5,6 +5,8 @@ import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.psi.PsiClass +import com.intellij.psi.PsiElement +import com.intellij.psi.impl.compiled.ClsClassImpl import com.intellij.psi.javadoc.PsiDocComment import com.intellij.psi.javadoc.PsiDocFragmentName import com.intellij.psi.util.CachedValueProvider.Result @@ -28,10 +30,11 @@ private class JavaDocFragmentCacheService { fun getAnchors(project: Project, psiClass: PsiClass): LinkedHashSet { val manager = CachedValuesManager.getManager(project) return manager.getCachedValue(psiClass) { + val targetClass = getMaybeSourceClass(psiClass) val result = LinkedHashSet().apply { - addAll(findIdsFromComment(psiClass.docComment)) - for (method in psiClass.methods) addAll(findIdsFromComment(method.docComment)) - for (field in psiClass.fields) addAll(findIdsFromComment(field.docComment)) + addAll(findIdsFromComment(targetClass.docComment)) + for (method in targetClass.methods) addAll(findIdsFromComment(method.docComment)) + for (field in targetClass.fields) addAll(findIdsFromComment(field.docComment)) } Result.create(result, PsiModificationTracker.MODIFICATION_COUNT) } @@ -78,4 +81,15 @@ fun resolveJavaDocFragment(project: Project, fragmentName: PsiDocFragmentName): ?: return null return psiClass to data +} + +/** Returns the source class if available for a given compiled class */ +fun getMaybeSourceClass(clazz: PsiClass): PsiClass { + if (clazz is ClsClassImpl) { + val navigationClass: PsiElement = clazz.getNavigationElement() + if (navigationClass is PsiClass) { + return navigationClass + } + } + return clazz } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java index f0564be72da2..55020a07a6e7 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java @@ -199,7 +199,8 @@ public final class JavaDocUtil { String fragmentName = refTextCorrected.substring(fragmentIndex + 2); for (JavaDocFragmentData fragmentData : JavaDocFragmentAnchorCacheKt.getJavaDocFragmentsForClass(manager.getProject(), aClass)) { if (fragmentName.equals(fragmentData.getName())) { - PsiElement ref = PsiUtilCore.getElementAtOffset(aClass.getContainingFile(), fragmentData.getOffset()); + PsiElement ref = PsiUtilCore.getElementAtOffset(JavaDocFragmentAnchorCacheKt.getMaybeSourceClass(aClass).getContainingFile(), + fragmentData.getOffset()); PsiDocComment docComment = PsiTreeUtil.getParentOfType(ref, PsiDocComment.class, false); if (docComment == null) return null; PsiElement owner = docComment.getOwner();