diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/SimplifyForEachInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/SimplifyForEachInspection.java index 883681e1460f..3ef8f47217b6 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/SimplifyForEachInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/SimplifyForEachInspection.java @@ -110,7 +110,7 @@ public class SimplifyForEachInspection extends BaseJavaBatchLocalInspectionTool } @Nullable - static PsiLambdaExpression extractLambdaFromForEach(PsiMethodCallExpression call) { + static PsiLambdaExpression extractLambdaFromForEach(@NotNull PsiMethodCallExpression call) { PsiExpression qualifier = call.getMethodExpression().getQualifierExpression(); if (qualifier == null || !(STREAM_FOREACH.test(call) || isCollectionForEach(call, qualifier))) return null; PsiExpression arg = call.getArgumentList().getExpressions()[0]; @@ -195,7 +195,8 @@ public class SimplifyForEachInspection extends BaseJavaBatchLocalInspectionTool return result; } - static SimplifyForEachContext from(PsiMethodCallExpression call) { + static SimplifyForEachContext from(@Nullable PsiMethodCallExpression call) { + if (call == null) return null; PsiLambdaExpression lambda = extractLambdaFromForEach(call); if (lambda == null) return null; PsiElement lambdaBody = lambda.getBody(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyForEach/beforeCompilationCtor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyForEach/beforeCompilationCtor.java new file mode 100644 index 000000000000..ab1c59ed889a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/simplifyForEach/beforeCompilationCtor.java @@ -0,0 +1,12 @@ +// "Avoid mutation using Stream API 'count()' operation" "false" + +import java.util.*; + +public class Main { + // EA-107550 - NPE: SimplifyForEachInspection.extractLambdaFromForEach + void test() { + int x = 0; + class X {X(Runnable r) {}} + new X(() -> x++); + } +}