From 083da84b79fd8e91730c1fe5b9a5d867331d8f18 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 27 Sep 2013 12:26:18 +0200 Subject: [PATCH] use identity map for more efficient dfa state copy lookup --- .../intellij/codeInspection/dataFlow/StateMerger.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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; }