@Override public void runWhenProjectIsInitialized(@NotNull final Runnable action) { final Application application = ApplicationManager.getApplication(); if (application == null) return; //noinspection SynchronizeOnThis synchronized (this) { // in tests which simulate project opening, post-startup activities could have been run // already. // Then we should act as if the project was initialized boolean initialized = myProject.isInitialized() || application.isUnitTestMode() && myPostStartupActivitiesPassed; if (!initialized) { registerPostStartupActivity(action); return; } } Runnable runnable = new Runnable() { @Override public void run() { if (!myProject.isDisposed()) { action.run(); } } }; if (application.isDispatchThread() && ModalityState.current() == ModalityState.NON_MODAL) { runnable.run(); } else { application.invokeLater(runnable, ModalityState.NON_MODAL); } }
public synchronized void runWhenProjectIsInitialized(@NotNull final Runnable action) { final Runnable runnable; final Application application = ApplicationManager.getApplication(); if (DumbService.isDumbAware(action)) { runnable = new DumbAwareRunnable() { public void run() { application.runWriteAction(action); } }; } else { runnable = new Runnable() { public void run() { application.runWriteAction(action); } }; } if (myProject.isInitialized() || application.isUnitTestMode() && myPostStartupActivitiesPassed) { // in tests which simulate project opening, post-startup activities could have been run // already. // Then we should act as if the project was initialized UIUtil.invokeLaterIfNeeded( new Runnable() { public void run() { if (!myProject.isDisposed()) { runnable.run(); } } }); } else { registerPostStartupActivity(runnable); } }