From 55731f27a499805dcf5ae83ae5e43b35474089f8 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 19 Sep 2022 17:29:40 +0200 Subject: [PATCH] [Gradle, JS] Adopt changes about compilerOptions --- .../common/arguments/K2JSCompilerArguments.kt | 11 +--- .../kotlin/gradle/dsl/CompilerJsOptions.kt | 5 +- .../gradle/dsl/CompilerJsOptionsDefault.kt | 2 +- .../kotlin/gradle/dsl/KotlinJsOptionsBase.kt | 0 .../kotlin/gradle/dsl/KotlinJsOptionsImpl.kt | 0 .../internal/CompilerArgumentsGradleInput.kt | 0 .../kotlin/gradle/plugin/KotlinPlugin.kt | 15 ++--- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 6 +- .../targets/js/ir/KotlinJsBinaryContainer.kt | 2 +- .../gradle/targets/js/ir/KotlinJsIrLink.kt | 59 +------------------ .../targets/js/ir/KotlinJsIrSubTarget.kt | 13 ++-- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 11 ---- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 20 +++---- .../configuration/Kotlin2JsCompileConfig.kt | 56 +++--------------- .../configuration/KotlinJsIrLinkConfig.kt | 21 +++++-- 15 files changed, 59 insertions(+), 162 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/CompilerArgumentsGradleInput.kt diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt index 200ef31123a..a0642508ba2 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt @@ -17,16 +17,7 @@ class K2JSCompilerArguments : CommonCompilerArguments() { } @GradleDeprecatedOption( - "Only for legacy backend. For IR backend please use task.destinationDirectory and moduleName", - "1.10", - DeprecationLevel.WARNING - ) - @GradleOption( - value = DefaultValues.StringNullDefault::class, - gradleInputType = GradleInputTypes.INTERNAL // handled by task 'outputFileProperty' - ) - @GradleDeprecatedOption( - message = "Use task 'outputFileProperty' to specify location", + message = "Only for legacy backend. For IR backend please use task.destinationDirectory and moduleName", level = DeprecationLevel.WARNING, removeAfter = "1.9.0" ) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptions.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptions.kt index a7becae70fa..50149d62870 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptions.kt @@ -50,7 +50,10 @@ interface CompilerJsOptions : org.jetbrains.kotlin.gradle.dsl.CompilerCommonOpti */ @Deprecated(message = "Use task 'outputFileProperty' to specify location", level = DeprecationLevel.WARNING) @get:org.gradle.api.tasks.Internal - val outputFile: org.gradle.api.provider.Property + val outputFile: org.gradle.api.provider.Property + + @get:org.gradle.api.tasks.Input + val outputName: org.gradle.api.provider.Property /** * Generate source map diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptionsDefault.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptionsDefault.kt index 22580f600c7..b5bc768730f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptionsDefault.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/CompilerJsOptionsDefault.kt @@ -25,7 +25,7 @@ internal abstract class CompilerJsOptionsDefault @javax.inject.Inject constructo objectFactory.property(kotlin.Boolean::class.java).convention(true) @Deprecated(message = "Use task 'outputFileProperty' to specify location", level = DeprecationLevel.WARNING) - override val outputFile: org.gradle.api.provider.Property = + override val outputFile: org.gradle.api.provider.Property = objectFactory.property(kotlin.String::class.java) override val sourceMap: org.gradle.api.provider.Property = diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsBase.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptionsImpl.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/CompilerArgumentsGradleInput.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/CompilerArgumentsGradleInput.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 8ccd43e1fdc..cf58dbd0b7b 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -52,6 +52,7 @@ internal const val COMPILER_CLASSPATH_CONFIGURATION_NAME = "kotlinCompilerClassp internal const val KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME = "kotlinKlibCommonizerClasspath" val KOTLIN_DSL_NAME = "kotlin" + @Deprecated("Should be removed with 'platform.js' plugin removal") val KOTLIN_JS_DSL_NAME = "kotlin2js" val KOTLIN_OPTIONS_DSL_NAME = "kotlinOptions" @@ -156,11 +157,7 @@ internal abstract class KotlinSourceSetProcessor>( protected fun applyStandardTaskConfiguration(taskConfiguration: AbstractKotlinCompileConfig<*>) { taskConfiguration.configureTask { it.description = taskDescription - if (it is Kotlin2JsCompile) { - it.defaultDestinationDirectory.convention(defaultKotlinDestinationDir) - } else { - it.destinationDirectory.convention(defaultKotlinDestinationDir) - } + it.destinationDirectory.convention(defaultKotlinDestinationDir) it.libraries.from({ kotlinCompilation.compileDependencyFiles }) } } @@ -294,8 +291,11 @@ internal class KotlinJsIrSourceSetProcessor( compilation.binaries .withType(JsIrBinary::class.java) .all { binary -> - val configAction = KotlinJsIrLinkConfig(compilation) - applyStandardTaskConfiguration(configAction) + val configAction = KotlinJsIrLinkConfig(binary) + configAction.configureTask { + it.description = taskDescription + it.libraries.from({ kotlinCompilation.compileDependencyFiles }) + } configAction.configureTask { task -> task.modeProperty.set(binary.mode) task.dependsOn(kotlinTask) @@ -887,6 +887,7 @@ internal fun Project.forEachVariant(action: (BaseVariant) -> Unit) { androidExtension.featureVariants.all(action) } } + is TestExtension -> androidExtension.applicationVariants.all(action) } if (androidExtension is TestedExtension) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 79d6fb82bdb..44e314f7c33 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -205,9 +205,9 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : ), listOf(compilation) ) { task -> - val entryFileProvider = binary.linkSyncTask.map { - it.destinationDir - .resolve(binary.linkTask.get().outputName.get() + ".js") + val entryFileProvider = binary.linkSyncTask.zip(binary.linkTask) { sync, link -> + sync.destinationDir + .resolve(link.compilerOptions.outputName.get() + ".js") } task.description = "build webpack ${mode.name.toLowerCase()} bundle" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index f3bdec55bc2..050182a724b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -43,7 +43,7 @@ constructor( val linkTask = binary.linkTask val compiledWasmFile = linkTask.map { link -> - link.destinationDirectory.asFile.get().resolve(link.outputName.get() + ".wasm") + link.destinationDirectory.asFile.get().resolve(link.compilerOptions.outputName.get() + ".wasm") } //TODO This is temporary solution that overrides compiled files that triggers recompile and reoptimize wasm every time (when binaryen is enabled) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index d1c7941d775..c7a1d26cafd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -15,8 +15,8 @@ import org.gradle.workers.WorkerExecutor import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.compilerRunner.ArgumentUtils +import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptionsDefault import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData @@ -37,8 +37,7 @@ import javax.inject.Inject @CacheableTask abstract class KotlinJsIrLink @Inject constructor( objectFactory: ObjectFactory, - workerExecutor: WorkerExecutor, - private val projectLayout: ProjectLayout + workerExecutor: WorkerExecutor ) : Kotlin2JsCompile( objectFactory.newInstance(CompilerJsOptionsDefault::class.java), objectFactory, @@ -61,11 +60,6 @@ abstract class KotlinJsIrLink @Inject constructor( @get:Internal internal lateinit var compilation: KotlinCompilationData<*> - @get:Internal - val platformType by project.provider { - compilation.platformType - } - @Transient @get:Internal internal val propertiesProvider = PropertiesProvider(project) @@ -152,53 +146,4 @@ abstract class KotlinJsIrLink @Inject constructor( .toTypedArray() .filterNot { it.isEmpty() } } - - override fun setupCompilerArgs(args: K2JSCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) { - when (mode) { - PRODUCTION -> { - kotlinOptions.configureOptions(ENABLE_DCE, GENERATE_D_TS, MINIMIZED_MEMBER_NAMES) - } - - DEVELOPMENT -> { - kotlinOptions.configureOptions(GENERATE_D_TS) - } - } - val alreadyDefinedOutputMode = kotlinOptions.freeCompilerArgs - .any { it.startsWith(PER_MODULE) } - if (!alreadyDefinedOutputMode) { - kotlinOptions.freeCompilerArgs += outputGranularity.toCompilerArgument() - } - super.setupCompilerArgs(args, defaultsOnly, ignoreClasspathResolutionErrors) - } - - private fun KotlinJsOptions.configureOptions(vararg additionalCompilerArgs: String) { - freeCompilerArgs += (additionalCompilerArgs.toList() + PRODUCE_JS + "$ENTRY_IR_MODULE=${entryModule.get().asFile.canonicalPath}") - .mapNotNull { arg -> - if (kotlinOptions.freeCompilerArgs - .any { it.startsWith(arg) } - ) null else arg - } - - if (platformType == KotlinPlatformType.wasm) { - freeCompilerArgs += WASM_BACKEND - } - } - - @get:Input - override val filteredArgumentsMap: Map - get() { - val superFiltered = super.filteredArgumentsMap - return superFiltered.mapValues { (key, value) -> - if (key != K2JSCompilerArguments::freeArgs.name) { - value - } else { - value - .removePrefix("[") - .removeSuffix("]") - .split(", ") - .filter { !it.contains(ENTRY_IR_MODULE) } - .joinToString() - } - } - } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index 0b6fcccae1d..e068c374fdb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -123,9 +123,8 @@ abstract class KotlinJsIrSubTarget( testJs.inputFileProperty.set( project.layout.file( - binary.linkSyncTask.map { - val linkTask = binary.linkTask.get() - val extension = when (linkTask.platformType) { + binary.linkSyncTask.flatMap { copyTask -> + val extension = when (compilation.platformType) { KotlinPlatformType.wasm -> { ".mjs" } @@ -136,8 +135,12 @@ abstract class KotlinJsIrSubTarget( else -> error("Only JS and WASM supported for KotlinJsTest") } - it.destinationDir - .resolve(linkTask.outputName.get() + extension) + binary.linkTask + .flatMap { linkTask -> linkTask.compilerOptions.outputName } + .map { outputName -> + copyTask.destinationDir + .resolve(outputName + extension) + } } ) ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index bc735333beb..b9a8b0e037d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -11,7 +11,6 @@ import org.gradle.api.Task import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME @@ -114,7 +113,6 @@ constructor( private val commonLazy by lazy { compilations.all { compilation -> - val npmProject = compilation.npmProject compilation.binaries .withType(JsIrBinary::class.java) .all { binary -> @@ -122,15 +120,6 @@ constructor( val tsValidationTask = registerTypeScriptCheckTask(binary) binary.linkTask.configure { - it.destinationDirectory.set( - project.buildDir - .resolve(COMPILE_SYNC) - .resolve(if (compilation.platformType == KotlinPlatformType.wasm) "wasm" else "js") - .resolve(compilation.name) - .resolve(binary.name) - .resolve(NpmProject.DIST_FOLDER) - ) - (it.kotlinOptions as KotlinJsOptionsImpl).outputName = npmProject.name it.finalizedBy(syncTask) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 39dd55b863b..718bd4135f6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -908,6 +908,7 @@ abstract class KotlinCompile @Inject constructor( !classpathSnapshotFiles.shrunkPreviousClasspathSnapshotFile.exists() -> { NotAvailableDueToMissingClasspathSnapshot(classpathSnapshotFiles) } + inputChanges.getFileChanges(classpathSnapshotProperties.classpathSnapshot).none() -> NoChanges(classpathSnapshotFiles) else -> ToBeComputedByIncrementalCompiler(classpathSnapshotFiles) } @@ -976,17 +977,10 @@ abstract class Kotlin2JsCompile @Inject constructor( } } - // Workaround to be able to use default value and change it later based on external input - @get:Internal - internal abstract val defaultDestinationDirectory: DirectoryProperty - @Deprecated("Use destinationDirectory and moduleName instead") @get:Internal abstract val outputFileProperty: Property - @get:Input - abstract val outputName: Property - // Workaround to add additional compiler args based on the exising one // Currently there is a logic to add additional compiler arguments based on already existing one. // And it is not possible to update compilerOptions.freeCompilerArgs using some kind of .map @@ -1012,13 +1006,15 @@ abstract class Kotlin2JsCompile @Inject constructor( (compilerOptions as CompilerJsOptionsDefault).fillDefaultValues(args) super.setupCompilerArgs(args, defaultsOnly = defaultsOnly, ignoreClasspathResolutionErrors = ignoreClasspathResolutionErrors) - if (kotlinOptions.isIrBackendEnabled()) { - if (kotlinOptions.outputFile != null) { - args.outputDir = (kotlinOptions as KotlinJsOptionsImpl).destDir - kotlinOptions.outputFile?.let { args.outputName = File(it).nameWithoutExtension } + if (isIrBackendEnabled()) { + val outputFilePath: String? = compilerOptions.outputFile.orNull + if (outputFilePath != null) { + val outputFile = File(outputFilePath) + args.outputDir = (if (outputFile.extension == "") outputFile else outputFile.parentFile).normalize().absolutePath + args.outputName = outputFile.nameWithoutExtension } else { args.outputDir = destinationDirectory.get().asFile.normalize().absolutePath - args.outputName = outputName.get() + args.outputName = compilerOptions.outputName.get() } } else { args.outputFile = outputFileProperty.get().absoluteFile.normalize().absolutePath diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt index 23355112bff..f73d3f44e0e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.tasks.configuration -import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.isMainCompilationData @@ -35,60 +34,19 @@ internal open class BaseKotlin2JsCompileConfig( configureAdditionalFreeCompilerArguments(task, compilation) - @Suppress("DEPRECATION") - task.compilerOptions.outputFile.convention( - task.defaultDestinationDirectory.zip(task.enhancedFreeCompilerArgs) { destDir, freeArgs -> - val baseName = if (compilation.isMainCompilationData()) { - project.name - } else { - "${project.name}_${compilation.compilationPurpose}" - } - - if (freeArgs.contains(PRODUCE_UNZIPPED_KLIB)) { - destDir.asFile.absoluteFile.normalize().absolutePath - } else { - if (compilation is KotlinJsIrCompilation) { - destDir.asFile.resolve("$baseName.$KLIB_TYPE").absoluteFile.normalize().absolutePath - } else { - val extensionName = if (compilation.platformType == KotlinPlatformType.wasm) ".mjs" else ".js" - destDir.asFile.resolve("${compilation.ownModuleName}$extensionName").absolutePath - } - } - } + task.compilerOptions.outputName.convention( + compilation.ownModuleName ) @Suppress("DEPRECATION") task.outputFileProperty.value( - task.compilerOptions.outputFile.map { File(it) } - ) - - task.destinationDirectory - .fileProvider( - task.outputFileProperty.zip(task.enhancedFreeCompilerArgs) { outputFile, freeArgs -> - if (freeArgs.contains(PRODUCE_UNZIPPED_KLIB)) { - outputFile - } else { - outputFile.parentFile - } - } - ) - .disallowChanges() - - task.outputName.value(task.project.provider { - (task.kotlinOptions as KotlinJsOptionsImpl).outputName ?: compilation.ownModuleName - }).disallowChanges() - - task.optionalOutputFile.fileProvider( - task.outputFileProperty.flatMap { outputFile -> - task.enhancedFreeCompilerArgs.flatMap { freeArgs -> - task.project.providers.provider { - outputFile.takeUnless { - freeArgs.contains(PRODUCE_UNZIPPED_KLIB) - } - } + task.destinationDirectory.flatMap { dir -> + task.compilerOptions.outputName.map { name -> + dir.file(name).asFile } } - ).disallowChanges() + ) + task.libraryCache.set(libraryCacheService).also { task.libraryCache.disallowChanges() } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt index 290035cf125..47455a71e68 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinJsIrLinkConfig.kt @@ -5,18 +5,20 @@ package org.jetbrains.kotlin.gradle.tasks.configuration -import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation -import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink -import java.io.File import org.gradle.api.InvalidUserDataException import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.ir.* +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject +import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject internal open class KotlinJsIrLinkConfig( - compilation: KotlinJsIrCompilation -) : BaseKotlin2JsCompileConfig(compilation) { + private val binary: JsIrBinary +) : BaseKotlin2JsCompileConfig(binary.compilation) { + + private val compilation + get() = binary.compilation init { configureTask { task -> @@ -33,6 +35,15 @@ internal open class KotlinJsIrLinkConfig( } ).disallowChanges() task.compilation = compilation + task.destinationDirectory.convention( + project.layout.buildDirectory + .dir(COMPILE_SYNC) + .map { it.dir(if (compilation.platformType == KotlinPlatformType.wasm) "wasm" else "js") } + .map { it.dir(compilation.name) } + .map { it.dir(binary.name) } + .map { it.dir(NpmProject.DIST_FOLDER) } + ) + task.compilerOptions.outputName.convention(project.provider { compilation.npmProject.name }) } }