From cc25660d7db9ff8ced559d2f71e3b85c81f56895 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 20 Aug 2020 16:24:45 +0300 Subject: [PATCH] [Gradle, JS] Move distributions tasks into abstract subtarget class ^KT-41566 fixed --- .../targets/js/dsl/KotlinJsTargetDsl.kt | 20 +++++----- .../kotlin/gradle/targets/js/ir/JsBinaries.kt | 17 ++++++++ .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 23 +---------- .../targets/js/ir/KotlinJsIrSubTarget.kt | 39 +++++++++++++++++++ .../targets/js/subtargets/KotlinNodeJs.kt | 7 ++++ 5 files changed, 74 insertions(+), 32 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt index 6b23634aa9d..641c1399314 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt @@ -73,6 +73,16 @@ interface KotlinJsTargetDsl : KotlinTarget { } interface KotlinJsSubTargetDsl { + @ExperimentalDistributionDsl + fun distribution(body: Distribution.() -> Unit) + + @ExperimentalDistributionDsl + fun distribution(fn: Closure<*>) { + distribution { + ConfigureUtil.configure(fn, this) + } + } + fun testTask(body: KotlinJsTest.() -> Unit) fun testTask(fn: Closure<*>) { testTask { @@ -98,16 +108,6 @@ interface KotlinJsBrowserDsl : KotlinJsSubTargetDsl { } } - @ExperimentalDistributionDsl - fun distribution(body: Distribution.() -> Unit) - - @ExperimentalDistributionDsl - fun distribution(fn: Closure<*>) { - distribution { - ConfigureUtil.configure(fn, this) - } - } - fun webpackTask(body: KotlinWebpack.() -> Unit) fun webpackTask(fn: Closure<*>) { webpackTask { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt index 9f973718c29..efe0f580b7a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt @@ -63,6 +63,23 @@ class Executable( ) } +class Library( + compilation: KotlinJsCompilation, + name: String, + mode: KotlinJsBinaryMode +) : JsIrBinary( + compilation, + name, + mode +) { + val executeTaskBaseName: String = + generateBinaryName( + compilation, + mode, + null + ) +} + // Hack for legacy internal val JsBinary.executeTaskBaseName: String get() = generateBinaryName( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index e3e26df3fab..acfcfdd7ee2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.Task import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Sync import org.gradle.api.tasks.TaskProvider import org.gradle.language.base.plugins.LifecycleBasePlugin @@ -17,7 +16,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin -import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack @@ -36,7 +34,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : private val webpackTaskConfigurations: MutableList Unit> = mutableListOf() private val runTaskConfigurations: MutableList Unit> = mutableListOf() - private val distribution: Distribution = BrowserDistribution(project) override val testTaskDescription: String get() = "Run all ${target.name} tests inside browser using karma and webpack" @@ -67,11 +64,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : runTaskConfigurations.add(body) } - @ExperimentalDistributionDsl - override fun distribution(body: Distribution.() -> Unit) { - distribution.body() - } - override fun webpackTask(body: KotlinWebpack.() -> Unit) { webpackTaskConfigurations.add(body) } @@ -146,19 +138,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : val project = compilation.target.project val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName) - - val distributeResourcesTask = registerSubTargetTask( - disambiguateCamelCased( - DISTRIBUTE_RESOURCES_TASK_NAME - ) - ) { - it.from(processResourcesTask) - it.into(distribution.directory) - } - + val distributeResourcesTask = configureDistributeTasks(compilation) val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) - assembleTaskProvider.dependsOn(distributeResourcesTask) compilation.binaries .matching { it is Executable } @@ -281,8 +262,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : companion object { private const val WEBPACK_TASK_NAME = "webpack" - private const val DISTRIBUTE_RESOURCES_TASK_NAME = "distributeResources" - private const val DISTRIBUTION_TASK_NAME = "distribution" private const val RUN_COMPILE_COPY = "runCompileSync" } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index 208e6b8891d..4ef53a99233 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Task import org.gradle.api.plugins.ExtensionAware +import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskProvider import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator @@ -16,12 +17,16 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests import org.jetbrains.kotlin.gradle.plugin.mpp.isMain import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun +import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl 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.subtargets.BrowserDistribution import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest +import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry @@ -42,6 +47,13 @@ abstract class KotlinJsIrSubTarget( protected val taskGroupName = "Kotlin $disambiguationClassifier" + protected val distribution: Distribution = BrowserDistribution(project) + + @ExperimentalDistributionDsl + override fun distribution(body: Distribution.() -> Unit) { + distribution.body() + } + internal fun configure() { NpmResolverPlugin.apply(project) @@ -170,6 +182,30 @@ abstract class KotlinJsIrSubTarget( protected abstract fun configureBuild(compilation: KotlinJsIrCompilation) + protected fun configureLibrary(compilation: KotlinJsIrCompilation) { + + } + + protected fun configureDistributeTasks(compilation: KotlinJsIrCompilation): TaskProvider { + val project = compilation.target.project + + val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName) + + val distributeResourcesTask = registerSubTargetTask( + disambiguateCamelCased( + DISTRIBUTE_RESOURCES_TASK_NAME + ) + ) { + it.from(processResourcesTask) + it.into(distribution.directory) + } + + val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) + assembleTaskProvider.dependsOn(distributeResourcesTask) + + return distributeResourcesTask + } + internal inline fun registerSubTargetTask( name: String, args: List = emptyList(), @@ -182,5 +218,8 @@ abstract class KotlinJsIrSubTarget( companion object { const val RUN_TASK_NAME = "run" + + const val DISTRIBUTE_RESOURCES_TASK_NAME = "distributeResources" + const val DISTRIBUTION_TASK_NAME = "distribution" } } \ 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 c88645dcd72..5ba2c20eec1 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 @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl 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 @@ -25,6 +27,11 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : project.tasks.withType().named(runTaskName).configure(body) } + @ExperimentalDistributionDsl + override fun distribution(body: Distribution.() -> Unit) { + TODO("Not yet implemented") + } + override fun testTask(body: KotlinJsTest.() -> Unit) { super.testTask(body) }