diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt index 5b393945934..dcd13609330 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt @@ -1,23 +1,11 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.codegen.inline import com.intellij.openapi.vfs.VirtualFile -import org.jetbrains.kotlin.backend.common.descriptors.substitute import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.BaseExpressionCodegen @@ -52,7 +40,9 @@ import org.jetbrains.kotlin.resolve.jvm.AsmTypes.JAVA_CLASS_TYPE import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.resolve.source.PsiSourceElement import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor -import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.TypeProjectionImpl +import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.org.objectweb.asm.* @@ -191,12 +181,12 @@ private fun getInlineName( return implementationOwnerInternalName } is ClassifierDescriptor -> { - return typeMapper.mapType(currentDescriptor).internalName + return typeMapper.mapClass(currentDescriptor).internalName } is FunctionDescriptor -> { val descriptor = typeMapper.bindingContext.get(CodegenBinding.CLASS_FOR_CALLABLE, currentDescriptor) if (descriptor != null) { - return typeMapper.mapType(descriptor).internalName + return typeMapper.mapClass(descriptor).internalName } } } diff --git a/compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt new file mode 100644 index 00000000000..07902a77ebf --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +InlineClasses + +inline class Foo(val a: String) { + fun test(): String { + return a + inlineFun() + } +} + +inline fun inlineFun(): String = "K" + +fun box(): String { + val f = Foo("O") + return f.test() +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/checkOuterInlineFunctionCall.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/checkOuterInlineFunctionCall.kt new file mode 100644 index 00000000000..1a96d9d84a9 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/checkOuterInlineFunctionCall.kt @@ -0,0 +1,13 @@ +// !LANGUAGE: +InlineClasses + +inline class Foo(val a: String) { + fun test(): String { + return notInlineFun() + inlineFun() + } +} + +inline fun inlineFun(): String = "K" +fun notInlineFun(): String = "O" + +// 0 INVOKESTATIC CheckOuterInlineFunctionCallKt.inlineFun +// 1 INVOKESTATIC CheckOuterInlineFunctionCallKt.notInlineFun \ No newline at end of file diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 617edaced0a..cf593f41aa7 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -10316,6 +10316,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); doTest(fileName); } + + @TestMetadata("useInlineFunctionInsideInlineClass.kt") + public void testUseInlineFunctionInsideInlineClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/innerNested") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 5767ce81ca4..2ce00dbcd12 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -10316,6 +10316,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); doTest(fileName); } + + @TestMetadata("useInlineFunctionInsideInlineClass.kt") + public void testUseInlineFunctionInsideInlineClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/innerNested") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 35bf7e425de..dd799178584 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -1898,6 +1898,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/inlineClasses/callMemberMethodsInsideInlineClass.kt"); doTest(fileName); } + + @TestMetadata("checkOuterInlineFunctionCall.kt") + public void testCheckOuterInlineFunctionCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/inlineClasses/checkOuterInlineFunctionCall.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/bytecodeText/interfaces") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index e40cb055f2a..e2b9af990a1 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -10316,6 +10316,12 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); doTest(fileName); } + + @TestMetadata("useInlineFunctionInsideInlineClass.kt") + public void testUseInlineFunctionInsideInlineClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/innerNested") 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 2eb9d9fe5c1..f69db134b1b 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 @@ -11276,6 +11276,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); doTest(fileName); } + + @TestMetadata("useInlineFunctionInsideInlineClass.kt") + public void testUseInlineFunctionInsideInlineClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/innerNested")