From 3bd8fa6286a7a5480e12391d2344883143fd29fe Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 27 Jul 2017 12:45:42 +0700 Subject: [PATCH] Minor fixes in CFG Stream inlining 1. Initial stream element nullability is derived from type 2. reportNullableArgumentsPassedToNonAnnotated fixed for method references --- .../codeInspection/dataFlow/DataFlowInspectionBase.java | 5 +++++ .../codeInspection/dataFlow/inliner/StreamChainInliner.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java index 5a901ae4f060..f9850537dc75 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java @@ -551,6 +551,11 @@ public class DataFlowInspectionBase extends BaseJavaBatchLocalInspectionTool { for (PsiElement expr : visitor.getProblems(NullabilityProblem.passingNullableArgumentToNonAnnotatedParameter)) { if (reportedAnchors.contains(expr)) continue; + if (expr.getParent() instanceof PsiMethodReferenceExpression) { + holder.registerProblem(expr.getParent(), "Method reference argument might be null but passed to non annotated parameter"); + continue; + } + final String text = isNullLiteralExpression(expr) ? "Passing null argument to non annotated parameter" : "Argument #ref #loc might be null but passed to non annotated parameter"; diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java index a365b9853a0a..7d1663130789 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inliner/StreamChainInliner.java @@ -317,7 +317,7 @@ public class StreamChainInliner implements CallInliner { .chain(firstStep::before) .doWhile() .pushVariable(builder.createTempVariable(inType)) - .push(builder.getFactory().createTypeValue(inType, Nullness.UNKNOWN)) + .push(builder.getFactory().createTypeValue(inType, DfaPsiUtil.getTypeNullability(inType))) .assign() .chain(firstStep::iteration) .endWhileUnknown();