in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/golang/debug/BazelGoBeforeRunTaskProvider.kt [80:134]
override fun executeTask(
context: DataContext,
configuration: RunConfiguration,
environment: ExecutionEnvironment,
task: T,
): Boolean {
val runConfiguration = environment.runProfile as BazelRunConfiguration
// skipping this task for non-debugging run config
if (environment.executor !is DefaultDebugExecutor) return true
val scriptPath = createTempScriptFile()
val project = environment.project
val targetUtils = project.targetUtils
val targetInfos = runConfiguration.targets.mapNotNull { targetUtils.getBuildTargetForLabel(it) }
if (targetInfos.any {
!it.kind.includesGo() || (it.kind.ruleType != RuleType.TEST && it.kind.ruleType != RuleType.BINARY)
}
) {
return false
}
val target = runConfiguration.targets.single()
val bazelParams =
listOf(
"--script_path=$scriptPath",
"--dynamic_mode=off",
"--test_sharding_strategy=disabled",
"--compilation_mode=dbg",
) + additionalBazelParams(runConfiguration)
val success =
runBlocking {
val result =
withBackgroundProgress(project, BazelPluginBundle.message("go.debug.background.progress.start.title", target)) {
val params =
RunParams(
target = runConfiguration.targets.single(),
originId = "",
arguments = emptyList(),
environmentVariables = emptyMap(),
additionalBazelParams = bazelParams.joinToString(" "),
)
project.connection.runWithServer { server -> server.buildTargetRun(params) }
}
if (result.statusCode != BazelStatus.SUCCESS) {
BazelBalloonNotifier.error(
BazelPluginBundle.message("go.debug.before.run.script.path.generation.failure.title", target),
BazelPluginBundle.message("go.debug.before.run.script.path.generation.failure.content", result.statusCode),
)
return@runBlocking false
}
environment.getCopyableUserData(EXECUTABLE_KEY).set(parseScriptPathFile(scriptPath, project))
return@runBlocking true
}
return success
}