diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 04943b62725..4ba50155302 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -1582,10 +1582,13 @@ public class FunctionCodegen { reg += argTypes[i].getSize(); } - String internalName = typeMapper.mapType(toClass).getInternalName(); + String internalName = typeMapper.mapClass(toClass).getInternalName(); if (toClass.getKind() == ClassKind.INTERFACE) { iv.invokeinterface(internalName, delegateToMethod.getName(), delegateToMethod.getDescriptor()); } + else if (toClass.isInline()) { + iv.invokestatic(internalName, delegateToMethod.getName(), delegateToMethod.getDescriptor(), false); + } else { iv.invokevirtual(internalName, delegateToMethod.getName(), delegateToMethod.getDescriptor(), false); } diff --git a/compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt b/compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt new file mode 100644 index 00000000000..8cbf35b3c94 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt @@ -0,0 +1,18 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +interface IFoo { + fun getO(): String + val k: String + + val ok: String get() = getO() + k +} + +inline class InlineFooImpl(val s: String): IFoo { + override fun getO(): String = s + override val k: String get() = "K" +} + +class Test(s: String) : IFoo by InlineFooImpl(s) + +fun box() = Test("O").ok \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 346a3abca5b..a269193b668 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -11769,6 +11769,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt"); } + @TestMetadata("interfaceImplementationByDelegation.kt") + public void testInterfaceImplementationByDelegation() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt"); + } + @TestMetadata("iterateOverArrayOfInlineClassValues.kt") public void testIterateOverArrayOfInlineClassValues() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index e1fe619948a..3742843594e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11769,6 +11769,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt"); } + @TestMetadata("interfaceImplementationByDelegation.kt") + public void testInterfaceImplementationByDelegation() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt"); + } + @TestMetadata("iterateOverArrayOfInlineClassValues.kt") public void testIterateOverArrayOfInlineClassValues() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index f458bbc78e2..f14661fb026 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11774,6 +11774,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt"); } + @TestMetadata("interfaceImplementationByDelegation.kt") + public void testInterfaceImplementationByDelegation() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt"); + } + @TestMetadata("iterateOverArrayOfInlineClassValues.kt") public void testIterateOverArrayOfInlineClassValues() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java index 25b33b4ea79..110a69c5b1c 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java @@ -10309,6 +10309,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt"); } + @TestMetadata("interfaceImplementationByDelegation.kt") + public void testInterfaceImplementationByDelegation() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt"); + } + @TestMetadata("iterateOverArrayOfInlineClassValues.kt") public void testIterateOverArrayOfInlineClassValues() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.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 e3f952d3e33..432a94effcd 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 @@ -11354,6 +11354,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt"); } + @TestMetadata("interfaceImplementationByDelegation.kt") + public void testInterfaceImplementationByDelegation() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/interfaceImplementationByDelegation.kt"); + } + @TestMetadata("iterateOverArrayOfInlineClassValues.kt") public void testIterateOverArrayOfInlineClassValues() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/iterateOverArrayOfInlineClassValues.kt");