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; } }