From eab6a7d038c4872c92b3804fd62b3b625d4adb64 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 12 Feb 2020 16:56:15 +0300 Subject: [PATCH] [Gradle, JS] Register link tasks for binaries, not for compilations --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 48 +++++-------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index d36bd0e36e7..4ff39ad37d5 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -101,18 +102,21 @@ internal abstract class KotlinSourceSetProcessor>( } private fun prepareKotlinCompileTask(): TaskProvider = - registerKotlinCompileTask().also { task -> + registerKotlinCompileTask(register = ::doRegisterTask).also { task -> kotlinCompilation.output.addClassesDir { project.files(task.map { it.destinationDir }) } } - protected fun registerKotlinCompileTask(name: String = kotlinCompilation.compileKotlinTaskName): TaskProvider { + protected fun registerKotlinCompileTask( + name: String = kotlinCompilation.compileKotlinTaskName, + register: (Project, String, (T) -> Unit) -> TaskProvider + ): TaskProvider { logger.kotlinDebug("Creating kotlin compile task $name") KotlinCompileTaskData.register(name, kotlinCompilation).apply { destinationDir.set(project.provider { defaultKotlinDestinationDir }) } - return doRegisterTask(project, name) { + return register(project, name) { it.description = taskDescription it.mapClasspath { kotlinCompilation.compileDependencyFiles } } @@ -321,29 +325,8 @@ internal class KotlinJsIrSourceSetProcessor( project: Project, taskName: String, configureAction: (Kotlin2JsCompile) -> (Unit) - ): TaskProvider { - val compilation = kotlinCompilation as KotlinJsIrCompilation - - if (taskName == compilation.productionLinkTaskName) { - return registerJsLink( - project, - taskName, - BuildVariantKind.PRODUCTION, - configureAction - ) - } - - if (taskName == compilation.developmentLinkTaskName) { - return registerJsLink( - project, - taskName, - BuildVariantKind.DEVELOPMENT, - configureAction - ) - } - - return tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction) - } + ): TaskProvider = + tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction) private fun registerJsLink( project: Project, @@ -368,16 +351,11 @@ internal class KotlinJsIrSourceSetProcessor( val compilation = kotlinCompilation as KotlinJsIrCompilation - listOf( - compilation.productionLinkTaskName, - compilation.developmentLinkTaskName - ).onEach { taskName -> + (compilation.target as KotlinJsIrTarget).binaries.all { binary -> registerKotlinCompileTask( - taskName - ) - }.forEach { taskName -> - project.tasks.named(taskName).configure { - it.dependsOn(kotlinTask) + binary.linkTaskName + ) { project, name, action -> + registerJsLink(project, name, binary.type, action) } }