IDEA-49543 Suppress GroovyDoc error

This commit is contained in:
Maxim.Medvedev
2012-05-04 14:34:32 +04:00
parent dba5db237d
commit d33dba258f
4 changed files with 46 additions and 9 deletions
@@ -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)) {
@@ -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);
@@ -102,7 +102,7 @@ public class GrAnnotationImpl extends GrStubElementBase<GrAnnotationStub> implem
return PsiImplUtil.findDeclaredAttributeValue(this, attributeName);
}
public <T extends PsiAnnotationMemberValue> T setDeclaredAttributeValue(@NonNls String attributeName, T value) {
public <T extends PsiAnnotationMemberValue> T setDeclaredAttributeValue(@Nullable @NonNls String attributeName, T value) {
return (T)PsiImplUtil.setDeclaredAttributeValue(this, attributeName, value, ANNOTATION_CREATOR);
}
@@ -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 <error descr="Cannot resolve symbol 'GrailsFilterInvocationDefinition'">GrailsFilterInvocationDefinition</error>} */
static main2(args) {}
}''')
myFixture.enableInspections(new GroovyDocCheckInspection())
myFixture.testHighlighting(true, false, true)
}
}