diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java index 5ec56b9c2029..63be25233bb1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java @@ -25,6 +25,7 @@ package com.intellij.codeInspection.dataFlow.value; import com.intellij.codeInsight.NullableNotNullManager; +import com.intellij.codeInsight.daemon.impl.analysis.JavaGenericsUtil; import com.intellij.codeInspection.dataFlow.DfaPsiUtil; import com.intellij.codeInspection.dataFlow.Nullness; import com.intellij.openapi.util.Comparing; @@ -160,6 +161,16 @@ public class DfaVariableValue extends DfaValue { return nullability; } + if (var instanceof PsiParameter && var.getParent() instanceof PsiForeachStatement) { + PsiExpression iteratedValue = ((PsiForeachStatement)var.getParent()).getIteratedValue(); + if (iteratedValue != null) { + PsiType itemType = JavaGenericsUtil.getCollectionItemType(iteratedValue); + if (itemType != null) { + return DfaPsiUtil.getElementNullability(itemType, var); + } + } + } + if (var instanceof PsiField && DfaPsiUtil.isFinalField((PsiVariable)var) && myFactory.isHonorFieldInitializers()) { List initializers = DfaPsiUtil.findAllConstructorInitializers((PsiField)var); if (initializers.isEmpty()) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java index 027a6593aff6..bc81159a7427 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullableForeachVariable.java @@ -14,6 +14,13 @@ class Foo { System.out.println(i.intValue()); } } + void foo3() { + List<@Nullable String> list = new ArrayList<>(); + list.add(null); + for (String s : list) { + System.out.println(s.length()); + } + } }