From 58dd0fa3d27cc911e97d52efbeede6133e319266 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Sat, 6 Jun 2020 00:13:29 +0300 Subject: [PATCH] Use TCA-compliant Gradle APIs in the JS part of the Kotlin Gradle plugin --- .../gradle/targets/js/KotlinJsDcePlugin.kt | 18 ++++++++------- .../gradle/targets/js/KotlinJsTarget.kt | 2 +- .../targets/js/KotlinJsTargetConfigurator.kt | 12 +++++----- .../dukat/DukatCompilationResolverPlugin.kt | 3 ++- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 11 +++++----- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 15 ++++++------- .../js/ir/KotlinJsIrTargetConfigurator.kt | 2 +- .../gradle/targets/js/ir/KotlinNodeJsIr.kt | 7 +++--- .../targets/js/nodejs/NodeJsRootPlugin.kt | 3 ++- .../js/npm/tasks/KotlinPackageJsonTask.kt | 2 +- .../targets/js/subtargets/KotlinBrowserJs.kt | 22 ++++++++----------- .../targets/js/subtargets/KotlinNodeJs.kt | 5 +++-- .../gradle/targets/js/yarn/YarnPlugin.kt | 3 ++- .../testing/internal/KotlinTestsRegistry.kt | 13 ++++++----- 14 files changed, 62 insertions(+), 56 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt index 5bc9bb34e70..9abe4433d6f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt @@ -15,6 +15,8 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce +import org.jetbrains.kotlin.gradle.tasks.dependsOn +import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import java.io.File @@ -52,18 +54,18 @@ class KotlinJsDcePlugin : Plugin { } private fun processCompilation(project: Project, kotlinCompilation: KotlinCompilation<*>) { - val kotlinTaskName = kotlinCompilation.compileKotlinTaskName - val kotlinTask = project.tasks.findByName(kotlinTaskName) as? Kotlin2JsCompile ?: return + val kotlinTask = kotlinCompilation.compileKotlinTaskProvider val dceTaskName = lowerCamelCaseName( DCE_TASK_PREFIX, kotlinCompilation.target.disambiguationClassifier, kotlinCompilation.name.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, if (kotlinCompilation.target is KotlinWithJavaTarget<*>) TASK_SUFFIX else MPP_TASK_SUFFIX ) - val dceTask = project.tasks.create(dceTaskName, KotlinJsDce::class.java).also { + + val dceTask = project.registerTask(dceTaskName) { it.dependsOn(kotlinTask) - project.tasks.findByName("build")!!.dependsOn(it) } + project.tasks.named("build").dependsOn(dceTask) project.afterEvaluate { val outputDir = project.buildDir @@ -72,10 +74,10 @@ class KotlinJsDcePlugin : Plugin { val configuration = project.configurations.getByName(kotlinCompilation.compileDependencyConfigurationName) - with(dceTask) { - classpath = configuration - destinationDir = dceTask.dceOptions.outputDirectory?.let { File(it) } ?: outputDir - source(kotlinTask.outputFile) + dceTask.configure { + it.classpath = configuration + it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) } ?: outputDir + it.source((kotlinTask.get() as Kotlin2JsCompile).outputFile) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index 1da05503979..420b0abf690 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -196,7 +196,7 @@ constructor( override fun useCommonJs() { compilations.all { - it.compileKotlinTask.kotlinOptions { + it.kotlinOptions { moduleKind = "commonjs" sourceMap = true sourceMapEmbedSources = null diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt index 4e7e05a7577..5eee7a75a0b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.targets.js +import org.gradle.api.DefaultTask import org.gradle.api.attributes.Usage import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.dsl.kotlinExtension @@ -12,6 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider +import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.testTaskName import java.util.concurrent.Callable @@ -78,11 +80,11 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) : compileAllTask.dependsOn(compilation.compileKotlinTaskName) compileAllTask.dependsOn(compilation.processResourcesTaskName) } else { - project.tasks.create(compilation.compileAllTaskName).apply { - group = LifecycleBasePlugin.BUILD_GROUP - description = "Assembles outputs for compilation '${compilation.name}' of target '${compilation.target.name}'" - dependsOn(compilation.compileKotlinTaskName) - dependsOn(compilation.processResourcesTaskName) + project.registerTask(compilation.compileAllTaskName) { + it.group = LifecycleBasePlugin.BUILD_GROUP + it.description = "Assembles outputs for compilation '${compilation.name}' of target '${compilation.target.name}'" + it.dependsOn(compilation.compileKotlinTaskName) + it.dependsOn(compilation.processResourcesTaskName) } } } 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 48956ef416e..c4e73107616 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 @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinRootNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver +import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask internal class DukatCompilationResolverPlugin( @@ -34,7 +35,7 @@ internal class DukatCompilationResolverPlugin( it.dependsOn(nodeJs.npmInstallTask, npmProject.packageJsonTask) } - compilation.compileKotlinTask.dependsOn(integratedTask) + compilation.compileKotlinTaskProvider.dependsOn(integratedTask) project.registerTask( separateTaskName, 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 1466f48ac65..d78a4768bc6 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 @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool +import org.jetbrains.kotlin.gradle.tasks.dependsOn import javax.inject.Inject open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : @@ -122,8 +123,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : it.into(distribution.directory) } - val assembleTask = project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) - assembleTask.dependsOn(distributeResourcesTask) + val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) + assembleTaskProvider.dependsOn(distributeResourcesTask) compilation.binaries .matching { it is Executable } @@ -153,7 +154,7 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : } if (type == KotlinJsBinaryMode.PRODUCTION) { - assembleTask.dependsOn(webpackTask) + assembleTaskProvider.dependsOn(webpackTask) val webpackCommonTask = registerSubTargetTask( disambiguateCamelCased(WEBPACK_TASK_NAME) ) { @@ -178,12 +179,12 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : dependsOn( nodeJs.npmInstallTask, - target.project.tasks.getByName(compilation.processResourcesTaskName) + target.project.tasks.named(compilation.processResourcesTaskName) ) configureOptimization(type) - entryProperty.set(binary.linkTask.map { RegularFile { it.outputFile } }) + entryProperty.set(project.layout.file(binary.linkTask.map { it.outputFile })) commonRunConfigurations.forEach { configure -> configure() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index db8dcb18deb..c5efccc5fd5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.Task +import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME @@ -158,23 +159,21 @@ constructor( override fun useCommonJs() { compilations.all { - it.compileKotlinTask.configureCommonJsOptions() + it.kotlinOptions.configureCommonJsOptions() binaries .withType(JsIrBinary::class.java) .all { it.linkTask.configure { linkTask -> - linkTask.configureCommonJsOptions() + linkTask.kotlinOptions.configureCommonJsOptions() } } } } - private fun Kotlin2JsCompile.configureCommonJsOptions() { - kotlinOptions { - moduleKind = "commonjs" - sourceMap = true - sourceMapEmbedSources = null - } + private fun KotlinJsOptions.configureCommonJsOptions() { + moduleKind = "commonjs" + sourceMap = true + sourceMapEmbedSources = null } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt index 478ffb485ac..8cab2c9f947 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt @@ -65,7 +65,7 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) : super.configureCompilations(target) target.compilations.all { compilation -> - compilation.compileKotlinTask.kotlinOptions { + compilation.kotlinOptions { configureOptions() freeCompilerArgs += listOf( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt index 101781f0e06..58273cbb07d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt @@ -10,6 +10,8 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode 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.dependsOn +import org.jetbrains.kotlin.gradle.tasks.withType import javax.inject.Inject open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : @@ -21,7 +23,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : private val runTaskName = disambiguateCamelCased("run") override fun runTask(body: NodeJsExec.() -> Unit) { - (project.tasks.getByName(runTaskName) as NodeJsExec).body() + project.tasks.withType().named(runTaskName).configure(body) } override fun configureDefaultTestFramework(it: KotlinJsTest) { @@ -47,8 +49,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : ) { compilation.binaries.getIrBinaries(KotlinJsBinaryMode.PRODUCTION) .all { productionExecutable -> - val assembleTask = project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) - assembleTask.dependsOn(productionExecutable.linkTask) + project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(productionExecutable.linkTask) } } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt index 05481076d26..a15250d244d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Compani import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin import org.jetbrains.kotlin.gradle.tasks.CleanDataTask +import org.jetbrains.kotlin.gradle.tasks.registerTask open class NodeJsRootPlugin : Plugin { override fun apply(project: Project): Unit = project.run { @@ -26,7 +27,7 @@ open class NodeJsRootPlugin : Plugin { val settings = this.extensions.create(EXTENSION_NAME, NodeJsRootExtension::class.java, this) - val setupTask = tasks.create(NodeJsSetupTask.NAME, NodeJsSetupTask::class.java) { + val setupTask = registerTask(NodeJsSetupTask.NAME) { it.group = TASKS_GROUP_NAME it.description = "Download and install a local node/npm version" } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 36b04bc2055..3fd396ac2b4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -60,7 +60,7 @@ open class KotlinPackageJsonTask : DefaultTask() { val npmProject = compilation.npmProject val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - val rootClean = project.rootProject.tasks.getByName(BasePlugin.CLEAN_TASK_NAME) + val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME) val npmInstallTask = nodeJs.npmInstallTask val packageJsonTaskName = npmProject.packageJsonTaskName val packageJsonUmbrella = nodeJs.packageJsonUmbrellaTaskProvider 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 8dd7c3857d6..c7c57156993 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 @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool +import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import java.io.File @@ -157,8 +158,8 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : it.into(distribution.directory) } - val assembleTask = project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) - assembleTask.dependsOn(distributeResourcesTask) + val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) + assembleTaskProvider.dependsOn(distributeResourcesTask) compilation.binaries .all { binary -> @@ -191,7 +192,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } if (type == KotlinJsBinaryMode.PRODUCTION) { - assembleTask.dependsOn(webpackTask) + assembleTaskProvider.dependsOn(webpackTask) val webpackCommonTask = registerSubTargetTask( disambiguateCamelCased(WEBPACK_TASK_NAME) ) { @@ -227,12 +228,9 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } entryProperty.set( - actualDceTaskProvider.map { - RegularFile { - it.destinationDir - .resolve(compilation.compileKotlinTask.outputFile.name) - } - } + project.layout.file(actualDceTaskProvider.map { + it.destinationDir.resolve(compilation.compileKotlinTask.outputFile.name) + }) ) resolveFromModulesFirst = true @@ -256,7 +254,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : DCE_TASK_SUFFIX ) - val kotlinTask = compilation.compileKotlinTask + val kotlinTask = compilation.compileKotlinTaskProvider return project.registerTask(dceTaskName) { if (dev) { @@ -267,15 +265,13 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } } - it.dependsOn(kotlinTask) - it.kotlinFilesOnly = true it.classpath = project.configurations.getByName(compilation.runtimeDependencyConfigurationName) it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) } ?: compilation.npmProject.dir.resolve(if (dev) DCE_DEV_DIR else DCE_DIR) - it.source(kotlinTask.outputFile) + it.source(kotlinTask.map { it.outputFile }) } } 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 4f1ad9ac7fc..c88645dcd72 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 @@ -10,6 +10,7 @@ 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.withType import javax.inject.Inject open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : @@ -21,7 +22,7 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : private val runTaskName = disambiguateCamelCased("run") override fun runTask(body: NodeJsExec.() -> Unit) { - (project.tasks.getByName(runTaskName) as NodeJsExec).body() + project.tasks.withType().named(runTaskName).configure(body) } override fun testTask(body: KotlinJsTest.() -> Unit) { @@ -41,7 +42,7 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : ) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) { group = taskGroupName - inputFileProperty.set(compilation.compileKotlinTask.outputFile) + inputFileProperty.set(project.layout.file(compilation.compileKotlinTaskProvider.map { it.outputFile })) } target.runTask.dependsOn(runTaskHolder) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt index a038a72dfb4..f1467737fe2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask import org.jetbrains.kotlin.gradle.tasks.CleanDataTask +import org.jetbrains.kotlin.gradle.tasks.registerTask open class YarnPlugin : Plugin { override fun apply(project: Project): Unit = project.run { @@ -25,7 +26,7 @@ open class YarnPlugin : Plugin { val yarnRootExtension = this.extensions.create(YarnRootExtension.YARN, YarnRootExtension::class.java, this) val nodeJs = NodeJsRootPlugin.apply(this) - tasks.create(YarnSetupTask.NAME, YarnSetupTask::class.java) { + registerTask(YarnSetupTask.NAME) { it.dependsOn(nodeJs.nodeJsSetupTask) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt index 5e6c46cb7d8..4a2180eb5f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt @@ -11,6 +11,7 @@ import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.testing.AbstractTestTask import org.gradle.language.base.plugins.LifecycleBasePlugin +import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.locateTask @@ -32,8 +33,8 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " taskHolder: TaskProvider, aggregate: TaskProvider = allTestsTask ) { - project.tasks.getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(taskHolder.name) - project.cleanAllTestTask.dependsOn(cleanTaskName(taskHolder.name)) + project.tasks.named(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(taskHolder) + project.cleanAllTestTask.configure { it.dependsOn(cleanTaskName(taskHolder.name)) } aggregate.configure { it.dependsOn(taskHolder.name) it.registerTestTask(taskHolder.get()) @@ -95,12 +96,12 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " return "clean" + taskName.capitalize() } - private val Project.cleanAllTestTask: Task + private val Project.cleanAllTestTask: TaskProvider<*> get() { val taskName = cleanTaskName(allTestsTask.name) - return tasks.findByName(taskName) - ?: tasks.create(taskName, Task::class.java).also { - tasks.getByName(LifecycleBasePlugin.CLEAN_TASK_NAME).dependsOn(it) + return project.locateTask(taskName) + ?: project.registerTask(taskName).also { cleanAllTest -> + tasks.named(LifecycleBasePlugin.CLEAN_TASK_NAME).dependsOn(cleanAllTest) } }