[Gradle, JS] Migrate on properties to link output of compile with consumer

This commit is contained in:
Ilya Goncharov
2020-01-14 15:09:50 +03:00
parent 4bd744f163
commit 599215e74a
5 changed files with 29 additions and 8 deletions
@@ -6,13 +6,16 @@
package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.file.FileTree
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.SkipWhenEmpty
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrType.DEVELOPMENT
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrType.PRODUCTION
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.utils.newFileProperty
open class KotlinJsIrLink : Kotlin2JsCompile() {
@Input
@@ -26,6 +29,11 @@ open class KotlinJsIrLink : Kotlin2JsCompile() {
return project.files(jsIrCompilation.allSources).asFileTree
}
@OutputFile
val outputFileProperty: RegularFileProperty = project.newFileProperty {
outputFile
}
internal fun configure() {
when (type) {
PRODUCTION -> {
@@ -41,8 +41,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
compilation: KotlinJsIrCompilation
) {
val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) {
dependsOn(compilation.developmentLinkTaskName)
args(compilation.developmentLinkTask.outputFile)
inputFileProperty.set(compilation.developmentLinkTask.outputFileProperty)
}
target.runTask.dependsOn(runTaskHolder)
}
@@ -5,15 +5,14 @@
package org.jetbrains.kotlin.gradle.targets.js.nodejs
import org.gradle.api.tasks.AbstractExecTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
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
open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), RequiresNpmDependencies {
@get:Internal
@@ -32,6 +31,9 @@ open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), Re
@Input
var sourceMapStackTraces = true
@InputFile
val inputFileProperty: RegularFileProperty = project.newFileProperty()
@get:Internal
override val nodeModulesRequired: Boolean
get() = true
@@ -79,6 +81,8 @@ open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), Re
it.dependsOn(nodeJs.npmInstallTask, compileKotlinTask)
it.configuration()
it.args(it.inputFileProperty.asFile.get())
}
}
}
@@ -36,7 +36,7 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) :
compilation: KotlinJsCompilation
) {
val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) {
args(compilation.compileKotlinTask.outputFile)
inputFileProperty.set(compilation.compileKotlinTask.outputFile)
}
target.runTask.dependsOn(runTaskHolder)
}
@@ -6,8 +6,11 @@
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.file.RegularFile
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import java.io.File
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
@@ -33,4 +36,11 @@ private class OptionalProviderDelegate<T>(private val provider: Provider<T?>) :
}
internal fun <T> Project.optionalProvider(initialize: () -> T?): ReadOnlyProperty<Any?, T?> =
OptionalProviderDelegate(provider(initialize))
OptionalProviderDelegate(provider(initialize))
internal fun Project.newFileProperty(initialize: (() -> File)? = null): RegularFileProperty =
project.objects.fileProperty().apply {
if (initialize != null) {
set(provider { RegularFile(initialize) })
}
}