[Gradle, JS] Task configuration avoidance with providers

This commit is contained in:
Ilya Goncharov
2020-02-04 18:25:49 +03:00
parent 05b48bbf85
commit cedfb71a1e
5 changed files with 34 additions and 16 deletions
@@ -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 <T> getByKind(
kind: BuildVariantKind,
releaseValue: Provider<T>,
debugValue: Provider<T>
): Provider<T> = when (kind) {
BuildVariantKind.PRODUCTION -> releaseValue
BuildVariantKind.DEVELOPMENT -> debugValue
}
override fun configureBuildVariants() {
buildVariants = project.container(BuildVariant::class.java)
buildVariants.create(PRODUCTION) {
@@ -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<KotlinJsIrLink>
get() = target.project.tasks.named(productionLinkTaskName) as TaskProvider<KotlinJsIrLink>
val developmentLinkTaskName: String = linkTaskName(DEVELOPMENT)
val developmentLinkTask: KotlinJsIrLink
get() = (target.project.tasks.getByName(developmentLinkTaskName) as KotlinJsIrLink)
val developmentLinkTask: TaskProvider<KotlinJsIrLink>
get() = target.project.tasks.named(developmentLinkTaskName) as TaskProvider<KotlinJsIrLink>
private fun linkTaskName(type: KotlinJsIrType): String =
lowerCamelCaseName(
@@ -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)
@@ -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()
}
}
}
@@ -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)
}