From abca97e2ad35507e6f50372d18ca6bcd31164853 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 11 Oct 2017 22:00:24 +0200 Subject: [PATCH] IDEA-178922 A few more null annotation problems with arrays --- .../codeInsight/NullableNotNullManager.java | 13 ++++++------- .../nullableProblems/TypeUseNotNullField.java | 10 ++++++++++ .../nullableProblems/TypeUseNotNullOverriding.java | 14 ++++++++++++++ .../NullableStuffInspectionTest.java | 11 +++++++++++ 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullField.java create mode 100644 java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullOverriding.java diff --git a/java/java-psi-api/src/com/intellij/codeInsight/NullableNotNullManager.java b/java/java-psi-api/src/com/intellij/codeInsight/NullableNotNullManager.java index f518ae04e644..48d7d3c76d4c 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/NullableNotNullManager.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/NullableNotNullManager.java @@ -247,15 +247,14 @@ public abstract class NullableNotNullManager { PsiAnnotation memberAnno = checkBases && owner instanceof PsiMethod ? AnnotationUtil.findAnnotationInHierarchy(owner, qNames) : AnnotationUtil.findAnnotation(owner, qNames); + PsiType type = getOwnerType(owner); if (memberAnno != null) { - if (owner instanceof PsiMethod) { - return preferTypeAnnotation(memberAnno, ((PsiMethod)owner).getReturnType()); - } - if (owner instanceof PsiVariable) { - return preferTypeAnnotation(memberAnno, ((PsiVariable)owner).getType()); - } + return preferTypeAnnotation(memberAnno, type); + } + if (type != null) { + return ContainerUtil.find(type.getAnnotations(), a -> qNames.contains(a.getQualifiedName())); } - return memberAnno; + return null; } private static PsiAnnotation preferTypeAnnotation(@NotNull PsiAnnotation memberAnno, @Nullable PsiType type) { diff --git a/java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullField.java b/java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullField.java new file mode 100644 index 000000000000..f02d43f3c476 --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullField.java @@ -0,0 +1,10 @@ +import typeUse.*; + +class Test { + private byte @NotNull [] field; + private byte @NotNull [] initField; + + { + initField = new byte[0]; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullOverriding.java b/java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullOverriding.java new file mode 100644 index 000000000000..23ecd1f2d4c3 --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/TypeUseNotNullOverriding.java @@ -0,0 +1,14 @@ +import typeUse.*; + +class Super { + void m1(byte @NotNull [] p) {} + void m2(byte @NotNull [] p) {} + void m3(byte[] p) {} +} + +class Sub extends Super { + void m1(byte @NotNull [] p) {} + void m2(byte[] p) {} + void m3(byte @NotNull [] p) {} + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java index c9f936451bd5..704ac0dc9c68 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java @@ -240,6 +240,17 @@ public class NullableStuffInspectionTest extends LightCodeInsightFixtureTestCase doTest(); } + public void testTypeUseNotNullField() { + DataFlowInspection8Test.setupTypeUseAnnotations("typeUse", myFixture); + doTest(); + } + + public void testTypeUseNotNullOverriding() { + myInspection.REPORT_NOTNULL_PARAMETERS_OVERRIDES_NOT_ANNOTATED = true; + DataFlowInspection8Test.setupTypeUseAnnotations("typeUse", myFixture); + doTest(); + } + public void testAnnotateQuickFixOnMethodReference() { doTest(); myFixture.launchAction(myFixture.findSingleIntention("Annotate"));