boolean () { Application application = ApplicationManager.getApplication(); if (application.isDispatchThread()) { if (application.isWriteAccessAllowed()) { commitAllDocuments(); //there are lot of existing actions/processors/tests which execute it under write lock //do not show this message in unit test mode if (!application.isUnitTestMode()) { LOG.error("Do not call commitAllDocumentsUnderProgress inside write-action"); } return true; } else if (application.isUnitTestMode()) { WriteAction.run(() -> commitAllDocuments()); return true; } } final int semaphoreTimeoutInMs = 50; Runnable commitAllDocumentsRunnable = () -> { Semaphore semaphore = new Semaphore(1); AppUIExecutor.onWriteThread().later().submit(() -> { PsiDocumentManager.getInstance(myProject).performWhenAllCommitted(new Runnable() { @Override public void run() { semaphore.up(); } @Override public String toString() { return "commitAllDocumentsUnderProgress()"; } }); }); while (!semaphore.waitFor(semaphoreTimeoutInMs)) { ProgressManager.checkCanceled(); } }; return ProgressManager.getInstance().runProcessWithProgressSynchronously(commitAllDocumentsRunnable, CoreBundle.message("progress.title.processing.documents"), true, myProject); }