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 cf58dbd0b7b..a553d3f3dfa 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 @@ -157,7 +157,11 @@ internal abstract class KotlinSourceSetProcessor>( protected fun applyStandardTaskConfiguration(taskConfiguration: AbstractKotlinCompileConfig<*>) { taskConfiguration.configureTask { it.description = taskDescription - it.destinationDirectory.convention(defaultKotlinDestinationDir) + if (it is Kotlin2JsCompile) { + it.defaultDestinationDirectory.convention(defaultKotlinDestinationDir) + } else { + it.destinationDirectory.convention(defaultKotlinDestinationDir) + } it.libraries.from({ kotlinCompilation.compileDependencyFiles }) } } 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 12a08a16586..a8f61a23f64 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 @@ -121,17 +121,15 @@ abstract class KotlinJsIrSubTarget( KotlinJsBinaryMode.DEVELOPMENT ).single() - testJs.inputFileProperty.set( - project.layout.file( - binary.linkSyncTask.flatMap { copyTask -> - binary.linkTask - .flatMap { linkTask -> linkTask.compilerOptions.moduleName } - .map { outputName -> - copyTask.destinationDir - .resolve(outputName + compilation.platformType.fileExtension) - } + testJs.dependsOn(binary.linkSyncTask) + testJs.inputFileProperty.fileProvider( + binary.linkSyncTask.flatMap { linkSyncTask -> + binary.linkTask.flatMap { linkTask -> + linkTask.outputFileProperty.map { + linkSyncTask.destinationDir.resolve(it.name) + } } - ) + } ) configureTestDependencies(testJs) 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 91d35595f03..eb8b9d1a689 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 @@ -977,6 +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 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 693a6c4c71c..f5b3a0a0f6f 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 @@ -50,6 +50,24 @@ internal open class BaseKotlin2JsCompileConfig( } ) + task.destinationDirectory + .convention( + project.objects.directoryProperty().fileProvider( + task.defaultDestinationDirectory.map { + val freeArgs = task.enhancedFreeCompilerArgs.get() + if (task.compilerOptions.outputFile.orNull != null) { + if (freeArgs.contains(PRODUCE_UNZIPPED_KLIB)) { + File(task.compilerOptions.outputFile.get()) + } else { + File(task.compilerOptions.outputFile.get()).parentFile + } + } else { + it.asFile + } + } + ) + ) + task.libraryCache.set(libraryCacheService).also { task.libraryCache.disallowChanges() } } }