From 8e882ea797106f00085f8bc02e03a5c564952a59 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 14 Jun 2023 12:18:58 +0200 Subject: [PATCH] K2 plugins: create companions with same expect/actual as their owners #KT-59299 Fixed --- .../kotlin/fir/plugin/ClassBuildingContext.kt | 2 ++ .../testData/boxIr/expectActualSealedClass.kt | 25 +++++++++++++++++++ ...tionFirLightTreeBlackBoxTestGenerated.java | 6 +++++ .../SerializationIrBoxTestGenerated.java | 6 +++++ 4 files changed, 39 insertions(+) create mode 100644 plugins/kotlinx-serialization/testData/boxIr/expectActualSealedClass.kt diff --git a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt index e2a459221b1..22b9b61aaf3 100644 --- a/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt +++ b/compiler/fir/plugin-utils/src/org/jetbrains/kotlin/fir/plugin/ClassBuildingContext.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef import org.jetbrains.kotlin.fir.declarations.builder.buildOuterClassTypeParameterRef import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.origin +import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirExtension @@ -159,6 +160,7 @@ public fun FirExtension.createCompanionObject( modality = Modality.FINAL status { isCompanion = true + isExpect = owner.isExpect } }.build() } diff --git a/plugins/kotlinx-serialization/testData/boxIr/expectActualSealedClass.kt b/plugins/kotlinx-serialization/testData/boxIr/expectActualSealedClass.kt new file mode 100644 index 00000000000..f3b1f202a30 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/boxIr/expectActualSealedClass.kt @@ -0,0 +1,25 @@ +// LANGUAGE: +MultiPlatformProjects +// TARGET_BACKEND: JVM_IR +// IGNORE_BACKEND_K1: JVM_IR +// IGNORE REASON: multimodule MPP tests are not supported for K1 +// WITH_STDLIB + +// MODULE: m1-common +// FILE: common.kt + +import kotlinx.serialization.* + +@Serializable +expect sealed class Some + +fun s(): KSerializer = Some.Companion.serializer() + +// MODULE: m2-jvm()()(m1-common) +// FILE: jvm.kt + +import kotlinx.serialization.* + +@Serializable +actual sealed class Some + +fun box(): String = if (s().descriptor.toString() == Some.serializer().descriptor.toString()) "OK" else "fail" diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java index 3de8f0ac03a..998435a8de3 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java @@ -93,6 +93,12 @@ public class SerializationFirLightTreeBlackBoxTestGenerated extends AbstractSeri runTest("plugins/kotlinx-serialization/testData/boxIr/expectActual.kt"); } + @Test + @TestMetadata("expectActualSealedClass.kt") + public void testExpectActualSealedClass() throws Exception { + runTest("plugins/kotlinx-serialization/testData/boxIr/expectActualSealedClass.kt"); + } + @Test @TestMetadata("externalSerialierJava.kt") public void testExternalSerialierJava() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java index 3279019cd55..30ed8b023dc 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java @@ -91,6 +91,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT runTest("plugins/kotlinx-serialization/testData/boxIr/expectActual.kt"); } + @Test + @TestMetadata("expectActualSealedClass.kt") + public void testExpectActualSealedClass() throws Exception { + runTest("plugins/kotlinx-serialization/testData/boxIr/expectActualSealedClass.kt"); + } + @Test @TestMetadata("externalSerialierJava.kt") public void testExternalSerialierJava() throws Exception {