From 174f39aa46522223ef5a506fb825cf455f05f1d5 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sun, 26 Feb 2023 22:18:40 +0100 Subject: [PATCH] Add '-opt-in' option into Gradle compiler options DSL ^KT-53924 Fixed --- .../arguments/CommonCompilerArguments.kt | 4 + .../cli/common/arguments/GradleOption.kt | 1 + .../generators/arguments/DefaultValues.kt | 7 + .../arguments/GenerateGradleOptions.kt | 1 + .../api/kotlin-gradle-plugin-api.api | 1 + .../gradle/dsl/KotlinCommonCompilerOptions.kt | 7 + .../kotlin/gradle/CompilerOptionsIT.kt | 161 ++++++++++++++++++ .../kotlin/gradle/NewMultiplatformIT.kt | 19 ++- .../sample-lib/build.gradle | 4 + .../sample-lib/src/nativeMain/kotlin/main.kt | 5 + .../dsl/KotlinCommonCompilerOptionsDefault.kt | 5 + .../sources/DefaultLanguageSettingsBuilder.kt | 5 +- .../KotlinMetadataTargetConfigurator.kt | 13 +- .../tasks/KotlinNativeCompilerArgBuilder.kt | 2 +- .../targets/native/tasks/KotlinNativeTasks.kt | 6 +- 15 files changed, 230 insertions(+), 11 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/nativeMain/kotlin/main.kt diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt index 3f695391499..1cf0b51aff4 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt @@ -107,6 +107,10 @@ abstract class CommonCompilerArguments : CommonToolArguments() { field = value } + @GradleOption( + value = DefaultValue.EMPTY_STRING_ARRAY_DEFAULT, + gradleInputType = GradleInputTypes.INPUT + ) @Argument( value = "-opt-in", deprecatedName = "-Xopt-in", diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt index 92ee4ad7549..a97b8dbb38d 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt @@ -35,6 +35,7 @@ enum class DefaultValue { BOOLEAN_TRUE_DEFAULT, STRING_NULL_DEFAULT, EMPTY_STRING_LIST_DEFAULT, + EMPTY_STRING_ARRAY_DEFAULT, LANGUAGE_VERSIONS, API_VERSIONS, JVM_TARGET_VERSIONS, diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/DefaultValues.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/DefaultValues.kt index 286668a0ae1..95a33a3761c 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/DefaultValues.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/DefaultValues.kt @@ -39,6 +39,13 @@ open class DefaultValues( object EmptyStringListDefault : DefaultValues("emptyList()", typeOf>(), typeOf>()) + object EmptyStringArrayDefault : DefaultValues( + "emptyList()", + typeOf>(), + typeOf>(), + toArgumentConverter = ".toTypedArray()" + ) + object LanguageVersions : DefaultValues( "null", typeOf(), diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt index 60b5951e764..6c507fe0eb8 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt @@ -794,6 +794,7 @@ private val KProperty1<*, *>.gradleValues: DefaultValues DefaultValue.BOOLEAN_TRUE_DEFAULT -> DefaultValues.BooleanTrueDefault DefaultValue.STRING_NULL_DEFAULT -> DefaultValues.StringNullDefault DefaultValue.EMPTY_STRING_LIST_DEFAULT -> DefaultValues.EmptyStringListDefault + DefaultValue.EMPTY_STRING_ARRAY_DEFAULT -> DefaultValues.EmptyStringArrayDefault DefaultValue.JVM_TARGET_VERSIONS -> DefaultValues.JvmTargetVersions DefaultValue.LANGUAGE_VERSIONS -> DefaultValues.LanguageVersions DefaultValue.API_VERSIONS -> DefaultValues.ApiVersions diff --git a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api index 0adfbb05bb6..aa43ac570ec 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api +++ b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api @@ -165,6 +165,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinArtifactsE public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptions : org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerToolOptions { public abstract fun getApiVersion ()Lorg/gradle/api/provider/Property; public abstract fun getLanguageVersion ()Lorg/gradle/api/provider/Property; + public abstract fun getOptIn ()Lorg/gradle/api/provider/ListProperty; public abstract fun getUseK2 ()Lorg/gradle/api/provider/Property; } diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptions.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptions.kt index 691183e7214..cec542f7403 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptions.kt @@ -25,6 +25,13 @@ interface KotlinCommonCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCo @get:org.gradle.api.tasks.Input val languageVersion: org.gradle.api.provider.Property + /** + * Enable usages of API that requires opt-in with an opt-in requirement marker with the given fully qualified name + * Default value: emptyList() + */ + @get:org.gradle.api.tasks.Input + val optIn: org.gradle.api.provider.ListProperty + /** * Compile using experimental K2. K2 is a new compiler pipeline, no compatibility guarantees are yet provided * Default value: false diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt index 3bd536dccf7..0631342d6b2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CompilerOptionsIT.kt @@ -138,4 +138,165 @@ internal class CompilerOptionsIT : KGPBaseTest() { } } } + + @DisplayName("Should pass -opt-in from compiler options DSL") + @JvmGradlePluginTests + @GradleTest + fun passesOptInAnnotation(gradleVersion: GradleVersion) { + project( + projectName = "simpleProject", + gradleVersion = gradleVersion, + buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG) + ) { + buildGradle.appendText( + """ + | + |tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask.class).configureEach { + | compilerOptions.optIn.addAll("kotlin.RequiresOptIn", "my.CustomOptIn") + |} + """.trimMargin() + ) + + build("compileKotlin") { + val compilerArgs = output + .lineSequence() + .first { + it.contains("Kotlin compiler args:") + } + .substringAfter("Kotlin compiler args:") + + val expectedOptIn = "-opt-in kotlin.RequiresOptIn,my.CustomOptIn" + assert(compilerArgs.contains(expectedOptIn)) { + printBuildOutput() + "compiler arguments does not contain '$expectedOptIn' - actual value: $compilerArgs" + } + } + } + } + + @DisplayName("Should combine -opt-in arguments from languageSettings DSL") + @MppGradlePluginTests + @GradleTest + fun combinesOptInFromLanguageSettings(gradleVersion: GradleVersion) { + project( + projectName = "new-mpp-lib-and-app/sample-lib", + gradleVersion = gradleVersion, + buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG) + ) { + buildGradle.appendText( + //language=Groovy + """ + | + |kotlin { + | sourceSets { + | jvm6Main { + | languageSettings.optIn("my.custom.OptInAnnotation") + | } + | } + |} + | + |tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask.class).configureEach { + | compilerOptions.optIn.add("another.custom.UnderOptIn") + |} + """.trimMargin() + ) + + build("compileKotlinJvm6", forceOutput = true) { + assertTasksExecuted(":compileKotlinJvm6") + assert(output.contains("-opt-in another.custom.UnderOptIn,my.custom.OptInAnnotation")) { + printBuildOutput() + "Output does not contain '-opt-in another.custom.UnderOptIn,my.custom.OptInAnnotation'!" + } + } + } + } + + @DisplayName("Should combine -opt-in arguments from languageSettings DSL for Native") + @MppGradlePluginTests + @GradleTest + fun combinesOptInFromLanguageSettingsNative(gradleVersion: GradleVersion) { + project( + projectName = "new-mpp-lib-and-app/sample-lib", + gradleVersion = gradleVersion + ) { + buildGradle.appendText( + //language=Groovy + """ + | + |kotlin { + | sourceSets { + | nativeMain { + | languageSettings.optIn("my.custom.OptInAnnotation") + | } + | linux64Main { + | languageSettings.optIn("my.custom.OptInAnnotation") + | } + | macos64Main { + | languageSettings.optIn("my.custom.OptInAnnotation") + | } + | } + |} + | + |tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask.class).configureEach { + | compilerOptions.optIn.add("another.custom.UnderOptIn") + |} + """.trimMargin() + ) + + build("compileNativeMainKotlinMetadata") { + assertTasksExecuted(":compileNativeMainKotlinMetadata") + assert( + output.contains("-opt-in=another.custom.UnderOptIn") && + output.contains("-opt-in=my.custom.OptInAnnotation") + ) { + printBuildOutput() + "Output does not contain '-opt-in=another.custom.UnderOptIn, -opt-in=my.custom.OptInAnnotation'!" + } + } + + build("compileKotlinLinux64") { + assertTasksExecuted(":compileKotlinLinux64") + assert( + output.contains("-opt-in=another.custom.UnderOptIn") && + output.contains("-opt-in=my.custom.OptInAnnotation") + ) { + printBuildOutput() + "Output does not contain '-opt-in=another.custom.UnderOptIn, -opt-in=my.custom.OptInAnnotation'!" + } + } + } + } + + @DisplayName("Should pass -opt-in from compiler options DSL in native project") + @NativeGradlePluginTests + @GradleTest + fun passesOptInAnnotationNative(gradleVersion: GradleVersion) { + nativeProject( + projectName = "native-link-simple", + gradleVersion = gradleVersion, + ) { + buildGradle.appendText( + """ + | + |tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask.class).configureEach { + | compilerOptions.optIn.addAll("kotlin.RequiresOptIn", "my.CustomOptIn") + |} + """.trimMargin() + ) + + build("compileKotlinHost", forceOutput = true) { + val expectedOptIn = listOf("-opt-in=kotlin.RequiresOptIn", "-opt-in=my.CustomOptIn") + val optInArgs = output + .substringAfter("Arguments = [") + .substringBefore("]") + .lines() + .filter { it.trim() in expectedOptIn } + + assert(optInArgs.size == 2) { + printBuildOutput() + "compiler arguments does not contain '${expectedOptIn.joinToString()}': ${optInArgs.joinToString()}" + } + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index c71a9fe7a25..4c134d950d2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -810,11 +810,24 @@ open class NewMultiplatformIT : BaseGradleIT() { ) listOf( - "compileCommonMainKotlinMetadata", "compileKotlinJvm6", "compileKotlinNodeJs", "compileKotlinLinux64" + "compileCommonMainKotlinMetadata", "compileKotlinJvm6", "compileKotlinNodeJs" ).forEach { build(it) { assertSuccessful() assertTasksExecuted(":$it") + assertContains( + "-XXLanguage:+InlineClasses", + "-progressive", + "-opt-in kotlin.ExperimentalUnsignedTypes,kotlin.contracts.ExperimentalContracts", + "-Xno-inline" + ) + } + } + + listOf("compileNativeMainKotlinMetadata", "compileKotlinLinux64").forEach { task -> + build(task) { + assertSuccessful() + assertTasksExecuted(":$task") assertContains( "-XXLanguage:+InlineClasses", "-progressive", "-opt-in=kotlin.ExperimentalUnsignedTypes", @@ -1237,12 +1250,12 @@ open class NewMultiplatformIT : BaseGradleIT() { } assertEquals( - setOf("commonMain"), + setOf("commonMain", "nativeMain"), sourceJarSourceRoots[null] ) assertEquals(setOf("commonMain", "jvm6Main"), sourceJarSourceRoots["jvm6"]) assertEquals(setOf("commonMain", "nodeJsMain"), sourceJarSourceRoots["nodejs"]) - assertEquals(setOf("commonMain", "linux64Main"), sourceJarSourceRoots["linux64"]) + assertEquals(setOf("commonMain", "nativeMain", "linux64Main"), sourceJarSourceRoots["linux64"]) } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle index 68a095f064e..8eeddf8e051 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle @@ -96,6 +96,10 @@ kotlin { } } } + + nativeMain { dependsOn commonMain } + linux64Main { dependsOn nativeMain } + macos64Main { dependsOn nativeMain } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/nativeMain/kotlin/main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/nativeMain/kotlin/main.kt new file mode 100644 index 00000000000..1b10f85e89a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/nativeMain/kotlin/main.kt @@ -0,0 +1,5 @@ +package com.example.lib + +fun welcomeToThisWorld() { + println("Hello world") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptionsDefault.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptionsDefault.kt index b0762dcc9d4..1c579655a97 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptionsDefault.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinCommonCompilerOptionsDefault.kt @@ -15,6 +15,9 @@ internal abstract class KotlinCommonCompilerOptionsDefault @javax.inject.Inject override val languageVersion: org.gradle.api.provider.Property = objectFactory.property(org.jetbrains.kotlin.gradle.dsl.KotlinVersion::class.java) + override val optIn: org.gradle.api.provider.ListProperty = + objectFactory.listProperty(kotlin.String::class.java).convention(emptyList()) + @Deprecated(message = "Compiler flag -Xuse-k2 is deprecated; please use language version 2.0 instead", level = DeprecationLevel.WARNING) override val useK2: org.gradle.api.provider.Property = objectFactory.property(kotlin.Boolean::class.java).convention(false) @@ -23,6 +26,7 @@ internal abstract class KotlinCommonCompilerOptionsDefault @javax.inject.Inject super.fillCompilerArguments(args) args.apiVersion = apiVersion.orNull?.version args.languageVersion = languageVersion.orNull?.version + args.optIn = optIn.get().toTypedArray() args.useK2 = useK2.get() } @@ -30,6 +34,7 @@ internal abstract class KotlinCommonCompilerOptionsDefault @javax.inject.Inject super.fillDefaultValues(args) args.apiVersion = null args.languageVersion = null + args.optIn = emptyList().toTypedArray() args.useK2 = false } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt index 90d6feba6e4..163b06b2a85 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt @@ -106,6 +106,7 @@ internal fun applyLanguageSettingsToCompilerOptions( ) = with(compilerOptions) { languageVersion.convention(languageSettingsBuilder.languageVersion?.let { KotlinVersion.fromVersion(it) }) apiVersion.convention(languageSettingsBuilder.apiVersion?.let { KotlinVersion.fromVersion(it) }) + optIn.addAll(languageSettingsBuilder.optInAnnotationsInUse) val freeArgs = mutableListOf().apply { if (languageSettingsBuilder.progressiveMode) { @@ -116,10 +117,6 @@ internal fun applyLanguageSettingsToCompilerOptions( add("-XXLanguage:+$featureName") } - languageSettingsBuilder.optInAnnotationsInUse.forEach { annotationName -> - add("-opt-in=$annotationName") - } - if (languageSettingsBuilder is DefaultLanguageSettingsBuilder) { addAll(languageSettingsBuilder.freeCompilerArgs) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt index 5c7c74924b6..8150db67378 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.* import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.targets.native.internal.* import org.jetbrains.kotlin.gradle.tasks.* +import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.getResolvedArtifactsCompat import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -81,8 +82,7 @@ class KotlinMetadataTargetConfigurator : compileKotlinTaskProvider.configure { it.onlyIf { isCompatibilityMetadataVariantEnabled } } } - - val allMetadataJar = target.project.tasks.withType().named(ALL_METADATA_JAR_NAME) + val allMetadataJar = target.project.tasks.named(ALL_METADATA_JAR_NAME) createMetadataCompilationsForCommonSourceSets(target, allMetadataJar) configureProjectStructureMetadataGeneration(target.project, allMetadataJar) @@ -319,6 +319,15 @@ class KotlinMetadataTargetConfigurator : compileDependencyFiles = project.files() } } + + target.project.runOnceAfterEvaluated("Sync common compilation language settings to compiler options") { + target.compilations.all { compilation -> + applyLanguageSettingsToCompilerOptions( + compilation.defaultSourceSet.languageSettings, + compilation.compilerOptions.options + ) + } + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt index c64b82cf662..fe1fa3f3d49 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeCompilerArgBuilder.kt @@ -180,7 +180,6 @@ internal fun buildKotlinNativeCompileCommonArgs( languageSettings.run { addKey("-progressive", progressiveMode) enabledLanguageFeatures.forEach { add("-XXLanguage:+$it") } - optInAnnotationsInUse.forEach { add("-opt-in=$it") } } addArgIfNotNull("-language-version", compilerOptions.languageVersion.orNull?.version) @@ -188,6 +187,7 @@ internal fun buildKotlinNativeCompileCommonArgs( addKey("-Werror", compilerOptions.allWarningsAsErrors.get()) addKey("-nowarn", compilerOptions.suppressWarnings.get()) addKey("-verbose", compilerOptions.verbose.get()) + compilerOptions.optIn.get().forEach { add("-opt-in=$it") } addAll(compilerOptions.freeCompilerArgs.get()) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index fea8bb49917..e7703f90fd4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -379,8 +379,12 @@ internal constructor( val enabledLanguageFeatures: Set @Input get() = languageSettings.enabledLanguageFeatures + @Deprecated( + message = "Replaced with compilerOptions.optIn", + replaceWith = ReplaceWith("compilerOptions.optIn") + ) val optInAnnotationsInUse: Set - @Input get() = languageSettings.optInAnnotationsInUse + @Internal get() = compilerOptions.optIn.get().toSet() // endregion. // region Kotlin options