diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java
index 89e813a9d617..374415aae0b1 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java
@@ -511,13 +511,12 @@ public class DfaMemoryStateImpl implements DfaMemoryState {
@Override
public boolean isNull(DfaValue dfaValue) {
if (dfaValue instanceof DfaTypeValue && ((DfaTypeValue)dfaValue).isNotNull()) return false;
+
+ if (dfaValue instanceof DfaConstValue) return ((DfaConstValue)dfaValue).getConstant() == null;
- if (dfaValue instanceof DfaVariableValue || dfaValue instanceof DfaConstValue) {
- DfaConstValue dfaNull = myFactory.getConstFactory().getNull();
- Integer c1Index = getOrCreateEqClassIndex(dfaValue);
- Integer c2Index = getOrCreateEqClassIndex(dfaNull);
-
- return c1Index != null && c1Index.equals(c2Index);
+ if (dfaValue instanceof DfaVariableValue) {
+ int c1Index = getEqClassIndex(dfaValue);
+ return c1Index >= 0 && c1Index == getEqClassIndex(myFactory.getConstFactory().getNull());
}
return false;
@@ -530,16 +529,16 @@ public class DfaMemoryStateImpl implements DfaMemoryState {
}
DfaConstValue dfaNull = myFactory.getConstFactory().getNull();
- Integer c1Index = getOrCreateEqClassIndex(dfaVar);
- Integer c2Index = getOrCreateEqClassIndex(dfaNull);
- if (c1Index == null || c2Index == null) {
+ int c1Index = getEqClassIndex(dfaVar);
+ int c2Index = getEqClassIndex(dfaNull);
+ if (c1Index < 0 || c2Index < 0) {
return false;
}
long[] pairs = myDistinctClasses.toArray();
for (long pair : pairs) {
- if (c1Index.equals(low(pair)) && c2Index.equals(high(pair)) ||
- c1Index.equals(high(pair)) && c2Index.equals(low(pair))) {
+ if (c1Index == low(pair) && c2Index == high(pair) ||
+ c1Index == high(pair) && c2Index == low(pair)) {
return true;
}
}
diff --git a/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml b/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml
index 000168e3d991..caab45d3b56a 100644
--- a/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml
+++ b/java/java-tests/testData/inspection/dataFlow/unboxingNPE/expected.xml
@@ -384,4 +384,10 @@
Condition <code>i</code> is always <code>true</code> when reached
+
+ Test.java
+ 62
+ testUnboxingNPE_7454908424878253728
+ Switch label<code>case 0:</code> is unreachable
+