[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
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
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.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.KotlinCompilationSourceSetInclusion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.DefaultKotlinCompilationDependencyConfigurationsFactory
|
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.
|
Metadata compilations are created *because* of a pre-existing SourceSet.
|
||||||
We therefore can create the container inline
|
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(
|
override fun create(name: String): KotlinCommonCompilation = target.project.objects.newInstance(
|
||||||
|
|||||||
+20
-1
@@ -5,12 +5,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.Project
|
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.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent
|
||||||
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
|
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
|
||||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
abstract class KotlinMetadataTarget @Inject constructor(
|
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.
|
Metadata Target does not have a KotlinTargetComponent on it's own.
|
||||||
Responsibility is shifted to the root KotlinSoftwareComponent
|
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
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
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.DefaultKotlinCompilationFriendPathsResolver
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetInclusion
|
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.KotlinCompilationSourceSetsContainer
|
||||||
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinNati
|
|||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
|
|
||||||
open class KotlinSharedNativeCompilationFactory internal constructor(
|
open class KotlinSharedNativeCompilationFactory internal constructor(
|
||||||
override val target: KotlinMetadataTarget,
|
final override val target: KotlinMetadataTarget,
|
||||||
private val konanTargets: Set<KonanTarget>,
|
private val konanTargets: Set<KonanTarget>,
|
||||||
private val defaultSourceSet: KotlinSourceSet
|
private val defaultSourceSet: KotlinSourceSet
|
||||||
) : KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
) : KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
||||||
@@ -51,10 +52,13 @@ open class KotlinSharedNativeCompilationFactory internal constructor(
|
|||||||
Metadata compilations are created *because* of a pre-existing SourceSet.
|
Metadata compilations are created *because* of a pre-existing SourceSet.
|
||||||
We therefore can create the container inline
|
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 {
|
override fun create(name: String): KotlinSharedNativeCompilation {
|
||||||
return target.project.objects.newInstance(
|
return target.project.objects.newInstance(
|
||||||
itemClass, konanTargets.toList(), compilationImplFactory.create(target, name)
|
itemClass, konanTargets.toList(), compilationImplFactory.create(target, name)
|
||||||
|
|||||||
+58
@@ -6,9 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.gradle.unitTests
|
package org.jetbrains.kotlin.gradle.unitTests
|
||||||
|
|
||||||
import org.gradle.api.Project
|
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.KotlinJsCompilerOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeCompilerOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
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.KotlinCompilationTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||||
@@ -120,6 +122,58 @@ class ProjectCompilerOptionsTests {
|
|||||||
assertEquals(false, project.kotlinJsTask("compileKotlinJs").compilerOptions.suppressWarnings.get())
|
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
|
private fun Project.kotlinNativeTask(name: String): KotlinCompilationTask<KotlinNativeCompilerOptions> = tasks
|
||||||
.named<KotlinCompilationTask<KotlinNativeCompilerOptions>>(name)
|
.named<KotlinCompilationTask<KotlinNativeCompilerOptions>>(name)
|
||||||
.get()
|
.get()
|
||||||
@@ -127,4 +181,8 @@ class ProjectCompilerOptionsTests {
|
|||||||
private fun Project.kotlinJsTask(name: String): KotlinCompilationTask<KotlinJsCompilerOptions> = tasks
|
private fun Project.kotlinJsTask(name: String): KotlinCompilationTask<KotlinJsCompilerOptions> = tasks
|
||||||
.named<KotlinCompilationTask<KotlinJsCompilerOptions>>(name)
|
.named<KotlinCompilationTask<KotlinJsCompilerOptions>>(name)
|
||||||
.get()
|
.get()
|
||||||
|
|
||||||
|
private fun Project.kotlinCommonTask(name: String): KotlinCompilationTask<KotlinCommonCompilerOptions> = tasks
|
||||||
|
.named<KotlinCompilationTask<KotlinCommonCompilerOptions>>(name)
|
||||||
|
.get()
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user