diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt index 8efc7e16b00..91e75b41b2b 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt @@ -474,6 +474,9 @@ The default value is 1.""" it[AnalysisFlags.optIn] = optInList + listOf("kotlin.ExperimentalUnsignedTypes") if (printIr) phasesToDumpAfter = arrayOf("ALL") + if (metadataKlib) { + it[AnalysisFlags.metadataCompilation] = true + } } override fun checkIrSupport(languageVersionSettings: LanguageVersionSettings, collector: MessageCollector) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt index a46a9022464..73e1c8bd88e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/K2Tests.kt @@ -9,6 +9,7 @@ import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.condition.OS import kotlin.test.Ignore @Disabled("Used for local testing only") @@ -208,4 +209,32 @@ class CustomK2Tests : KGPBaseTest() { } } } + + @GradleTest + @DisplayName("Native metadata compilation with constant expressions (KT-63835)") + fun nativeMetadataCompilationWithConstantExpressions(gradleVersion: GradleVersion) { + project("k2-native-metadata-compilation-with-constant-expressions", gradleVersion) { + build("compileCommonMainKotlinMetadata") { + assertTasksExecuted(":compileCommonMainKotlinMetadata") + } + } + } +} + +@NativeGradlePluginTests +@OsCondition(supportedOn = [OS.MAC], enabledOnCI = [OS.MAC]) +@DisplayName("K2: custom MacOS tests") +class CustomK2MacOSTests : KGPBaseTest() { + override val defaultBuildOptions: BuildOptions get() = super.defaultBuildOptions.copyEnsuringK2() + + @GradleTest + @DisplayName("Universal metadata compilation with constant expressions (KT-63835)") + fun universalMetadataCompilationWithConstantExpressions(gradleVersion: GradleVersion) { + project("k2-universal-metadata-compilation-with-constant-expressions", gradleVersion) { + build("assemble") { + assertTasksExecuted(":assemble") + assertTasksExecuted(":compileIosMainKotlinMetadata") + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/build.gradle.kts new file mode 100644 index 00000000000..ff0583ae877 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/build.gradle.kts @@ -0,0 +1,19 @@ +// ISSUE: KT-63835 + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + applyDefaultHierarchyTemplate() + + linuxX64() + + macosArm64() + macosX64() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/src/commonMain/kotlin/MainCommon.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/src/commonMain/kotlin/MainCommon.kt new file mode 100644 index 00000000000..bb8134f0da7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/src/commonMain/kotlin/MainCommon.kt @@ -0,0 +1,6 @@ +const val x1: String = "common" +const val y1: String = "Main" + +@Deprecated(message = x1 + y1) +fun mainCommon() { +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/src/iosMain/kotlin/MainIos.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/src/iosMain/kotlin/MainIos.kt new file mode 100644 index 00000000000..bbc88bad0ca --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-native-metadata-compilation-with-constant-expressions/src/iosMain/kotlin/MainIos.kt @@ -0,0 +1,6 @@ +const val x2: String = "ios" +const val y2: String = "Main" + +@Deprecated(message = x2 + y2) +fun mainIos() { +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/build.gradle.kts new file mode 100644 index 00000000000..24c162472b8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/build.gradle.kts @@ -0,0 +1,26 @@ +// ISSUE: KT-63835 + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + applyDefaultHierarchyTemplate() + + jvm() + + js(IR) + + linuxX64() + + macosArm64() + macosX64() + + iosArm64() + iosSimulatorArm64() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/commonMain/kotlin/MainCommon.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/commonMain/kotlin/MainCommon.kt new file mode 100644 index 00000000000..0916a1ed3a7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/commonMain/kotlin/MainCommon.kt @@ -0,0 +1,6 @@ +const val x1: String = "common" +const val y1: String = "Main" + +@Deprecated(message = x1 + y1) +fun main1() { +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/iosMain/kotlin/MainIos.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/iosMain/kotlin/MainIos.kt new file mode 100644 index 00000000000..36f91ac2e0d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/iosMain/kotlin/MainIos.kt @@ -0,0 +1,6 @@ +const val x2: String = "ios" +const val y2: String = "Main" + +@Deprecated(message = x2 + y2) +fun main2() { +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/jsMain/kotlin/MainJs.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/jsMain/kotlin/MainJs.kt new file mode 100644 index 00000000000..41474b95be4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/jsMain/kotlin/MainJs.kt @@ -0,0 +1,6 @@ +const val x3: String = "js" +const val y3: String = "Main" + +@Deprecated(message = x3 + y3) +fun main3() { +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/jvmMain/kotlin/MainJvm.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/jvmMain/kotlin/MainJvm.kt new file mode 100644 index 00000000000..b2ff6caea36 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/k2-universal-metadata-compilation-with-constant-expressions/src/jvmMain/kotlin/MainJvm.kt @@ -0,0 +1,6 @@ +const val x4: String = "jvm" +const val y4: String = "Main" + +@Deprecated(message = x4 + y4) +fun main4() { +} \ No newline at end of file