mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
Multi-Launch: Redirect to specific configuration on 'Edit'
GitOrigin-RevId: 5043493a2de75c6a4a7abe1a1c561a582fd51c0d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
67565ac18b
commit
6d40b840f4
@@ -1,35 +1,20 @@
|
||||
package com.intellij.execution.multilaunch.design.actions
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.ui.awt.RelativePoint
|
||||
import com.intellij.execution.multilaunch.execution.executables.Executable
|
||||
import com.intellij.execution.multilaunch.design.ExecutableRow
|
||||
import com.intellij.execution.multilaunch.design.popups.ExecutableSelectionPopupFactory
|
||||
import com.intellij.idea.ActionsBundle
|
||||
import com.intellij.openapi.actionSystem.ActionUpdateThread
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
|
||||
class EditExecutableAction : ManageExecutableAction(ActionsBundle.message("action.multilaunch.EditExecutableAction.text")) {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
val project = e.project ?: return
|
||||
val configuration = e.configuration ?: return
|
||||
val viewModel = e.executablesViewModel ?: return
|
||||
val popupBounds = e.popupBounds ?: return
|
||||
override fun getActionUpdateThread() = ActionUpdateThread.EDT
|
||||
|
||||
override fun update(e: AnActionEvent) {
|
||||
val editableRow = e.editableRow ?: return
|
||||
e.presentation.isEnabledAndVisible = editableRow.executable?.supportsEditing ?: false
|
||||
}
|
||||
|
||||
fun handleChosen(executables: List<Executable?>) {
|
||||
executables.filterNotNull().forEach { executable ->
|
||||
val newRow = ExecutableRow(executable, editableRow.condition, editableRow.disableDebugging)
|
||||
viewModel.replaceRow(editableRow, newRow)
|
||||
}
|
||||
}
|
||||
|
||||
val existingExecutables = viewModel.rows.mapNotNull { it?.executable }
|
||||
ExecutableSelectionPopupFactory
|
||||
.getInstance(project)
|
||||
.createPopup(configuration, existingExecutables, false, ::handleChosen)
|
||||
.apply {
|
||||
setMinimumSize(popupBounds.size)
|
||||
show(RelativePoint(popupBounds.location))
|
||||
}
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
val editableRow = e.editableRow ?: return
|
||||
editableRow.executable?.performEdit()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,10 @@ abstract class Executable(
|
||||
open suspend fun cancel() {}
|
||||
|
||||
open val beforeExecuteTasks: List<BeforeExecuteTask> = emptyList()
|
||||
|
||||
open val supportsDebugging: Boolean = false
|
||||
open val supportsEditing: Boolean = false
|
||||
|
||||
open fun performEdit() {}
|
||||
|
||||
/**
|
||||
* May return null if executable is without configurable parameters.
|
||||
|
||||
@@ -5,22 +5,25 @@ import com.intellij.execution.compound.CompoundRunConfiguration
|
||||
import com.intellij.execution.configurations.RunConfiguration
|
||||
import com.intellij.execution.configurations.WrappingRunConfiguration
|
||||
import com.intellij.execution.executors.DefaultRunExecutor
|
||||
import com.intellij.execution.impl.EditConfigurationsDialog
|
||||
import com.intellij.execution.impl.ExecutionManagerImpl
|
||||
import com.intellij.execution.process.ProcessAdapter
|
||||
import com.intellij.execution.process.ProcessEvent
|
||||
import com.intellij.execution.runners.ExecutionUtil
|
||||
import com.intellij.execution.runners.ProgramRunner
|
||||
import com.intellij.execution.ui.RunContentDescriptor
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.jetbrains.rd.util.lifetime.Lifetime
|
||||
import com.intellij.execution.impl.RunConfigurationSelector
|
||||
import com.intellij.execution.multilaunch.MultiLaunchConfiguration
|
||||
import com.intellij.execution.multilaunch.execution.BeforeExecuteTask
|
||||
import com.intellij.execution.multilaunch.execution.ExecutionMode
|
||||
import com.intellij.execution.multilaunch.execution.executables.Executable
|
||||
import com.intellij.execution.multilaunch.execution.executables.ExecutableTemplate
|
||||
import com.intellij.execution.multilaunch.state.ExecutableSnapshot
|
||||
import com.intellij.execution.process.ProcessAdapter
|
||||
import com.intellij.execution.process.ProcessEvent
|
||||
import com.intellij.execution.runners.ExecutionUtil
|
||||
import com.intellij.execution.runners.ProgramRunner
|
||||
import com.intellij.execution.ui.RunContentDescriptor
|
||||
import com.intellij.ide.DataManager
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.jetbrains.rd.util.lifetime.Lifetime
|
||||
import com.intellij.openapi.ui.MessageType
|
||||
import com.intellij.openapi.util.text.HtmlBuilder
|
||||
import com.intellij.openapi.util.text.HtmlChunk
|
||||
@@ -65,12 +68,19 @@ class RunConfigurationExecutableManager(private val project: Project) : Executab
|
||||
.map { BeforeRunTaskProvider.getProvider(project, it.providerId)?.name ?: it.providerId.toString()}
|
||||
.map { BeforeExecuteTask(it) }
|
||||
|
||||
override val supportsDebugging: Boolean
|
||||
get() = true
|
||||
override val supportsDebugging = true
|
||||
override val supportsEditing = true
|
||||
|
||||
override fun saveAttributes(snapshot: ExecutableSnapshot) {}
|
||||
override fun loadAttributes(snapshot: ExecutableSnapshot) {}
|
||||
|
||||
override fun performEdit() {
|
||||
val dialog = EditConfigurationsDialog.findInstanceFromFocus() ?: return
|
||||
val dialogContext = DataManager.getInstance().getDataContext(dialog.getPreferredFocusedComponent())
|
||||
val selector = RunConfigurationSelector.KEY.getData(dialogContext) ?: return
|
||||
selector.select(settings.configuration)
|
||||
}
|
||||
|
||||
override suspend fun execute(mode: ExecutionMode, lifetime: Lifetime): RunContentDescriptor? {
|
||||
val executor = when (mode) {
|
||||
ExecutionMode.Run -> DefaultRunExecutor.getRunExecutorInstance()
|
||||
|
||||
Reference in New Issue
Block a user