From 0f2c21ee908f36fee40cbaa5bfc24793c63f839a Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 12 Jul 2012 13:27:56 +0200 Subject: [PATCH] IDEA-82125: do not override @Nullable with @NotNull in complex hierarchies --- .../nullable/NullableStuffInspection.java | 3 ++- .../overriddenMethods/expected.xml | 22 +++++++++---------- .../overriddenMethods/src/Test.java | 22 +++++++++++++++++++ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspection.java b/java/java-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspection.java index 3e2abb03eb8a..39b807db5bec 100644 --- a/java/java-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspection.java @@ -357,7 +357,8 @@ public class NullableStuffInspection extends BaseLocalInspectionTool { if (!manager.isInProject(overriding)) continue; if (!methodQuickFixSuggested && annotated.isDeclaredNotNull - && !nullableManager.isNotNull(overriding, false)) { + && !nullableManager.isNotNull(overriding, false) + && !nullableManager.isNullable(overriding, true)) { method.getNameIdentifier(); //load tree PsiAnnotation annotation = AnnotationUtil.findAnnotation(method, nullableManager.getNotNulls()); final String defaultNotNull = nullableManager.getDefaultNotNull(); diff --git a/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml index fe143ef404fb..1c1f7ce48c10 100644 --- a/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml +++ b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/expected.xml @@ -2,42 +2,42 @@ Test.java - 17 + 18 @NotNull/@Nullable problems Not annotated method overrides method annotated with @NotNull Test.java - 17 + 18 @NotNull/@Nullable problems Not annotated parameter overrides @NotNull parameter - - Test.java - 4 - @NotNull/@Nullable problems - Overridden methods are not annotated - - Test.java 5 @NotNull/@Nullable problems + Overridden methods are not annotated + + + + Test.java + 6 + @NotNull/@Nullable problems Overridden method parameters are not annotated Test.java - 11 + 12 @NotNull/@Nullable problems Not annotated method overrides method annotated with @NotNull Test.java - 11 + 12 @NotNull/@Nullable problems Not annotated parameter overrides @NotNull parameter \ No newline at end of file diff --git a/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java index f8a85f48a751..e44eb8c9a0d4 100644 --- a/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java +++ b/java/java-tests/testData/inspection/nullableProblems/overriddenMethods/src/Test.java @@ -1,4 +1,5 @@ import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; abstract class P2 { @NotNull @@ -29,3 +30,24 @@ class FooImpl extends java.awt.Frame implements Foo { // return super.getTitle(); //To change body of overridden methods use File | Settings | File Templates. // } } + + +interface I1 { + @Nullable + Object foo(); +} + +interface I2 extends I1 { + @NotNull + Object foo(); +} + +class A implements I1 { + @Override + public Object foo() { + // returns something + } +} + +class B extends A implements I2 { +} \ No newline at end of file