diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java index 72b8320038bc..cb2c3fda0b68 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java @@ -43,6 +43,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.ArrayList; import java.util.List; +import java.util.Set; public class NullableStuffInspectionBase extends BaseJavaBatchLocalInspectionTool { // deprecated fields remain to minimize changes to users inspection profiles (which are often located in version control). @@ -269,6 +270,12 @@ public class NullableStuffInspectionBase extends BaseJavaBatchLocalInspectionToo @NotNull private static String getPresentableAnnoName(@NotNull PsiModifierListOwner owner) { NullableNotNullManager manager = NullableNotNullManager.getInstance(owner.getProject()); + Set names = ContainerUtil.newHashSet(manager.getNullables()); + names.addAll(manager.getNotNulls()); + + PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(owner, names); + if (annotation != null) return getPresentableAnnoName(annotation); + String anno = manager.getNotNull(owner); return StringUtil.getShortName(anno != null ? anno : StringUtil.notNullize(manager.getNullable(owner), "???")); } diff --git a/java/java-tests/testData/inspection/nullableProblems/NotNullAnnotationChecksInChildClassMethods.java b/java/java-tests/testData/inspection/nullableProblems/NotNullAnnotationChecksInChildClassMethods.java new file mode 100644 index 000000000000..0bb3a610ffca --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/NotNullAnnotationChecksInChildClassMethods.java @@ -0,0 +1,24 @@ +import org.jetbrains.annotations.*; + +public class NotNullAnnotationChecksInChildClassMethods { + + private static class A { + @NotNull public String getNormalizedName() { + return "classA"; + } + } + + private static class B extends A { + + @Override public String getNormalizedName() { + return "classB"; + } + } + + private static class C extends B { + + @Override public String getNormalizedName() { + return "classC"; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java index 841abd9b4991..0b8e6c086b16 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java @@ -49,6 +49,7 @@ public class NullableStuffInspectionTest extends LightCodeInsightFixtureTestCase public void testNotNullFieldNullableParam() throws Exception{ doTest(); } public void testNotNullCustomException() throws Exception{ doTest(); } public void testNotNullFieldNotInitialized() throws Exception{ doTest(); } + public void testNotNullAnnotationChecksInChildClassMethods() { doTest(); } public void testGetterSetterProblems() throws Exception{ doTest(); } public void testOverriddenMethods() throws Exception{