diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListWorker.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListWorker.java index 9b9936443f78..c2f239eb1f93 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListWorker.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListWorker.java @@ -85,7 +85,9 @@ public class ChangeListWorker { myChangeMappings.put(change, newList); }); - myPartialChangeTrackers.putAll(worker.myPartialChangeTrackers); + for (Map.Entry entry : worker.myPartialChangeTrackers.entrySet()) { + myPartialChangeTrackers.put(entry.getKey(), new PartialChangeTrackerDump(entry.getValue(), myDefault)); + } } @NotNull @@ -507,9 +509,7 @@ public class ChangeListWorker { ListData fromList = getDataById(fromListId); if (fromList != null && fromList != targetList) { - if (myMainWorker) { - tracker.moveChanges(fromList.id, targetList.id); - } + tracker.moveChanges(fromList.id, targetList.id); result.putValue(fromList, change); } @@ -519,9 +519,7 @@ public class ChangeListWorker { fromLists.remove(targetList); if (!fromLists.isEmpty()) { - if (myMainWorker) { - tracker.moveChangesTo(targetList.id); - } + tracker.moveChangesTo(targetList.id); for (ListData fromList : fromLists) { result.putValue(fromList, change); @@ -622,18 +620,14 @@ public class ChangeListWorker { private void fireDefaultListChanged(@NotNull String oldDefaultId, @NotNull String newDefaultId) { - if (myMainWorker) { - for (PartialChangeTracker tracker : myPartialChangeTrackers.values()) { - tracker.defaultListChanged(oldDefaultId, newDefaultId); - } + for (PartialChangeTracker tracker : myPartialChangeTrackers.values()) { + tracker.defaultListChanged(oldDefaultId, newDefaultId); } } private void fireChangeListRemoved(@NotNull String listId) { - if (myMainWorker) { - for (PartialChangeTracker tracker : myPartialChangeTrackers.values()) { - tracker.changeListRemoved(listId); - } + for (PartialChangeTracker tracker : myPartialChangeTrackers.values()) { + tracker.changeListRemoved(listId); } } @@ -1111,6 +1105,52 @@ public class ChangeListWorker { } + private static class PartialChangeTrackerDump implements PartialChangeTracker { + @NotNull private final Set myChangeListsIds; + @NotNull private String myDefaultId; + + public PartialChangeTrackerDump(@NotNull PartialChangeTracker tracker, + @NotNull ListData defaultList) { + myChangeListsIds = new HashSet<>(tracker.getAffectedChangeListsIds()); + myDefaultId = defaultList.id; + } + + @NotNull + @Override + public List getAffectedChangeListsIds() { + return new ArrayList<>(myChangeListsIds); + } + + @Override + public void initChangeTracking(@NotNull String defaultId, @NotNull List changelistsIds) { + throw new UnsupportedOperationException(); + } + + @Override + public void defaultListChanged(@NotNull String oldListId, @NotNull String newListId) { + myDefaultId = newListId; + } + + @Override + public void changeListRemoved(@NotNull String listId) { + myChangeListsIds.remove(listId); + if (myChangeListsIds.isEmpty()) myChangeListsIds.add(myDefaultId); + } + + @Override + public void moveChanges(@NotNull String fromListId, @NotNull String toListId) { + if (myChangeListsIds.remove(fromListId)) { + myChangeListsIds.add(toListId); + } + } + + @Override + public void moveChangesTo(@NotNull String toListId) { + myChangeListsIds.clear(); + myChangeListsIds.add(toListId); + } + } + public interface PartialChangeTracker { @NotNull List getAffectedChangeListsIds();