mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
[multilaunch]: Fix RIDER-105632: Starting Debug on Multi-Launch Configuration has no effect
GitOrigin-RevId: 91f0982c77928c4b1fb417fdd84cc6c50bbed2a7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3c69de703c
commit
026430be93
@@ -3,12 +3,15 @@ package com.intellij.execution.multilaunch.servicesView
|
||||
import com.intellij.execution.RunManager
|
||||
import com.intellij.execution.RunManagerListener
|
||||
import com.intellij.execution.RunnerAndConfigurationSettings
|
||||
import com.intellij.execution.compound.CompoundRunConfiguration
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.startup.ProjectActivity
|
||||
import com.intellij.execution.multilaunch.MultiLaunchConfiguration
|
||||
import com.intellij.execution.multilaunch.execution.ExecutionEngine
|
||||
import com.intellij.execution.multilaunch.execution.ExecutionModel
|
||||
import com.intellij.execution.multilaunch.execution.MultiLaunchExecutionModel
|
||||
import com.intellij.execution.multilaunch.execution.executables.impl.RunConfigurationExecutableManager
|
||||
import com.intellij.execution.multilaunch.state.ExecutableRowSnapshotFactory
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.components.service
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -32,27 +35,55 @@ class MultiLaunchServicesRefreshActivity : ProjectActivity {
|
||||
}
|
||||
}
|
||||
|
||||
inner class MultiLaunchConfigurationsListener(project: Project) : RunManagerListener {
|
||||
inner class MultiLaunchConfigurationsListener(private val project: Project) : RunManagerListener {
|
||||
private val serviceViewUpdatePublisher by lazy { MultiLaunchServicesRefresher.getInstance(project) }
|
||||
private val executionModel by lazy { ExecutionModel.getInstance(project) }
|
||||
override fun runConfigurationAdded(settings: RunnerAndConfigurationSettings) {
|
||||
val configuration = settings.configuration as? MultiLaunchConfiguration ?: return
|
||||
executionModel.configurations.putIfAbsent(configuration, MultiLaunchExecutionModel(settings, configuration))
|
||||
serviceViewUpdatePublisher.refresh()
|
||||
when (val configuration = settings.configuration) {
|
||||
is MultiLaunchConfiguration -> {
|
||||
executionModel.configurations.putIfAbsent(configuration, MultiLaunchExecutionModel(settings, configuration))
|
||||
serviceViewUpdatePublisher.refresh()
|
||||
}
|
||||
!is CompoundRunConfiguration ->
|
||||
listContainingMultilaunchConfigs(settings).forEach(::refreshMultilaunch)
|
||||
}
|
||||
}
|
||||
|
||||
override fun runConfigurationChanged(settings: RunnerAndConfigurationSettings) {
|
||||
val configuration = settings.configuration as? MultiLaunchConfiguration ?: return
|
||||
refreshMultilaunch(configuration)
|
||||
}
|
||||
|
||||
override fun runConfigurationRemoved(settings: RunnerAndConfigurationSettings) {
|
||||
when (val configuration = settings.configuration) {
|
||||
is MultiLaunchConfiguration -> {
|
||||
executionModel.configurations.remove(configuration)
|
||||
serviceViewUpdatePublisher.refresh()
|
||||
}
|
||||
!is CompoundRunConfiguration -> {
|
||||
listContainingMultilaunchConfigs(settings).forEach(::refreshMultilaunch)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun listContainingMultilaunchConfigs(settings: RunnerAndConfigurationSettings): List<MultiLaunchConfiguration> {
|
||||
val runConfigType = RunConfigurationExecutableManager.getInstance(project).type
|
||||
val runConfigCompositeId = ExecutableRowSnapshotFactory.createCompositeId(runConfigType, settings.uniqueID)
|
||||
val multilaunchSnapshots = RunManager.getInstance(project).allSettings
|
||||
.map { it.configuration }
|
||||
.filterIsInstance<MultiLaunchConfiguration>()
|
||||
.map { it to it.state }
|
||||
|
||||
return multilaunchSnapshots.filter { (_, snapshot) ->
|
||||
snapshot.rows.any { row -> row.executable?.id == runConfigCompositeId }
|
||||
}.map { it.first }
|
||||
}
|
||||
|
||||
private fun refreshMultilaunch(configuration: MultiLaunchConfiguration) {
|
||||
val model = executionModel.configurations[configuration] ?: return
|
||||
executionModel.configurations.remove(configuration)
|
||||
executionModel.configurations[configuration] = model
|
||||
serviceViewUpdatePublisher.refresh(configuration)
|
||||
}
|
||||
|
||||
override fun runConfigurationRemoved(settings: RunnerAndConfigurationSettings) {
|
||||
val configuration = settings.configuration as? MultiLaunchConfiguration ?: return
|
||||
executionModel.configurations.remove(configuration)
|
||||
serviceViewUpdatePublisher.refresh()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ object ExecutableRowSnapshotFactory {
|
||||
}
|
||||
}
|
||||
|
||||
private fun createCompositeId(type: String, uniqueId: String) = "$type:$uniqueId"
|
||||
fun createCompositeId(type: String, uniqueId: String) = "$type:$uniqueId"
|
||||
}
|
||||
|
||||
fun ExecutableRow.toSnapshot() =
|
||||
|
||||
Reference in New Issue
Block a user