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
}