diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressByJavaCommentFix.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressByJavaCommentFix.java index c42422f96310..c1b194ae7a9a 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressByJavaCommentFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressByJavaCommentFix.java @@ -57,7 +57,7 @@ public class SuppressByJavaCommentFix extends SuppressByCommentFix { suppressWithComment(project, element, container); } else { - JavaSuppressionUtil.addSuppressAnnotation(project, container, (PsiLocalVariable)declaredElement, myID); + JavaSuppressionUtil.addSuppressAnnotation(project, container, (PsiVariable)declaredElement, myID); } } 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 c3933012733d..2d0a6549eec2 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/JavaSuppressionUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/JavaSuppressionUtil.java @@ -330,14 +330,38 @@ public class JavaSuppressionUtil { @Nullable public static PsiElement getElementToAnnotate(PsiElement element, PsiElement container) { - if (container instanceof PsiDeclarationStatement && canHave15Suppressions(element)) { - final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)container; - final PsiElement[] declaredElements = declarationStatement.getDeclaredElements(); - for (PsiElement declaredElement : declaredElements) { - if (declaredElement instanceof PsiLocalVariable) { - final PsiModifierList modifierList = ((PsiLocalVariable)declaredElement).getModifierList(); - if (modifierList != null) { - return declaredElement; + if (container instanceof PsiDeclarationStatement) { + if (canHave15Suppressions(element)) { + final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)container; + final PsiElement[] declaredElements = declarationStatement.getDeclaredElements(); + for (PsiElement declaredElement : declaredElements) { + if (declaredElement instanceof PsiLocalVariable) { + final PsiModifierList modifierList = ((PsiLocalVariable)declaredElement).getModifierList(); + if (modifierList != null) { + return declaredElement; + } + } + } + } + } + else if (container instanceof PsiForeachStatement) { + if (canHave15Suppressions(element)) { + final PsiParameter parameter = ((PsiForeachStatement)container).getIterationParameter(); + final PsiModifierList modifierList = element.getParent() == parameter ? parameter.getModifierList() : null; + if (modifierList != null) { + return parameter; + } + } + } + else if (container instanceof PsiTryStatement) { + final PsiResourceList resourceList = ((PsiTryStatement)container).getResourceList(); + if (resourceList != null) { + for (PsiResourceListElement listElement : resourceList) { + if (listElement instanceof PsiResourceVariable && listElement == element.getParent()) { + final PsiModifierList modifierList = ((PsiResourceVariable)listElement).getModifierList(); + if (modifierList != null) { + return listElement; + } } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterForeachParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterForeachParameter.java new file mode 100644 index 000000000000..d360d000a1e1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterForeachParameter.java @@ -0,0 +1,8 @@ +// "Suppress for statement" "true" +public class Test { + { + for (@SuppressWarnings("unused") java.lang.Object o : ) { + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterTryWithResources.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterTryWithResources.java new file mode 100644 index 000000000000..085eddf3da70 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/afterTryWithResources.java @@ -0,0 +1,8 @@ +// "Suppress for statement" "true" +public class Test { + { + try(@SuppressWarnings("unused") java.lang.Object o) { + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeForeachParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeForeachParameter.java new file mode 100644 index 000000000000..524c90b75f71 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeForeachParameter.java @@ -0,0 +1,8 @@ +// "Suppress for statement" "true" +public class Test { + { + for (java.lang.Object o : ) { + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeTryWithResources.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeTryWithResources.java new file mode 100644 index 000000000000..c44ff5e41aef --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppress15Inspections/beforeTryWithResources.java @@ -0,0 +1,8 @@ +// "Suppress for statement" "true" +public class Test { + { + try(java.lang.Object o) { + + } + } +} \ No newline at end of file