diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt index ea9b8ec2d9f..54f4f5c9c13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinCommonCompilationFactory.kt @@ -6,9 +6,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.* import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPostConfigure import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetInclusion import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.DefaultKotlinCompilationDependencyConfigurationsFactory @@ -46,10 +44,6 @@ class KotlinCommonCompilationFactory internal constructor( We therefore can create the container inline */ compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) }, - postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite( - DefaultKotlinCompilationPostConfigure, - KotlinCompilationCommonCompilerOptionsFromTargetConfigurator(target.compilerOptions) - ) ) override fun create(name: String): KotlinCommonCompilation = target.project.objects.newInstance( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefaultKotlinCompilationPostConfigure.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefaultKotlinCompilationPostConfigure.kt index f4ce4d6f5d1..2eb2a0fa2f2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefaultKotlinCompilationPostConfigure.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/DefaultKotlinCompilationPostConfigure.kt @@ -8,5 +8,6 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory internal val DefaultKotlinCompilationPostConfigure = KotlinCompilationImplFactory.PostConfigure.composite( - KotlinCompilationRegisterInSourceSetsConfigurator + KotlinCompilationRegisterInSourceSetsConfigurator, + KotlinCompilationCompilerOptionsFromTargetConfigurator ) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationCompilerOptionsConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationCompilerOptionsConfigurator.kt index 76a60c15340..ae24e1be47d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationCompilerOptionsConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/KotlinCompilationCompilerOptionsConfigurator.kt @@ -9,14 +9,33 @@ import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptionsHelper import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptionsHelper import org.jetbrains.kotlin.gradle.plugin.mpp.DecoratedKotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory import org.jetbrains.kotlin.gradle.plugin.mpp.moduleNameForCompilation -internal class KotlinCompilationJvmCompilerOptionsFromTargetConfigurator( - private val targetCompilerOptions: KotlinJvmCompilerOptions -) : KotlinCompilationImplFactory.PostConfigure { +internal object KotlinCompilationCompilerOptionsFromTargetConfigurator : KotlinCompilationImplFactory.PostConfigure { override fun configure(compilation: DecoratedKotlinCompilation<*>) { - val jvmCompilerOptions = compilation.compilerOptions.options as KotlinJvmCompilerOptions + when (val compilationCompilerOptions = compilation.compilerOptions.options) { + is KotlinJvmCompilerOptions -> compilation.configureJvmCompilerOptions(compilationCompilerOptions) + is KotlinJsCompilerOptions -> compilation.configureJsCompilerOptions(compilationCompilerOptions) + is KotlinNativeCompilerOptions -> { + if (compilation.target is KotlinMetadataTarget) { + // Shared native compilation, for example, 'appleMain' + compilation.configureCommonCompilerOptions(compilationCompilerOptions) + } else { + compilation.configureNativeCompilerOptions(compilationCompilerOptions) + } + } + else -> compilation.configureCommonCompilerOptions(compilationCompilerOptions) + } + } + + private fun DecoratedKotlinCompilation<*>.configureJvmCompilerOptions( + jvmCompilerOptions: KotlinJvmCompilerOptions + ) { + val targetCompilerOptions = requireTargetCompilerOptionsType() + KotlinJvmCompilerOptionsHelper.syncOptionsAsConvention( targetCompilerOptions, jvmCompilerOptions @@ -24,37 +43,20 @@ internal class KotlinCompilationJvmCompilerOptionsFromTargetConfigurator( jvmCompilerOptions.moduleName.convention( moduleNameForCompilation( - compilation.compilationName, + compilationName, targetCompilerOptions.moduleName - ).orElse(compilation.moduleNameForCompilation()) + ).orElse(moduleNameForCompilation()) ) } -} -internal class KotlinCompilationNativeCompilerOptionsFromTargetConfigurator( - private val targetCompilerOptions: KotlinNativeCompilerOptions -) : KotlinCompilationImplFactory.PostConfigure { - override fun configure(compilation: DecoratedKotlinCompilation<*>) { - val nativeCompilerOptions = compilation.compilerOptions.options as KotlinNativeCompilerOptions - KotlinNativeCompilerOptionsHelper.syncOptionsAsConvention( - targetCompilerOptions, - nativeCompilerOptions - ) + private fun DecoratedKotlinCompilation<*>.configureJsCompilerOptions( + jsCompilerOptions: KotlinJsCompilerOptions + ) { + // Ignoring legacy JS target + if (target is KotlinWithJavaTarget<*, *>) return - nativeCompilerOptions.moduleName.convention( - moduleNameForCompilation( - compilation.compilationName, - targetCompilerOptions.moduleName - ) - ) - } -} + val targetCompilerOptions = requireTargetCompilerOptionsType() -internal class KotlinCompilationJsCompilerOptionsFromTargetConfigurator( - private val targetCompilerOptions: KotlinJsCompilerOptions -) : KotlinCompilationImplFactory.PostConfigure { - override fun configure(compilation: DecoratedKotlinCompilation<*>) { - val jsCompilerOptions = compilation.compilerOptions.options as KotlinJsCompilerOptions KotlinJsCompilerOptionsHelper.syncOptionsAsConvention( targetCompilerOptions, jsCompilerOptions @@ -62,21 +64,46 @@ internal class KotlinCompilationJsCompilerOptionsFromTargetConfigurator( jsCompilerOptions.moduleName.convention( moduleNameForCompilation( - compilation.compilationName, + compilationName, targetCompilerOptions.moduleName - ).orElse(compilation.moduleNameForCompilation()) + ).orElse(moduleNameForCompilation()) ) } -} -internal class KotlinCompilationCommonCompilerOptionsFromTargetConfigurator( - private val targetCompilerOptions: KotlinCommonCompilerOptions -) : KotlinCompilationImplFactory.PostConfigure { - override fun configure(compilation: DecoratedKotlinCompilation<*>) { - val commonCompilerOptions = compilation.compilerOptions.options - KotlinCommonCompilerOptionsHelper.syncOptionsAsConvention( + private fun DecoratedKotlinCompilation<*>.configureNativeCompilerOptions( + nativeCompilerOptions: KotlinNativeCompilerOptions + ) { + val targetCompilerOptions = requireTargetCompilerOptionsType() + + KotlinNativeCompilerOptionsHelper.syncOptionsAsConvention( targetCompilerOptions, + nativeCompilerOptions + ) + + nativeCompilerOptions.moduleName.convention( + moduleNameForCompilation( + compilationName, + targetCompilerOptions.moduleName + ) + ) + } + + private fun DecoratedKotlinCompilation<*>.configureCommonCompilerOptions( + commonCompilerOptions: KotlinCommonCompilerOptions + ) { + KotlinCommonCompilerOptionsHelper.syncOptionsAsConvention( + target.compilerOptions, commonCompilerOptions ) } -} \ No newline at end of file + + private inline fun DecoratedKotlinCompilation<*>.requireTargetCompilerOptionsType(): T { + val targetCompilerOptions = compilation.target.compilerOptions + require(targetCompilerOptions is T) { + "${compilation.compilationName} target ${compilation.target.name}:${compilation.target::class.qualifiedName} has incorrect 'compilerOptions' type " + + "${targetCompilerOptions::class.qualifiedName}" + } + + return targetCompilerOptions + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt index 9be7e58e566..2be9807dae6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/createExternalKotlinTarget.kt @@ -86,8 +86,6 @@ fun KotlinMultiplatformExtension.createExter artifactsTaskLocator = artifactsTaskLocator ) - target.wireCompilerOptionsToCompilations(descriptor.platformType) - target.setupApiElements(apiElementsConfiguration) target.setupApiElements(apiElementsPublishedConfiguration) target.setupRuntimeElements(runtimeElementsConfiguration) @@ -148,42 +146,3 @@ private fun ExternalKotlinTargetImpl.setupRuntimeElements(configuration: Configu private fun ExternalKotlinTargetImpl.setupSourcesElements(configuration: Configuration) { configuration.configureSourcesPublicationAttributes(this) } - -private fun ExternalKotlinTargetImpl.wireCompilerOptionsToCompilations(platformType: KotlinPlatformType) { - when (platformType) { - KotlinPlatformType.androidJvm, - KotlinPlatformType.jvm -> { - compilations.configureEach { - KotlinJvmCompilerOptionsHelper.syncOptionsAsConvention( - compilerOptions as KotlinJvmCompilerOptions, - it.compilerOptions.options as KotlinJvmCompilerOptions - ) - } - } - KotlinPlatformType.wasm, - KotlinPlatformType.js -> { - compilations.configureEach { - KotlinJsCompilerOptionsHelper.syncOptionsAsConvention( - compilerOptions as KotlinJsCompilerOptions, - it.compilerOptions.options as KotlinJsCompilerOptions - ) - } - } - KotlinPlatformType.common -> { - compilations.configureEach { - KotlinCommonCompilerOptionsHelper.syncOptionsAsConvention( - compilerOptions, - it.compilerOptions.options - ) - } - } - KotlinPlatformType.native -> { - compilations.configureEach { - KotlinNativeCompilerOptionsHelper.syncOptionsAsConvention( - compilerOptions as KotlinNativeCompilerOptions, - it.compilerOptions.options as KotlinNativeCompilerOptions - ) - } - } - } -} 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 b87fcbec5b5..c4f64e2d6a9 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 @@ -15,8 +15,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.sourcesJarTask import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly 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.DefaultKotlinCompilationPostConfigure -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationJsCompilerOptionsFromTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinJsCompilerOptionsFactory @@ -42,10 +40,6 @@ class KotlinJsIrCompilationFactory internal constructor( sourcesJarTask(compilation, compilation.target.targetName, artifactNameAppendix) } }, - postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite( - DefaultKotlinCompilationPostConfigure, - KotlinCompilationJsCompilerOptionsFromTargetConfigurator(target.compilerOptions) - ) ) override fun create(name: String): KotlinJsIrCompilation = target.project.objects.newInstance( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilationFactory.kt index 84e883ba126..fc31256af91 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilationFactory.kt @@ -11,9 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.hierarchy.KotlinSourceSetTreeClassifie import org.jetbrains.kotlin.gradle.plugin.hierarchy.KotlinSourceSetTreeClassifier.Property import org.jetbrains.kotlin.gradle.plugin.hierarchy.sourceSetTreeClassifier import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPostConfigure import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinAndroidCompilationAssociator -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationJvmCompilerOptionsFromTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.AndroidCompilationSourceSetsContainerFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinJvmCompilerOptionsFactory @@ -38,10 +36,6 @@ class KotlinJvmAndroidCompilationFactory internal constructor( ), compilationAssociator = KotlinAndroidCompilationAssociator, compilationSourceSetsContainerFactory = AndroidCompilationSourceSetsContainerFactory(target, variant), - postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite( - DefaultKotlinCompilationPostConfigure, - KotlinCompilationJvmCompilerOptionsFromTargetConfigurator(target.compilerOptions) - ) ) override fun create(name: String): KotlinJvmAndroidCompilation { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilationFactory.kt index cab84eb3527..1d02b5449e8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmCompilationFactory.kt @@ -6,8 +6,6 @@ @file:Suppress("PackageDirectoryMismatch") // Old package for compatibility package org.jetbrains.kotlin.gradle.plugin.mpp -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPostConfigure -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationJvmCompilerOptionsFromTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinJvmCompilationAssociator import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinJvmCompilerOptionsFactory @@ -21,10 +19,6 @@ open class KotlinJvmCompilationFactory internal constructor( KotlinCompilationImplFactory( compilerOptionsFactory = KotlinJvmCompilerOptionsFactory, compilationAssociator = KotlinJvmCompilationAssociator, - postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite( - DefaultKotlinCompilationPostConfigure, - KotlinCompilationJvmCompilerOptionsFromTargetConfigurator(target.compilerOptions) - ) ) override val itemClass: Class diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilationFactory.kt index c0a6bfdfeb6..62a0108c6b6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilationFactory.kt @@ -8,13 +8,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions -import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPostConfigure import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPreConfigure -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationJsCompilerOptionsFromTargetConfigurator -import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationJvmCompilerOptionsFromTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinJvmCompilationAssociator import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JvmWithJavaCompilationDependencyConfigurationsFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JvmWithJavaCompilationTaskNamesContainerFactory @@ -63,16 +58,6 @@ class KotlinWithJavaCompilationFactory KotlinCompilationSourceSetsContainer(defaultSourceSet) }, - postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite( - DefaultKotlinCompilationPostConfigure, - KotlinCompilationCommonCompilerOptionsFromTargetConfigurator(target.compilerOptions) - ) ) override fun create(name: String): KotlinSharedNativeCompilation {