override fun executeTask()

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
  }