void (@NotNull FilePath filePath, @NotNull PartialChangeTracker tracker) { boolean trackerRemoved = myPartialChangeTrackers.remove(filePath, tracker); if (trackerRemoved) { ListData newList = null; Change change = getChangeForAfterPath(filePath); if (change != null) { newList = getMainList(tracker); putChangeMapping(change, newList); } List<String> newIds = newList != null ? Collections.singletonList(newList.id) : Collections.emptyList(); notifyChangelistsChanged(filePath, tracker.getAffectedChangeListsIds(), newIds); if (LOG.isDebugEnabled()) { LOG.debug(String.format("[unregisterChangeTracker] path: %s, new list: %s, tracker lists: %s", filePath, newList != null ? newList.id : "null", tracker.getAffectedChangeListsIds())); } } else { Map.Entry<FilePath, PartialChangeTracker> entry = ContainerUtil.find(myPartialChangeTrackers.entrySet(), it -> Comparing.equal(it.getValue(), tracker)); if (entry != null) { LOG.error(String.format("Unregistered tracker with wrong path: tracker: %s", tracker)); FilePath actualFilePath = entry.getKey(); unregisterChangeTracker(actualFilePath, tracker); } else { LOG.error(String.format("Tracker is not registered: tracker: %s", tracker)); } } }