diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java index ad4f68939acb..4c0325e38f1c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java @@ -466,6 +466,7 @@ public class RefJavaManagerImpl extends RefJavaManager { @Override public boolean visitDeclaration(@NotNull UDeclaration node) { + processComments(node); RefElement decl = myRefManager.getReference(node.getSourcePsi()); if (decl != null) { ((RefElementImpl)decl).buildReferences(); @@ -483,33 +484,6 @@ public class RefJavaManagerImpl extends RefJavaManager { return true; } - @Override - public boolean visitElement(@NotNull UElement node) { - if (node instanceof UComment) { - PsiElement psi = node.getSourcePsi(); - if (psi instanceof PsiDocComment) { - //TODO support suppressions in kotlin - final PsiDocTag[] tags = ((PsiDocComment)psi).getTags(); - for (PsiDocTag tag : tags) { - if (Comparing.strEqual(tag.getName(), SuppressionUtilCore.SUPPRESS_INSPECTIONS_TAG_NAME)) { - final PsiElement[] dataElements = tag.getDataElements(); - if (dataElements.length > 0) { - final PsiModifierListOwner listOwner = PsiTreeUtil.getParentOfType(psi, PsiModifierListOwner.class); - if (listOwner != null) { - final WritableRefElement element = (WritableRefElement)myRefManager.getReference(listOwner); - if (element != null) { - String suppression = StringUtil.join(dataElements, PsiElement::getText, ","); - element.addSuppression(suppression); - } - } - } - } - } - } - } - return super.visitElement(node); - } - @Override public boolean visitField(@NotNull UField node) { visitDeclaration(node); @@ -588,6 +562,33 @@ public class RefJavaManagerImpl extends RefJavaManager { } } + //TODO support suppressions by comment tag in kotlin + private void processComments(@NotNull UElement node) { + for (UComment comment : node.getComments()) { + if (comment instanceof UComment) { + PsiElement psi = comment.getSourcePsi(); + if (psi instanceof PsiDocComment) { + final PsiDocTag[] tags = ((PsiDocComment)psi).getTags(); + for (PsiDocTag tag : tags) { + if (Comparing.strEqual(tag.getName(), SuppressionUtilCore.SUPPRESS_INSPECTIONS_TAG_NAME)) { + final PsiElement[] dataElements = tag.getDataElements(); + if (dataElements.length > 0) { + final PsiModifierListOwner listOwner = PsiTreeUtil.getParentOfType(psi, PsiModifierListOwner.class); + if (listOwner != null) { + final WritableRefElement element = (WritableRefElement)myRefManager.getReference(listOwner); + if (element != null) { + String suppression = StringUtil.join(dataElements, PsiElement::getText, ","); + element.addSuppression(suppression); + } + } + } + } + } + } + } + } + } + private void addSuppressionsForSiblings(PsiField listOwner, String suppressId) { PsiField field = listOwner; while (true) { diff --git a/java/java-tests/testData/inspection/deadCode/suppressByNoinspectionTag/expected.xml b/java/java-tests/testData/inspection/deadCode/suppressByNoinspectionTag/expected.xml new file mode 100644 index 000000000000..86dce268b467 --- /dev/null +++ b/java/java-tests/testData/inspection/deadCode/suppressByNoinspectionTag/expected.xml @@ -0,0 +1,9 @@ + + + + A.java + 16 + unused declaration + Field has no usages. + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/deadCode/suppressByNoinspectionTag/src/A.java b/java/java-tests/testData/inspection/deadCode/suppressByNoinspectionTag/src/A.java new file mode 100644 index 000000000000..3d51461828f1 --- /dev/null +++ b/java/java-tests/testData/inspection/deadCode/suppressByNoinspectionTag/src/A.java @@ -0,0 +1,17 @@ +/** + * @noinspection bla-bla, unused, bla-bla + */ +class A { + String a; +} + +/** + * @noinspection unused + */ +class B { + String b; +} + +class C { + String c; +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationTest.java index 50cceddb9169..c335763ec59a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationTest.java @@ -93,6 +93,10 @@ public class UnusedDeclarationTest extends AbstractUnusedDeclarationTest { doTest(); } + public void testSuppressByNoinspectionTag() { + doTest(); + } + public void testReachableFromXml() { doTest(); }