void (@NotNull ModalityState modalityState, @NotNull Runnable runnable) { Runnable whenAllCommitted = new Runnable() { @Override public void run() { ApplicationManager.getApplication().invokeLater(() -> { if (PsiDocumentManagerBase.this.hasEventSystemEnabledUncommittedDocuments()) { // no luck, will try later PsiDocumentManagerBase.this.performLaterWhenAllCommitted(runnable); } else { runnable.run(); } }, modalityState, myProject.getDisposed()); } @Override public String toString() { return "performLaterWhenAllCommitted(" + runnable+ ")"; } }; if (ApplicationManager.getApplication().isDispatchThread() && isInsideCommitHandler()) { whenAllCommitted.run(); } else { EdtInvocationManager.invokeLaterIfNeeded(() -> { if (!myProject.isDisposed()) { performWhenAllCommitted(whenAllCommitted); } }); } }