From 0b453ee328022ca5d4549b609b9d1160cd735830 Mon Sep 17 00:00:00 2001 From: Pavel Mikhailovskii Date: Wed, 7 Sep 2022 12:17:56 +0200 Subject: [PATCH] KT-41670 Check for default property accessors in SAM interfaces --- .../runners/codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../backend/jvm/lower/indy/LambdaMetafactoryArguments.kt | 3 ++- compiler/testData/codegen/box/funInterface/kt41670.kt | 7 +++++++ .../test/runners/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../runners/codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../kotlin/codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../wasm/semantics/IrCodegenBoxWasmTestGenerated.java | 5 +++++ .../konan/blackboxtest/NativeCodegenBoxTestGenerated.java | 6 ++++++ 10 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/funInterface/kt41670.kt 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 8f8e0941ea2..8aa8744e198 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 @@ -18317,6 +18317,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @Test + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @Test @TestMetadata("kt44827_funInterface.kt") public void testKt44827_funInterface() throws Exception { diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt index 9b6ad402c2e..d6505dccff5 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt @@ -227,7 +227,8 @@ internal class LambdaMetafactoryArgumentsBuilder( getAllSuperclasses().any { it.fqNameWhenAvailable == javaIoSerializableFqn } private fun IrClass.requiresDelegationToDefaultImpls(): Boolean { - for (irMemberFun in functions) { + val functionsAndAccessors = functions + properties.mapNotNull { it.getter } + properties.mapNotNull { it.setter } + for (irMemberFun in functionsAndAccessors) { if (irMemberFun.modality == Modality.ABSTRACT) continue val irImplFun = diff --git a/compiler/testData/codegen/box/funInterface/kt41670.kt b/compiler/testData/codegen/box/funInterface/kt41670.kt new file mode 100644 index 00000000000..ac7c3a39bfd --- /dev/null +++ b/compiler/testData/codegen/box/funInterface/kt41670.kt @@ -0,0 +1,7 @@ +fun interface Interface { + fun foo() + + val value get() = "OK" +} + +fun box() = Interface{}.value \ 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 0e1fc3ee2ee..fb30a02d80b 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 @@ -17663,6 +17663,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @Test + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @Test @TestMetadata("kt44827_funInterface.kt") public void testKt44827_funInterface() 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 1df92e31f3f..5e3c732a123 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 @@ -18317,6 +18317,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @Test + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @Test @TestMetadata("kt44827_funInterface.kt") public void testKt44827_funInterface() 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 6da7ad25b77..3ba199cbf7c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14665,6 +14665,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @TestMetadata("kt44827_funInterface.kt") public void testKt44827_funInterface() throws Exception { runTest("compiler/testData/codegen/box/funInterface/kt44827_funInterface.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 193deba923f..af0515e3a58 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 @@ -13585,6 +13585,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @Test + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @Test @TestMetadata("kt45444_privateFunInterface.kt") public void testKt45444_privateFunInterface() 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 cbf9b9bfd85..1a2332162f7 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 @@ -13675,6 +13675,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @Test + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @Test @TestMetadata("kt45444_privateFunInterface.kt") public void testKt45444_privateFunInterface() 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 add305c2161..d3114d20406 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 @@ -12160,6 +12160,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @TestMetadata("kt45444_privateFunInterface.kt") public void testKt45444_privateFunInterface() throws Exception { runTest("compiler/testData/codegen/box/funInterface/kt45444_privateFunInterface.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 b531b875f11..a5fe9be85df 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 @@ -14719,6 +14719,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/funInterface/irrelevantPrivateDeclarations.kt"); } + @Test + @TestMetadata("kt41670.kt") + public void testKt41670() throws Exception { + runTest("compiler/testData/codegen/box/funInterface/kt41670.kt"); + } + @Test @TestMetadata("kt45444_privateFunInterface.kt") public void testKt45444_privateFunInterface() throws Exception {