From 0ef043b074ab08a4c5500a62d3f736ae3b903b29 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Wed, 20 Apr 2022 00:07:17 +0300 Subject: [PATCH] [FIR2IR] Consider property init value from nested class, ^KT-52057 Fixed --- .../deserialization/ClassDeserialization.kt | 10 +++++++-- .../deserialization/FirMemberDeserializer.kt | 1 + .../FirBlackBoxCodegenTestGenerated.java | 6 ++++++ ...onsiderPropertyInitValueFromNestedClass.kt | 21 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../IrCodegenBoxWasmTestGenerated.java | 5 +++++ .../NativeCodegenBoxTestGenerated.java | 6 ++++++ 11 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index e6b91662f17..03e201df320 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -76,6 +76,12 @@ fun deserializeClassToSymbol( containerSource, symbol, annotationDeserializer, + if (status.isCompanion) { + parentContext.constDeserializer + } else { + ((containerSource as? KotlinJvmBinarySourceElement)?.binaryClass)?.let { FirConstDeserializer(session, it) } + ?: parentContext.constDeserializer + }, status.isInner ) ?: FirDeserializationContext.createForClass( classId, @@ -203,9 +209,9 @@ fun deserializeClassToSymbol( } it.setSealedClassInheritors(inheritors) } - + it.valueClassRepresentation = computeValueClassRepresentation(it, session) - + (it.annotations as MutableList) += context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver) diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 3c21dea0b27..767e2abae3e 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -65,6 +65,7 @@ class FirDeserializationContext( containerSource: DeserializedContainerSource? = this.containerSource, outerClassSymbol: FirRegularClassSymbol? = this.outerClassSymbol, annotationDeserializer: AbstractAnnotationDeserializer = this.annotationDeserializer, + constDeserializer: FirConstDeserializer = this.constDeserializer, capturesTypeParameters: Boolean = true, containingDeclarationSymbol: FirBasedSymbol<*>? = this.outerClassSymbol ): FirDeserializationContext = FirDeserializationContext( diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 403cc958715..2a500752cc9 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -25251,6 +25251,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @Test @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { diff --git a/compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt b/compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt new file mode 100644 index 00000000000..bab4e25a77d --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt @@ -0,0 +1,21 @@ +// ISSUE: KT-52057 +// MODULE: lib +// FILE: Class.kt + +annotation class Ann(val p: String) + +class Class { + object Obj { + const val Const = "const" + } +} + +// MODULE: main(lib) +// FILE: main.kt + +import Class + +@Ann("${Class.Obj.Const}+") +fun f(): String = "OK" + +fun box() = f() \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 18f8ca3ec16..7cbc785a1af 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -24771,6 +24771,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @Test + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @Test @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index e5785d14433..29f9a285d5e 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -25251,6 +25251,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @Test @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 34f1f9bcf27..ebf73b4767f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -20808,6 +20808,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { runTest("compiler/testData/codegen/box/innerNested/createNestedClass.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index 6505409d931..237e9d74a00 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -19901,6 +19901,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true); } + @Test + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @Test @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index ec01a63ce6c..4d748c9e11a 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -19865,6 +19865,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); } + @Test + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @Test @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 3d4bd282c94..a8491e2e6b1 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -17591,6 +17591,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); } + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception { runTest("compiler/testData/codegen/box/innerNested/createNestedClass.kt"); diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index 1ca36677f3c..03f8b84854b 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -22522,6 +22522,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/innerNested"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true); } + @Test + @TestMetadata("considerPropertyInitValueFromNestedClass.kt") + public void testConsiderPropertyInitValueFromNestedClass() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/considerPropertyInitValueFromNestedClass.kt"); + } + @Test @TestMetadata("createNestedClass.kt") public void testCreateNestedClass() throws Exception {