From 4994cb3774352afc7f4a3943dae4744777ed8082 Mon Sep 17 00:00:00 2001 From: Ivan Gavrilovic Date: Fri, 30 Apr 2021 13:02:12 +0100 Subject: [PATCH] [Gradle] Create kotlinOptions during task init and keep outputFile for js This is so that existing build scripts using withType() do not break. Also, fix the failing test. It was necessary to keep outputFile for the js compile task as it was accessed from the build scripts. Instead, a new property is introduced which uses Gradle lazy properties. --- .../kotlin/gradle/dsl/KotlinCompile.kt | 9 +++- .../mpp/CompilationSpecificPluginPath.kt | 4 +- .../internal/kapt/KaptGenerateStubsTask.kt | 4 +- .../kotlin/gradle/plugin/KotlinPlugin.kt | 2 +- .../gradle/targets/js/KotlinJsDcePlugin.kt | 2 +- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 4 +- .../gradle/targets/js/ir/KotlinJsIrLink.kt | 5 +- .../targets/js/ir/KotlinJsIrSubTarget.kt | 2 +- .../gradle/targets/js/ir/KotlinNodeJsIr.kt | 2 +- .../targets/js/subtargets/KotlinBrowserJs.kt | 4 +- .../js/subtargets/KotlinJsSubTarget.kt | 2 +- .../targets/js/subtargets/KotlinNodeJs.kt | 2 +- .../targets/js/webpack/KotlinWebpack.kt | 2 +- .../gradle/tasks/KotlinCompileCommon.kt | 9 ++-- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 50 ++++++++++--------- .../kotlin/gradle/tasks/TasksProvider.kt | 6 +-- 16 files changed, 56 insertions(+), 53 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt index cdb21c014e5..fd40b37b985 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCompile.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.gradle.dsl import groovy.lang.Closure +import org.gradle.api.Action import org.gradle.api.Task import org.gradle.api.tasks.Internal +import org.gradle.util.ConfigureUtil interface KotlinCompile : Task { @get:Internal @@ -17,8 +19,11 @@ interface KotlinCompile : Task { kotlinOptions.fn() } + fun kotlinOptions(fn: Action) { + fn.execute(kotlinOptions) + } + fun kotlinOptions(fn: Closure<*>) { - fn.delegate = kotlinOptions - fn.call() + ConfigureUtil.configure(fn, kotlinOptions) } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt index e322aec3597..26ecaa37c0f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt @@ -106,7 +106,7 @@ internal class CompilationSpecificPluginPath { // And each compilation task should have its own plugin classpath val compileDesktop = project.tasks.getByName("compileKotlinDesktop") as KotlinCompile val expectedConfig = project.configurations.getByName(pluginClassPathConfiguration("desktop", "main")) - assertEquals(expectedConfig, compileDesktop.pluginClasspath) + assertEquals(expectedConfig, compileDesktop.pluginClasspath.from.single()) } @Test @@ -216,7 +216,7 @@ internal class CompilationSpecificPluginPath { .let { when (it) { is AbstractKotlinNativeCompile<*, *> -> it.compilerPluginClasspath - is AbstractKotlinCompile<*> -> it.pluginClasspath + is AbstractKotlinCompile<*> -> it.pluginClasspath.from.single() else -> error("Unexpected task type with name $taskName. Is it kotlin compile task?") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt index 8e6db72bf72..8f0157d7008 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt @@ -34,7 +34,7 @@ import java.io.File import java.util.concurrent.Callable @CacheableTask -abstract class KaptGenerateStubsTask : KotlinCompile() { +abstract class KaptGenerateStubsTask : KotlinCompile(KotlinJvmOptionsImpl()) { class Configurator(private val kotlinCompileTask: KotlinCompile, kotlinCompilation: KotlinCompilationData<*>) : AbstractKotlinCompile.Configurator(kotlinCompilation) { @@ -63,11 +63,9 @@ abstract class KaptGenerateStubsTask : KotlinCompile() { } } ) - task.kotlinOptionsProperty.value(KotlinJvmOptionsImpl()).disallowChanges() } } - @field:Transient override val sourceRootsContainer = FilteringSourceRootsContainer(objects, { isSourceRootAllowed(it) }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 1409dd6f9ab..01c8ccb439d 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -261,7 +261,7 @@ internal class Kotlin2JsSourceSetProcessor( project.whenEvaluated { kotlinTask.configure { kotlinTaskInstance -> val kotlinOptions = kotlinTaskInstance.kotlinOptions - val outputFile = kotlinTaskInstance.outputFile.get() + val outputFile = kotlinTaskInstance.outputFileProperty.get() val outputDir: File = outputFile.parentFile kotlinOptions.outputFile = if (!kotlinOptions.isProduceUnzippedKlib()) { outputFile.absolutePath diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt index a9ffecb97f3..37cca755d3c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt @@ -78,7 +78,7 @@ class KotlinJsDcePlugin : Plugin { dceTask.configure { it.classpath = configuration it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) } ?: outputDir - it.source((kotlinTask.get() as Kotlin2JsCompile).outputFile.get()) + it.source((kotlinTask.get() as Kotlin2JsCompile).outputFileProperty.get()) } } } 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 83383df43a4..8fcdae1821c 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 @@ -103,7 +103,7 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : ) { task -> val entryFileProvider = binary.linkSyncTask.map { it.destinationDir - .resolve(binary.linkTask.get().outputFile.get().name) + .resolve(binary.linkTask.get().outputFileProperty.get().name) } webpackMajorVersion.choose( @@ -173,7 +173,7 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : ) { task -> val entryFileProvider = binary.linkSyncTask.map { it.destinationDir - .resolve(binary.linkTask.get().outputFile.get().name) + .resolve(binary.linkTask.get().outputFileProperty.get().name) } task.description = "build webpack ${mode.name.toLowerCase()} bundle" 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 b78abad8836..870f68fb196 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 @@ -23,7 +23,7 @@ import javax.inject.Inject @CacheableTask abstract class KotlinJsIrLink @Inject constructor( objectFactory: ObjectFactory -): Kotlin2JsCompile(objectFactory) { +): Kotlin2JsCompile(KotlinJsOptionsImpl(), objectFactory) { class Configurator(compilation: KotlinCompilationData<*>): Kotlin2JsCompile.Configurator(compilation) { @@ -33,8 +33,7 @@ abstract class KotlinJsIrLink @Inject constructor( task.entryModule.fileProvider( (compilation as KotlinJsIrCompilation).output.classesDirs.elements.map { it.single().asFile } ).disallowChanges() - task.kotlinOptionsProperty.value(KotlinJsOptionsImpl()).disallowChanges() - task.destinationDirectory.fileProvider(task.outputFile.map { it.parentFile }).disallowChanges() + task.destinationDirectory.fileProvider(task.outputFileProperty.map { it.parentFile }).disallowChanges() } } 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 218c34bbf2d..fa05b726f94 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 @@ -123,7 +123,7 @@ abstract class KotlinJsIrSubTarget( project.layout.file( binary.linkSyncTask.map { it.destinationDir - .resolve(binary.linkTask.get().outputFile.get().name) + .resolve(binary.linkTask.get().outputFileProperty.get().name) } ) ) 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 15e4429299c..67354e21e6d 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 @@ -69,7 +69,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : project.layout.file( binary.linkSyncTask.map { it.destinationDir - .resolve(binary.linkTask.get().outputFile.get().name) + .resolve(binary.linkTask.get().outputFileProperty.get().name) } ) ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 26d756a01d0..650604dd4c5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -257,7 +257,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : entryProperty.set( project.layout.file(actualDceTaskProvider.map { - it.destinationDir.resolve(compilation.compileKotlinTask.outputFile.get().name) + it.destinationDir.resolve(compilation.compileKotlinTask.outputFileProperty.get().name) }) ) @@ -300,7 +300,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : ?: compilation.npmProject.dir.resolve(if (dev) DCE_DEV_DIR else DCE_DIR) it.defaultCompilerClasspath.setFrom(project.configurations.named(COMPILER_CLASSPATH_CONFIGURATION_NAME)) - it.source(kotlinTask.map { it.outputFile.get() }) + it.source(kotlinTask.map { it.outputFileProperty.get() }) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt index 8341871cde7..5fecac274ef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt @@ -103,7 +103,7 @@ abstract class KotlinJsSubTarget( testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.description = testTaskDescription - val compileOutputFile = compileTask.flatMap { it.outputFile } + val compileOutputFile = compileTask.flatMap { it.outputFileProperty } testJs.inputFileProperty.fileProvider(compileOutputFile) testJs.dependsOn(nodeJs.npmInstallTaskProvider, compileTask, nodeJs.nodeJsSetupTaskProvider) 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 8c0f06b79f4..ca53a2c740a 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 @@ -49,7 +49,7 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : ) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased(RUN_TASK_NAME)) { group = taskGroupName - inputFileProperty.fileProvider(compilation.compileKotlinTaskProvider.flatMap { it.outputFile }) + inputFileProperty.fileProvider(compilation.compileKotlinTaskProvider.flatMap { it.outputFileProperty }) } target.runTask.dependsOn(runTaskHolder) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index d51a400348c..d1c181ba9f3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -79,7 +79,7 @@ constructor( @get:PathSensitive(PathSensitivity.ABSOLUTE) @get:InputFile - val entryProperty: RegularFileProperty = objects.fileProperty().fileProvider(compilation.compileKotlinTask.outputFile) + val entryProperty: RegularFileProperty = objects.fileProperty().fileProvider(compilation.compileKotlinTask.outputFileProperty) init { onlyIf { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt index 5af0d489551..392d180b8c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.Project import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.* import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments @@ -38,14 +37,16 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure import org.jetbrains.kotlin.gradle.plugin.sources.resolveAllDependsOnSourceSets import org.jetbrains.kotlin.incremental.ChangedFiles import java.io.File +import javax.inject.Inject @CacheableTask -abstract class KotlinCompileCommon : AbstractKotlinCompile(), KotlinCommonCompile { +abstract class KotlinCompileCommon @Inject constructor( + override val kotlinOptions: KotlinMultiplatformCommonOptions +) : AbstractKotlinCompile(), KotlinCommonCompile { class Configurator(compilation: KotlinCompilationData<*>) : AbstractKotlinCompile.Configurator(compilation) { override fun configure(task: KotlinCompileCommon) { super.configure(task) - task.kotlinOptionsProperty.value(compilation.kotlinOptions as KotlinMultiplatformCommonOptionsImpl).disallowChanges() task.refinesMetadataPaths.from(getRefinesMetadataPaths(task.project)).disallowChanges() task.expectActualLinker .value(task.project.provider { (compilation as? KotlinCommonCompilation)?.isKlibCompilation == true || compilation is KotlinMetadataCompilationData }) @@ -76,8 +77,6 @@ abstract class KotlinCompileCommon : AbstractKotlinCompile = objects.property(KotlinMultiplatformCommonOptions::class.java) - override fun createCompilerArgs(): K2MetadataCompilerArguments = K2MetadataCompilerArguments() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 9f6fd3444c2..cb656844bc8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -385,21 +385,16 @@ internal inline val T.thisTaskProvider: TaskProvider get() = checkNotNull(project.locateTask(name)) @CacheableTask -abstract class KotlinCompile : AbstractKotlinCompile(), KotlinJvmCompile { +abstract class KotlinCompile @Inject constructor( + override val kotlinOptions: KotlinJvmOptions +) : AbstractKotlinCompile(), KotlinJvmCompile { class Configurator(kotlinCompilation: KotlinCompilationData<*>) : AbstractKotlinCompile.Configurator(kotlinCompilation) { - override fun configure(task: KotlinCompile) { - super.configure(task) - - task.kotlinOptionsProperty.set(compilation.kotlinOptions as KotlinJvmOptions) - } } @get:Internal internal val parentKotlinOptionsImpl: Property = objects.property(KotlinJvmOptions::class.java) - override val kotlinOptionsProperty: Property = objects.property(KotlinJvmOptions::class.java) - @get:Internal @field:Transient internal open val sourceRootsContainer = FilteringSourceRootsContainer(objects) @@ -528,8 +523,9 @@ abstract class KotlinCompile : AbstractKotlinCompile(), @CacheableTask internal abstract class KotlinCompileWithWorkers @Inject constructor( + kotlinOptions: KotlinJvmOptions, private val workerExecutor: WorkerExecutor -) : KotlinCompile() { +) : KotlinCompile(kotlinOptions) { override fun compilerRunner( javaExecutable: File, @@ -544,9 +540,10 @@ internal abstract class KotlinCompileWithWorkers @Inject constructor( @CacheableTask internal abstract class Kotlin2JsCompileWithWorkers @Inject constructor( + kotlinOptions: KotlinJsOptions, objectFactory: ObjectFactory, private val workerExecutor: WorkerExecutor -) : Kotlin2JsCompile(objectFactory) { +) : Kotlin2JsCompile(kotlinOptions, objectFactory) { override fun compilerRunner( javaExecutable: File, @@ -561,8 +558,9 @@ internal abstract class Kotlin2JsCompileWithWorkers @Inject constructor( @CacheableTask internal abstract class KotlinCompileCommonWithWorkers @Inject constructor( + kotlinOptions: KotlinMultiplatformCommonOptions, private val workerExecutor: WorkerExecutor -) : KotlinCompileCommon() { +) : KotlinCompileCommon(kotlinOptions) { override fun compilerRunner( javaExecutable: File, jdkToolsJar: File? @@ -576,6 +574,7 @@ internal abstract class KotlinCompileCommonWithWorkers @Inject constructor( @CacheableTask abstract class Kotlin2JsCompile @Inject constructor( + override val kotlinOptions: KotlinJsOptions, objectFactory: ObjectFactory ) : AbstractKotlinCompile(), KotlinJsCompile { @@ -588,24 +587,22 @@ abstract class Kotlin2JsCompile @Inject constructor( override fun configure(task: T) { super.configure(task) - task.kotlinOptionsProperty.set(compilation.kotlinOptions as KotlinJsOptions) - task.outputFile.value( - task.kotlinOptionsProperty.map { - it.outputFile?.let(::File) + task.outputFileProperty.value( + task.project.provider { + task.kotlinOptions.outputFile?.let(::File) ?: task.destinationDirectory.locationOnly.get().asFile.resolve("${compilation.ownModuleName}.js") } ).disallowChanges() task.optionalOutputFile.fileProvider( - task.kotlinOptionsProperty.flatMap { jsOptions -> - task.outputFile.takeIf { !jsOptions.isProduceUnzippedKlib() } - ?: task.project.objects.fileProperty().asFile + task.outputFileProperty.flatMap { outputFile -> + task.project.provider { + outputFile.takeUnless { task.kotlinOptions.isProduceUnzippedKlib() } + } } ).disallowChanges() } } - override val kotlinOptionsProperty: Property = objectFactory.property(KotlinJsOptions::class.java) - @get:Input internal var incrementalJsKlib: Boolean = true @@ -619,7 +616,12 @@ abstract class Kotlin2JsCompile @Inject constructor( // This can be file or directory @get:Internal - abstract val outputFile: Property + abstract val outputFileProperty: Property + + @Deprecated("Please use outputFileProperty, this is kept for backwards compatibility.", replaceWith = ReplaceWith("outputFileProperty")) + @get:Internal + val outputFile: File + get() = outputFileProperty.get() @get:OutputFile @get:Optional @@ -636,13 +638,13 @@ abstract class Kotlin2JsCompile @Inject constructor( super.setupCompilerArgs(args, defaultsOnly = defaultsOnly, ignoreClasspathResolutionErrors = ignoreClasspathResolutionErrors) try { - outputFile.get().canonicalPath + outputFileProperty.get().canonicalPath } catch (ex: Throwable) { - logger.warn("IO EXCEPTION: outputFile: ${outputFile.get().path}") + logger.warn("IO EXCEPTION: outputFile: ${outputFileProperty.get().path}") throw ex } - args.outputFile = outputFile.get().absoluteFile.normalize().absolutePath + args.outputFile = outputFileProperty.get().absoluteFile.normalize().absolutePath if (defaultsOnly) return diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt index 49baa294ddf..566ce8302c0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt @@ -89,7 +89,7 @@ internal open class KotlinTasksProvider { ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) - val result = project.registerTask(name, taskClass) { + val result = project.registerTask(name, taskClass, constructorArgs = listOf(compilation.kotlinOptions)) { configureAction(it) KotlinCompile.Configurator(compilation).configure(it) } @@ -105,7 +105,7 @@ internal open class KotlinTasksProvider { ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) - val result = project.registerTask(name, taskClass) { + val result = project.registerTask(name, taskClass, constructorArgs = listOf(compilation.kotlinOptions)) { configureAction(it) Kotlin2JsCompile.Configurator(compilation).configure(it) } @@ -137,7 +137,7 @@ internal open class KotlinTasksProvider { ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) - val result = project.registerTask(name, taskClass) { + val result = project.registerTask(name, taskClass, constructorArgs = listOf(compilation.kotlinOptions)) { configureAction(it) KotlinCompileCommon.Configurator(compilation).configure(it) }