diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index 2274ac1221d5..38d4857c7514 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -690,6 +690,21 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { finishElement(switchStmt); } + @Override + public void visitMethodReferenceExpression(PsiMethodReferenceExpression expression) { + startElement(expression); + + PsiExpression qualifier = expression.getQualifierExpression(); + if (qualifier != null) { + qualifier.accept(this); + addInstruction(new FieldReferenceInstruction(qualifier, "Method reference qualifier")); + } + + addInstruction(new PushInstruction(myFactory.createTypeValue(expression.getFunctionalInterfaceType(), Nullness.NOT_NULL), expression)); + + finishElement(expression); + } + @Override public void visitSynchronizedStatement(PsiSynchronizedStatement statement) { startElement(statement); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/MethodReferenceOnNullable.java b/java/java-tests/testData/inspection/dataFlow/fixture/MethodReferenceOnNullable.java new file mode 100644 index 000000000000..7b27c2e28bc3 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/MethodReferenceOnNullable.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.Nullable; + +class BrokenAlignment { + + { + Runnable t = getString()::length; + Runnable t2 = BrokenAlignment::getStringStatic; + } + + @Nullable + private String getString() { + return null; + } + @Nullable + private static String getStringStatic() { + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspection8Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspection8Test.java index 9581ab124ecc..34b1c015678f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspection8Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspection8Test.java @@ -76,6 +76,8 @@ public class DataFlowInspection8Test extends LightCodeInsightFixtureTestCase { }); } + public void testMethodReferenceOnNullable() { doTest(); } + public void testNullableForeachVariable() { setupCustomAnnotations(); doTest();