From 40736a35d355c2aed9996b35c4db1b3df32b6d2f Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Wed, 13 Jan 2016 16:49:46 +0300 Subject: [PATCH] dumb-aware run configurations: run startup tasks immediately --- .../startup/ProjectStartupRunner.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupRunner.java b/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupRunner.java index 0d87de62366f..36daaff5c606 100644 --- a/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupRunner.java +++ b/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupRunner.java @@ -21,10 +21,13 @@ import com.intellij.execution.impl.RunManagerImpl; import com.intellij.ide.startup.StartupManagerEx; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupActivity; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.ui.MessageType; +import com.intellij.openapi.util.registry.Registry; import com.intellij.util.Alarm; import org.jetbrains.annotations.NotNull; @@ -34,11 +37,25 @@ import java.util.List; /** * @author Irina.Chernushina on 8/19/2015. */ -public class ProjectStartupRunner implements StartupActivity { +public class ProjectStartupRunner implements StartupActivity, DumbAware { public static final int DELAY_MILLIS = 200; @Override - public void runActivity(@NotNull Project project) { + public void runActivity(@NotNull final Project project) { + if (Registry.is("dumb.aware.run.configurations")) { + doRunActivity(project); + } else { + DumbService.getInstance(project).runWhenSmart(new Runnable() { + @Override + public void run() { + if (project.isDisposed()) return; + doRunActivity(project); + } + }); + } + } + + protected void doRunActivity(@NotNull Project project) { final ProjectStartupTaskManager projectStartupTaskManager = ProjectStartupTaskManager.getInstance(project); if (projectStartupTaskManager.isEmpty()) return; @@ -69,7 +86,7 @@ public class ProjectStartupRunner implements StartupActivity { return new Runnable() { @Override public void run() { - if (! ((StartupManagerEx) StartupManager.getInstance(project)).postStartupActivityPassed()) { + if (! ((StartupManagerEx) StartupManager.getInstance(project)).postStartupActivityPassed() && !Registry.is("dumb.aware.run.configurations")) { alarm.addRequest(createRequest(project, alarm), DELAY_MILLIS); } else { runActivities(project);