[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 package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.file.FileTree import org.gradle.api.file.FileTree
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.SkipWhenEmpty import org.gradle.api.tasks.SkipWhenEmpty
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions 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.DEVELOPMENT
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrType.PRODUCTION import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrType.PRODUCTION
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.utils.newFileProperty
open class KotlinJsIrLink : Kotlin2JsCompile() { open class KotlinJsIrLink : Kotlin2JsCompile() {
@Input @Input
@@ -26,6 +29,11 @@ open class KotlinJsIrLink : Kotlin2JsCompile() {
return project.files(jsIrCompilation.allSources).asFileTree return project.files(jsIrCompilation.allSources).asFileTree
} }
@OutputFile
val outputFileProperty: RegularFileProperty = project.newFileProperty {
outputFile
}
internal fun configure() { internal fun configure() {
when (type) { when (type) {
PRODUCTION -> { PRODUCTION -> {
@@ -41,8 +41,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
compilation: KotlinJsIrCompilation compilation: KotlinJsIrCompilation
) { ) {
val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) {
dependsOn(compilation.developmentLinkTaskName) inputFileProperty.set(compilation.developmentLinkTask.outputFileProperty)
args(compilation.developmentLinkTask.outputFile)
} }
target.runTask.dependsOn(runTaskHolder) target.runTask.dependsOn(runTaskHolder)
} }
@@ -5,15 +5,14 @@
package org.jetbrains.kotlin.gradle.targets.js.nodejs package org.jetbrains.kotlin.gradle.targets.js.nodejs
import org.gradle.api.tasks.AbstractExecTask import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Input import org.gradle.api.tasks.*
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency 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.RequiresNpmDependencies
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.newFileProperty
open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), RequiresNpmDependencies { open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), RequiresNpmDependencies {
@get:Internal @get:Internal
@@ -32,6 +31,9 @@ open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), Re
@Input @Input
var sourceMapStackTraces = true var sourceMapStackTraces = true
@InputFile
val inputFileProperty: RegularFileProperty = project.newFileProperty()
@get:Internal @get:Internal
override val nodeModulesRequired: Boolean override val nodeModulesRequired: Boolean
get() = true get() = true
@@ -79,6 +81,8 @@ open class NodeJsExec : AbstractExecTask<NodeJsExec>(NodeJsExec::class.java), Re
it.dependsOn(nodeJs.npmInstallTask, compileKotlinTask) it.dependsOn(nodeJs.npmInstallTask, compileKotlinTask)
it.configuration() it.configuration()
it.args(it.inputFileProperty.asFile.get())
} }
} }
} }
@@ -36,7 +36,7 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) :
compilation: KotlinJsCompilation compilation: KotlinJsCompilation
) { ) {
val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) {
args(compilation.compileKotlinTask.outputFile) inputFileProperty.set(compilation.compileKotlinTask.outputFile)
} }
target.runTask.dependsOn(runTaskHolder) target.runTask.dependsOn(runTaskHolder)
} }
@@ -6,8 +6,11 @@
package org.jetbrains.kotlin.gradle.utils package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project 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.Property
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import java.io.File
import kotlin.properties.ReadOnlyProperty import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty 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?> = 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) })
}
}