From b783a87c25402206253812c1d5b3dc581368feb7 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 8 Jun 2023 13:30:16 +0000 Subject: [PATCH] [Gradle, JS] Use workaround to not link provider with task ^KTIJ-25757 fixed --- .../jetbrains/kotlin/gradle/mpp/MppTestsIT.kt | 38 +++++++++++++++++++ .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 6 ++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt index 08ab82efa07..7f11b6987d5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt @@ -50,4 +50,42 @@ class MppTestsIT : KGPBaseTest() { } } } + + // Android Studio has build service which checks all output files of all tasks in task graph + // https://cs.android.com/android-studio/platform/tools/base/+/0185d5af71ba51c64681731f99f319bfcaeb0174:build-system/gradle-core/src/main/java/com/android/build/gradle/internal/attribution/BuildAnalyzerConfiguratorService.kt;l=78-84 + @DisplayName("KTIJ-25757: MPP is compatible with getting all task output files before execution (Android Studio case)") + @GradleTest + fun testKtij25757AllTaskOutputFilesBeforeExecution(gradleVersion: GradleVersion) { + project( + "new-mpp-lib-with-tests", + gradleVersion + ) { + buildGradle.modify { + it + "\n" + + """ + kotlin { + js { + binaries.executable() + browser { + } + } + } + + gradle.taskGraph.whenReady { taskGraph -> + taskGraph.allTasks.forEach { task -> + // to not execute, just check configuration + task.enabled = false + task.outputs.files.forEach { outputFile -> + println(outputFile.path) + } + } + } + """.trimIndent() + + } + + build(":assemble") { + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 89c77233099..a3f61fe0b3e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -153,10 +153,12 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : task.doNotTrackStateCompat("Tracked by external webpack tool") + task.dependsOn(binary.linkSyncTask) + task.commonConfigure( binary = binary, mode = mode, - inputFilesDirectory = binary.linkSyncTask.flatMap { it.destinationDirectory }, + inputFilesDirectory = task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() }, entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName }, configurationActions = runTaskConfigurations, nodeJs = nodeJs, @@ -236,7 +238,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : task.commonConfigure( binary = binary, mode = mode, - inputFilesDirectory = binary.linkSyncTask.flatMap { it.destinationDirectory }, + inputFilesDirectory = task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() }, entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName }, configurationActions = webpackTaskConfigurations, nodeJs = nodeJs,