diff --git a/java/java-impl/src/com/intellij/codeInspection/RedundantSuppressInspection.java b/java/java-impl/src/com/intellij/codeInspection/RedundantSuppressInspection.java index 6ed51c4992d8..d4f332d8d148 100644 --- a/java/java-impl/src/com/intellij/codeInspection/RedundantSuppressInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/RedundantSuppressInspection.java @@ -93,7 +93,10 @@ public class RedundantSuppressInspection extends GlobalInspectionTool{ @Nullable private CommonProblemDescriptor[] checkElement(RefClass refEntity, InspectionManager manager, final Project project) { - final PsiElement psiElement = refEntity.getElement(); + return checkElement(refEntity.getElement(), manager, project); + } + + public CommonProblemDescriptor[] checkElement(final PsiElement psiElement, InspectionManager manager, Project project) { final Map> suppressedScopes = new THashMap>(); psiElement.accept(new JavaRecursiveElementWalkingVisitor() { @Override public void visitModifierList(PsiModifierList list) { @@ -138,12 +141,8 @@ public class RedundantSuppressInspection extends GlobalInspectionTool{ if (suppressedScopes.values().isEmpty()) return null; // have to visit all file from scratch since inspections can be written in any perversive way including checkFile() overriding - final ModifiableModel model = InspectionProjectProfileManager.getInstance(manager.getProject()).getInspectionProfile().getModifiableModel(); - InspectionProfileWrapper profile = new InspectionProfileWrapper((InspectionProfile)model); - profile.init(manager.getProject()); Collection suppressedTools = new THashSet(); - - InspectionTool[] tools = profile.getInspectionTools(psiElement); + InspectionTool[] tools = getInspectionTools(psiElement, manager); for (Collection ids : suppressedScopes.values()) { for (String id : ids) { String shortName = id.trim(); @@ -194,7 +193,7 @@ public class RedundantSuppressInspection extends GlobalInspectionTool{ PsiElement element = ((ProblemDescriptor)descriptor).getPsiElement(); if (element == null) continue; PsiElement annotation = SuppressManager.getInstance().getElementToolSuppressedIn(element, toolId); - if (annotation != null && PsiTreeUtil.isAncestor(suppressedScope, annotation, false)) { + if (annotation != null && PsiTreeUtil.isAncestor(suppressedScope, annotation, false) || annotation == null && !PsiTreeUtil.isAncestor(suppressedScope, element, false)) { hasErrorInsideSuppressedScope = true; break; } @@ -238,11 +237,20 @@ public class RedundantSuppressInspection extends GlobalInspectionTool{ } finally { refManager.inspectionReadActionFinished(); - globalContext.close(true); + globalContext.close(true); } return result.toArray(new ProblemDescriptor[result.size()]); } + protected InspectionTool[] getInspectionTools(PsiElement psiElement, InspectionManager manager) { + final ModifiableModel + model = InspectionProjectProfileManager.getInstance(manager.getProject()).getInspectionProfile().getModifiableModel(); + InspectionProfileWrapper profile = new InspectionProfileWrapper((InspectionProfile)model); + profile.init(manager.getProject()); + + return profile.getInspectionTools(psiElement); + } + @Nullable public QuickFix getQuickFix(final String hint) { diff --git a/java/java-impl/src/com/intellij/codeInspection/RedundantUncheckedSuppressWarningsInspection.java b/java/java-impl/src/com/intellij/codeInspection/RedundantUncheckedSuppressWarningsInspection.java deleted file mode 100644 index e7656686ba0b..000000000000 --- a/java/java-impl/src/com/intellij/codeInspection/RedundantUncheckedSuppressWarningsInspection.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright 2000-2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.codeInspection; - -import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.codeInsight.daemon.GroupNames; -import com.intellij.codeInsight.daemon.impl.HighlightInfo; -import com.intellij.codeInsight.daemon.impl.analysis.GenericsHighlightUtil; -import com.intellij.codeInspection.uncheckedWarnings.UncheckedWarningLocalInspection; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.util.Function; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -import java.util.*; -import java.util.regex.Matcher; - -/** - * User: anna - * Date: 2/14/11 - */ -public class RedundantUncheckedSuppressWarningsInspection extends BaseJavaLocalInspectionTool { - @Nls - @NotNull - @Override - public String getGroupDisplayName() { - return GroupNames.LANGUAGE_LEVEL_SPECIFIC_GROUP_NAME; - } - @Nls - @NotNull - @Override - public String getDisplayName() { - return "Redundant unchecked warning suppressed"; - } - @NotNull - @Override - public String getShortName() { - return "RedundantUncheckedSuppress"; - } - @Override - public boolean isEnabledByDefault() { - return true; - } - - @NotNull - @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { - return new JavaElementVisitor() { - @Override - public void visitReferenceExpression(PsiReferenceExpression expression) { - } - - @Override - public void visitComment(PsiComment comment) { - super.visitComment(comment); - if (!PsiUtil.getLanguageLevel(comment).isAtLeast(LanguageLevel.JDK_1_7)) return; - final HashSet tools2Suppress = new HashSet(); - collectCommentSuppresses(comment, tools2Suppress); - if (tools2Suppress.contains(RemoveUncheckedWarningFix.UNCHECKED)) { - final PsiElement statement = PsiTreeUtil.skipSiblingsForward(comment, PsiWhiteSpace.class); - if (statement instanceof PsiStatement) { - checkIfSafeToRemoveWarning(comment, statement, holder); - } - } - } - - @Override - public void visitAnnotation(PsiAnnotation annotation) { - super.visitAnnotation(annotation); - if (!PsiUtil.getLanguageLevel(annotation).isAtLeast(LanguageLevel.JDK_1_7)) return; - if (Comparing.strEqual(annotation.getQualifiedName(), SuppressWarnings.class.getName())) { - final PsiAnnotationOwner owner = annotation.getOwner(); - if (owner instanceof PsiModifierList) { - final PsiModifierListOwner modifierListOwner = PsiTreeUtil.getParentOfType(((PsiModifierList)owner), PsiModifierListOwner.class); - if (modifierListOwner != null) { - final Collection suppressedIds = - SuppressManager.getInstance().getInspectionIdsSuppressedInAnnotation(modifierListOwner); - if (suppressedIds.contains(RemoveUncheckedWarningFix.UNCHECKED)) { - checkIfSafeToRemoveWarning(annotation, modifierListOwner, holder); - } - } - } - } - } - }; - } - - private static void checkIfSafeToRemoveWarning(PsiElement suppressElement, PsiElement placeToCheckWarningsIn, ProblemsHolder holder) { - final HashSet warningsElements = new HashSet(); - collectUncheckedWarnings(placeToCheckWarningsIn, warningsElements); - if (warningsElements.isEmpty()) { - final int uncheckedIdx = suppressElement.getText().indexOf(RemoveUncheckedWarningFix.UNCHECKED); - holder.registerProblem(suppressElement, - uncheckedIdx > -1 ? new TextRange(uncheckedIdx, uncheckedIdx + RemoveUncheckedWarningFix.UNCHECKED.length()) : null, - "Redundant suppression", new RemoveUncheckedWarningFix()); - } - } - - public static void collectUncheckedWarnings(final PsiElement place, final Collection warningsElements) { - final UncheckedWarningLocalInspection.UncheckedWarningsVisitor visitor = - new UncheckedWarningLocalInspection.UncheckedWarningsVisitor(false) { - @Override - protected void registerProblem(String message, PsiElement psiElement, LocalQuickFix... quickFix) { - warningsElements.add(psiElement); - } - }; - final PossibleHeapPollutionVarargsInspection.HeapPollutionVisitor hVisitor = new PossibleHeapPollutionVarargsInspection.HeapPollutionVisitor() { - @Override - protected void registerProblem(PsiMethod method, PsiIdentifier nameIdentifier) { - warningsElements.add(method); - } - }; - - place.accept(new JavaRecursiveElementVisitor(){ - @Override - public void visitElement(PsiElement element) { - super.visitElement(element); - element.accept(visitor); - element.accept(hVisitor); - } - }); - } - - private static boolean collectCommentSuppresses(PsiElement psiElement, Set tools2Suppress) { - final Matcher matcher = SuppressionUtil.SUPPRESS_IN_LINE_COMMENT_PATTERN.matcher(psiElement.getText()); - if (matcher.matches()) { - final String inspections = matcher.group(1); - final String[] toolsIds = inspections.split("[, ]"); - for (String toolsId : toolsIds) { - final String id = toolsId.trim(); - if (!id.isEmpty()) { - tools2Suppress.add(id); - } - } - return true; - } - return false; - } - - private static class RemoveUncheckedWarningFix implements LocalQuickFix { - @NonNls private static final String UNCHECKED = "unchecked"; - - @NotNull - @Override - public String getName() { - return "Remove redundant \"unchecked\" suppression"; - } - - @NotNull - @Override - public String getFamilyName() { - return getName(); - } - - @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement psiElement = descriptor.getPsiElement(); - if (psiElement instanceof PsiComment) { - final Set tools2Suppress = new LinkedHashSet(); - if (collectCommentSuppresses(psiElement, tools2Suppress)) { - tools2Suppress.remove(UNCHECKED); - if (tools2Suppress.isEmpty()) { - psiElement.delete(); - } else { - psiElement.replace(JavaPsiFacade.getElementFactory(project).createCommentFromText("//" + SuppressionUtil.SUPPRESS_INSPECTIONS_TAG_NAME + " " + StringUtil - .join(tools2Suppress, ", "), psiElement)); - } - } - } else if (psiElement instanceof PsiAnnotation) { - final PsiAnnotation annotation = (PsiAnnotation)psiElement; - final PsiModifierList owner = (PsiModifierList)annotation.getOwner(); - final PsiModifierListOwner listOwner = PsiTreeUtil.getParentOfType(owner, PsiModifierListOwner.class); - if (listOwner != null) { - final Collection tool2Suppress = SuppressManager.getInstance().getInspectionIdsSuppressedInAnnotation(listOwner); - tool2Suppress.remove(UNCHECKED); - if (tool2Suppress.isEmpty()) { - annotation.delete(); - } else { - annotation.replace(JavaPsiFacade.getElementFactory(project).createAnnotationFromText("@" + annotation.getQualifiedName() + "({" +StringUtil.join(tool2Suppress, new Function() { - @Override - public String fun(String s) { - return "\"" + s + "\""; - } - }, ", ")+ "})", annotation)); - } - } - } - } - } -} diff --git a/java/java-impl/src/com/intellij/codeInspection/ex/StandardInspectionToolsProvider.java b/java/java-impl/src/com/intellij/codeInspection/ex/StandardInspectionToolsProvider.java index c7a4640f9021..56fffdb96148 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ex/StandardInspectionToolsProvider.java +++ b/java/java-impl/src/com/intellij/codeInspection/ex/StandardInspectionToolsProvider.java @@ -118,8 +118,7 @@ public class StandardInspectionToolsProvider implements InspectionToolProvider { UnknownGuardInspection.class, ExplicitTypeCanBeDiamondInspection.class, - PossibleHeapPollutionVarargsInspection.class, - RedundantUncheckedSuppressWarningsInspection.class + PossibleHeapPollutionVarargsInspection.class }; } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java index 25e41a1306e1..516ff795c6a9 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after1.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.ArrayList; public class Test { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java index 0af660bd58e2..369ca374da27 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after2.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.ArrayList; public class Test { @@ -7,7 +7,7 @@ public class Test { } void foo() { - //noinspection blah-blah-toolid + // noinspection blah-blah-toolid foo(new ArrayList()); } } 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 f03fa95114ed..0c1a695eb3a9 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after4.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; public class Test { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java index 461a023461cc..e59eac429550 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after5.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; public class Test { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java index 461a023461cc..e59eac429550 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after6.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; public class Test { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java index 1c6b1d4aa710..3a4bb6d6fa12 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/after9.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; @SuppressWarnings({"bla-blah-toolid"}) diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java index 69373d386b3e..e87940e14385 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before1.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.ArrayList; public class Test { @@ -6,8 +6,8 @@ public class Test { static void foo(T... t){ } - void foo() { - //noinspection unchecked + void foo() { + //noinspection unchecked foo(new ArrayList()); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java index 6601055a862d..cdc849300006 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before10.java @@ -1,11 +1,11 @@ -// "Remove redundant "unchecked" suppression" "false" +// "Remove 'unchecked' suppression" "false" -@SuppressWarnings({"unchecked", "bla-blah-toolid"}) +@SuppressWarnings({"unchecked", "bla-blah-toolid"}) public enum Planet { MERCURY(), VENUS(); - Planet(T... ts) { + Planet(T... ts) { } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java index 78476b03483b..837351a47324 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before2.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.ArrayList; public class Test { @@ -6,8 +6,8 @@ public class Test { static void foo(T... t){ } - void foo() { - //noinspection unchecked,blah-blah-toolid + void foo() { + //noinspection unchecked,blah-blah-toolid foo(new ArrayList()); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java index 8200d154a64c..b4107cfaec18 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before3.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "false" +// "Remove 'unchecked' suppression" "false" import java.util.*; public class Test { @@ -7,9 +7,13 @@ public class Test { return null; } - void foo() { - //noinspection unchecked - foo(new ArrayList()).addAll(Arrays.asList(new ArrayList())); + static List foo1(T... t){ + return null; + } + + void foo() { + //noinspection unchecked + foo(new ArrayList()).addAll(foo1(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 38e7b23f4bfe..a6dc51d2c808 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before4.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; public class Test { @@ -7,8 +7,8 @@ public class Test { return null; } - void foo() { - //noinspection unchecked + void foo() { + //noinspection unchecked List> list = foo(new ArrayList()); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java index f5de09bdaa1d..b294d2d5a2df 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before5.java @@ -1,4 +1,4 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; public class Test { @@ -7,8 +7,8 @@ public class Test { return null; } - @SuppressWarnings("unchecked") - void foo() { + @SuppressWarnings("unchecked") + void foo() { List> list = foo(new ArrayList()); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java index 7a2a6729433e..60f4268bf047 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before6.java @@ -1,8 +1,8 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; -@SuppressWarnings("unchecked") -public class Test { +@SuppressWarnings("unchecked") +public class Test { @SafeVarargs static List foo(T... t){ return null; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java index 36acd8f93a25..da98e4655f5b 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before7.java @@ -1,15 +1,19 @@ -// "Remove redundant "unchecked" suppression" "false" +// "Remove 'unchecked' suppression" "false" import java.util.*; -@SuppressWarnings("unchecked") public class Test { @SafeVarargs static List foo(T... t){ return null; } + static List foo1(T... t){ + return null; + } + + @SuppressWarnings("unchecked") void foo() { - foo(new ArrayList()).addAll(Arrays.asList(new ArrayList); + foo(new ArrayList()).addAll(foo1(new ArrayList); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java index fea4b7439a40..382b201d8316 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before8.java @@ -1,8 +1,8 @@ -// "Remove redundant "unchecked" suppression" "false" +// "Remove 'unchecked' suppression" "false" import java.util.*; -@SuppressWarnings("ALL") -public class Test { +@SuppressWarnings("ALL") +public class Test { @SafeVarargs static List foo(T... t){ return null; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java index e877359e5234..e34ee0e8c198 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/redundantUncheckedVarargs/before9.java @@ -1,8 +1,8 @@ -// "Remove redundant "unchecked" suppression" "true" +// "Remove 'unchecked' suppression" "true" import java.util.*; -@SuppressWarnings({"unchecked", "bla-blah-toolid"}) -public class Test { +@SuppressWarnings({"unchecked", "bla-blah-toolid"}) +public class Test { @SafeVarargs static List foo(T... t){ return null; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveRedundantUncheckedSuppressionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveRedundantUncheckedSuppressionTest.java index b3e6c908472e..9ef6bd70af98 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveRedundantUncheckedSuppressionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveRedundantUncheckedSuppressionTest.java @@ -15,17 +15,87 @@ */ package com.intellij.codeInsight.daemon.quickFix; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.PossibleHeapPollutionVarargsInspection; -import com.intellij.codeInspection.RedundantUncheckedSuppressWarningsInspection; +import com.intellij.codeInspection.*; +import com.intellij.codeInspection.ex.InspectionTool; +import com.intellij.codeInspection.ex.LocalInspectionToolWrapper; +import com.intellij.codeInspection.reference.RefFileImpl; +import com.intellij.codeInspection.uncheckedWarnings.UncheckedWarningLocalInspection; +import com.intellij.psi.*; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; public class RemoveRedundantUncheckedSuppressionTest extends LightQuickFixTestCase { @Override protected LocalInspectionTool[] configureLocalInspectionTools() { - return new LocalInspectionTool[]{ - new RedundantUncheckedSuppressWarningsInspection(), - new PossibleHeapPollutionVarargsInspection(), + final PossibleHeapPollutionVarargsInspection varargsInspection = new PossibleHeapPollutionVarargsInspection(); + final UncheckedWarningLocalInspection warningLocalInspection = new UncheckedWarningLocalInspection(); + final RedundantSuppressInspection inspection = new RedundantSuppressInspection(){ + @Override + protected InspectionTool[] getInspectionTools(PsiElement psiElement, InspectionManager manager) { + return new InspectionTool[]{ + new LocalInspectionToolWrapper(varargsInspection), + new LocalInspectionToolWrapper(warningLocalInspection) + }; + } + }; + + return new LocalInspectionTool[] { + new LocalInspectionTool() { + @Nls + @NotNull + @Override + public String getGroupDisplayName() { + return inspection.getGroupDisplayName(); + } + + @Nls + @NotNull + @Override + public String getDisplayName() { + return inspection.getDisplayName(); + } + + @NotNull + @Override + public String getShortName() { + return inspection.getShortName(); + } + + @NotNull + @Override + public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, + boolean isOnTheFly, + LocalInspectionToolSession session) { + return new JavaElementVisitor() { + @Override + public void visitReferenceExpression(PsiReferenceExpression expression) { + } + + @Override + public void visitClass(PsiClass aClass) { + checkMember(aClass, inspection, holder); + } + + @Override + public void visitMethod(PsiMethod method) { + checkMember(method, inspection, holder); + } + }; + } + + private void checkMember(PsiMember member, RedundantSuppressInspection inspection, ProblemsHolder holder) { + final ProblemDescriptor[] problemDescriptors = + (ProblemDescriptor[])inspection.checkElement(member, InspectionManager.getInstance(getProject()), getProject()); + if (problemDescriptors != null) { + for (ProblemDescriptor problemDescriptor : problemDescriptors) { + holder.registerProblem(problemDescriptor); + } + } + } + }, + varargsInspection, + warningLocalInspection }; }