diff --git a/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java b/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java index 353c269b7fd5..d5c56aabba49 100644 --- a/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java +++ b/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java @@ -55,6 +55,14 @@ public abstract class ExecutionTarget { */ public abstract boolean canRun(@NotNull RunnerAndConfigurationSettings configuration); + /** + * Checks if the target is ready to be selected as a default choice in the Run Configurations popup + * @return true if the target is ready, false otherwise + */ + public boolean isReady() { + return true; + } + @Override public boolean equals(Object obj) { return obj == this || (getClass().isInstance(obj) && getId().equals(((ExecutionTarget)obj).getId())); diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java index 8206141f0741..29cc62dcda7f 100644 --- a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java @@ -125,7 +125,7 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement } } toNotify = - doSetActiveTarget(index >= 0 ? suitable.get(index) : ContainerUtil.getFirstItem(suitable, DefaultExecutionTarget.INSTANCE)); + doSetActiveTarget(index >= 0 ? suitable.get(index) : getDefaultTarget(suitable)); } if (toNotify != null) { @@ -133,6 +133,11 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement } } + private static ExecutionTarget getDefaultTarget(List suitable){ + ExecutionTarget result = ContainerUtil.find(suitable, ExecutionTarget::isReady); + return result != null ? result : DefaultExecutionTarget.INSTANCE; + } + @Nullable private ExecutionTarget doSetActiveTarget(@NotNull ExecutionTarget newTarget) { mySavedActiveTargetId = null;