From 2c72a7b551fe88fb49e71ecb0e6f0795aff533ab Mon Sep 17 00:00:00 2001 From: Mathias Date: Fri, 6 Mar 2026 17:55:51 +0100 Subject: [PATCH] IDEA-385810 javadoc: highlight wrong ref regardless of module presence GitOrigin-RevId: 1d15f0047cf42bfadb4fc5756facc6f0013d2e84 --- .../javaDoc/JavaDocReferenceInspection.java | 25 ++++++++++--------- .../javadocDeclaration/Link4.java | 3 +++ .../JavadocDeclarationHighlightingTest.java | 1 + 3 files changed, 17 insertions(+), 12 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javadocDeclaration/Link4.java diff --git a/java/java-impl/src/com/intellij/codeInspection/javaDoc/JavaDocReferenceInspection.java b/java/java-impl/src/com/intellij/codeInspection/javaDoc/JavaDocReferenceInspection.java index 954256ac19a8..6b1bb52d79f9 100644 --- a/java/java-impl/src/com/intellij/codeInspection/javaDoc/JavaDocReferenceInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/javaDoc/JavaDocReferenceInspection.java @@ -44,6 +44,7 @@ import com.intellij.psi.PsiField; import com.intellij.psi.PsiJavaCodeReferenceElement; import com.intellij.psi.PsiJavaFile; import com.intellij.psi.PsiJavaModule; +import com.intellij.psi.PsiJavaModuleReferenceElement; import com.intellij.psi.PsiMember; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; @@ -55,6 +56,7 @@ import com.intellij.psi.PsiTypeElement; import com.intellij.psi.ResolveResult; import com.intellij.psi.SmartPointerManager; import com.intellij.psi.SmartPsiElementPointer; +import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef; import com.intellij.psi.impl.source.resolve.reference.impl.providers.PsiFileReference; import com.intellij.psi.impl.source.tree.JavaDocElementType; import com.intellij.psi.javadoc.JavadocManager; @@ -292,12 +294,6 @@ public final class JavaDocReferenceInspection extends LocalInspectionTool { linkElement, reference.getRangeInElement(), message, ProblemHighlightType.LIKE_UNKNOWN_SYMBOL, isOnTheFly, fixes.toArray(LocalQuickFix.EMPTY_ARRAY))); } - private boolean visitDocRefHolder(PsiDocReferenceHolder refHolder, PsiElement context, ProblemsHolder holder, boolean isOnTheFly) { - - - return true; - } - private void visitRefInDocTag(PsiDocTag tag, JavadocManager manager, PsiElement context, ProblemsHolder holder, boolean isOnTheFly) { PsiDocTagValue value = tag.getValueElement(); if (value == null) return; @@ -318,16 +314,21 @@ public final class JavaDocReferenceInspection extends LocalInspectionTool { if (checkFragmentReference(context, holder, isOnTheFly, fragmentRef)) return; } - PsiReference reference = value.getReference(); + PsiElement valueElement = value; + PsiReference reference = valueElement.getReference(); + if (reference == null && valueElement.getLastChild() instanceof PsiDocMethodOrFieldRef) { + valueElement = valueElement.getLastChild(); + reference = valueElement.getReference(); + } + if (reference == null) return; - int textOffset = value.getTextOffset(); - if (textOffset == value.getTextRange().getEndOffset()) return; - PsiDocTagValue valueElement = tag.getValueElement(); - if (valueElement == null) return; + int textOffset = valueElement.getTextOffset(); + if (textOffset == valueElement.getTextRange().getEndOffset()) return; PsiElement element = reference.resolve(); String paramName = - value.getContainingFile().getViewProvider().getContents().subSequence(textOffset, value.getTextRange().getEndOffset()).toString(); + valueElement.getContainingFile().getViewProvider().getContents().subSequence(textOffset, valueElement.getTextRange().getEndOffset()) + .toString(); String message = element == null && reference instanceof PsiPolyVariantReference ? getResolveErrorMessage(((PsiPolyVariantReference)reference).multiResolve(false), context, paramName) : getResolveErrorMessage(element, context, paramName); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javadocDeclaration/Link4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javadocDeclaration/Link4.java new file mode 100644 index 000000000000..a937735dde71 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javadocDeclaration/Link4.java @@ -0,0 +1,3 @@ +/// [java.base/java.lang.String] +/// {@link java.base/java.lang.String} +class Test {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocDeclarationHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocDeclarationHighlightingTest.java index a2c6c663cc4e..7d355cdec3a0 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocDeclarationHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocDeclarationHighlightingTest.java @@ -81,6 +81,7 @@ public class JavadocDeclarationHighlightingTest extends LightDaemonAnalyzerTestC public void testLink1() { doTest(); } public void testLink2() { doTest(); } public void testLink3() { doTest(); } + public void testLink4() { doTest(); } public void testLinkFromInnerClassToSelfMethod() { doTest(); } public void testValueBadReference() { doTest(); } public void testValueGoodReference() { doTest(); }