diff --git a/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java b/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java
index 9db1645d768d..c6fafeb05178 100644
--- a/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java
+++ b/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java
@@ -30,10 +30,13 @@ public class ObviousNullCheckInspection extends AbstractBaseJavaLocalInspectionT
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(PsiMethodCallExpression call) {
+ PsiExpression[] args = call.getArgumentList().getExpressions();
+ // Avoid method resolve if no argument is a candidate for obvious non-null warning
+ // (checking this is easier than resolving and calls without arguments are excluded at all)
+ if (!ContainerUtil.exists(args, arg -> getObviouslyNonNullExplanation(PsiUtil.skipParenthesizedExprDown(arg)) != null)) return;
NullCheckParameter nullCheckParameter = NullCheckParameter.fromCall(call);
if (nullCheckParameter == null) return;
- if (!(call.getParent() instanceof PsiExpressionStatement || nullCheckParameter.myReturnsParameter)) return;
- PsiExpression[] args = call.getArgumentList().getExpressions();
+ if (!ExpressionUtils.isVoidContext(call) && !nullCheckParameter.myReturnsParameter) return;
if (args.length <= nullCheckParameter.myIndex) return;
PsiExpression nullArg = PsiUtil.skipParenthesizedExprDown(args[nullCheckParameter.myIndex]);
String explanation = getObviouslyNonNullExplanation(nullArg);
diff --git a/java/java-tests/testData/inspection/obviousNotNull/ObviousNullCheck.java b/java/java-tests/testData/inspection/obviousNotNull/ObviousNullCheck.java
index 74cbcfb063dd..4ff7c77a815e 100644
--- a/java/java-tests/testData/inspection/obviousNotNull/ObviousNullCheck.java
+++ b/java/java-tests/testData/inspection/obviousNotNull/ObviousNullCheck.java
@@ -24,6 +24,16 @@ abstract class ObviousNullCheck {
System.out.println(inferred("foo"));
}
+ static String concat(String s, String m) {
+ if(s == null) throw new NullPointerException();
+ return s+m;
+ }
+
+ void testStrings(List list) {
+ list.forEach(s -> concat("Not null!", s));
+ list.stream().map(s -> concat("Not null!", s)).forEach(System.out::println);
+ }
+
@Contract(value="null -> fail", pure=true)
String trim(String s) {
return s.trim();