diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StateMerger.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StateMerger.java index 5d1a0928cfeb..92fe226049db 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StateMerger.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StateMerger.java @@ -38,7 +38,7 @@ import java.util.Set; class StateMerger { private final Map> myVarValues = ContainerUtil.newIdentityHashMap(); private final Map>> myEqPairs = ContainerUtil.newIdentityHashMap(); - private final Map, DfaMemoryStateImpl> myCopyCache = ContainerUtil.newHashMap(); + private final Map> myCopyCache = ContainerUtil.newIdentityHashMap(); @Nullable public List mergeByEquality(List states) { @@ -197,12 +197,15 @@ class StateMerger { } private DfaMemoryStateImpl copyWithoutVar(DfaMemoryStateImpl state, DfaVariableValue var) { - Pair key = Pair.create(state, var); - DfaMemoryStateImpl copy = myCopyCache.get(key); + Map map = myCopyCache.get(state); + if (map == null) { + myCopyCache.put(state, map = ContainerUtil.newIdentityHashMap()); + } + DfaMemoryStateImpl copy = map.get(var); if (copy == null) { copy = state.createCopy(); copy.flushVariable(var); - myCopyCache.put(key, copy); + map.put(var, copy); } return copy; }