From 2e22b8eb9a67a61c22ac16e423f3457a39d203f9 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 27 Dec 2019 14:03:22 +0300 Subject: [PATCH] [Gradle, JS] Register link tasks --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 44 ++++++++++++++++++- .../kotlin/gradle/tasks/TasksProvider.kt | 15 +++++++ 2 files changed, 57 insertions(+), 2 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 1fa5a68b00e..c228d731798 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 @@ -37,6 +37,8 @@ import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin 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.KotlinJsIrType import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -343,8 +345,46 @@ internal class KotlinJsIrSourceSetProcessor( project: Project, taskName: String, configureAction: (Kotlin2JsCompile) -> (Unit) - ): TaskProvider = - tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction) + ): TaskProvider { + val compilation = kotlinCompilation as KotlinJsIrCompilation + + if (taskName == compilation.productionLinkTaskName) { + return registerJsLink( + project, + taskName, + KotlinJsIrType.PRODUCTION, + configureAction + ) + } + + if (taskName == compilation.developmentLinkTaskName) { + return registerJsLink( + project, + taskName, + KotlinJsIrType.DEVELOPMENT, + configureAction + ) + } + + return tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction) + } + + private fun registerJsLink( + project: Project, + taskName: String, + type: KotlinJsIrType, + configureAction: (Kotlin2JsCompile) -> Unit + ): TaskProvider { + return tasksProvider.registerKotlinJsIrTask( + project, + taskName, + KotlinJsIrLink::class.java, + kotlinCompilation + ) { task -> + task.type = type + configureAction(task) + } + } override fun doTargetSpecificProcessing() { project.tasks.named(kotlinCompilation.compileAllTaskName).configure { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt index 287b95b54c0..7e157fc690f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt @@ -100,6 +100,21 @@ internal open class KotlinTasksProvider(val targetName: String) { return result } + fun registerKotlinJsIrTask( + project: Project, + name: String, + taskClass: Class, + compilation: AbstractKotlinCompilation<*>, + configureAction: (T) -> Unit + ): TaskProvider { + val properties = PropertiesProvider(project) + val result = project.registerTask(name, taskClass) { + configureAction(it) + } + configure(result, project, properties, compilation) + return result + } + fun registerKotlinCommonTask( project: Project, name: String,