From b4062c89744c505c82be3e970ced9b29f57935ee Mon Sep 17 00:00:00 2001 From: Pavel Kunyavskiy Date: Thu, 8 Feb 2024 11:53:45 +0100 Subject: [PATCH] [Fir2IR] Fix fake override generation for lazy accessors ^KT-65595 Fixed --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 +++++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 +++++ .../generators/ClassMemberGenerator.kt | 2 +- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 +++++ ...hIrFakeOverrideGeneratorTestGenerated.java | 6 +++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 +++++ .../codegen/box/fakeOverride/kt65695.kt | 23 +++++++++++++++++++ .../JvmAbiConsistencyTestBoxGenerated.java | 6 +++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ 12 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/fakeOverride/kt65695.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 146c4ff7a43..84a325a16aa 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -19376,6 +19376,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index 168176ab6e0..54305d16143 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -19376,6 +19376,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt index c258cf88183..5e414397d34 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt @@ -347,7 +347,7 @@ internal class ClassMemberGenerator( declarationStorage.leaveScope(this.symbol) } } - if (containingClass != null) { + if (containingClass != null && !components.configuration.useIrFakeOverrideBuilder) { this.overriddenSymbols = property.generateOverriddenAccessorSymbols(containingClass, isGetter) } diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 795690f9784..f6630bdf516 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -19365,6 +19365,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index e38e75c146d..39fddfc8ebe 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -19365,6 +19365,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 004d8766595..15cfb347873 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -19365,6 +19365,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { diff --git a/compiler/testData/codegen/box/fakeOverride/kt65695.kt b/compiler/testData/codegen/box/fakeOverride/kt65695.kt new file mode 100644 index 00000000000..5f51dc75615 --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/kt65695.kt @@ -0,0 +1,23 @@ +// TARGET_BACKEND: JVM + +// FILE: A.kt +interface A { + val x: String +} + +// FILE: B.kt +interface B : A + +// FILE: C.java +public interface C extends B { } + +// FILE: D.kt +class D : C { + override val x: String + get() = "OK" +} + +// FILE: box.kt +fun go(p: C): String = p.x + +fun box(): String = go(D()) \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index 31cbab6857e..fd026c59f36 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -19365,6 +19365,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { 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 43548b44748..36bc6146036 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 @@ -18507,6 +18507,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() 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 5892f74a073..26aaa273a22 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 @@ -19365,6 +19365,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index ed17a0001a8..768fe0076ed 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -19365,6 +19365,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @Test + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @Test @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() 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 c74f34702e6..e505c6fc3de 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -16134,6 +16134,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fakeOverride/kt65274.kt"); } + @TestMetadata("kt65695.kt") + public void testKt65695() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt65695.kt"); + } + @TestMetadata("methodOfAnyFromInterface.kt") public void testMethodOfAnyFromInterface() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/methodOfAnyFromInterface.kt");