diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index 1c531057cfe..477d74c5cc7 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -116,12 +116,13 @@ inline fun IrProperty.addSetter(builder: IrFunctionBuilder.() -> Unit = {}): IrS } fun IrFunctionBuilder.buildFun(originalDescriptor: FunctionDescriptor? = null): IrFunctionImpl { - val wrappedDescriptor = if (originalDescriptor is DescriptorWithContainerSource) - WrappedFunctionDescriptorWithContainerSource(originalDescriptor.containerSource) - else if (originalDescriptor != null) - WrappedSimpleFunctionDescriptor(originalDescriptor) - else - WrappedSimpleFunctionDescriptor() + val wrappedDescriptor = when(originalDescriptor) { + is DescriptorWithContainerSource -> WrappedFunctionDescriptorWithContainerSource(originalDescriptor.containerSource) + is PropertyGetterDescriptor -> WrappedPropertyGetterDescriptor(originalDescriptor.annotations, originalDescriptor.source) + is PropertySetterDescriptor -> WrappedPropertySetterDescriptor(originalDescriptor.annotations, originalDescriptor.source) + null -> WrappedSimpleFunctionDescriptor() + else -> WrappedSimpleFunctionDescriptor(originalDescriptor) + } return IrFunctionImpl( startOffset, endOffset, origin, IrSimpleFunctionSymbolImpl(wrappedDescriptor), diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt index 4774d0d13be..24c660fafa6 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt @@ -74,7 +74,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) { if (nameForSpecialFunction != null) return nameForSpecialFunction val property = (function as? IrSimpleFunction)?.correspondingPropertySymbol?.owner - if (property != null) { + if (property != null && function.name.isSpecial) { val propertyName = property.name.asString() if (property.parent.let { it is IrClass && it.isAnnotationClass }) return propertyName diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt index 9395bf24180..31d5a8ef9ff 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.util.explicitParameters import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.utils.addToStdlib.safeAs class IrReplacementFunction( val function: IrFunction, @@ -196,6 +197,7 @@ class MemoizedInlineClassReplacements { copyTypeParameters(function.constructedClass.typeParameters + function.typeParameters) } else { copyTypeParametersFrom(function) + correspondingPropertySymbol = function.safeAs()?.correspondingPropertySymbol } body() } diff --git a/compiler/testData/compileKotlinAgainstKotlin/inlineClassInlineProperty.kt b/compiler/testData/compileKotlinAgainstKotlin/inlineClassInlineProperty.kt new file mode 100644 index 00000000000..fb8153e2182 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/inlineClassInlineProperty.kt @@ -0,0 +1,15 @@ +// !LANGUAGE: +InlineClasses +// FILE: A.kt + +package a + +inline class S(val value: String) { + inline val k: String + get() = value + "K" +} + +// FILE: B.kt + +fun box(): String { + return a.S("O").k +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index 6911f4f087e..565bc8398f2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -133,6 +133,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl runTest("compiler/testData/compileKotlinAgainstKotlin/inlineClassFromBinaryDependencies.kt"); } + @TestMetadata("inlineClassInlineProperty.kt") + public void testInlineClassInlineProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/inlineClassInlineProperty.kt"); + } + @TestMetadata("inlinedConstants.kt") public void testInlinedConstants() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/inlinedConstants.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java index 49effe78ca9..2e08ff5b94a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java @@ -128,6 +128,11 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile runTest("compiler/testData/compileKotlinAgainstKotlin/inlineClassFromBinaryDependencies.kt"); } + @TestMetadata("inlineClassInlineProperty.kt") + public void testInlineClassInlineProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/inlineClassInlineProperty.kt"); + } + @TestMetadata("inlinedConstants.kt") public void testInlinedConstants() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/inlinedConstants.kt");