void () { final MultiMap<FilePath, Change> moves = new MultiMap<>(); for (Change change : myWorker.myIdx.getChanges()) { if (change.isMoved() || change.isRenamed()) { moves.putValue(change.getBeforeRevision().getFile(), change); } } for (FilePath filePath : moves.keySet()) { final List<Change> copies = (List<Change>)moves.get(filePath); if (copies.size() == 1) continue; copies.sort(CHANGES_AFTER_REVISION_COMPARATOR); for (int i = 0; i < (copies.size() - 1); i++) { final Change oldChange = copies.get(i); final Change newChange = new Change(null, oldChange.getAfterRevision()); final AbstractVcs vcs = myWorker.myIdx.getVcsFor(oldChange); myWorker.myIdx.changeRemoved(oldChange); myWorker.myIdx.changeAdded(newChange, vcs); ListData list = myWorker.removeChangeMapping(oldChange); if (list != null) myWorker.putChangeMapping(newChange, list); } } }