override suspend fun run()

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
    }