From 80f4b17109144daae7153e6f1dd2800eaaea1f21 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Fri, 20 Oct 2017 22:42:40 +0200 Subject: [PATCH] OC-16061 "Compound" Run configuration type does not work with device/simulator selection: handle deleted execution targets --- .../execution/ExecutionTargetManagerImpl.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java index a8e1cda5e121..d54a36778e7f 100644 --- a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java @@ -206,24 +206,27 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement ExecutionTargetProvider[] providers = Extensions.getExtensions(ExecutionTargetProvider.EXTENSION_NAME); LinkedHashSet result = new LinkedHashSet<>(); + Set specifiedTargets = new THashSet<>(); doWithEachNonCompoundWithSpecifiedTarget(settings, each -> { - if (each.second != null) { - result.add(each.second); - } - else { - for (ExecutionTargetProvider eachTargetProvider : providers) { - result.addAll(eachTargetProvider.getTargets(myProject, each.first)); + for (ExecutionTargetProvider eachTargetProvider : providers) { + List supportedTargets = eachTargetProvider.getTargets(myProject, each.first); + + if (each.second != null) { + if (supportedTargets.contains(each.second)) { + result.add(each.second); + specifiedTargets.add(each.second); + break; + } + } + else { + result.addAll(supportedTargets); } } return true; }); + if (!result.isEmpty()) { - doWithEachNonCompoundWithSpecifiedTarget(settings, each -> { - if (each.second != null) { - result.retainAll(Collections.singleton(each.second)); - } - return true; - }); + specifiedTargets.forEach(it -> result.retainAll(Collections.singleton(it))); if (result.isEmpty()) { result.add(MULTIPLE_TARGETS); }