diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/RemoveSuppressWarningAction.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/RemoveSuppressWarningAction.java index 5744f15132ab..6b1250ef1910 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/RemoveSuppressWarningAction.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/RemoveSuppressWarningAction.java @@ -64,29 +64,37 @@ public class RemoveSuppressWarningAction implements LocalQuickFix { PsiElement element = descriptor.getPsiElement(); try { if (element != null) { - final PsiModifierListOwner commentOwner = PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class, false); - if (commentOwner != null) { - final PsiElement psiElement = JavaSuppressionUtil.getElementMemberSuppressedIn(commentOwner, myID); - if (psiElement instanceof PsiAnnotation) { - removeFromAnnotation((PsiAnnotation)psiElement); - } else if (psiElement instanceof PsiDocComment) { - removeFromJavaDoc((PsiDocComment)psiElement); - } else { //try to remove from all comments - final Set comments = new HashSet<>(); - commentOwner.accept(new PsiRecursiveElementWalkingVisitor() { - @Override public void visitComment(final PsiComment comment) { - super.visitComment(comment); - if (comment.getText().contains(myID)) { - comments.add(comment); + if (element instanceof PsiComment) { + removeFromComment((PsiComment)element); + } + else { + final PsiModifierListOwner commentOwner = PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class, false); + if (commentOwner != null) { + final PsiElement psiElement = JavaSuppressionUtil.getElementMemberSuppressedIn(commentOwner, myID); + if (psiElement instanceof PsiAnnotation) { + removeFromAnnotation((PsiAnnotation)psiElement); + } + else if (psiElement instanceof PsiDocComment) { + removeFromJavaDoc((PsiDocComment)psiElement); + } + else { //try to remove from all comments + final Set comments = new HashSet<>(); + commentOwner.accept(new PsiRecursiveElementWalkingVisitor() { + @Override + public void visitComment(final PsiComment comment) { + super.visitComment(comment); + if (comment.getText().contains(myID)) { + comments.add(comment); + } + } + }); + for (PsiComment comment : comments) { + try { + removeFromComment(comment); + } + catch (IncorrectOperationException e) { + LOG.error(e); } - } - }); - for (PsiComment comment : comments) { - try { - removeFromComment(comment, comments.size() > 1); - } - catch (IncorrectOperationException e) { - LOG.error(e); } } } @@ -104,7 +112,7 @@ public class RemoveSuppressWarningAction implements LocalQuickFix { return QuickFixBundle.message("remove.suppression.action.name", myID); } - private void removeFromComment(final PsiComment comment, final boolean checkLine) throws IncorrectOperationException { + private void removeFromComment(final PsiComment comment) throws IncorrectOperationException { String newText = removeFromElementText(comment); if (newText != null) { if (newText.isEmpty()) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java index 0c1a695eb3a9..082728717123 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java @@ -9,6 +9,9 @@ public class Test { void foo() { List> list = foo(new ArrayList()); + + //noinspection unchecked + ArrayList list = new ArrayList(); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/afterWithContainingAnnotation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/afterWithContainingAnnotation.java new file mode 100644 index 000000000000..09e5b4c70dae --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/afterWithContainingAnnotation.java @@ -0,0 +1,17 @@ +// "Remove 'unchecked' suppression" "true" +import java.util.*; + +public class Test { + @SafeVarargs + static List foo(T... t){ + return null; + } + + @SuppressWarnings("unchecked") + void foo() { + List> list = foo(new ArrayList()); + + ArrayList list = new ArrayList(); + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java index d3b9aeef5b4d..935e4b55fee4 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java @@ -10,6 +10,9 @@ public class Test { void foo() { //noinspection unchecked List> list = foo(new ArrayList()); + + //noinspection unchecked + ArrayList list = new ArrayList(); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/beforeWithContainingAnnotation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/beforeWithContainingAnnotation.java new file mode 100644 index 000000000000..903573bbf79f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/beforeWithContainingAnnotation.java @@ -0,0 +1,18 @@ +// "Remove 'unchecked' suppression" "true" +import java.util.*; + +public class Test { + @SafeVarargs + static List foo(T... t){ + return null; + } + + @SuppressWarnings("unchecked") + void foo() { + //noinspection unchecked + List> list = foo(new ArrayList()); + + ArrayList list = new ArrayList(); + } +} +