IJPL-239066 Common overload for executing and debugging

(cherry picked from commit bf8bc613c16ce12da46bce0068b2190f4df83222)

GitOrigin-RevId: a546cdb25dfa79aeb76e4cd97fcea2812396e23d
This commit is contained in:
Artem.Bukhonov
2026-03-18 13:52:11 +00:00
committed by intellij-monorepo-bot
parent 632eff06f3
commit 7ca362c2d2
3 changed files with 44 additions and 3 deletions
@@ -79,6 +79,7 @@ tool.activity.getting.symbol.info=Getting symbol info at ''{0}:{1}:{2}''
tool.activity.renaming.symbol=Renaming ''{0}'' to ''{1}'' in ''{2}''
tool.activity.getting.run.configurations=Getting run configurations
tool.activity.executing.run.configuration=Executing run configuration ''{0}''
tool.activity.starting.debug.run.configuration=Starting debug run configuration ''{0}''
tool.activity.collecting.file.problems=Collecting problems in file ''{0}''
tool.activity.listing.modules=Listing modules
tool.activity.checking.dependencies=Checking dependencies
@@ -134,9 +134,41 @@ class ExecutionToolset : McpToolset {
workingDirectory: String? = null,
@McpDescription("Optional environment variable overrides for this launch only. Missing/null keeps existing env unchanged; when provided, values are merged over existing env.")
envs: Map<String, String>? = null,
): RunConfigurationResult {
): RunConfigurationResult {
return executeRunConfiguration(
configurationName = configurationName,
filePath = filePath,
line = line,
timeout = timeout,
maxLinesCount = maxLinesCount,
truncateMode = truncateMode,
programArguments = programArguments,
workingDirectory = workingDirectory,
envs = envs,
isDebug = false,
)
}
// for start_debug_session
suspend fun executeRunConfiguration(
configurationName: String? = null,
filePath: String? = null,
line: Int? = null,
timeout: Int,
maxLinesCount: Int,
truncateMode: TruncateMode,
programArguments: String?,
workingDirectory: String?,
envs: Map<String, String>?,
isDebug: Boolean,
): RunConfigurationResult {
val executionTarget = resolveRunConfigurationExecutionTarget(configurationName = configurationName, filePath = filePath, line = line)
currentCoroutineContext().reportToolActivity(McpServerBundle.message("tool.activity.executing.run.configuration", executionTarget.presentableName))
currentCoroutineContext().reportToolActivity(
McpServerBundle.message(
if (isDebug) "tool.activity.starting.debug.run.configuration" else "tool.activity.executing.run.configuration",
executionTarget.presentableName,
)
)
val project = currentCoroutineContext().project
val resolvedConfiguration = resolveRunConfigurationForExecution(
@@ -162,6 +194,7 @@ class ExecutionToolset : McpToolset {
timeout = timeout,
maxLinesCount = maxLinesCount,
truncateMode = truncateMode,
isDebug = isDebug,
)
return RunConfigurationResult(
exitCode = executionOutput.exitCode,
@@ -7,6 +7,7 @@ import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.ConfigurationFromContext
import com.intellij.execution.configurations.RunConfiguration
import com.intellij.execution.executors.DefaultDebugExecutor
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.execution.lineMarker.RunLineMarkerContributor
import com.intellij.execution.lineMarker.RunLineMarkerContributor.Info
@@ -259,8 +260,14 @@ internal suspend fun executeResolvedRunConfiguration(
timeout: Int,
maxLinesCount: Int,
truncateMode: TruncateMode,
isDebug: Boolean,
): RunConfigurationExecutionOutput {
val executor = DefaultRunExecutor.getRunExecutorInstance() ?: mcpFail("Execution is not supported in this environment or IDE")
val executor = if (isDebug) {
DefaultDebugExecutor.getDebugExecutorInstance() ?: mcpFail("Debugging is not available in this environment or IDE.")
}
else {
DefaultRunExecutor.getRunExecutorInstance() ?: mcpFail("Execution is not supported in this environment or IDE")
}
val exitCodeDeferred = CompletableDeferred<Int>()
val outputBuilder = StringBuilder()