From 3283a10561dacbf9d7ccf9c5cdf6e58c21689c6d Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 9 Jun 2020 15:20:05 +0300 Subject: [PATCH] [Gradle, JS] Define compilation on constructor of RequiresNpmDepends --- .../targets/js/dukat/AbstractDukatTask.kt | 8 ++++---- .../js/dukat/DukatCompilationResolverPlugin.kt | 6 ++++-- .../kotlin/gradle/targets/js/dukat/DukatTask.kt | 8 +++++++- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 8 ++++---- .../gradle/targets/js/ir/KotlinJsIrSubTarget.kt | 9 ++++++--- .../gradle/targets/js/nodejs/NodeJsExec.kt | 17 +++++++++++------ .../targets/js/subtargets/KotlinBrowserJs.kt | 8 ++++---- .../targets/js/subtargets/KotlinJsSubTarget.kt | 9 ++++++--- .../gradle/targets/js/testing/KotlinJsTest.kt | 12 +++++++----- .../gradle/targets/js/webpack/KotlinWebpack.kt | 10 ++++++---- 10 files changed, 59 insertions(+), 36 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/AbstractDukatTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/AbstractDukatTask.kt index 8e702201978..0bd51482bfd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/AbstractDukatTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/AbstractDukatTask.kt @@ -13,12 +13,12 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import java.io.File -abstract class AbstractDukatTask : AbstractTask(), RequiresNpmDependencies { +abstract class AbstractDukatTask( + @Internal + override val compilation: KotlinJsCompilation +) : AbstractTask(), RequiresNpmDependencies { private val nodeJs get() = NodeJsRootPlugin.apply(project.rootProject) - @get:Internal - override lateinit var compilation: KotlinJsCompilation - @get:Internal override val nodeModulesRequired: Boolean get() = true diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt index a9bcc494766..cf12ddef0d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt @@ -25,8 +25,10 @@ internal class DukatCompilationResolverPlugin( init { compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir) - val task = project.registerTask(taskName) { - it.compilation = compilation + val task = project.registerTask( + taskName, + listOf(compilation) + ) { it.group = NodeJsRootPlugin.TASKS_GROUP_NAME it.description = "Generate Kotlin/JS external declarations for .d.ts files in ${compilation}" it.dependsOn(nodeJs.npmInstallTask, npmProject.packageJsonTask) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt index 615c8c13768..2e955890b40 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt @@ -8,11 +8,17 @@ package org.jetbrains.kotlin.gradle.targets.js.dukat import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.OutputDirectory +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import java.io.File +import javax.inject.Inject -open class DukatTask : AbstractDukatTask() { +open class DukatTask +@Inject +constructor( + compilation: KotlinJsCompilation +) : AbstractDukatTask(compilation) { private val nodeJs get() = NodeJsRootPlugin.apply(project.rootProject) @get:Internal 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 d6959274f85..1466f48ac65 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 @@ -76,7 +76,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : disambiguateCamelCased( binary.executeTaskBaseName, RUN_TASK_NAME - ) + ), + listOf(compilation) ) { it.commonConfigure( compilation = compilation, @@ -85,7 +86,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : ) it.bin = "webpack-dev-server/bin/webpack-dev-server.js" - it.compilation = compilation it.description = "start ${type.name.toLowerCase()} webpack dev server" it.devServer = KotlinWebpackConfig.DevServer( @@ -135,7 +135,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : disambiguateCamelCased( binary.executeTaskBaseName, WEBPACK_TASK_NAME - ) + ), + listOf(compilation) ) { it.commonConfigure( compilation = compilation, @@ -147,7 +148,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : distributeResourcesTask ) - it.compilation = compilation it.description = "build webpack ${type.name.toLowerCase()} bundle" it._destinationDirectory = distribution.directory } 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 37ca76135d9..7811bdb381e 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 @@ -99,7 +99,10 @@ abstract class KotlinJsIrSubTarget( ) ) - val testJs = project.registerTask(testRun.subtargetTestTaskName()) { testJs -> + val testJs = project.registerTask( + testRun.subtargetTestTaskName(), + listOf(compilation) + ) { testJs -> testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.description = testTaskDescription @@ -120,7 +123,6 @@ abstract class KotlinJsIrSubTarget( .get() } - testJs.compilation = compilation testJs.targetName = listOfNotNull(target.disambiguationClassifier, disambiguationClassifier) .takeIf { it.isNotEmpty() } ?.joinToString() @@ -171,9 +173,10 @@ abstract class KotlinJsIrSubTarget( internal inline fun registerSubTargetTask( name: String, + args: List = emptyList(), noinline body: (T) -> (Unit) ): TaskProvider = - project.registerTask(name) { + project.registerTask(name, args) { it.group = taskGroupName body(it) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt index 4c3d393e6b2..89c63e16ac0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt @@ -13,14 +13,17 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.newFileProperty +import javax.inject.Inject -open class NodeJsExec : AbstractExecTask(NodeJsExec::class.java), RequiresNpmDependencies { +open class NodeJsExec +@Inject +constructor( + @Internal + override val compilation: KotlinJsCompilation +) : AbstractExecTask(NodeJsExec::class.java), RequiresNpmDependencies { @get:Internal lateinit var nodeJs: NodeJsRootExtension - @get:Internal - override lateinit var compilation: KotlinJsCompilation - init { onlyIf { !inputFileProperty.isPresent || inputFileProperty.asFile.map { @@ -77,9 +80,11 @@ open class NodeJsExec : AbstractExecTask(NodeJsExec::class.java), Re val project = target.project val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - return project.registerTask(name) { + return project.registerTask( + name, + listOf(compilation) + ) { it.nodeJs = nodeJs - it.compilation = compilation it.executable = nodeJs.requireConfigured().nodeExecutable it.dependsOn(nodeJs.npmInstallTask) 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 a27abf80bea..33c259302f8 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 @@ -107,7 +107,8 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : disambiguateCamelCased( binary.executeTaskBaseName, RUN_TASK_NAME - ) + ), + listOf(compilation) ) { it.commonConfigure( compilation = compilation, @@ -118,7 +119,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : ) it.bin = "webpack-dev-server/bin/webpack-dev-server.js" - it.compilation = compilation it.description = "start ${type.name.toLowerCase()} webpack dev server" it.devServer = KotlinWebpackConfig.DevServer( @@ -169,7 +169,8 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : binary.executeTaskBaseName, WEBPACK_TASK_NAME - ) + ), + listOf(compilation) ) { it.commonConfigure( compilation = compilation, @@ -185,7 +186,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : it.configureOptimization(type) - it.compilation = compilation it.description = "build webpack ${type.name.toLowerCase()} bundle" it._destinationDirectory = distribution.directory } 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 0c872226cde..a2ff76d4a70 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 @@ -94,7 +94,10 @@ abstract class KotlinJsSubTarget( ) ) - val testJs = project.registerTask(testRun.subtargetTestTaskName()) { testJs -> + val testJs = project.registerTask( + testRun.subtargetTestTaskName(), + listOf(compilation) + ) { testJs -> val compileTask = compilation.compileKotlinTask testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP @@ -110,7 +113,6 @@ abstract class KotlinJsSubTarget( compileTask.outputFile.exists() } - testJs.compilation = compilation testJs.targetName = listOfNotNull(target.disambiguationClassifier, disambiguationClassifier) .takeIf { it.isNotEmpty() } ?.joinToString() @@ -154,9 +156,10 @@ abstract class KotlinJsSubTarget( internal inline fun registerSubTargetTask( name: String, + args: List = emptyList(), noinline body: (T) -> (Unit) ): TaskProvider = - project.registerTask(name) { + project.registerTask(name, args) { it.group = taskGroupName body(it) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt index 6f02ea9e4a4..0505b9f0008 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -24,8 +24,13 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha import org.jetbrains.kotlin.gradle.tasks.KotlinTest import org.jetbrains.kotlin.gradle.utils.newFileProperty +import javax.inject.Inject -open class KotlinJsTest : +open class KotlinJsTest +@Inject +constructor( + @Internal override var compilation: KotlinJsCompilation +) : KotlinTest(), RequiresNpmDependencies { private val nodeJs get() = NodeJsRootPlugin.apply(project.rootProject) @@ -43,9 +48,6 @@ open class KotlinJsTest : @Input var debug: Boolean = false - @Internal - override lateinit var compilation: KotlinJsCompilation - @Suppress("unused") val runtimeClasspath: FileCollection @InputFiles get() = compilation.runtimeDependencyFiles diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index edb80a0b437..36066a75a73 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -31,7 +31,12 @@ import org.jetbrains.kotlin.gradle.utils.property import java.io.File import javax.inject.Inject -open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { +open class KotlinWebpack +@Inject +constructor( + @Internal + override val compilation: KotlinJsCompilation +) : DefaultTask(), RequiresNpmDependencies { private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) private val versions = nodeJs.versions @@ -43,9 +48,6 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { open val execHandleFactory: ExecHandleFactory get() = injected - @Internal - override lateinit var compilation: KotlinJsCompilation - @Suppress("unused") val compilationId: String @Input get() = compilation.let {