From d33dba258fcb48ba6f755a545f631d57597f6c9b Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Fri, 4 May 2012 12:41:00 +0400 Subject: [PATCH] IDEA-49543 Suppress GroovyDoc error --- .../GroovySuppressableInspectionTool.java | 15 ++++++++++++- .../codeInspection/SuppressForMemberFix.java | 22 +++++++++++++------ .../annotation/GrAnnotationImpl.java | 2 +- .../groovy/lang/GroovyHighlightingTest.groovy | 16 ++++++++++++++ 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovySuppressableInspectionTool.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovySuppressableInspectionTool.java index 2f0ff8beb65f..1c060d80e94d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovySuppressableInspectionTool.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/GroovySuppressableInspectionTool.java @@ -27,6 +27,8 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment; +import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocCommentOwner; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotationArrayInitializer; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotationMemberValue; @@ -83,7 +85,18 @@ public abstract class GroovySuppressableInspectionTool extends LocalInspectionTo } } - GrMember member = PsiTreeUtil.getNonStrictParentOfType(place, GrMember.class); + GrMember member = null; + GrDocComment docComment = PsiTreeUtil.getParentOfType(place, GrDocComment.class); + if (docComment != null) { + GrDocCommentOwner owner = docComment.getOwner(); + if (owner instanceof GrMember) { + member = (GrMember)owner; + } + } + if (member == null) { + member = PsiTreeUtil.getNonStrictParentOfType(place, GrMember.class); + } + while (member != null) { GrModifierList modifierList = member.getModifierList(); for (String ids : getInspectionIdsSuppressedInAnnotation(modifierList)) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java index f23d90d93da8..fee7efb32ff3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java @@ -22,7 +22,6 @@ import com.intellij.codeInsight.daemon.HighlightDisplayKey; import com.intellij.codeInspection.InspectionsBundle; import com.intellij.codeInspection.SuppressIntentionAction; import com.intellij.codeInspection.SuppressManager; -import com.intellij.codeInspection.SuppressManagerImpl; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.*; @@ -30,6 +29,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment; import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocCommentOwner; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; @@ -58,7 +58,17 @@ public class SuppressForMemberFix extends SuppressIntentionAction { if (context == null || context instanceof PsiFile) { return null; } - GrDocCommentOwner container = PsiTreeUtil.getParentOfType(context, GrDocCommentOwner.class); + + GrDocCommentOwner container = null; + + GrDocComment docComment = PsiTreeUtil.getParentOfType(context, GrDocComment.class); + if (docComment != null) { + container = docComment.getOwner(); + } + if (container == null) { + container = PsiTreeUtil.getParentOfType(context, GrDocCommentOwner.class); + } + while (container instanceof GrAnonymousClassDefinition || container instanceof GrTypeParameter) { container = PsiTreeUtil.getParentOfType(container, GrDocCommentOwner.class); if (container == null) return null; @@ -88,10 +98,8 @@ public class SuppressForMemberFix extends SuppressIntentionAction { public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) { final GrDocCommentOwner container = getContainer(context); - myKey = container instanceof PsiClass - ? "suppress.inspection.class" - : container instanceof PsiMethod ? "suppress.inspection.method" : "suppress.inspection.field"; - return container != null && context != null && context.getManager().isInProject(context); + myKey = container instanceof PsiClass ? "suppress.inspection.class" : container instanceof PsiMethod ? "suppress.inspection.method" : "suppress.inspection.field"; + return container != null && context.getManager().isInProject(context); } public void invoke(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) throws IncorrectOperationException { @@ -106,7 +114,7 @@ public class SuppressForMemberFix extends SuppressIntentionAction { } private static void addSuppressAnnotation(final Project project, final GrModifierList modifierList, final String id) throws IncorrectOperationException { - PsiAnnotation annotation = modifierList.findAnnotation(SuppressManagerImpl.SUPPRESS_INSPECTIONS_ANNOTATION_NAME); + PsiAnnotation annotation = modifierList.findAnnotation(SuppressManager.SUPPRESS_INSPECTIONS_ANNOTATION_NAME); final GrExpression toAdd = GroovyPsiElementFactory.getInstance(project).createExpressionFromText("\"" + id + "\""); if (annotation != null) { final PsiAnnotationMemberValue value = annotation.findDeclaredAttributeValue(null); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/annotation/GrAnnotationImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/annotation/GrAnnotationImpl.java index 268726ca0cf3..4f004d2702d6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/annotation/GrAnnotationImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/annotation/GrAnnotationImpl.java @@ -102,7 +102,7 @@ public class GrAnnotationImpl extends GrStubElementBase implem return PsiImplUtil.findDeclaredAttributeValue(this, attributeName); } - public T setDeclaredAttributeValue(@NonNls String attributeName, T value) { + public T setDeclaredAttributeValue(@Nullable @NonNls String attributeName, T value) { return (T)PsiImplUtil.setDeclaredAttributeValue(this, attributeName, value, ANNOTATION_CREATOR); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy index aa97f29efc10..f736d7b66656 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy @@ -840,4 +840,20 @@ char c = 'a' myFixture.testHighlighting(true, false, true) } + public void testSuppressedErrorInGroovyDoc() { + myFixture.configureByText('_.groovy', '''\ +class Class2 { + + + /** dependency injection for {@link GrailsFilterInvocationDefinition} */ + @SuppressWarnings("GroovyDocCheck") + static main(args) {} + + /** dependency injection for {@link GrailsFilterInvocationDefinition} */ + static main2(args) {} +}''') + myFixture.enableInspections(new GroovyDocCheckInspection()) + myFixture.testHighlighting(true, false, true) + } + } \ No newline at end of file