From a22c16e74578e550197be841996c6b9311d11a26 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 31 Jan 2024 23:33:15 +0100 Subject: [PATCH] IR: do not assert presence of property getter in IrFakeOverrideBuilder #KT-65456 Fixed --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 +++++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 +++++ ...LightTreeBlackBoxCodegenTestGenerated.java | 6 +++++ ...hIrFakeOverrideGeneratorTestGenerated.java | 6 +++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 +++++ .../ir/overrides/IrFakeOverrideBuilder.kt | 8 ++++--- .../box/sam/fieldInJavaSamInterface.kt | 24 +++++++++++++++++++ .../JvmAbiConsistencyTestBoxGenerated.java | 6 +++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ 12 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/codegen/box/sam/fieldInJavaSamInterface.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 8828c9e5136..08211f5b03d 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 @@ -50958,6 +50958,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 369033d43e2..138d7da3247 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 @@ -50958,6 +50958,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() throws Exception { 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 52c13160302..38c4daed612 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 @@ -50483,6 +50483,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 0867551e905..1490a3a2372 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 @@ -50483,6 +50483,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 a778ffa8d73..01a3ae4e821 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 @@ -50483,6 +50483,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() throws Exception { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt index c297b2a82a5..20d905b6fc0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt @@ -46,9 +46,11 @@ class IrFakeOverrideBuilder( is IrSimpleFunction -> this.overriddenSymbols = value.memoryOptimizedMap { it as? IrSimpleFunctionSymbol ?: error("Unexpected function overridden symbol: $it") } is IrProperty -> { - val overriddenProperties = value.memoryOptimizedMap { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") } - val getter = this.getter ?: error("Property has no getter: ${render()}") - getter.overriddenSymbols = overriddenProperties.memoryOptimizedMap { it.owner.getter!!.symbol } + val overriddenProperties = + value.memoryOptimizedMap { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") } + this.getter?.let { getter -> + getter.overriddenSymbols = overriddenProperties.memoryOptimizedMapNotNull { it.owner.getter?.symbol } + } this.setter?.let { setter -> setter.overriddenSymbols = overriddenProperties.memoryOptimizedMapNotNull { it.owner.setter?.symbol } } diff --git a/compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt b/compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt new file mode 100644 index 00000000000..9866695fb3d --- /dev/null +++ b/compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt @@ -0,0 +1,24 @@ +// TARGET_BACKEND: JVM +// SAM_CONVERSIONS: CLASS +// FILE: S.java +public interface S { + String bar(String t); + + S RESULT = new S() { + @Override + public String bar(String t) { return t; } + }; +} + +// FILE: J.java +public class J { + public static String foo(String e, S c) { + return c.bar(e); + } +} + +// FILE: box.kt +fun box(): String { + val s: (String) -> String = { S.RESULT.bar(it) } + return J.foo("OK", S(s)) +} 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 d0761ffbb6e..58ecc202b8f 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 @@ -49799,6 +49799,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 67a7bc271cd..bada07a0d51 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 @@ -46769,6 +46769,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 ce3a6af91f1..5564f52308d 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 @@ -49799,6 +49799,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 741f24bf2f2..c20099f402c 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 @@ -49799,6 +49799,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @Test + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @Test @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() 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 8277cf0999b..025c12da052 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -40010,6 +40010,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/sam/differentFqNames.kt"); } + @TestMetadata("fieldInJavaSamInterface.kt") + public void testFieldInJavaSamInterface() throws Exception { + runTest("compiler/testData/codegen/box/sam/fieldInJavaSamInterface.kt"); + } + @TestMetadata("inlinedSamWrapper.kt") public void testInlinedSamWrapper() throws Exception { runTest("compiler/testData/codegen/box/sam/inlinedSamWrapper.kt");