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 e898dc1c878..f99781bf3e9 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 @@ -13612,6 +13612,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt index 86bb3071e74..4e95b29f535 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt @@ -135,9 +135,9 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F val bridgeFunction = createBridgeDeclaration( function, when { - // If the original function has signature which need mangling we still need to replace - // it with a mangled version. - !function.isFakeOverride && function.signatureRequiresMangling() -> + // If the original function has signature which need mangling we still need to replace it with a mangled version. + (!function.isFakeOverride || function.findInterfaceImplementation(context.state.jvmDefaultMode) != null) && + function.signatureRequiresMangling() -> replacement.name // Since we remove the corresponding property symbol from the bridge we need to resolve getter/setter // names at this point. diff --git a/compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt new file mode 100644 index 00000000000..cffe5152cc2 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt @@ -0,0 +1,13 @@ +interface IFoo { + fun foo(x: T): String = "O" + fun T.bar(): String = "K" +} + +inline class L(val x: Long) : IFoo + +fun box(): String { + val z = L(0L) + return with(z) { + foo(z) + z.bar() + } +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt new file mode 100644 index 00000000000..8a8691157ae --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt @@ -0,0 +1,9 @@ +interface IFoo { + fun foo(x: T): String = "OK" + fun T.bar(): String = "OK" + fun withDefault(x: T, y: Int = 42): String = "OK" +} + +inline class L(val x: Long) : IFoo + +class X : IFoo \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.txt new file mode 100644 index 00000000000..5c634151d32 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.txt @@ -0,0 +1,57 @@ +@kotlin.Metadata +public final class IFoo$DefaultImpls { + // source: 'defaultInterfaceMethodsInInlineClass.kt' + public static @org.jetbrains.annotations.NotNull method bar(@org.jetbrains.annotations.NotNull p0: IFoo, p1: java.lang.Object): java.lang.String + public static @org.jetbrains.annotations.NotNull method foo(@org.jetbrains.annotations.NotNull p0: IFoo, p1: java.lang.Object): java.lang.String + public synthetic static method withDefault$default(p0: IFoo, p1: java.lang.Object, p2: int, p3: int, p4: java.lang.Object): java.lang.String + public static @org.jetbrains.annotations.NotNull method withDefault(@org.jetbrains.annotations.NotNull p0: IFoo, p1: java.lang.Object, p2: int): java.lang.String + public final inner class IFoo$DefaultImpls +} + +@kotlin.Metadata +public interface IFoo { + // source: 'defaultInterfaceMethodsInInlineClass.kt' + public abstract @org.jetbrains.annotations.NotNull method bar(p0: java.lang.Object): java.lang.String + public abstract @org.jetbrains.annotations.NotNull method foo(p0: java.lang.Object): java.lang.String + public abstract @org.jetbrains.annotations.NotNull method withDefault(p0: java.lang.Object, p1: int): java.lang.String + public final inner class IFoo$DefaultImpls +} + +@kotlin.Metadata +public final class L { + // source: 'defaultInterfaceMethodsInInlineClass.kt' + private final field x: long + private synthetic method (p0: long): void + public synthetic bridge method bar(p0: java.lang.Object): java.lang.String + public @org.jetbrains.annotations.NotNull method bar--h0D71M(p0: long): java.lang.String + public static @org.jetbrains.annotations.NotNull method bar--h0D71M(p0: long, p1: long): java.lang.String + public synthetic final static method box-impl(p0: long): L + public static method constructor-impl(p0: long): long + public method equals(p0: java.lang.Object): boolean + public static method equals-impl(p0: long, p1: java.lang.Object): boolean + public final static method equals-impl0(p0: long, p1: long): boolean + public synthetic bridge method foo(p0: java.lang.Object): java.lang.String + public @org.jetbrains.annotations.NotNull method foo--h0D71M(p0: long): java.lang.String + public static @org.jetbrains.annotations.NotNull method foo--h0D71M(p0: long, p1: long): java.lang.String + public final method getX(): long + public method hashCode(): int + public static method hashCode-impl(p0: long): int + public method toString(): java.lang.String + public static method toString-impl(p0: long): java.lang.String + public synthetic final method unbox-impl(): long + public synthetic bridge method withDefault(p0: java.lang.Object, p1: int): java.lang.String + public @org.jetbrains.annotations.NotNull method withDefault-OIj-6XA(p0: long, p1: int): java.lang.String + public static @org.jetbrains.annotations.NotNull method withDefault-OIj-6XA(p0: long, p1: long, p2: int): java.lang.String +} + +@kotlin.Metadata +public final class X { + // source: 'defaultInterfaceMethodsInInlineClass.kt' + public method (): void + public synthetic bridge method bar(p0: java.lang.Object): java.lang.String + public @org.jetbrains.annotations.NotNull method bar--h0D71M(p0: long): java.lang.String + public synthetic bridge method foo(p0: java.lang.Object): java.lang.String + public @org.jetbrains.annotations.NotNull method foo--h0D71M(p0: long): java.lang.String + public synthetic bridge method withDefault(p0: java.lang.Object, p1: int): java.lang.String + public @org.jetbrains.annotations.NotNull method withDefault-OIj-6XA(p0: long, p1: int): java.lang.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index faa85333856..a2d7fefb626 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -15012,6 +15012,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 1c40b0c0a3b..898cf963fbb 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -927,6 +927,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/constructorsWithDefaultParameterValues.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("inlineCharSequence.kt") public void testInlineCharSequence() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index c5514bad51d..8d36b92445c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15027,6 +15027,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 2169f0d43a6..feacb8248f8 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -13612,6 +13612,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index cf72b4e1631..44d221d5ca9 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -897,6 +897,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/constructorsWithDefaultParameterValues.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("inlineCharSequence.kt") public void testInlineCharSequence() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineCharSequence.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 4fb20b28d39..b29caf2ef46 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -11677,6 +11677,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.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 1575cf9e650..108f1e3c519 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 @@ -11677,6 +11677,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.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 7da05baf7ee..a9223f8868c 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 @@ -11742,6 +11742,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 4fe8dec78c2..f5453b2e20f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -6287,6 +6287,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceMethodsInInlineClass.kt") + public void testDefaultInterfaceMethodsInInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceMethodsInInlineClass.kt"); + } + @TestMetadata("defaultWithInlineClassArgument.kt") public void testDefaultWithInlineClassArgument() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultWithInlineClassArgument.kt");