void () { final Collection<FilePath> files = gatherChangedPaths(); // for changes to be detected, we need switch to background change list manager update thread and back to dispatch thread // so callback is used; ok to be called after VCS update markup closed: no remote operations VcsDirtyScopeManager.getInstance(getProject()).filePathsDirty(files, null); final ChangeListManager changeListManager = ChangeListManager.getInstance(getProject()); changeListManager.invokeAfterUpdateWithModal(true, getTitle(), () -> { Collection<Change> changes = new ArrayList<>(); for (FilePath file : files) { ContainerUtil.addIfNotNull(changes, changeListManager.getChange(file)); } CommitChangeListDialog.commitVcsChanges(getProject(), changes, null, myMerger.getComment(), null); prepareAndShowResults(); }); }