@Override public void run(final ContinuationContext context) { final MultiMap<String, Change> map = myIntersection.getChangesSubset(); final RefreshSessionImpl session = new RefreshSessionImpl( true, false, new Runnable() { public void run() { context.ping(); } }); for (String name : map.keySet()) { try { final Collection<Change> changes = map.get(name); ApplicationManager.getApplication() .invokeAndWait( new Runnable() { @Override public void run() { FileDocumentManager.getInstance().saveAllDocuments(); } }, ModalityState.NON_MODAL); ShelveChangesManager.getInstance(myProject) .shelveChanges( changes, myIntersection.getComment(name) + " (auto shelve before merge)", true); session.addAllFiles(ChangesUtil.getFilesFromChanges(changes)); } catch (IOException e) { finishWithError(context, e.getMessage(), true); } catch (VcsException e) { finishWithError(context, e.getMessage(), true); } } // first suspend to guarantee stop->then start back sequence context.suspend(); session.launch(); }