From 0069457b94e0aa17065961ddd89c0142e72087b1 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Tue, 4 Oct 2022 13:09:45 +0200 Subject: [PATCH] [Gradle] Implement KotlinJs*Compilation with underlying KotlinCompilationImpl KT-54312 --- .../JsCompilationDetails.kt | 4 +- .../KotlinCompilationSourceSetInclusion.kt | 68 ++++++++++-------- ...pilationDependencyConfigurationsFactory.kt | 69 +++++++++++-------- ...JsCompilationSourceSetsContainerFactory.kt | 31 +++++++++ .../factory/JsCompilerOptionsFactory.kt | 28 ++++++++ ...IrCompilationSourceSetsContainerFactory.kt | 29 ++++++++ .../factory/NativeCompilerOptionsFactory.kt | 2 +- .../gradle/targets/js/KotlinJsCompilation.kt | 46 ++++++++----- .../targets/js/KotlinJsCompilationFactory.kt | 29 ++++---- .../targets/js/ir/KotlinJsIrCompilation.kt | 8 +-- .../js/ir/KotlinJsIrCompilationFactory.kt | 36 +++++----- .../gradle/targets/js/ir/KotlinJsIrLink.kt | 8 +-- .../native/KotlinNativeCompilationFactory.kt | 2 +- .../KotlinSharedNativeCompilationFactory.kt | 2 +- 14 files changed, 238 insertions(+), 124 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilationSourceSetsContainerFactory.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilerOptionsFactory.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsIrCompilationSourceSetsContainerFactory.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt index f06bdf33fca..c55d1d8ac31 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationDetailsImpl/JsCompilationDetails.kt @@ -40,7 +40,7 @@ internal open class JsCompilationDetails( internal abstract class JsCompilationDependenciesHolder @Inject constructor( val target: KotlinTarget, - val compilationPurpose: String + val compilationName: String ) : HasKotlinDependencies { override val apiConfigurationName: String get() = disambiguateNameInPlatform(API) @@ -64,7 +64,7 @@ internal open class JsCompilationDetails( private fun disambiguateNameInPlatform(simpleName: String): String { return lowerCamelCaseName( disambiguationClassifierInPlatform, - compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, + compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, "compilation", simpleName ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationSourceSetInclusion.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationSourceSetInclusion.kt index 4675e5249f7..56ecb209ba5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationSourceSetInclusion.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationSourceSetInclusion.kt @@ -23,35 +23,9 @@ internal interface KotlinCompilationSourceSetInclusion { } internal class DefaultKotlinCompilationSourceSetInclusion( - private val addSourcesToCompileTask: AddSourcesToCompileTask = AddSourcesToCompileTask.Default + private val addSourcesToCompileTask: AddSourcesToCompileTask = DefaultAddSourcesToCompileTask ) : KotlinCompilationSourceSetInclusion { - interface AddSourcesToCompileTask { - fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) - - object Default : AddSourcesToCompileTask { - override fun addSources( - compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy - ) { - addSourcesToKotlinCompileTask( - compilation.project, - compilation.compileKotlinTaskName, - sourceSet.customSourceFilesExtensions, - addAsCommonSources, - { sourceSet.kotlin } - ) - } - } - - object Native : AddSourcesToCompileTask { - override fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) { - addSourcesToKotlinNativeCompileTask( - compilation.project, compilation.compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources - ) - } - } - } - override fun include(compilation: InternalKotlinCompilation<*>, sourceSet: KotlinSourceSet) { /* Check if the source set was already included */ if (!compilation.includedSourceSets.add(sourceSet)) return @@ -110,4 +84,44 @@ internal class DefaultKotlinCompilationSourceSetInclusion( val InternalKotlinCompilation<*>.includedSourceSets: MutableSet get() = extras.getOrPut(includedSourceSetsKey, { hashSetOf() }) } + + + fun interface AddSourcesToCompileTask { + fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) + + companion object { + fun composite(vararg elements: AddSourcesToCompileTask?): AddSourcesToCompileTask = + CompositeAddSourcesToCompileTask(listOfNotNull(*elements)) + } + } + + private class CompositeAddSourcesToCompileTask(private val children: List) : AddSourcesToCompileTask { + override fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) { + return children.forEach { child -> child.addSources(compilation, sourceSet, addAsCommonSources) } + } + } + + object NativeAddSourcesToCompileTask : AddSourcesToCompileTask { + override fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) = + addSourcesToKotlinNativeCompileTask( + project = compilation.project, + taskName = compilation.compileKotlinTaskName, + sourceFiles = { sourceSet.kotlin }, + addAsCommonSources = addAsCommonSources + ) + } + + object DefaultAddSourcesToCompileTask : AddSourcesToCompileTask { + override fun addSources( + compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy + ) = addSourcesToKotlinCompileTask( + project = compilation.project, + taskName = compilation.compileKotlinTaskName, + sourceFileExtensions = sourceSet.customSourceFilesExtensions, + addAsCommonSources = addAsCommonSources, + sources = { sourceSet.kotlin } + ) + } + + } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/DefaultKotlinCompilationDependencyConfigurationsFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/DefaultKotlinCompilationDependencyConfigurationsFactory.kt index 3ddd1283daa..b885d578fe8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/DefaultKotlinCompilationDependencyConfigurationsFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/DefaultKotlinCompilationDependencyConfigurationsFactory.kt @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationDependencyConfigurationsContainer import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationDependencyConfigurationsContainer +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.utils.* internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory : @@ -39,56 +41,71 @@ internal object NativeKotlinCompilationDependencyConfigurationsFactory : } } +internal object JsKotlinCompilationDependencyConfigurationsFactory : + KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory { + + override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationDependencyConfigurationsContainer { + return KotlinCompilationDependencyConfigurationsContainer( + target, compilationName, withRuntime = true, + configurationNamePrefix = lowerCamelCaseName( + target.disambiguationClassifierInPlatform, compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME } + ) + ) + } + + private val KotlinTarget.disambiguationClassifierInPlatform: String? + get() = when (this) { + is KotlinJsTarget -> disambiguationClassifierInPlatform + is KotlinJsIrTarget -> disambiguationClassifierInPlatform + else -> error("Unexpected target type of $this") + } +} + private fun KotlinCompilationDependencyConfigurationsContainer( target: KotlinTarget, compilationName: String, withRuntime: Boolean, + configurationNamePrefix: String = lowerCamelCaseName( + target.disambiguationClassifier, compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, + ), compileClasspathConfigurationSuffix: String = "compileClasspath", runtimeClasspathConfigurationSuffix: String = "runtimeClasspath" ): KotlinCompilationDependencyConfigurationsContainer { - val compilation = "${target.disambiguationClassifier}/$compilationName" - val prefix = lowerCamelCaseName( - target.disambiguationClassifier, - compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - "compilation" - ) + val compilationCoordinates = "${target.disambiguationClassifier}/$compilationName" + val compilation = "compilation" - val apiConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, API)).apply { + fun name(vararg parts: String) = lowerCamelCaseName(configurationNamePrefix, *parts) + + val apiConfiguration = target.project.configurations.maybeCreate(name(compilation, API)).apply { isVisible = false isCanBeConsumed = false isCanBeResolved = false - description = "API dependencies for $compilation" + description = "API dependencies for $compilationCoordinates" } - val implementationConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, IMPLEMENTATION)).apply { + val implementationConfiguration = target.project.configurations.maybeCreate(name(compilation, IMPLEMENTATION)).apply { extendsFrom(apiConfiguration) isVisible = false isCanBeConsumed = false isCanBeResolved = false - description = "Implementation only dependencies for $compilation." + description = "Implementation only dependencies for $compilationCoordinates." } - val compileOnlyConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, COMPILE_ONLY)).apply { + val compileOnlyConfiguration = target.project.configurations.maybeCreate(name(compilation, COMPILE_ONLY)).apply { isCanBeConsumed = false setupAsLocalTargetSpecificConfigurationIfSupported(target) attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY)) isVisible = false isCanBeResolved = false - description = "Compile only dependencies for $compilation." + description = "Compile only dependencies for $compilationCoordinates." } - val runtimeOnlyConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, RUNTIME_ONLY)).apply { + val runtimeOnlyConfiguration = target.project.configurations.maybeCreate(name(compilation, RUNTIME_ONLY)).apply { isVisible = false isCanBeConsumed = false isCanBeResolved = false - description = "Runtime only dependencies for $compilation." + description = "Runtime only dependencies for $compilationCoordinates." } - val compileDependencyConfiguration = target.project.configurations.maybeCreate( - lowerCamelCaseName( - target.disambiguationClassifier, - compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - compileClasspathConfigurationSuffix - ) - ).apply { + val compileDependencyConfiguration = target.project.configurations.maybeCreate(name(compileClasspathConfigurationSuffix)).apply { extendsFrom(compileOnlyConfiguration, implementationConfiguration) usesPlatformOf(target) isVisible = false @@ -97,15 +114,11 @@ private fun KotlinCompilationDependencyConfigurationsContainer( if (target.platformType != KotlinPlatformType.androidJvm) { attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY)) } - description = "Compile classpath for $compilation." + description = "Compile classpath for $compilationCoordinates." } val runtimeDependencyConfiguration = if (withRuntime) target.project.configurations.maybeCreate( - lowerCamelCaseName( - target.disambiguationClassifier, - compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - runtimeClasspathConfigurationSuffix - ) + name(runtimeClasspathConfigurationSuffix) ).apply { extendsFrom(runtimeOnlyConfiguration, implementationConfiguration) usesPlatformOf(target) @@ -116,7 +129,7 @@ private fun KotlinCompilationDependencyConfigurationsContainer( if (target.platformType != KotlinPlatformType.androidJvm) { attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY)) } - description = "Runtime classpath of $compilation." + description = "Runtime classpath of $compilationCoordinates." } else null return DefaultKotlinCompilationDependencyConfigurationsContainer( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilationSourceSetsContainerFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilationSourceSetsContainerFactory.kt new file mode 100644 index 00000000000..1863d5d4bb0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilationSourceSetsContainerFactory.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory + +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName + +internal object JsCompilationSourceSetsContainerFactory : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory { + override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer { + return KotlinCompilationSourceSetsContainer( + target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName(target, compilationName)) + ) + } + + private fun defaultSourceSetName(target: KotlinTarget, compilationName: String): String { + val classifier = if (target is KotlinJsTarget && target.irTarget != null) + target.disambiguationClassifierInPlatform + else target.disambiguationClassifier + + return lowerCamelCaseName( + classifier, + compilationName + ) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilerOptionsFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilerOptionsFactory.kt new file mode 100644 index 00000000000..98fe6949563 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsCompilerOptionsFactory.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory + +import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptions +import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptionsDefault +import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions +import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget + +internal object JsCompilerOptionsFactory : KotlinCompilationImplFactory.CompilerOptionsFactory { + override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationImplFactory.CompilerOptionsFactory.Options { + val compilerOptions = object : HasCompilerOptions { + override val options: CompilerJsOptions = + target.project.objects.newInstance(CompilerJsOptionsDefault::class.java) + } + + val kotlinOptions = object : KotlinJsOptions { + override val options: CompilerJsOptions + get() = compilerOptions.options + } + + return KotlinCompilationImplFactory.CompilerOptionsFactory.Options(compilerOptions, kotlinOptions) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsIrCompilationSourceSetsContainerFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsIrCompilationSourceSetsContainerFactory.kt new file mode 100644 index 00000000000..8c06d3fa523 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/JsIrCompilationSourceSetsContainerFactory.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory + +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget +import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName + +internal object JsIrCompilationSourceSetsContainerFactory : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory { + override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer { + return KotlinCompilationSourceSetsContainer( + target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName(target, compilationName)) + ) + } + + private fun defaultSourceSetName(target: KotlinTarget, compilationName: String): String { + return lowerCamelCaseName( + if (target is KotlinJsIrTarget && target.mixedMode) + target.disambiguationClassifierInPlatform + else target.disambiguationClassifier, + compilationName + ) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/NativeCompilerOptionsFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/NativeCompilerOptionsFactory.kt index f1988273f18..de95ebbb52a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/NativeCompilerOptionsFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/NativeCompilerOptionsFactory.kt @@ -20,4 +20,4 @@ internal object NativeCompilerOptionsFactory : KotlinCompilationImplFactory.Comp return KotlinCompilationImplFactory.CompilerOptionsFactory.Options(compilerOptions, kotlinOptions) } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt index 11138bc989e..8155d9a9f9f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt @@ -9,12 +9,11 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import groovy.lang.Closure +import org.gradle.api.file.FileCollection import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.* -import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsCompilationDetails +import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer @@ -22,22 +21,20 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import javax.inject.Inject -abstract class KotlinJsCompilation @Inject internal constructor( - compilationDetails: JsCompilationDetails -) : AbstractKotlinCompilationToRunnableFiles(compilationDetails), - KotlinCompilationWithResources { - - final override val target: KotlinTarget get() = super.target +open class KotlinJsCompilation @Inject internal constructor( + private val compilation: KotlinCompilationImpl +) : InternalKotlinCompilation by compilation.castKotlinOptionsType(), + KotlinCompilationToRunnableFiles { @Suppress("UNCHECKED_CAST") - final override val compilerOptions: HasCompilerOptions - get() = super.compilerOptions as HasCompilerOptions + final override val compilerOptions: HasCompilerOptions + get() = compilation.compilerOptions as HasCompilerOptions internal val binaries: KotlinJsBinaryContainer = - target.project.objects.newInstance( + compilation.target.project.objects.newInstance( KotlinJsBinaryContainer::class.java, - target, - target.project.objects.domainObjectSet(JsBinary::class.java) + compilation.target, + compilation.target.project.objects.domainObjectSet(JsBinary::class.java) ) var outputModuleName: String? = null @@ -51,22 +48,33 @@ abstract class KotlinJsCompilation @Inject internal constructor( field = value } + @Deprecated("Use compilationName instead", ReplaceWith("compilationName")) + val compilationPurpose: String get() = compilationName + override val processResourcesTaskName: String get() = disambiguateName("processResources") @Suppress("DEPRECATION") @Deprecated("Accessing task instance directly is deprecated", replaceWith = ReplaceWith("compileTaskProvider")) override val compileKotlinTask: Kotlin2JsCompile - get() = super.compileKotlinTask as Kotlin2JsCompile + get() = compilation.compileKotlinTask as Kotlin2JsCompile @Suppress("UNCHECKED_CAST", "DEPRECATION") @Deprecated("Replaced with compileTaskProvider", replaceWith = ReplaceWith("compileTaskProvider")) override val compileKotlinTaskProvider: TaskProvider - get() = super.compileKotlinTaskProvider as TaskProvider + get() = compilation.compileKotlinTaskProvider as TaskProvider @Suppress("UNCHECKED_CAST") override val compileTaskProvider: TaskProvider - get() = super.compileTaskProvider as TaskProvider + get() = compilation.compileTaskProvider as TaskProvider + + override val runtimeDependencyConfigurationName: String + get() = compilation.runtimeDependencyConfigurationName ?: error("Missing 'runtimeDependencyConfigurationName'") + + override var runtimeDependencyFiles: FileCollection = compilation.runtimeDependencyFiles ?: error("Missing 'runtimeDependencyFiles'") + + override val relatedConfigurationNames: List + get() = compilation.relatedConfigurationNames internal val packageJsonHandlers = mutableListOf Unit>() @@ -79,4 +87,4 @@ abstract class KotlinJsCompilation @Inject internal constructor( project.configure(this, handler) } } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilationFactory.kt index 9b3fa9d7bb4..770e31dd824 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilationFactory.kt @@ -6,28 +6,23 @@ @file:Suppress("PackageDirectoryMismatch") // Old package for compatibility package org.jetbrains.kotlin.gradle.plugin.mpp -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsCompilationDetails -import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsCompilationSourceSetsContainerFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsCompilerOptionsFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsKotlinCompilationDependencyConfigurationsFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory -class KotlinJsCompilationFactory( +class KotlinJsCompilationFactory internal constructor( override val target: KotlinOnlyTarget, + private val compilationImplFactory: KotlinCompilationImplFactory = KotlinCompilationImplFactory( + compilerOptionsFactory = JsCompilerOptionsFactory, + compilationSourceSetsContainerFactory = JsCompilationSourceSetsContainerFactory, + compilationDependencyConfigurationsFactory = JsKotlinCompilationDependencyConfigurationsFactory + ) ) : KotlinCompilationFactory { override val itemClass: Class get() = KotlinJsCompilation::class.java - override fun defaultSourceSetName(compilationName: String): String { - val classifier = if (target is KotlinJsTarget && target.irTarget != null) - target.disambiguationClassifierInPlatform - else target.disambiguationClassifier - - return lowerCamelCaseName( - classifier, - compilationName - ) - } - override fun create(name: String): KotlinJsCompilation = target.project.objects.newInstance( - KotlinJsCompilation::class.java, JsCompilationDetails(target, name, getOrCreateDefaultSourceSet(name)) + itemClass, compilationImplFactory.create(target, name) ) -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt index 3300da8d003..d66de640729 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt @@ -5,10 +5,10 @@ package org.jetbrains.kotlin.gradle.targets.js.ir -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsIrCompilationDetails import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl import javax.inject.Inject -abstract class KotlinJsIrCompilation @Inject internal constructor( - compilationDetails: JsIrCompilationDetails -) : KotlinJsCompilation(compilationDetails) \ No newline at end of file +open class KotlinJsIrCompilation @Inject internal constructor( + compilation: KotlinCompilationImpl +) : KotlinJsCompilation(compilation) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt index 2c6af40403a..ca1691a85da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt @@ -5,29 +5,25 @@ package org.jetbrains.kotlin.gradle.targets.js.ir -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsIrCompilationDetails import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory -import org.jetbrains.kotlin.gradle.plugin.mpp.getOrCreateDefaultSourceSet -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsCompilerOptionsFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsIrCompilationSourceSetsContainerFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsKotlinCompilationDependencyConfigurationsFactory +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory -class KotlinJsIrCompilationFactory( - override val target: KotlinJsIrTarget +class KotlinJsIrCompilationFactory internal constructor( + override val target: KotlinOnlyTarget, + private val compilationImplFactory: KotlinCompilationImplFactory = KotlinCompilationImplFactory( + compilerOptionsFactory = JsCompilerOptionsFactory, + compilationSourceSetsContainerFactory = JsIrCompilationSourceSetsContainerFactory, + compilationDependencyConfigurationsFactory = JsKotlinCompilationDependencyConfigurationsFactory + ) ) : KotlinCompilationFactory { override val itemClass: Class get() = KotlinJsIrCompilation::class.java - override fun defaultSourceSetName(compilationName: String): String { - return lowerCamelCaseName( - if (target.mixedMode) - target.disambiguationClassifierInPlatform - else - target.disambiguationClassifier, - compilationName - ) - } - - override fun create(name: String): KotlinJsIrCompilation = - target.project.objects.newInstance( - KotlinJsIrCompilation::class.java, JsIrCompilationDetails(target, name, getOrCreateDefaultSourceSet(name)) - ) -} \ No newline at end of file + override fun create(name: String): KotlinJsIrCompilation = target.project.objects.newInstance( + itemClass, compilationImplFactory.create(target, name) + ) +} 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 77a95218571..6683fb121d1 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,10 +15,10 @@ 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.KotlinJsCompilerOptionsDefault +import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptionsDefault +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT @@ -36,7 +36,7 @@ abstract class KotlinJsIrLink @Inject constructor( objectFactory: ObjectFactory, workerExecutor: WorkerExecutor ) : Kotlin2JsCompile( - objectFactory.newInstance(KotlinJsCompilerOptionsDefault::class.java), + objectFactory.newInstance(CompilerJsOptionsDefault::class.java), objectFactory, workerExecutor ) { @@ -60,7 +60,7 @@ abstract class KotlinJsIrLink @Inject constructor( @Transient @get:Internal - internal lateinit var compilation: KotlinCompilationData<*> + internal lateinit var compilation: KotlinCompilation<*> @Transient @get:Internal diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt index de86cefa3ab..057c9bfce51 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt @@ -22,7 +22,7 @@ open class KotlinNativeCompilationFactory internal constructor( compilerOptionsFactory = NativeCompilerOptionsFactory, compilationAssociator = NativeKotlinCompilationAssociator, compilationSourceSetInclusion = DefaultKotlinCompilationSourceSetInclusion( - DefaultKotlinCompilationSourceSetInclusion.AddSourcesToCompileTask.Native + DefaultKotlinCompilationSourceSetInclusion.NativeAddSourcesToCompileTask ), ) ) : KotlinCompilationFactory { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt index 9446d40599a..40cce918bb8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinSharedNativeCompilationFactory.kt @@ -27,7 +27,7 @@ open class KotlinSharedNativeCompilationFactory internal constructor( compilationAssociator = NativeKotlinCompilationAssociator, compilationSourceSetInclusion = DefaultKotlinCompilationSourceSetInclusion( - DefaultKotlinCompilationSourceSetInclusion.AddSourcesToCompileTask.Native + DefaultKotlinCompilationSourceSetInclusion.NativeAddSourcesToCompileTask ), compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(