[Gradle] Introduce compilerOptions for Kotlin metadata target
KotlinMetadataTarget now exposes experimental compiler options DSL that are passed as a convention into target compilations compiler options. ^KT-57292 In Progress
This commit is contained in:
committed by
Space Team
parent
a40e59306a
commit
c1e26bfa47
+7
-1
@@ -6,7 +6,9 @@
|
||||
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
|
||||
@@ -43,7 +45,11 @@ class KotlinCommonCompilationFactory internal constructor(
|
||||
Metadata compilations are created *because* of a pre-existing SourceSet.
|
||||
We therefore can create the container inline
|
||||
*/
|
||||
compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) }
|
||||
compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) },
|
||||
postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite(
|
||||
DefaultKotlinCompilationPostConfigure,
|
||||
KotlinCompilationCommonCompilerOptionsFromTargetConfigurator(target.compilerOptions)
|
||||
)
|
||||
)
|
||||
|
||||
override fun create(name: String): KotlinCommonCompilation = target.project.objects.newInstance(
|
||||
|
||||
+20
-1
@@ -5,12 +5,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptionsDefault
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||
import javax.inject.Inject
|
||||
|
||||
abstract class KotlinMetadataTarget @Inject constructor(
|
||||
@@ -30,7 +35,21 @@ abstract class KotlinMetadataTarget @Inject constructor(
|
||||
Metadata Target does not have a KotlinTargetComponent on it's own.
|
||||
Responsibility is shifted to the root KotlinSoftwareComponent
|
||||
*/
|
||||
emptySet<KotlinTargetComponent>()
|
||||
emptySet()
|
||||
}
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
override val compilerOptions: KotlinCommonCompilerOptions = project.objects
|
||||
.newInstance<KotlinCommonCompilerOptionsDefault>()
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
fun compilerOptions(configure: KotlinCommonCompilerOptions.() -> Unit) {
|
||||
configure(compilerOptions)
|
||||
}
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
fun compilerOptions(configure: Action<KotlinCommonCompilerOptions>) {
|
||||
configure.execute(compilerOptions)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -68,3 +68,15 @@ internal class KotlinCompilationJsCompilerOptionsFromTargetConfigurator(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
internal class KotlinCompilationCommonCompilerOptionsFromTargetConfigurator(
|
||||
private val targetCompilerOptions: KotlinCommonCompilerOptions
|
||||
) : KotlinCompilationImplFactory.PostConfigure {
|
||||
override fun configure(compilation: DecoratedKotlinCompilation<*>) {
|
||||
val commonCompilerOptions = compilation.compilerOptions.options
|
||||
KotlinCommonCompilerOptionsHelper.syncOptionsAsConvention(
|
||||
targetCompilerOptions,
|
||||
commonCompilerOptions
|
||||
)
|
||||
}
|
||||
}
|
||||
+7
-3
@@ -7,6 +7,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.KotlinCompilationSourceSetInclusion
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
||||
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinNati
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
|
||||
open class KotlinSharedNativeCompilationFactory internal constructor(
|
||||
override val target: KotlinMetadataTarget,
|
||||
final override val target: KotlinMetadataTarget,
|
||||
private val konanTargets: Set<KonanTarget>,
|
||||
private val defaultSourceSet: KotlinSourceSet
|
||||
) : KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
||||
@@ -51,10 +52,13 @@ open class KotlinSharedNativeCompilationFactory internal constructor(
|
||||
Metadata compilations are created *because* of a pre-existing SourceSet.
|
||||
We therefore can create the container inline
|
||||
*/
|
||||
compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) }
|
||||
compilationSourceSetsContainerFactory = { _, _ -> KotlinCompilationSourceSetsContainer(defaultSourceSet) },
|
||||
postConfigureAction = KotlinCompilationImplFactory.PostConfigure.composite(
|
||||
DefaultKotlinCompilationPostConfigure,
|
||||
KotlinCompilationCommonCompilerOptionsFromTargetConfigurator(target.compilerOptions)
|
||||
)
|
||||
)
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
override fun create(name: String): KotlinSharedNativeCompilation {
|
||||
return target.project.objects.newInstance(
|
||||
itemClass, konanTargets.toList(), compilationImplFactory.create(target, name)
|
||||
|
||||
+58
@@ -6,9 +6,11 @@
|
||||
package org.jetbrains.kotlin.gradle.unitTests
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
@@ -120,6 +122,58 @@ class ProjectCompilerOptionsTests {
|
||||
assertEquals(false, project.kotlinJsTask("compileKotlinJs").compilerOptions.suppressWarnings.get())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun metadataTargetDsl() {
|
||||
val project = buildProjectWithMPP {
|
||||
with(multiplatformExtension) {
|
||||
linuxX64()
|
||||
iosX64()
|
||||
iosArm64()
|
||||
|
||||
targets.named("metadata", KotlinMetadataTarget::class.java) {
|
||||
it.compilerOptions {
|
||||
progressiveMode.set(true)
|
||||
}
|
||||
}
|
||||
|
||||
applyDefaultHierarchyTemplate()
|
||||
}
|
||||
}
|
||||
|
||||
project.evaluate()
|
||||
|
||||
assertEquals(true, project.kotlinCommonTask("compileKotlinMetadata").compilerOptions.progressiveMode.get())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun metadataTaskOptionsOverrideTargetOptions() {
|
||||
val project = buildProjectWithMPP {
|
||||
tasks.withType<KotlinCompilationTask<*>>().configureEach {
|
||||
if (it.name == "compileKotlinMetadata") {
|
||||
it.compilerOptions.progressiveMode.set(false)
|
||||
}
|
||||
}
|
||||
|
||||
with(multiplatformExtension) {
|
||||
linuxX64()
|
||||
iosX64()
|
||||
iosArm64()
|
||||
|
||||
targets.named("metadata", KotlinMetadataTarget::class.java) {
|
||||
it.compilerOptions {
|
||||
progressiveMode.set(true)
|
||||
}
|
||||
}
|
||||
|
||||
applyDefaultHierarchyTemplate()
|
||||
}
|
||||
}
|
||||
|
||||
project.evaluate()
|
||||
|
||||
assertEquals(false, project.kotlinCommonTask("compileKotlinMetadata").compilerOptions.progressiveMode.get())
|
||||
}
|
||||
|
||||
private fun Project.kotlinNativeTask(name: String): KotlinCompilationTask<KotlinNativeCompilerOptions> = tasks
|
||||
.named<KotlinCompilationTask<KotlinNativeCompilerOptions>>(name)
|
||||
.get()
|
||||
@@ -127,4 +181,8 @@ class ProjectCompilerOptionsTests {
|
||||
private fun Project.kotlinJsTask(name: String): KotlinCompilationTask<KotlinJsCompilerOptions> = tasks
|
||||
.named<KotlinCompilationTask<KotlinJsCompilerOptions>>(name)
|
||||
.get()
|
||||
|
||||
private fun Project.kotlinCommonTask(name: String): KotlinCompilationTask<KotlinCommonCompilerOptions> = tasks
|
||||
.named<KotlinCompilationTask<KotlinCommonCompilerOptions>>(name)
|
||||
.get()
|
||||
}
|
||||
Reference in New Issue
Block a user