From d4e45d6061041818ce4ab9a71a857dec8d12db35 Mon Sep 17 00:00:00 2001 From: Mathias Boulay Date: Mon, 2 Sep 2024 15:32:44 +0200 Subject: [PATCH] tweak(JavaDoc): Disable some inspections on older javadoc Some inspections are pointless to check, related to javadoc tags. GitOrigin-RevId: b7bb8bba4b51f1d90678705af3da8e5e5c4a4907 --- .../ig/javadoc/DanglingJavadocInspection.java | 2 +- .../HtmlTagCanBeJavadocTagInspection.java | 8 +++++-- ...MissingDeprecatedAnnotationInspection.java | 3 ++- .../codeInsight/javadoc/JavaDocUtil.java | 23 +++++++++++++++++++ .../DanglingJavadocInspectionTest.java | 2 +- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/java/java-analysis-impl/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java index ae5c8f2df912..540308a0554d 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java @@ -127,7 +127,7 @@ public final class DanglingJavadocInspection extends BaseInspection { @Override public void visitDocComment(@NotNull PsiDocComment comment) { super.visitDocComment(comment); - if (JavaDocUtil.isDanglingDocComment(comment, ignoreCopyright)) { + if (JavaDocUtil.shouldRunInspectionOnOldMarkdownComment(comment) && JavaDocUtil.isDanglingDocComment(comment, ignoreCopyright)) { registerError(comment.getFirstChild(), comment.isMarkdownComment()); } } diff --git a/java/java-analysis-impl/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java index 9612851cc09b..155048145b58 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java @@ -1,7 +1,11 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.siyeh.ig.javadoc; -import com.intellij.codeInspection.*; +import com.intellij.codeInsight.javadoc.JavaDocUtil; +import com.intellij.codeInspection.CleanupLocalInspectionTool; +import com.intellij.codeInspection.CommonQuickFixBundle; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.modcommand.ModCommand; import com.intellij.modcommand.ModCommandQuickFix; import com.intellij.openapi.editor.Document; @@ -104,7 +108,7 @@ public final class HtmlTagCanBeJavadocTagInspection extends BaseInspection imple public void visitDocToken(@NotNull PsiDocToken token) { super.visitDocToken(token); final IElementType tokenType = token.getTokenType(); - if (!JavaDocTokenType.DOC_COMMENT_DATA.equals(tokenType)) { + if (!JavaDocTokenType.DOC_COMMENT_DATA.equals(tokenType) || !JavaDocUtil.shouldRunInspectionOnOldMarkdownComment(token)) { return; } @NonNls final String text = token.getText(); diff --git a/java/java-analysis-impl/src/com/siyeh/ig/javadoc/MissingDeprecatedAnnotationInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/javadoc/MissingDeprecatedAnnotationInspection.java index 81e46c2a6def..3684564ea6fd 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/javadoc/MissingDeprecatedAnnotationInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/javadoc/MissingDeprecatedAnnotationInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.javadoc; +import com.intellij.codeInsight.javadoc.JavaDocUtil; import com.intellij.codeInspection.CleanupLocalInspectionTool; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.options.OptPane; @@ -226,7 +227,7 @@ final class MissingDeprecatedAnnotationInspection extends BaseInspection impleme private static boolean hasDeprecatedComment(PsiJavaDocumentedElement documentedElement, boolean checkContent) { final PsiDocComment comment = documentedElement.getDocComment(); - if (comment == null) { + if (comment == null || !JavaDocUtil.shouldRunInspectionOnOldMarkdownComment(comment)) { return false; } final PsiDocTag deprecatedTag = comment.findTagByName("deprecated"); 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 343bee163938..c75b013c3da8 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 @@ -6,6 +6,7 @@ import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NlsSafe; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaFileCodeStyleFacade; import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef; @@ -16,6 +17,8 @@ import com.intellij.psi.templateLanguages.TemplateLanguageUtil; import com.intellij.psi.util.*; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ObjectUtils; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -434,4 +437,24 @@ public final class JavaDocUtil { } return true; } + + /** + * @return Whether the inspections should be run for the given comment + * Markdown format is allowed for java < 23. However, due to old (sometimes generated) code starting with 3 slashes, + * we should not run the inspections on dangling comments. + */ + @Contract("null -> false") + public static boolean shouldRunInspectionOnOldMarkdownComment(@Nullable PsiDocComment comment) { + if (comment == null) return false; + if (!comment.isMarkdownComment()) return true; + PsiJavaFile file = ObjectUtils.tryCast(comment.getContainingFile(), PsiJavaFile.class); + if (file == null) return false; + + if (file.getLanguageLevel().isAtLeast(LanguageLevel.JDK_23)) return true; + return !isDanglingDocComment(comment, true); + } + + public static boolean shouldRunInspectionOnOldMarkdownComment(@NotNull PsiElement element) { + return shouldRunInspectionOnOldMarkdownComment(PsiTreeUtil.getParentOfType(element, PsiDocComment.class, false, PsiMember.class)); + } } diff --git a/java/java-tests/testSrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java b/java/java-tests/testSrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java index 3eaac467af8a..6872b07ddfec 100644 --- a/java/java-tests/testSrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java +++ b/java/java-tests/testSrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java @@ -14,7 +14,7 @@ public class DanglingJavadocInspectionTest extends LightJavaInspectionTestCase { @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return JAVA_9; + return JAVA_23; } public void testDanglingJavadoc() {