diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListsIndexes.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListsIndexes.java index 6833ddd2b0f5..c7fa67ac2117 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListsIndexes.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListsIndexes.java @@ -30,6 +30,7 @@ import org.jetbrains.annotations.Nullable; import java.util.*; +import static com.intellij.util.containers.ContainerUtil.newHashMap; import static com.intellij.util.containers.ContainerUtil.newHashSet; public class ChangeListsIndexes { @@ -126,32 +127,30 @@ public class ChangeListsIndexes { Set> toModify) { TreeMap oldMap = myMap; TreeMap newMap = newIndexes.myMap; - Set oldFiles = oldMap.keySet(); - Set newFiles = newMap.keySet(); - final Set toRemoveSet = newHashSet(oldFiles); - toRemoveSet.removeAll(newFiles); + HashMap newHashMap = newHashMap(newMap); + for (Map.Entry entry : oldMap.entrySet()) { + FilePath s = entry.getKey(); + Data oldData = entry.getValue(); + Data newData = newHashMap.get(s); - final Set toAddSet = newHashSet(newFiles); - toAddSet.removeAll(oldFiles); - - final Set toModifySet = newHashSet(oldFiles); - toModifySet.removeAll(toRemoveSet); - - for (FilePath s : toRemoveSet) { - final Data data = oldMap.get(s); - toRemove.add(createBaseRevision(s, data)); + if (newData != null) { + if (!oldData.sameRevisions(newData)) { + toModify.add(new BeforeAfter<>(createBaseRevision(s, oldData), createBaseRevision(s, newData))); + } + } + else { + toRemove.add(createBaseRevision(s, oldData)); + } } - for (FilePath s : toAddSet) { - final Data data = newMap.get(s); - toAdd.add(createBaseRevision(s, data)); - } - for (FilePath s : toModifySet) { - final Data oldData = oldMap.get(s); - final Data newData = newMap.get(s); - assert oldData != null && newData != null; - if (!oldData.sameRevisions(newData)) { - toModify.add(new BeforeAfter<>(createBaseRevision(s, oldData), createBaseRevision(s, newData))); + + Set oldFiles = newHashSet(oldMap.keySet()); + for (Map.Entry entry : newMap.entrySet()) { + FilePath s = entry.getKey(); + Data newData = entry.getValue(); + + if (!oldFiles.contains(s)) { + toAdd.add(createBaseRevision(s, newData)); } } }