IDEA-287497 Reuse existing configuration-action class in the new run-configurations popup

Also return possibility to select configuration

GitOrigin-RevId: b2b97d64536bcfd99f25cc8051f371d4c3d5f0eb
This commit is contained in:
Alexey Merkulov
2022-08-19 18:48:50 +00:00
committed by intellij-monorepo-bot
parent fca52ab974
commit bf1f4d88e0
3 changed files with 17 additions and 22 deletions
@@ -442,7 +442,7 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D
}
@ApiStatus.Internal
public static final class SelectConfigAction extends DefaultActionGroup implements DumbAware {
public static class SelectConfigAction extends DefaultActionGroup implements DumbAware {
private final RunnerAndConfigurationSettings myConfiguration;
private final Project myProject;
private final @NotNull Function<? super Executor, Boolean> myExecutorFilter;
@@ -218,17 +218,17 @@ private class OtherRunOptions : TogglePopupAction(
}
}
internal fun createOtherRunnersSubgroup(runConfiguration: RunnerAndConfigurationSettings?, project: Project): ActionGroup? {
val executorFilter: (Executor) -> Boolean = {
// Cannot use DefaultDebugExecutor.EXECUTOR_ID because of module dependencies
it.id != ToolWindowId.RUN && it.id != ToolWindowId.DEBUG
}
internal val excludeRunAndDebug: (Executor) -> Boolean = {
// Cannot use DefaultDebugExecutor.EXECUTOR_ID because of module dependencies
it.id != ToolWindowId.RUN && it.id != ToolWindowId.DEBUG
}
private fun createOtherRunnersSubgroup(runConfiguration: RunnerAndConfigurationSettings?, project: Project): ActionGroup? {
if (runConfiguration != null) {
return RunConfigurationsComboBoxAction.SelectConfigAction(runConfiguration, project, executorFilter)
return RunConfigurationsComboBoxAction.SelectConfigAction(runConfiguration, project, excludeRunAndDebug)
}
if (RunConfigurationsComboBoxAction.hasRunCurrentFileItem(project)) {
return RunConfigurationsComboBoxAction.RunCurrentFileAction(executorFilter)
return RunConfigurationsComboBoxAction.RunCurrentFileAction(excludeRunAndDebug)
}
return ActionGroup.EMPTY_GROUP
}
@@ -2,6 +2,7 @@
package com.intellij.execution.ui
import com.intellij.execution.*
import com.intellij.execution.actions.RunConfigurationsComboBoxAction
import com.intellij.execution.configurations.RunProfile
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.execution.executors.ExecutorGroup
@@ -10,7 +11,6 @@ import com.intellij.execution.impl.ExecutionManagerImpl.Companion.isProcessRunni
import com.intellij.execution.impl.isOfSameType
import com.intellij.execution.process.ProcessHandler
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.execution.runners.ExecutionUtil
import com.intellij.icons.AllIcons
import com.intellij.ide.ActivityTracker
import com.intellij.ide.DataManager
@@ -33,7 +33,10 @@ import com.intellij.openapi.project.DumbAwareAction
import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.StartupActivity
import com.intellij.openapi.ui.popup.*
import com.intellij.openapi.util.*
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.IconLoader
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.UserDataHolder
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.wm.ToolWindowId
@@ -248,17 +251,7 @@ internal fun createRunConfigurationsActionGroup(project: Project, addHeader: Boo
inlineActions.add(RunToolbarWidgetRunAction(runExecutor) { conf })
inlineActions.add(RunToolbarWidgetRunAction(debugExecutor) { conf })
actions.add(ActionGroupWithInlineActions(conf.shortenName(), true, inlineActions).apply {
templatePresentation.icon = conf.configuration.icon
if (conf.isRunning(project)) {
templatePresentation.icon = ExecutionUtil.getLiveIndicator(templatePresentation.icon)
}
val subgroup = createOtherRunnersSubgroup(conf, project)
if (subgroup != null) {
addAll(subgroup)
}
})
actions.add(ActionGroupWithInlineActions(inlineActions, conf, project))
}
actions.add(Separator.create())
actions.add(DelegateAction({ ExecutionBundle.message("run.toolbar.widget.all.configurations") },
@@ -302,7 +295,9 @@ private class DelegateAction(val string: Supplier<@Nls String>, delegate: AnActi
}
}
private class ActionGroupWithInlineActions(@NlsActions.ActionText name: String, popup: Boolean, private val actions: List<AnAction>) : DefaultActionGroup(name, popup), InlineActionsHolder {
private class ActionGroupWithInlineActions(
private val actions: List<AnAction>, configuration: RunnerAndConfigurationSettings, project: Project
) : RunConfigurationsComboBoxAction.SelectConfigAction(configuration, project, excludeRunAndDebug), InlineActionsHolder {
override fun getInlineActions(): List<AnAction> = actions
}