IDEA-203047 Disallow JavaEE run configurations running in parallel but preserve showing Update dialog while rerun them

This commit is contained in:
Ivan Buryak
2018-12-06 15:58:22 +07:00
parent aa14f6bf4f
commit feb9c65b98
2 changed files with 17 additions and 6 deletions
@@ -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;
}
}
@@ -397,13 +397,19 @@ public abstract class ExecutionManagerImpl extends ExecutionManager implements D
List<RunContentDescriptor> 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;
}
}