From cedfb71a1efcd43bf595e8733bf169e750d1dc72 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 4 Feb 2020 18:25:49 +0300 Subject: [PATCH] [Gradle, JS] Task configuration avoidance with providers --- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 22 ++++++++++++++----- .../targets/js/ir/KotlinJsIrCompilation.kt | 10 +++++---- .../targets/js/ir/KotlinJsIrSubTarget.kt | 8 ++++--- .../js/ir/KotlinJsIrTargetConfigurator.kt | 8 +++++-- .../gradle/targets/js/ir/KotlinNodeJsIr.kt | 2 +- 5 files changed, 34 insertions(+), 16 deletions(-) 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 db330e498fb..0369e04a892 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 @@ -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.BasePluginConvention +import org.gradle.api.provider.Provider import org.gradle.api.tasks.Copy import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce @@ -96,9 +97,9 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : it.compilation = compilation it.entry = getByKind( kind, - compilation.productionLinkTask.outputFile, - compilation.developmentLinkTask.outputFile - ) + compilation.productionLinkTask.map {it.outputFile}, + compilation.developmentLinkTask.map{it.outputFile} + ).get() it.description = "start ${kind.name.toLowerCase()} webpack dev server" it.devServer = KotlinWebpackConfig.DevServer( @@ -172,9 +173,9 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : it.compilation = compilation it.entry = getByKind( kind, - compilation.productionLinkTask.outputFile, - compilation.developmentLinkTask.outputFile - ) + compilation.productionLinkTask.map { it.outputFile }, + compilation.developmentLinkTask.map { it.outputFile } + ).get() it.description = "build webpack ${kind.name.toLowerCase()} bundle" it.destinationDirectory = distribution.directory @@ -215,6 +216,15 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : BuildVariantKind.DEVELOPMENT -> debugValue } + private fun getByKind( + kind: BuildVariantKind, + releaseValue: Provider, + debugValue: Provider + ): Provider = when (kind) { + BuildVariantKind.PRODUCTION -> releaseValue + BuildVariantKind.DEVELOPMENT -> debugValue + } + override fun configureBuildVariants() { buildVariants = project.container(BuildVariant::class.java) buildVariants.create(PRODUCTION) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt index 83a29da20bc..8a02ee0949e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt @@ -5,7 +5,9 @@ package org.jetbrains.kotlin.gradle.targets.js.ir +import org.gradle.api.Task import org.gradle.api.file.SourceDirectorySet +import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinTarget @@ -20,13 +22,13 @@ class KotlinJsIrCompilation( ) : KotlinJsCompilation(target, name) { val productionLinkTaskName: String = linkTaskName(PRODUCTION) - val productionLinkTask: KotlinJsIrLink - get() = (target.project.tasks.getByName(productionLinkTaskName) as KotlinJsIrLink) + val productionLinkTask: TaskProvider + get() = target.project.tasks.named(productionLinkTaskName) as TaskProvider val developmentLinkTaskName: String = linkTaskName(DEVELOPMENT) - val developmentLinkTask: KotlinJsIrLink - get() = (target.project.tasks.getByName(developmentLinkTaskName) as KotlinJsIrLink) + val developmentLinkTask: TaskProvider + get() = target.project.tasks.named(developmentLinkTaskName) as TaskProvider private fun linkTaskName(type: KotlinJsIrType): String = lowerCamelCaseName( 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 9d14cc48764..6fb679240ab 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 @@ -46,8 +46,10 @@ abstract class KotlinJsIrSubTarget( listOf( it.productionLinkTask, it.developmentLinkTask - ).forEach { task -> - task.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath + ).forEach { taskProvider -> + taskProvider.configure { + it.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath + } } } } @@ -118,7 +120,7 @@ abstract class KotlinJsIrSubTarget( testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.description = testTaskDescription - testJs.inputFileProperty.set(compilation.developmentLinkTask.outputFileProperty) + testJs.inputFileProperty.set(compilation.developmentLinkTask.flatMap { it.outputFileProperty }) testJs.dependsOn(nodeJs.npmInstallTask, nodeJs.nodeJsSetupTask) 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 f47954f33f3..8478bdf63b0 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 @@ -71,9 +71,13 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) : ) } - it.productionLinkTask.configure() + it.productionLinkTask.configure { + it.configure() + } - it.developmentLinkTask.configure() + it.developmentLinkTask.configure { + it.configure() + } } } 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 b48b1658c37..b8af5ca26b7 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 @@ -34,7 +34,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : compilation: KotlinJsIrCompilation ) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) { - inputFileProperty.set(compilation.developmentLinkTask.outputFileProperty) + inputFileProperty.set(compilation.developmentLinkTask.flatMap { it.outputFileProperty }) } target.runTask.dependsOn(runTaskHolder) }