diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java index 6f1bacebce4b..857ef1bf46c5 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java @@ -74,10 +74,13 @@ public class DfaValueFactory { DfaValue constValue = getConstFactory().create(variable); if (constValue != null) return constValue; - if (!(psiSource instanceof PsiField)) { - PsiExpression initializer = variable.getInitializer(); - if (initializer instanceof PsiPolyadicExpression && variable.hasModifierProperty(PsiModifier.FINAL)) { - PsiType type = initializer.getType(); + PsiExpression initializer = variable.getInitializer(); + if (initializer != null && variable.hasModifierProperty(PsiModifier.FINAL)) { + PsiType type = initializer.getType(); + if (initializer instanceof PsiNewExpression) { + return getNotNullFactory().create(type); + } + if (initializer instanceof PsiPolyadicExpression) { if (type != null && type.equalsToText(CommonClassNames.JAVA_LANG_STRING)) { return getNotNullFactory().create(type); } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsConstant.java b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsConstant.java new file mode 100644 index 000000000000..d4d1a15ffad5 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsConstant.java @@ -0,0 +1,10 @@ +import org.jetbrains.annotations.*; +class Class1 { + public void f(@Nullable Object o) { + o = o != null ? o : Class2.O; + o.toString(); + } +} +class Class2 { + static final Object O = new Object(); +} \ 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 9f5d6bbf8eb2..57ca43e790bb 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -74,5 +74,6 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testVisitFinallyOnce() throws Throwable { doTest(); } public void testNotEqualsDoesntImplyNotNullity() throws Throwable { doTest(); } public void testEqualsEnumConstant() throws Throwable { doTest(); } + public void testEqualsConstant() throws Throwable { doTest(); } }