override fun executeTask()

in Frontend/src/main/kotlin/com/jetbrains/fortea/configuration/run/task/T4BuildProjectsBeforeRunTaskProvider.kt [39:71]


  override fun executeTask(
    context: DataContext,
    configuration: RunConfiguration,
    env: ExecutionEnvironment,
    task: T4BuildProjectsBeforeRunTask
  ): Boolean {
    val project = configuration.project
    val buildHost = BuildHost.getInstance(project)
    if (configuration !is T4RunConfiguration) return false
    val model = project
      .solution
      .t4ProtocolModel
    val selectedProjectsForBuild = model
      .getProjectDependencies
      .sync(configuration.parameters.request.location)
      .mapNotNull { WorkspaceModel.getInstance(project).getProjectModelEntity(it) }
      .mapNotNull { it.url?.virtualFile }
      .map(VirtualFile::getPath)
    if (selectedProjectsForBuild.isEmpty()) return true
    val finished = Semaphore()
    finished.down()
    var result = false
    // when false returned build was not started because another is in progress, we should not run task
    application.invokeLater {
      result = buildHost.requestBuild(BuildParameters(BuildTarget(), selectedProjectsForBuild, silentMode = true)) {
        result = it == BuildResultKind.Successful || it == BuildResultKind.HasWarnings
        finished.up()
      }
    }
    finished.waitFor()
    if (!result) model.executionAborted.handleEndOfExecution(configuration.parameters.request.location)
    return result
  }