[Gradle] Simplify wiring target compiler options to compilations options
Now it happens as a default postConfigure action in factories for all KotlinCompilations including external one. ^KT-57292 In Progress
This commit is contained in:
committed by
Space Team
parent
3a148f97b5
commit
8469b8cbb5
-6
@@ -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(
|
||||
|
||||
+2
-1
@@ -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
|
||||
)
|
||||
+66
-39
@@ -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<KotlinJvmCompilerOptions>()
|
||||
|
||||
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<KotlinJsCompilerOptions>()
|
||||
|
||||
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<KotlinNativeCompilerOptions>()
|
||||
|
||||
KotlinNativeCompilerOptionsHelper.syncOptionsAsConvention(
|
||||
targetCompilerOptions,
|
||||
nativeCompilerOptions
|
||||
)
|
||||
|
||||
nativeCompilerOptions.moduleName.convention(
|
||||
moduleNameForCompilation(
|
||||
compilationName,
|
||||
targetCompilerOptions.moduleName
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun DecoratedKotlinCompilation<*>.configureCommonCompilerOptions(
|
||||
commonCompilerOptions: KotlinCommonCompilerOptions
|
||||
) {
|
||||
KotlinCommonCompilerOptionsHelper.syncOptionsAsConvention(
|
||||
target.compilerOptions,
|
||||
commonCompilerOptions
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun <reified T : KotlinCommonCompilerOptions> 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
|
||||
}
|
||||
}
|
||||
|
||||
-41
@@ -86,8 +86,6 @@ fun <T : DecoratedExternalKotlinTarget> 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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-6
@@ -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(
|
||||
|
||||
-6
@@ -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 {
|
||||
|
||||
-6
@@ -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<KotlinJvmCompilation>
|
||||
|
||||
-15
@@ -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<KotlinOptionsType : KotlinCommonOptions,
|
||||
compilation.compileDependencyFiles = project.filesProvider { javaSourceSet.compileClasspath }
|
||||
compilation.runtimeDependencyFiles = project.filesProvider { javaSourceSet.runtimeClasspath }
|
||||
},
|
||||
postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite(
|
||||
DefaultKotlinCompilationPostConfigure,
|
||||
if (target.platformType == KotlinPlatformType.js || target.platformType == KotlinPlatformType.common) {
|
||||
// JS/Legacy or Common/legacy (KotlinCommonPlugin) targets uses KotlinWithJavaCompilation,
|
||||
// but as they are deprecated - we are ignoring it
|
||||
null
|
||||
} else {
|
||||
KotlinCompilationJvmCompilerOptionsFromTargetConfigurator(target.compilerOptions)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
return project.objects.newInstance(
|
||||
|
||||
-6
@@ -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.KotlinCompilationNativeCompilerOptionsFromTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetInclusion
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinNativeCompilationAssociator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory
|
||||
@@ -31,10 +29,6 @@ open class KotlinNativeCompilationFactory internal constructor(
|
||||
compilationSourceSetInclusion = KotlinCompilationSourceSetInclusion(
|
||||
KotlinCompilationSourceSetInclusion.NativeAddSourcesToCompileTask
|
||||
),
|
||||
postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite(
|
||||
DefaultKotlinCompilationPostConfigure,
|
||||
KotlinCompilationNativeCompilerOptionsFromTargetConfigurator(target.compilerOptions)
|
||||
)
|
||||
)
|
||||
|
||||
override fun create(name: String): KotlinNativeCompilation {
|
||||
|
||||
-5
@@ -7,7 +7,6 @@
|
||||
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.KotlinCompilationSourceSetInclusion
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
||||
@@ -53,10 +52,6 @@ open class KotlinSharedNativeCompilationFactory 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): KotlinSharedNativeCompilation {
|
||||
|
||||
Reference in New Issue
Block a user