diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/JavaSuppressionUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/JavaSuppressionUtil.java index c5e5e207b17d..63dec1334e6f 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/JavaSuppressionUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/JavaSuppressionUtil.java @@ -166,7 +166,7 @@ public class JavaSuppressionUtil { return getInspectionIdsSuppressedInAnnotation(modifierList); } - static String getSuppressedInspectionIdsIn(@NotNull PsiElement element) { + public static String getSuppressedInspectionIdsIn(@NotNull PsiElement element) { if (element instanceof PsiComment) { String text = element.getText(); Matcher matcher = SuppressionUtil.SUPPRESS_IN_LINE_COMMENT_PATTERN.matcher(text); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/SuppressionAnnotationInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/SuppressionAnnotationInspectionBase.java index 2eb1cc379117..dcbbe34346e3 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/SuppressionAnnotationInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/SuppressionAnnotationInspectionBase.java @@ -17,7 +17,9 @@ package com.siyeh.ig.maturity; import com.intellij.codeInspection.BatchSuppressManager; import com.intellij.codeInspection.JavaSuppressionUtil; +import com.intellij.codeInspection.SuppressionUtil; import com.intellij.codeInspection.SuppressionUtilCore; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.siyeh.InspectionGadgetsBundle; @@ -66,7 +68,16 @@ public class SuppressionAnnotationInspectionBase extends BaseInspection { if (commentText.length() > 2) { @NonNls final String strippedComment = commentText.substring(2).trim(); if (strippedComment.startsWith(SuppressionUtilCore.SUPPRESS_INSPECTIONS_TAG_NAME)) { - registerError(comment); + final String suppressedIds = JavaSuppressionUtil.getSuppressedInspectionIdsIn(comment); + final Iterable ids = suppressedIds != null ? StringUtil.tokenize(suppressedIds, "[, ]") : null; + if (ids != null) { + for (String id : ids) { + if (!myAllowedSuppressions.contains(id)) { + registerError(comment, comment); + break; + } + } + } } } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/SuppressionAnnotationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/SuppressionAnnotationInspection.java index e1f2c07e2b9b..b08eed04b2b9 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/SuppressionAnnotationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/SuppressionAnnotationInspection.java @@ -15,15 +15,16 @@ */ package com.siyeh.ig.maturity; -import com.intellij.codeInspection.InspectionProfile; -import com.intellij.codeInspection.JavaSuppressionUtil; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.RemoveAnnotationQuickFix; +import com.intellij.codeInsight.FileModificationService; +import com.intellij.codeInsight.daemon.impl.RemoveSuppressWarningAction; +import com.intellij.codeInspection.*; import com.intellij.codeInspection.ui.ListEditForm; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.profile.codeInspection.InspectionProfileManager; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; import com.intellij.psi.PsiAnnotation; +import com.intellij.psi.PsiComment; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiModifierList; import com.siyeh.ig.DelegatingFix; @@ -47,23 +48,51 @@ public class SuppressionAnnotationInspection extends SuppressionAnnotationInspec @NotNull @Override protected InspectionGadgetsFix[] buildFixes(Object... infos) { - if (infos.length == 1 && infos[0] instanceof PsiAnnotation) { - final PsiAnnotation annotation = (PsiAnnotation)infos[0]; - PsiElement parent = annotation.getParent(); - final Collection ids = JavaSuppressionUtil.getInspectionIdsSuppressedInAnnotation((PsiModifierList)parent); - if (!ids.isEmpty()) { - return new InspectionGadgetsFix[]{new DelegatingFix(new RemoveAnnotationQuickFix(annotation, null)), new AllowSuppressionsFix()}; + if (infos.length == 1) { + if (infos[0] instanceof PsiAnnotation) { + final PsiAnnotation annotation = (PsiAnnotation)infos[0]; + PsiElement parent = annotation.getParent(); + final Collection ids = JavaSuppressionUtil.getInspectionIdsSuppressedInAnnotation((PsiModifierList)parent); + if (!ids.isEmpty()) { + return new InspectionGadgetsFix[]{new DelegatingFix(new RemoveAnnotationQuickFix(annotation, null)), new AllowSuppressionsFix()}; + } + } else if (infos[0] instanceof PsiComment) { + return new InspectionGadgetsFix[]{new RemoveSuppressCommentFix(), new AllowSuppressionsFix()}; } } return InspectionGadgetsFix.EMPTY_ARRAY; } + private static class RemoveSuppressCommentFix extends InspectionGadgetsFix { + @Override + protected void doFix(Project project, ProblemDescriptor descriptor) { + PsiElement psiElement = descriptor.getPsiElement(); + if (psiElement != null) { + if (!FileModificationService.getInstance().preparePsiElementForWrite(psiElement)) return; + psiElement.delete(); + } + } + + @NotNull + @Override + public String getName() { + return getFamilyName(); + } + + @NotNull + @Override + public String getFamilyName() { + return "Remove //" + SuppressionUtilCore.SUPPRESS_INSPECTIONS_TAG_NAME; + } + } + private class AllowSuppressionsFix extends InspectionGadgetsFix { @Override protected void doFix(Project project, ProblemDescriptor descriptor) { final PsiElement psiElement = descriptor.getPsiElement(); - if (psiElement instanceof PsiAnnotation) { - final Collection ids = JavaSuppressionUtil.getInspectionIdsSuppressedInAnnotation((PsiModifierList)psiElement.getParent()); + final String suppressedIds = JavaSuppressionUtil.getSuppressedInspectionIdsIn(psiElement); + final Iterable ids = suppressedIds != null ? StringUtil.tokenize(suppressedIds, "[, ]") : null; + if (ids != null) { for (String id : ids) { if (!myAllowedSuppressions.contains(id)) { myAllowedSuppressions.add(id);