diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java index f6fcde195ba3..5a25559d020e 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java @@ -284,7 +284,7 @@ public class UnusedDeclarationInspection extends UnusedDeclarationInspectionBase PsiVariable psiVariable = info.getVariable(); if (parent instanceof PsiDeclarationStatement || parent instanceof PsiResourceVariable) { - if (!info.isRead()) { + if (!info.isRead() && !SuppressionUtil.inspectionResultSuppressed(psiVariable, UnusedDeclarationInspection.this)) { descriptors.add(createProblemDescriptor(psiVariable)); } } @@ -300,7 +300,8 @@ public class UnusedDeclarationInspection extends UnusedDeclarationInspectionBase @Override public void visitLocalVariable(PsiLocalVariable variable) { - if (!usedVariables.contains(variable) && variable.getInitializer() == null) { + if (!usedVariables.contains(variable) && variable.getInitializer() == null && + !SuppressionUtil.inspectionResultSuppressed(variable, UnusedDeclarationInspection.this)) { descriptors.add(createProblemDescriptor(variable)); } } diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java index 8347415b61d4..e34dc9d9bfd9 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java @@ -27,6 +27,7 @@ import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditorManager; @@ -528,6 +529,23 @@ public class UnusedDeclarationPresentation extends DefaultInspectionToolPresenta myIgnoreElements.add(refEntity); } + @Override + public void ignoreElement(@NotNull RefEntity refEntity) { + if (refEntity instanceof RefElement) { + final CommonProblemDescriptor[] descriptors = getProblemElements().get(refEntity); + if (descriptors != null) { + final PsiElement psiElement = ReadAction.compute(() -> ((RefElement)refEntity).getElement()); + List foreignDescriptors = new ArrayList<>(); + for (CommonProblemDescriptor descriptor : descriptors) { + if (descriptor instanceof ProblemDescriptor && ReadAction.compute(() -> ((ProblemDescriptor)descriptor).getPsiElement()) == psiElement) continue; + foreignDescriptors.add(descriptor); + } + if (foreignDescriptors.size() == descriptors.length) return; + } + } + super.ignoreElement(refEntity); + } + @Override public void amnesty(RefEntity refEntity) { myIgnoreElements.remove(refEntity); diff --git a/java/java-tests/testData/inspection/deadCode/localVariables/expected.xml b/java/java-tests/testData/inspection/deadCode/localVariables/expected.xml index 79e1a0fd0a57..0023ac16e362 100644 --- a/java/java-tests/testData/inspection/deadCode/localVariables/expected.xml +++ b/java/java-tests/testData/inspection/deadCode/localVariables/expected.xml @@ -1,4 +1,8 @@ - + + + A.java + Variable <code>i</code> is never used + diff --git a/java/java-tests/testData/inspection/deadCode/localVariables/src/A.java b/java/java-tests/testData/inspection/deadCode/localVariables/src/A.java index 4f2fc7f1f787..f803ed724515 100644 --- a/java/java-tests/testData/inspection/deadCode/localVariables/src/A.java +++ b/java/java-tests/testData/inspection/deadCode/localVariables/src/A.java @@ -1,6 +1,7 @@ class A { public static void main(String[] args) { int i = 0; + @SuppressWarning("unused") int j = 0; } }