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 d39fe8ee47a5..7ba70d51f555 100644
--- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java
+++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java
@@ -612,10 +612,8 @@ public class DfaMemoryStateImpl implements DfaMemoryState {
return true;
}
- if (dfaRight == myFactory.getConstFactory().getNull() && dfaLeft instanceof DfaVariableValue) {
- final DfaVariableState varState = getVariableState((DfaVariableValue)dfaLeft);
- if (varState.isNotNull()) return isNegated;
- varState.setNullable(!isNegated);
+ if (isNull(dfaRight) && compareVariableWithNull(dfaLeft) || isNull(dfaLeft) && compareVariableWithNull(dfaRight)) {
+ return isNegated;
}
if (dfaLeft instanceof DfaUnknownValue || dfaRight instanceof DfaUnknownValue) return true;
@@ -623,6 +621,17 @@ public class DfaMemoryStateImpl implements DfaMemoryState {
return applyEquivalenceRelation(dfaRelation, dfaLeft, dfaRight);
}
+ private boolean compareVariableWithNull(DfaValue val) {
+ if (val instanceof DfaVariableValue) {
+ DfaVariableValue dfaVar = (DfaVariableValue)val;
+ if (isNotNull(dfaVar)) {
+ return true;
+ }
+ getVariableState(dfaVar).setNullable(true);
+ }
+ return false;
+ }
+
private boolean applyEquivalenceRelation(DfaRelationValue dfaRelation, DfaValue dfaLeft, DfaValue dfaRight) {
boolean isNegated = dfaRelation.isNonEquality();
if (!isNegated && !dfaRelation.isEquality()) {
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java
index 4b6277ad93aa..0459c905a130 100644
--- a/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/EqualsNotNull.java
@@ -62,7 +62,10 @@ public class Main {
if (val != null) {
return val;
}
- if (defVal == val) {
+ if (defVal == val) {
+ return val;
+ }
+ if (val == defVal) {
return val;
}
if (defVal.equals(val)) {