From f55680a73795810a6124acda7a8108abd684ef13 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 21 Oct 2019 16:03:13 +0300 Subject: [PATCH] [Gradle, JS] Configure build and run in one place: configureMain --- .../targets/js/subtargets/KotlinBrowserJs.kt | 36 +++++++++---------- .../js/subtargets/KotlinJsSubTarget.kt | 23 +++++++----- .../targets/js/subtargets/KotlinNodeJs.kt | 17 +++++++-- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index a4214821582..04e84bbb0ba 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -34,9 +34,8 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : private val dceConfigurations: MutableList Unit> = mutableListOf() private val dceWebpackEntryAppliers: MutableList Unit> = mutableListOf() - private lateinit var dceTaskProvider: TaskProvider - lateinit var buildVariants: NamedDomainObjectContainer + private lateinit var buildVariants: NamedDomainObjectContainer override val testTaskDescription: String get() = "Run all ${target.name} tests inside browser using karma and webpack" @@ -61,17 +60,21 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : dceConfigurations.add(body) } - override fun configureRun(compilation: KotlinJsCompilation) { + override fun configureMain(compilation: KotlinJsCompilation) { + val dceTaskProvider = configureDce(compilation) + + configureRun(compilation, dceTaskProvider) + configureBuild(compilation, dceTaskProvider) + } + + override fun configureRun( + compilation: KotlinJsCompilation, + dceTaskProvider: TaskProvider? + ) { val project = compilation.target.project val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - val dceTaskProvider = if (::dceTaskProvider.isInitialized) { - this.dceTaskProvider - } else { - configureDce(compilation) - } - buildVariants.all { buildVariant -> val kind = buildVariant.kind val runTask = project.registerTask( @@ -121,16 +124,13 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } } - override fun configureBuild(compilation: KotlinJsCompilation) { + override fun configureBuild( + compilation: KotlinJsCompilation, + dceTaskProvider: TaskProvider? + ) { val project = compilation.target.project val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - val dceTaskProvider = if (::dceTaskProvider.isInitialized) { - this.dceTaskProvider - } else { - configureDce(compilation) - } - buildVariants.all { buildVariant -> val kind = buildVariant.kind val webpackTask = project.registerTask( @@ -183,7 +183,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : val kotlinTask = compilation.compileKotlinTask - return project.registerTask(dceTaskName) { + return project.registerTask(dceTaskName) { dceConfigurations.forEach { configuration -> it.configuration() } @@ -201,8 +201,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } it.source(kotlinTask.outputFile) - }.also { - dceTaskProvider = it } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt index 205f6e69a72..0cb3c52612c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.plugins.ExtensionAware +import org.gradle.api.tasks.TaskProvider import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -20,6 +21,7 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest +import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry @@ -45,10 +47,7 @@ abstract class KotlinJsSubTarget( configureBuildVariants() configureTests() - configure { - configureRun(it) - configureBuild(it) - } + configureMain() target.compilations.all { val npmProject = it.npmProject @@ -128,15 +127,23 @@ abstract class KotlinJsSubTarget( protected abstract fun configureDefaultTestFramework(it: KotlinJsTest) - fun configure(configurator: (KotlinJsCompilation) -> Unit) { + private fun configureMain() { target.compilations.all { compilation -> if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) { - configurator(compilation) + configureMain(compilation) } } } - protected abstract fun configureRun(compilation: KotlinJsCompilation) + protected abstract fun configureMain(compilation: KotlinJsCompilation) - protected abstract fun configureBuild(compilation: KotlinJsCompilation) + protected abstract fun configureRun( + compilation: KotlinJsCompilation, + dceTaskProvider: TaskProvider? + ) + + protected abstract fun configureBuild( + compilation: KotlinJsCompilation, + dceTaskProvider: TaskProvider? + ) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt index 5e0a2d74456..aaa74d3f486 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt @@ -5,11 +5,13 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets +import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest +import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce import javax.inject.Inject open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : @@ -26,12 +28,23 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : it.useMocha { } } - override fun configureRun(compilation: KotlinJsCompilation) { + override fun configureMain(compilation: KotlinJsCompilation) { + configureRun(compilation, null) + configureBuild(compilation, null) + } + + override fun configureRun( + compilation: KotlinJsCompilation, + dceTaskProvider: TaskProvider? + ) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased("run")) target.runTask.dependsOn(runTaskHolder) } - override fun configureBuild(compilation: KotlinJsCompilation) { + override fun configureBuild( + compilation: KotlinJsCompilation, + dceTaskProvider: TaskProvider? + ) { } override fun configureBuildVariants() {