dumb-aware run configurations: run startup tasks immediately

This commit is contained in:
Dennis Ushakov
2016-01-13 16:49:46 +03:00
parent 1106cb05c4
commit 40736a35d3
@@ -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);