From feb9c65b98544c4bf73a5670afdbbe5e5c65f1ef Mon Sep 17 00:00:00 2001 From: Ivan Buryak Date: Thu, 6 Dec 2018 15:58:22 +0700 Subject: [PATCH] IDEA-203047 Disallow JavaEE run configurations running in parallel but preserve showing `Update` dialog while rerun them --- .../configurations/RunConfiguration.java | 5 +++++ .../execution/impl/ExecutionManagerImpl.java | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/configurations/RunConfiguration.java b/platform/lang-api/src/com/intellij/execution/configurations/RunConfiguration.java index b0003e635e3a..5a9aab45c1ed 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/RunConfiguration.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/RunConfiguration.java @@ -2,6 +2,7 @@ package com.intellij.execution.configurations; import com.intellij.execution.BeforeRunTask; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.options.SettingsEditor; @@ -168,4 +169,8 @@ public interface RunConfiguration extends RunProfile, Cloneable { default void setAllowRunningInParallel(boolean value) { } + + default boolean processRunSame(@NotNull ExecutionEnvironment environment) { + return false; + } } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java index 06c65c729c9b..b18f1731f7ea 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -397,13 +397,19 @@ public abstract class ExecutionManagerImpl extends ExecutionManager implements D List runningToStop = ContainerUtil.concat(runningOfTheSameType, runningIncompatible); if (!runningToStop.isEmpty()) { if (configuration != null) { - if (!runningOfTheSameType.isEmpty() - && (runningOfTheSameType.size() > 1 || contentToReuse == null || runningOfTheSameType.get(0) != contentToReuse) && - !userApprovesStopForSameTypeConfigurations(environment.getProject(), configuration.getName(), runningOfTheSameType.size())) { - return; + if (!runningOfTheSameType.isEmpty() && + (runningOfTheSameType.size() > 1 || contentToReuse == null || runningOfTheSameType.get(0) != contentToReuse)) { + + if (configuration.getConfiguration().processRunSame(environment)) { + return; + } + + if (!userApprovesStopForSameTypeConfigurations(environment.getProject(), configuration.getName(), runningOfTheSameType.size())) { + return; + } } - if (!runningIncompatible.isEmpty() - && !userApprovesStopForIncompatibleConfigurations(myProject, configuration.getName(), runningIncompatible)) { + if (!runningIncompatible.isEmpty() && + !userApprovesStopForIncompatibleConfigurations(myProject, configuration.getName(), runningIncompatible)) { return; } }