diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index fd453cbf249..34de0272d04 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -27022,6 +27022,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/traits/kt3579_2.kt"); } + @TestMetadata("kt36973.kt") + public void testKt36973() throws Exception { + runTest("compiler/testData/codegen/box/traits/kt36973.kt"); + } + @TestMetadata("kt5393.kt") public void testKt5393() throws Exception { runTest("compiler/testData/codegen/box/traits/kt5393.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt index 76a6984a606..91edea32ee4 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt @@ -233,11 +233,10 @@ class JvmDeclarationFactory( // Old backend doesn't generate ACC_FINAL on DefaultImpls methods. modality = Modality.OPEN, - // Interface functions are always public, with one exception: clone in Cloneable, which is protected. However, Cloneable - // has no DefaultImpls, so this merely replicates the incorrect behavior of the old backend. We should rather not generate - // a bridge to clone when interface inherits from Cloneable at all. Below, we force everything, including those bridges, - // to be public so that we won't try to generate synthetic accessor for them. - visibility = Visibilities.PUBLIC, + // Interface functions are public or private, with one exception: clone in Cloneable, which is protected. + // However, Cloneable has no DefaultImpls, so this merely replicates the incorrect behavior of the old backend. + // We should rather not generate a bridge to clone when interface inherits from Cloneable at all. + visibility = if (interfaceFun.visibility == Visibilities.PRIVATE) Visibilities.PRIVATE else Visibilities.PUBLIC, typeParametersFromContext = parent.typeParameters ) diff --git a/compiler/testData/codegen/box/traits/kt36973.kt b/compiler/testData/codegen/box/traits/kt36973.kt new file mode 100644 index 00000000000..a954e90ec7d --- /dev/null +++ b/compiler/testData/codegen/box/traits/kt36973.kt @@ -0,0 +1,15 @@ +// IGNORE_BACKEND_FIR: JVM_IR +// FILE: kt36973.kt +import other.* + +class C : IFoo + +fun box() = C().foo()() + +// FILE: IFoo.kt +package other + +interface IFoo { + fun foo() = { bar() } + private fun bar() = "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/privateDefaultImpls.kt b/compiler/testData/codegen/bytecodeListing/privateDefaultImpls.kt new file mode 100644 index 00000000000..3f9fe99387c --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/privateDefaultImpls.kt @@ -0,0 +1,4 @@ +interface A { + private fun foo() {} + private val x get() = 1 +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/privateDefaultImpls.txt b/compiler/testData/codegen/bytecodeListing/privateDefaultImpls.txt new file mode 100644 index 00000000000..1fb7e4dd884 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/privateDefaultImpls.txt @@ -0,0 +1,11 @@ +@kotlin.Metadata +public final class A$DefaultImpls { + inner class A$DefaultImpls + private static method foo(p0: A): void + private static method getX(p0: A): int +} + +@kotlin.Metadata +public interface A { + inner class A$DefaultImpls +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 590c092b6f8..08c4a845ad8 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -28538,6 +28538,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/traits/kt3579_2.kt"); } + @TestMetadata("kt36973.kt") + public void testKt36973() throws Exception { + runTest("compiler/testData/codegen/box/traits/kt36973.kt"); + } + @TestMetadata("kt5393.kt") public void testKt5393() throws Exception { runTest("compiler/testData/codegen/box/traits/kt5393.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index e234b18fd14..43e000337a7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -104,6 +104,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/platformTypes.kt"); } + @TestMetadata("privateDefaultImpls.kt") + public void testPrivateDefaultImpls() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/privateDefaultImpls.kt"); + } + @TestMetadata("privateDefaultSetter.kt") public void testPrivateDefaultSetter() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/privateDefaultSetter.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 7a1cedd5738..dab112bea72 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -27355,6 +27355,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/traits/kt3579_2.kt"); } + @TestMetadata("kt36973.kt") + public void testKt36973() throws Exception { + runTest("compiler/testData/codegen/box/traits/kt36973.kt"); + } + @TestMetadata("kt5393.kt") public void testKt5393() throws Exception { runTest("compiler/testData/codegen/box/traits/kt5393.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index d8d8f31da17..4fca346ad33 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -27022,6 +27022,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/traits/kt3579_2.kt"); } + @TestMetadata("kt36973.kt") + public void testKt36973() throws Exception { + runTest("compiler/testData/codegen/box/traits/kt36973.kt"); + } + @TestMetadata("kt5393.kt") public void testKt5393() throws Exception { runTest("compiler/testData/codegen/box/traits/kt5393.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index 72ecc9a7eef..0ade53844bb 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -104,6 +104,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/platformTypes.kt"); } + @TestMetadata("privateDefaultImpls.kt") + public void testPrivateDefaultImpls() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/privateDefaultImpls.kt"); + } + @TestMetadata("privateDefaultSetter.kt") public void testPrivateDefaultSetter() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/privateDefaultSetter.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index c8aa19f7702..20d494af17e 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -21923,6 +21923,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/traits/kt3579_2.kt"); } + @TestMetadata("kt36973.kt") + public void testKt36973() throws Exception { + runTest("compiler/testData/codegen/box/traits/kt36973.kt"); + } + @TestMetadata("kt5393.kt") public void testKt5393() throws Exception { runTest("compiler/testData/codegen/box/traits/kt5393.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index dc8f06a32ae..033946a68d1 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -21983,6 +21983,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/traits/kt3579_2.kt"); } + @TestMetadata("kt36973.kt") + public void testKt36973() throws Exception { + runTest("compiler/testData/codegen/box/traits/kt36973.kt"); + } + @TestMetadata("kt5393.kt") public void testKt5393() throws Exception { runTest("compiler/testData/codegen/box/traits/kt5393.kt");