diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java index af5013b3bce3..ae34a462b50d 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java @@ -91,7 +91,9 @@ public class ProjectRootManagerComponent extends ProjectRootManagerImpl implemen } }, project); - startupManager.registerStartupActivity(() -> myStartupActivityPerformed = true); + if (!myProject.isDefault()) { + startupManager.registerStartupActivity(() -> myStartupActivityPerformed = true); + } myHandler = new BatchUpdateListener() { @Override diff --git a/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java index 754b1ad0c1c3..22509e56d1f4 100644 --- a/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java @@ -77,20 +77,27 @@ public class StartupManagerImpl extends StartupManagerEx { myProject = project; } + private void checkNonDefaultProject() { + LOG.assertTrue(!myProject.isDefault(), "Please don't register startup activities for the default project: they won't ever be run"); + } + @Override public void registerPreStartupActivity(@NotNull Runnable runnable) { + checkNonDefaultProject(); LOG.assertTrue(!myPreStartupActivitiesPassed, "Registering pre startup activity that will never be run"); myPreStartupActivities.add(runnable); } @Override public void registerStartupActivity(@NotNull Runnable runnable) { + checkNonDefaultProject(); LOG.assertTrue(!myStartupActivitiesPassed, "Registering startup activity that will never be run"); myStartupActivities.add(runnable); } @Override public synchronized void registerPostStartupActivity(@NotNull Runnable runnable) { + checkNonDefaultProject(); LOG.assertTrue(!myPostStartupActivitiesPassed, "Registering post-startup activity that will never be run:" + " disposed=" + myProject.isDisposed() + "; open=" + myProject.isOpen() + "; passed=" + myStartupActivitiesPassed); (DumbService.isDumbAware(runnable) ? myDumbAwarePostStartupActivities : myNotDumbAwarePostStartupActivities).add(runnable); @@ -372,7 +379,7 @@ public class StartupManagerImpl extends StartupManagerEx { 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; + boolean initialized = myProject.isInitialized() || myProject.isDefault() || application.isUnitTestMode() && myPostStartupActivitiesPassed; if (!initialized) { registerPostStartupActivity(action); return; diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/impl/FileStatusManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vcs/impl/FileStatusManagerImpl.java index fe31c2f1b194..7bc9d843e3e5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vcs/impl/FileStatusManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vcs/impl/FileStatusManagerImpl.java @@ -106,6 +106,8 @@ public class FileStatusManagerImpl extends FileStatusManager implements ProjectC } }); + if (project.isDefault()) return; + startupManager.registerPreStartupActivity(() -> { DocumentAdapter documentListener = new DocumentAdapter() { @Override @@ -123,12 +125,7 @@ public class FileStatusManagerImpl extends FileStatusManager implements ProjectC factory.getEventMulticaster().addDocumentListener(documentListener, myProject); } }); - startupManager.registerPostStartupActivity(new DumbAwareRunnable() { - @Override - public void run() { - fileStatusesChanged(); - } - }); + startupManager.registerPostStartupActivity((DumbAwareRunnable)() -> fileStatusesChanged()); } public void setFileStatusProvider(final FileStatusProvider fileStatusProvider) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsInitialization.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsInitialization.java index 7afe0b0c6208..2b36da508f05 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsInitialization.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsInitialization.java @@ -43,7 +43,7 @@ public class VcsInitialization implements Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.impl.VcsInitialization"); private final List> myList = new ArrayList<>(); - private final Object myLock; + private final Object myLock = new Object(); @NotNull private final Project myProject; // the initialization lifecycle: IDLE -(on startup completion)-> RUNNING -(on all tasks executed or project canceled)-> FINISHED @@ -55,7 +55,7 @@ public class VcsInitialization implements Disposable { VcsInitialization(@NotNull final Project project) { myProject = project; - myLock = new Object(); + if (project.isDefault()) return; StartupManager.getInstance(project).registerPostStartupActivity((DumbAwareRunnable)() -> { if (project.isDisposed()) return;