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 6b6c6e426a67..e430beca2568 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/NullableNotNullManager.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/NullableNotNullManager.java @@ -334,7 +334,9 @@ public abstract class NullableNotNullManager { : findAnnotation(owner, qualifiedNames); PsiType type = getOwnerType(owner); if (memberAnno != null) { - return preferTypeAnnotation(memberAnno, type); + PsiAnnotation annotation = preferTypeAnnotation(memberAnno, type); + if (annotation != memberAnno && !qualifiedNames.contains(annotation.getQualifiedName())) return null; + return annotation; } if (type != null) { return ContainerUtil.find(type.getAnnotations(), a -> qualifiedNames.contains(a.getQualifiedName())); diff --git a/java/java-tests/testData/inspection/nullableProblems/AnnotatingArrayAmbiguous.java b/java/java-tests/testData/inspection/nullableProblems/AnnotatingArrayAmbiguous.java new file mode 100644 index 000000000000..5c07c835fb6c --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/AnnotatingArrayAmbiguous.java @@ -0,0 +1,3 @@ +interface Y { + @withTypeUse.Nullable Object @withTypeUse.NotNull [] arr(); +} 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 b0b462e08383..ccc94eea3eca 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java @@ -69,6 +69,11 @@ public class NullableStuffInspectionTest extends LightJavaCodeInsightFixtureTest doTest(); } + public void testAnnotatingArrayAmbiguous() { + DataFlowInspection8Test.setupAmbiguousAnnotations("withTypeUse", myFixture); + doTest(); + } + public void testProblems2() { doTest(); } public void testNullableFieldNotnullParam() { doTest(); } public void testNotNullFieldNullableParam() { doTest(); }