From 599215e74a806209e8bef685ea47f8c7c8fac76f Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 14 Jan 2020 15:09:50 +0300 Subject: [PATCH] [Gradle, JS] Migrate on properties to link output of compile with consumer --- .../kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt | 8 ++++++++ .../kotlin/gradle/targets/js/ir/KotlinNodeJsIr.kt | 3 +-- .../kotlin/gradle/targets/js/nodejs/NodeJsExec.kt | 12 ++++++++---- .../gradle/targets/js/subtargets/KotlinNodeJs.kt | 2 +- .../kotlin/gradle/utils/providerApiUtils.kt | 12 +++++++++++- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index 67a2f500800..aa7d831deb1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -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 -> { 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 a6ee8adf903..6794dbac05d 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 @@ -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) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt index c17a81ecf24..5b8d61adb4f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt @@ -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::class.java), RequiresNpmDependencies { @get:Internal @@ -32,6 +31,9 @@ open class NodeJsExec : AbstractExecTask(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::class.java), Re it.dependsOn(nodeJs.npmInstallTask, compileKotlinTask) it.configuration() + + it.args(it.inputFileProperty.asFile.get()) } } } 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 b2b20f156c1..4a07cb91cce 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 @@ -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) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index 4a6cb057b17..0d74d90300f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -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(private val provider: Provider) : } internal fun Project.optionalProvider(initialize: () -> T?): ReadOnlyProperty = - OptionalProviderDelegate(provider(initialize)) \ No newline at end of file + OptionalProviderDelegate(provider(initialize)) + +internal fun Project.newFileProperty(initialize: (() -> File)? = null): RegularFileProperty = + project.objects.fileProperty().apply { + if (initialize != null) { + set(provider { RegularFile(initialize) }) + } + } \ No newline at end of file