From a535ce50717783cb24d6544d5c4f1986dda66a66 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 25 Apr 2022 17:40:30 +0200 Subject: [PATCH] [java-inspections] Do not report 'Not annotated method is used as an override...' when method ref target is a library method Initially, it was implemented to simplify annotation propagation. But we don't do this for libraries (as this would require adding external annotation which is not always desired) Fixes IDEA-292765 Lambda can be method reference inspection doesn't consider nullability of the functional interface GitOrigin-RevId: d99b253173c607234dea50eebb0da513d52ca5a7 --- .../nullable/NullableStuffInspectionBase.java | 3 ++- .../nullableProblems/MethodReferenceListOf.java | 15 +++++++++++++++ .../NullableStuffInspectionTest.java | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/nullableProblems/MethodReferenceListOf.java 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 6d5cf4beb4c0..3dcf8c4d5332 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 @@ -482,7 +482,8 @@ public class NullableStuffInspectionBase extends AbstractBaseJavaLocalInspection reportProblem(holder, refName, "inspection.nullable.problems.Nullable.method.overrides.NotNull", getPresentableAnnoName(targetMethod), getPresentableAnnoName(superMethod)); } - else if (isNonAnnotatedOverridingNotNull(targetMethod, superMethod)) { + else if (!(targetMethod instanceof PsiCompiledElement) && + isNonAnnotatedOverridingNotNull(targetMethod, superMethod)) { reportProblem(holder, refName, createFixForNonAnnotatedOverridesNotNull(targetMethod, superMethod), "not.annotated.method.is.used.as.an.override.for.a.method.annotated.with.0", getPresentableAnnoName(superMethod)); } diff --git a/java/java-tests/testData/inspection/nullableProblems/MethodReferenceListOf.java b/java/java-tests/testData/inspection/nullableProblems/MethodReferenceListOf.java new file mode 100644 index 000000000000..47242b49bd68 --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/MethodReferenceListOf.java @@ -0,0 +1,15 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +class A { + + interface FI { + @NotNull List getX(@NotNull T value); + } + + void foo() { + FI f = value -> List.of(value); + FI f2 = List::of; + } +} \ 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 1927de17d9bc..18efda682d3e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/NullableStuffInspectionTest.java @@ -124,6 +124,7 @@ public class NullableStuffInspectionTest extends LightJavaCodeInsightFixtureTest } public void testOverriddenViaMethodReference() { doTest(); } + public void testMethodReferenceListOf() { doTest(); } public void testOverridingExternalNotNull() { doTest(); } public void testIgnoreExternalNotNull() {