void (@NotNull DelayedNotificator dispatcher, @Nullable VcsDirtyScope scope) { List<ChangeList> changedLists = new ArrayList<>(); final Map<LocalChangeListImpl, List<Change>> removedChanges = new HashMap<>(); final Map<LocalChangeListImpl, List<Change>> addedChanges = new HashMap<>(); for (ChangeListWorker.ListData list : myWorker.myLists) { final List<Change> removed = new ArrayList<>(); final List<Change> added = new ArrayList<>(); doneProcessingChanges(list, removed, added); LocalChangeListImpl changeList = myWorker.toChangeList(list); if (!removed.isEmpty() || !added.isEmpty()) { changedLists.add(changeList); } if (!removed.isEmpty()) { removedChanges.put(changeList, removed); } if (!added.isEmpty()) { addedChanges.put(changeList, added); } } removedChanges.forEach((changeList, changes) -> dispatcher.changesRemoved(changes, changeList)); addedChanges.forEach((changeList, changes) -> dispatcher.changesAdded(changes, changeList)); for (ChangeList changeList : changedLists) { dispatcher.changeListChanged(changeList); } for (String name : myListsToDisappear) { final ChangeListWorker.ListData list = myWorker.getDataByName(name); if (list != null && myWorker.getChangesIn(list).isEmpty() && !list.isReadOnly && !list.isDefault) { myWorker.removeChangeList(name); } } myListsToDisappear.clear(); myChangesBeforeUpdateMap.clear(); myListsForPathsBeforeUpdate.clear(); for (ChangeListChangeAssigner extension : ChangeListChangeAssigner.EP_NAME.getExtensions(myWorker.myProject)) { try { extension.markChangesProcessed(scope); } catch (Throwable e) { LOG.error(e); } } }