void (@Nullable RunnerAndConfigurationSettings settings, @Nullable ExecutionTarget toSelect) { List<ExecutionTarget> suitable = settings == null ? Collections.singletonList(DefaultExecutionTarget.INSTANCE) : getTargetsFor(settings.getConfiguration()); ExecutionTarget toNotify; synchronized (myActiveTargetLock) { if (toSelect == null && !DefaultExecutionTarget.INSTANCE.equals(myActiveTarget)) { toSelect = myActiveTarget; } int index = -1; if (toSelect != null) { index = suitable.indexOf(toSelect); } else if (mySavedActiveTargetId != null) { for (int i = 0, size = suitable.size(); i < size; i++) { if (suitable.get(i).getId().equals(mySavedActiveTargetId)) { index = i; break; } } } toNotify = doSetActiveTarget(index >= 0 ? suitable.get(index) : getDefaultTarget(suitable)); } if (toNotify != null) { myProject.getMessageBus().syncPublisher(TOPIC).activeTargetChanged(toNotify); } }