diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyWithWrappedDescriptors.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyWithWrappedDescriptors.kt index 03980aec642..5b61198af95 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyWithWrappedDescriptors.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyWithWrappedDescriptors.kt @@ -40,7 +40,11 @@ object DescriptorsToIrRemapper : DescriptorsRemapper { WrappedFieldDescriptor(descriptor.annotations, descriptor.source) override fun remapDeclaredSimpleFunction(descriptor: FunctionDescriptor) = - WrappedSimpleFunctionDescriptor(descriptor.annotations, descriptor.source) + when (descriptor) { + is PropertyGetterDescriptor -> WrappedPropertyGetterDescriptor(descriptor.annotations, descriptor.source) + is PropertySetterDescriptor -> WrappedPropertySetterDescriptor(descriptor.annotations, descriptor.source) + else -> WrappedSimpleFunctionDescriptor(descriptor.annotations, descriptor.source) + } override fun remapDeclaredProperty(descriptor: PropertyDescriptor) = WrappedPropertyDescriptor(descriptor.annotations, descriptor.source) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt index a3e2ec98bdd..47507875c56 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt @@ -434,7 +434,7 @@ open class WrappedSimpleFunctionDescriptor( visibility: Visibility?, kind: CallableMemberDescriptor.Kind?, copyOverrides: Boolean - ): SimpleFunctionDescriptor { + ): Nothing { TODO("not implemented") } @@ -797,10 +797,7 @@ open class WrappedPropertyDescriptor( TODO("not implemented") } - override fun getAccessors(): MutableList = listOfNotNull( - owner.getter?.descriptor as? PropertyAccessorDescriptor, - owner.setter?.descriptor as? PropertyAccessorDescriptor - ).toMutableList() + override fun getAccessors(): List = listOfNotNull(getter, setter) override fun getTypeParameters(): List = emptyList() @@ -867,6 +864,33 @@ class WrappedPropertyDescriptorWithContainerSource( override var containerSource: DeserializedContainerSource ) : WrappedPropertyDescriptor(), DescriptorWithContainerSource +abstract class WrappedPropertyAccessorDescriptor(annotations: Annotations, sourceElement: SourceElement) : + WrappedSimpleFunctionDescriptor(annotations, sourceElement), PropertyAccessorDescriptor { + override fun isDefault(): Boolean = false + + override fun getOriginal(): WrappedPropertyAccessorDescriptor = this + + override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertyAccessorDescriptor } + + override fun getCorrespondingProperty(): PropertyDescriptor = owner.correspondingPropertySymbol!!.descriptor + + override val correspondingVariable: VariableDescriptorWithAccessors get() = correspondingProperty +} + +class WrappedPropertyGetterDescriptor(annotations: Annotations, sourceElement: SourceElement) : + WrappedPropertyAccessorDescriptor(annotations, sourceElement), PropertyGetterDescriptor { + override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertyGetterDescriptor } + + override fun getOriginal(): WrappedPropertyGetterDescriptor = this +} + +class WrappedPropertySetterDescriptor(annotations: Annotations, sourceElement: SourceElement) : + WrappedPropertyAccessorDescriptor(annotations, sourceElement), PropertySetterDescriptor { + override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertySetterDescriptor } + + override fun getOriginal(): WrappedPropertySetterDescriptor = this +} + open class WrappedFieldDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE