diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java index b0e057e4d2a2..5d0f505b8c58 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java @@ -806,6 +806,9 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { if (descriptor != null) { descriptors.add(descriptor); } + if (JavaDfaValueFactory.getQualifierOrThisValue(myFactory, expression) instanceof DfaVariableValue dfaVar) { + descriptors.add(dfaVar.getDescriptor()); + } } @Override diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FieldWriteInLambda.java b/java/java-tests/testData/inspection/dataFlow/fixture/FieldWriteInLambda.java new file mode 100644 index 000000000000..1ef8e9c2365e --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/FieldWriteInLambda.java @@ -0,0 +1,22 @@ +import java.util.function.BooleanSupplier; + +class FieldWriteInLambda { + private String myField; + + FieldWriteInLambda(boolean b) { + BooleanSupplier r = () -> { + myField = Math.random() > 0.5 ? "foo" : null; + return myField != null; + }; + if (b) { + r.getAsBoolean(); + if (myField == null) { + + } + } else if (r.getAsBoolean()) { + if (myField == null) { + + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java index e20a236e7783..82c42d793890 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java @@ -379,4 +379,5 @@ public class DataFlowInspection8Test extends DataFlowInspectionTestCase { setupTypeUseAnnotations("typeUse", myFixture); doTest(); } + public void testFieldWriteInLambda() { doTest(); } } \ No newline at end of file