diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index a4055ebf4a80..8a4f1201c154 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -267,7 +267,10 @@ public class DfaMemoryStateImpl implements DfaMemoryState { if (var == value) return; flushVariable(var); - if (value instanceof DfaUnknownValue) return; + if (value instanceof DfaUnknownValue) { + getVariableState(var).setNullable(false); + return; + } getVariableState(var).setValue(value); if (value instanceof DfaNotNullValue) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AssigningClassLiteralToNullable.java b/java/java-tests/testData/inspection/dataFlow/fixture/AssigningClassLiteralToNullable.java new file mode 100644 index 000000000000..14e44eaab953 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/AssigningClassLiteralToNullable.java @@ -0,0 +1,14 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class BrokenAlignment { + + public void main(String... args) { + @Nullable Class object = Object.class; + output2(object); + } + + public static void output2(@NotNull Object value) { + System.out.println(value); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java index 019628d57e9e..5b13a7592860 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -84,6 +84,7 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testChainedFinalFieldAccessorsDfa() throws Throwable { doTest(); } public void testAssigningUnknownToNullable() throws Throwable { doTest(); } + public void testAssigningClassLiteralToNullable() throws Throwable { doTest(); } public void testSynchronizingOnNullable() throws Throwable { doTest(); } public void testReturningNullFromVoidMethod() throws Throwable { doTest(); }