in sources/amper-cli/src/org/jetbrains/amper/tasks/custom/TaskFromPlugin.kt [83:142]
override suspend fun run(
dependenciesResult: List<TaskResult>,
executionContext: TaskGraphExecutionContext,
): TaskResult {
val taskCode = dependenciesResult
.filterIsInstance<JvmRuntimeClasspathTask.Result>()
.single()
description.requestedCompilationArtifacts.forEach { request ->
val result = dependenciesResult.filterIsInstance<JvmClassesJarTask.Result>()
.first { it.module == request.from }
request.node.artifact = result.jarPath
}
val doNotUseExecutionAvoidance = description.explicitOptOutOfExecutionAvoidance ||
// We do not use execution-avoidance if there are no outputs declared.
description.outputs.isEmpty()
if (doNotUseExecutionAvoidance) {
logger.debug("No outputs declared, not using execution avoidance")
doExecuteTaskAction(
taskRuntimeClasspath = taskCode.jvmRuntimeClasspath,
)
return EmptyTaskResult
}
incrementalCache.execute(
key = taskName.name,
inputValues = mapOf(
"action" to description.actionClassJvmName + '.' + description.actionFunctionJvmName,
"arguments" to description.actionArguments.entries.joinToString(
separator = "\n",
transform = { (arg, value) ->
val valueRepresentation = when (value) {
is SchemaNode -> value.toStableJsonLikeString()
else -> value.toString()
}
"$arg = $valueRepresentation;"
},
),
),
inputFiles = buildList {
addAll(taskCode.jvmRuntimeClasspath)
for (input in description.inputs) add(input.path.value)
for (resolvedRequest in description.requestedClasspaths) addAll(resolvedRequest.node.resolvedFiles)
for (sourcesRequest in description.requestedModuleSources) addAll(sourcesRequest.node.sourceDirectories)
for (artifactRequest in description.requestedCompilationArtifacts) add(artifactRequest.node.artifact)
},
) {
doExecuteTaskAction(
taskRuntimeClasspath = taskCode.jvmRuntimeClasspath,
)
IncrementalCache.ExecutionResult(
outputFiles = description.outputs.map { it.path.value }
.filter { it.exists() },
)
}
return EmptyTaskResult
}