From 5de3184fb3872e82338416ac8b40ab9ff4553b3a Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 23 Aug 2016 13:13:03 +0300 Subject: [PATCH] do not search null-literal argument for notnull var-arg parameter IDEA-160134 --- .../psi/impl/search/JavaNullMethodArgumentUtil.java | 4 ++++ .../NullPassedAsPartNotNullAnnotatedOfVarArg.java | 11 +++++++++++ .../codeInspection/NullableStuffInspectionTest.java | 4 ++++ 3 files changed, 19 insertions(+) create mode 100644 java/java-tests/testData/inspection/nullableProblems/NullPassedAsPartNotNullAnnotatedOfVarArg.java diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaNullMethodArgumentUtil.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaNullMethodArgumentUtil.java index b3449820c618..af26e99aacaf 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaNullMethodArgumentUtil.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaNullMethodArgumentUtil.java @@ -42,6 +42,10 @@ public class JavaNullMethodArgumentUtil { } public static void searchNullArgument(@NotNull PsiMethod method, final int argumentIdx, @NotNull Processor nullArgumentProcessor) { + final PsiParameter parameter = method.getParameterList().getParameters()[argumentIdx]; + if (parameter.getType() instanceof PsiEllipsisType) { + return; + } final GlobalSearchScope scope = findScopeWhereNullArgumentCanPass(method, argumentIdx); if (scope == null) return; MethodReferencesSearch.search(method, scope, true).forEach(ref -> { diff --git a/java/java-tests/testData/inspection/nullableProblems/NullPassedAsPartNotNullAnnotatedOfVarArg.java b/java/java-tests/testData/inspection/nullableProblems/NullPassedAsPartNotNullAnnotatedOfVarArg.java new file mode 100644 index 000000000000..94b44d3ecee4 --- /dev/null +++ b/java/java-tests/testData/inspection/nullableProblems/NullPassedAsPartNotNullAnnotatedOfVarArg.java @@ -0,0 +1,11 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + static void someMethod(@NotNull Object... varargParameter) { + + } + + public static void main(String[] args) { + someMethod(null, null); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java index 0ace266bdc75..1aa9ce489f96 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/NullableStuffInspectionTest.java @@ -171,6 +171,10 @@ public class NullableStuffInspectionTest extends LightCodeInsightFixtureTestCase doTest(); } + public void testNullPassedAsPartNotNullAnnotatedOfVarArg() { + doTest(); + } + public void testHonorParameterDefaultInSetters() { DataFlowInspectionTest.addJavaxNullabilityAnnotations(myFixture); DataFlowInspectionTest.addJavaxDefaultNullabilityAnnotations(myFixture);