From ce2880614bf9993ae28e647c361c748abe675e13 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 20 Dec 2022 12:04:20 +0200 Subject: [PATCH] [FIR2IR] Run constant evaluation before IR extensions Test `constValInSerialName` in serialization still fails but because of different reason ^KT-54994 Fixed --- .../kotlin/fir/backend/Fir2IrConverter.kt | 4 ++-- .../testData/boxIr/constValInSerialName.kt | 20 +++++++++++++++++++ ...SerializationFirBlackBoxTestGenerated.java | 6 ++++++ .../SerializationIrBoxTestGenerated.java | 6 ++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 plugins/kotlinx-serialization/testData/boxIr/constValInSerialName.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 44b0d353b7a..c260b481773 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -98,6 +98,8 @@ class Fir2IrConverter( } } + evaluateConstants(irModuleFragment) + if (irGenerationExtensions.isNotEmpty()) { val pluginContext = Fir2IrPluginContext(components, irModuleFragment.descriptor) for (extension in irGenerationExtensions) { @@ -106,8 +108,6 @@ class Fir2IrConverter( } irModuleFragment.acceptVoid(ExternalPackageParentPatcher(components, fir2IrExtensions)) - - evaluateConstants(irModuleFragment) } fun bindFakeOverridesOrPostpone(declarations: List) { diff --git a/plugins/kotlinx-serialization/testData/boxIr/constValInSerialName.kt b/plugins/kotlinx-serialization/testData/boxIr/constValInSerialName.kt new file mode 100644 index 00000000000..a9a19944d05 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/boxIr/constValInSerialName.kt @@ -0,0 +1,20 @@ +// WITH_STDLIB +// ISSUE: KT-54994 + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlinx.serialization.internal.* + +const val prefix = "foo" + +@Serializable +data class Bar(@SerialName("$prefix.bar") val bar: String) + +fun box(): String { + val expectedBar = Bar("hello") + val json = Json.encodeToString(Bar.serializer(), expectedBar) + if (json != """{"foo.bar":"hello"}""") return "Fail: $json" + val actualBar = Json.decodeFromString(Bar.serializer(), json) + if (expectedBar != actualBar) return "Fail: $actualBar" + return "OK" +} diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java index 75b97803d8f..5baf57e7c40 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirBlackBoxTestGenerated.java @@ -39,6 +39,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization runTest("plugins/kotlinx-serialization/testData/boxIr/classSerializerAsObject.kt"); } + @Test + @TestMetadata("constValInSerialName.kt") + public void testConstValInSerialName() throws Exception { + runTest("plugins/kotlinx-serialization/testData/boxIr/constValInSerialName.kt"); + } + @Test @TestMetadata("contextualByDefault.kt") public void testContextualByDefault() 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 96d4e118bd6..4ec9809391b 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 @@ -37,6 +37,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT runTest("plugins/kotlinx-serialization/testData/boxIr/classSerializerAsObject.kt"); } + @Test + @TestMetadata("constValInSerialName.kt") + public void testConstValInSerialName() throws Exception { + runTest("plugins/kotlinx-serialization/testData/boxIr/constValInSerialName.kt"); + } + @Test @TestMetadata("contextualByDefault.kt") public void testContextualByDefault() throws Exception {