[Gradle] Deprecate KotlinCompilation.compilerOptions

Users quite often confuse that compilerOptions in KotlinCompilation is
actually the same object in the Kotlin compilation task. We want to make
 our API more straightforward and remove this ambiguity by proposing to
 use task compiler options DSL.

^KT-65568 Verification Pending
This commit is contained in:
Yahor Berdnikau
2024-02-12 16:43:12 +01:00
committed by Space Team
parent 5df05d5797
commit d662f72d07
24 changed files with 71 additions and 58 deletions
+6 -6
View File
@@ -92,22 +92,22 @@ kotlin {
browser {}
}
nodejs {}
compilations["main"].compilerOptions.configure {
freeCompilerArgs.add("-Xir-module-name=kotlin-test")
compilations["main"].compileTaskProvider.configure {
compilerOptions.freeCompilerArgs.add("-Xir-module-name=kotlin-test")
}
}
@OptIn(ExperimentalWasmDsl::class)
wasmJs {
nodejs()
compilations["main"].compilerOptions.configure {
freeCompilerArgs.add("-Xir-module-name=kotlin-test")
compilations["main"].compileTaskProvider.configure {
compilerOptions.freeCompilerArgs.add("-Xir-module-name=kotlin-test")
}
}
@OptIn(ExperimentalWasmDsl::class)
wasmWasi {
nodejs()
compilations["main"].compilerOptions.configure {
freeCompilerArgs.add("-Xir-module-name=kotlin-test")
compilations["main"].compileTaskProvider.configure {
compilerOptions.freeCompilerArgs.add("-Xir-module-name=kotlin-test")
}
}
@@ -59,6 +59,10 @@ interface KotlinCompilation<out T : KotlinCommonOptionsDeprecated> : Named,
val compileKotlinTaskName: String
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("DEPRECATION")
val compilerOptions: HasCompilerOptions<*>
@@ -17,6 +17,10 @@ class PrototypeAndroidCompilation(delegate: Delegate) : DecoratedExternalKotlinC
override val kotlinOptions: KotlinCommonOptions
get() = super.kotlinOptions as KotlinJvmOptions
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("UNCHECKED_CAST")
override val compilerOptions: HasCompilerOptions<KotlinJvmCompilerOptions>
get() = super.compilerOptions as HasCompilerOptions<KotlinJvmCompilerOptions>
@@ -57,7 +57,7 @@ internal sealed class KotlinCompilationInfo {
override val moduleName: String
get() = origin.moduleNameForCompilation().get()
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION", "DEPRECATION")
override val compilerOptions: DeprecatedHasCompilerOptions<*>
get() = origin.compilerOptions
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.moduleNameForCompilation
internal object KotlinCompilationCompilerOptionsFromTargetConfigurator : KotlinCompilationImplFactory.PostConfigure {
override fun configure(compilation: DecoratedKotlinCompilation<*>) {
when (val compilationCompilerOptions = compilation.compilerOptions.options) {
when (@Suppress("DEPRECATION") val compilationCompilerOptions = compilation.compilerOptions.options) {
is KotlinJvmCompilerOptions -> compilation.configureJvmCompilerOptions(compilationCompilerOptions)
is KotlinJsCompilerOptions -> compilation.configureJsCompilerOptions(compilationCompilerOptions)
is KotlinNativeCompilerOptions -> {
@@ -172,6 +172,10 @@ internal class KotlinCompilationImpl constructor(
override val kotlinOptions: KotlinCommonOptions
get() = params.kotlinOptions
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
override val compilerOptions: DeprecatedHasCompilerOptions<*>
get() = params.compilerOptions
@@ -35,6 +35,7 @@ internal object KotlinCompilationLanguageSettingsConfigurator : KotlinCompilatio
return
}
@Suppress("DEPRECATION")
languageSettingsBuilder
.compilationCompilerOptions
.complete(compilation.compilerOptions.options)
@@ -33,6 +33,7 @@ internal val KotlinCreateNativeCompileTasksSideEffect = KotlinCompilationSideEff
val kotlinNativeCompile = project.registerTask<KotlinNativeCompile>(
compilation.compileKotlinTaskName,
@Suppress("DEPRECATION")
listOf(compilationInfo, compilation.compilerOptions.options)
) { task ->
task.group = BasePlugin.BUILD_GROUP
@@ -188,7 +188,7 @@ internal class AndroidProjectHandler(
task.destinationDirectory.set(project.layout.buildDirectory.dir("tmp/kotlin-classes/$variantDataName"))
task.description = "Compiles the $variantDataName kotlin."
}
val kotlinTask = tasksProvider.registerKotlinJVMTask(
@Suppress("DEPRECATION") val kotlinTask = tasksProvider.registerKotlinJVMTask(
project,
compilation.compileKotlinTaskName,
compilation.compilerOptions.options,
@@ -31,18 +31,14 @@ open class KotlinJsCompilation @Inject internal constructor(
) : DeprecatedAbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(compilation),
HasBinaries<KotlinJsBinaryContainer> {
@Suppress("UNCHECKED_CAST")
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("UNCHECKED_CAST", "DEPRECATION")
final override val compilerOptions: DeprecatedHasCompilerOptions<KotlinJsCompilerOptions>
get() = compilation.compilerOptions as DeprecatedHasCompilerOptions<KotlinJsCompilerOptions>
internal fun compilerOptions(configure: KotlinJsCompilerOptions.() -> Unit) {
compilerOptions.configure(configure)
}
internal fun compilerOptions(configure: Action<KotlinJsCompilerOptions>) {
configure.execute(compilerOptions.options)
}
override val binaries: KotlinJsBinaryContainer =
compilation.target.project.objects.newInstance(
KotlinJsBinaryContainer::class.java,
@@ -107,6 +103,7 @@ open class KotlinJsCompilation @Inject internal constructor(
val KotlinJsCompilation.fileExtension: Provider<String>
get() {
val isWasm = platformType == KotlinPlatformType.wasm
@Suppress("DEPRECATION")
return compilerOptions.options.moduleKind.map { moduleKind ->
if (isWasm || moduleKind == JsModuleKind.MODULE_ES) {
"mjs"
@@ -57,6 +57,7 @@ abstract class KotlinJsIrSubTarget(
internal fun configure() {
target.compilations.all {
val npmProject = it.npmProject
@Suppress("DEPRECATION")
it.compilerOptions.options.freeCompilerArgs.add("$PER_MODULE_OUTPUT_NAME=${npmProject.name}")
}
@@ -6,7 +6,6 @@
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Action
import org.gradle.api.file.FileCollection
import org.gradle.api.provider.Property
import org.gradle.api.tasks.TaskProvider
@@ -27,17 +26,14 @@ open class KotlinJvmAndroidCompilation @Inject internal constructor(
override val target: KotlinAndroidTarget = compilation.target as KotlinAndroidTarget
@Suppress("DEPRECATION")
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
override val compilerOptions: DeprecatedHasCompilerOptions<KotlinJvmCompilerOptions> =
compilation.compilerOptions.castCompilerOptionsType()
internal fun compilerOptions(configure: KotlinJvmCompilerOptions.() -> Unit) {
compilerOptions.configure(configure)
}
internal fun compilerOptions(configure: Action<KotlinJvmCompilerOptions>) {
configure.execute(compilerOptions.options)
}
internal val testedVariantArtifacts: Property<FileCollection> =
compilation.project.objects.property(FileCollection::class.java)
@@ -6,7 +6,6 @@
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Action
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider
@@ -33,17 +32,14 @@ open class KotlinJvmCompilation @Inject internal constructor(
final override val target: KotlinJvmTarget = compilation.target as KotlinJvmTarget
@Suppress("DEPRECATION")
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
override val compilerOptions: DeprecatedHasCompilerOptions<KotlinJvmCompilerOptions> =
compilation.compilerOptions.castCompilerOptionsType()
internal fun compilerOptions(configure: KotlinJvmCompilerOptions.() -> Unit) {
compilerOptions.configure(configure)
}
internal fun compilerOptions(configure: Action<KotlinJvmCompilerOptions>) {
configure.execute(compilerOptions.options)
}
@Deprecated("Replaced with compileTaskProvider", replaceWith = ReplaceWith("compileTaskProvider"))
@Suppress("UNCHECKED_CAST", "DEPRECATION")
override val compileKotlinTaskProvider: TaskProvider<out org.jetbrains.kotlin.gradle.tasks.KotlinCompile>
@@ -62,6 +62,7 @@ class KotlinJvmWithJavaTargetPreset(
}
target.compilations.configureEach {
@Suppress("DEPRECATION")
it.compilerOptions.options.moduleName.convention(
it.moduleNameForCompilation()
)
@@ -6,7 +6,6 @@
@file:Suppress("PackageDirectoryMismatch", "UNCHECKED_CAST") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Action
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile
@@ -25,18 +24,14 @@ open class KotlinWithJavaCompilation<KotlinOptionsType : KotlinCommonOptions, CO
) : DeprecatedAbstractKotlinCompilationToRunnableFiles<KotlinOptionsType>(compilation),
DeprecatedKotlinCompilationWithResources<KotlinOptionsType> {
@Suppress("UNCHECKED_CAST")
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("UNCHECKED_CAST", "DEPRECATION")
override val compilerOptions: DeprecatedHasCompilerOptions<CO> =
compilation.compilerOptions as DeprecatedHasCompilerOptions<CO>
internal fun compilerOptions(configure: CO.() -> Unit) {
compilerOptions.configure(configure)
}
internal fun compilerOptions(configure: Action<CO>) {
configure.execute(compilerOptions.options)
}
val compileJavaTaskProvider: TaskProvider<out JavaCompile>
get() = target.project.tasks.withType(JavaCompile::class.java).named(javaSourceSet.compileJavaTaskName)
@@ -75,7 +75,7 @@ private fun Project.createLinkTask(binary: NativeBinary) {
// workaround for too late compilation compilerOptions creation
// which leads to not able run project.afterEvaluate because of wrong context
// this afterEvaluate comes from NativeCompilerOptions
val compilationCompilerOptions = binary.compilation.compilerOptions
@Suppress("DEPRECATION") val compilationCompilerOptions = binary.compilation.compilerOptions
val konanPropertiesBuildService = KonanPropertiesBuildService.registerIfAbsent(project)
val xcodeVersionTask = XcodeVersionTask.locateOrRegister(project)
val linkTask = registerTask<KotlinNativeLink>(
@@ -40,18 +40,14 @@ abstract class AbstractKotlinNativeCompilation internal constructor(
override val compileTaskProvider: TaskProvider<KotlinNativeCompile>
get() = compilation.compileTaskProvider as TaskProvider<KotlinNativeCompile>
@Suppress("UNCHECKED_CAST")
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("UNCHECKED_CAST", "DEPRECATION")
override val compilerOptions: DeprecatedHasCompilerOptions<KotlinNativeCompilerOptions>
get() = compilation.compilerOptions as DeprecatedHasCompilerOptions<KotlinNativeCompilerOptions>
internal fun compilerOptions(configure: KotlinNativeCompilerOptions.() -> Unit) {
compilerOptions.configure(configure)
}
internal fun compilerOptions(configure: Action<KotlinNativeCompilerOptions>) {
configure.execute(compilerOptions.options)
}
internal val useGenericPluginArtifact: Boolean
get() = project.nativeUseEmbeddableCompilerJar
}
@@ -63,6 +59,11 @@ open class KotlinNativeCompilation @Inject internal constructor(
final override val target: KotlinNativeTarget
get() = compilation.target as KotlinNativeTarget
@Suppress("DEPRECATION")
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
override val compilerOptions: NativeCompilerOptions
get() = super.compilerOptions as NativeCompilerOptions
@@ -34,7 +34,7 @@ internal class KaptGenerateStubsConfig : BaseKotlinCompileConfig<KaptGenerateStu
configureTask { kaptGenerateStubsTask ->
// Syncing compiler options from related KotlinJvmCompile task
val jvmCompilerOptions = compilation.compilerOptions.options as KotlinJvmCompilerOptions
@Suppress("DEPRECATION") val jvmCompilerOptions = compilation.compilerOptions.options as KotlinJvmCompilerOptions
KotlinJvmCompilerOptionsHelper.syncOptionsAsConvention(
from = jvmCompilerOptions,
into = kaptGenerateStubsTask.compilerOptions
@@ -142,7 +142,9 @@ class BuildKotlinToolingMetadataTest {
project.plugins.apply("kotlin-multiplatform")
val kotlin = multiplatformExtension
val jvm = kotlin.jvm()
@Suppress("DEPRECATION")
jvm.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).compilerOptions.options.jvmTarget.set(JvmTarget.JVM_12)
@Suppress("DEPRECATION")
jvm.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME).compilerOptions.options.jvmTarget.set(JvmTarget.JVM_10)
assertEquals(
@@ -105,6 +105,7 @@ class K2MultiplatformStructureTest {
/* Enable K2 if necessary */
if (KotlinVersion.DEFAULT < KotlinVersion.KOTLIN_2_0) {
@Suppress("Deprecation")
compilation.compilerOptions.options.languageVersion.set(KotlinVersion.KOTLIN_2_0)
}
@@ -97,6 +97,7 @@ class KotlinCompileArgumentsTest {
kotlin.jvm()
val jvmMainCompilation = kotlin.jvm().compilations.getByName("main")
@Suppress("DEPRECATION")
jvmMainCompilation.compilerOptions.options.languageVersion.set(KotlinVersion.KOTLIN_2_0)
project.evaluate()
@@ -116,6 +117,7 @@ class KotlinCompileArgumentsTest {
val kotlin = project.multiplatformExtension
kotlin.jvm()
val compilation = kotlin.jvm().compilations.main
@Suppress("DEPRECATION")
compilation.compilerOptions.options.languageVersion.set(KotlinVersion.KOTLIN_2_0)
val compileTask = compilation.compileTaskProvider.get() as KotlinCompile
@@ -25,6 +25,7 @@ class KotlinNativeCompilationModuleNameTest {
project.evaluate()
@Suppress("DEPRECATION")
assertEquals(
PROJECT_NAME,
linuxX64Target.compilations.main.compilerOptions.options.moduleName.get(),
@@ -43,6 +44,7 @@ class KotlinNativeCompilationModuleNameTest {
project.evaluate()
@Suppress("DEPRECATION")
assertEquals(
"${PROJECT_NAME}_test",
linuxX64Target.compilations.test.compilerOptions.options.moduleName.get(),
@@ -66,7 +68,7 @@ class KotlinNativeCompilationModuleNameTest {
project.evaluate()
val compilerOptions = project
@Suppress("DEPRECATION") val compilerOptions = project
.multiplatformExtension
.metadata()
.compilations
@@ -92,6 +92,7 @@ class KotlinNativeCompileArgumentsTest {
val kotlin = project.multiplatformExtension
val linuxX64Target = kotlin.linuxX64()
linuxX64Target.compilations.all {
@Suppress("DEPRECATION")
it.compilerOptions.options.apply {
optIn.add("my.OptIn")
optIn.add("my.other.OptIn")
@@ -14,6 +14,10 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetDescriptor.TargetFactory
class FakeCompilation(delegate: Delegate) : DecoratedExternalKotlinCompilation(delegate) {
@Deprecated(
"To configure compilation compiler options use 'compileTaskProvider':\ncompilation.compileTaskProvider.configure{\n" +
" compilerOptions {}\n}"
)
@Suppress("UNCHECKED_CAST", "DEPRECATION")
override val compilerOptions: HasCompilerOptions<KotlinJvmCompilerOptions>
get() = super.compilerOptions as HasCompilerOptions<KotlinJvmCompilerOptions>