IR: introduce WrappedProperty{G,S}etterDescriptor
This is needed in order to support wrapped properties properly in KotlinTypeMapper (see the `is PropertyAccessorDescriptor` call in `mapFunctionName`) which is still being used when mapping function call signatures
This commit is contained in:
+5
-1
@@ -40,7 +40,11 @@ object DescriptorsToIrRemapper : DescriptorsRemapper {
|
|||||||
WrappedFieldDescriptor(descriptor.annotations, descriptor.source)
|
WrappedFieldDescriptor(descriptor.annotations, descriptor.source)
|
||||||
|
|
||||||
override fun remapDeclaredSimpleFunction(descriptor: FunctionDescriptor) =
|
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) =
|
override fun remapDeclaredProperty(descriptor: PropertyDescriptor) =
|
||||||
WrappedPropertyDescriptor(descriptor.annotations, descriptor.source)
|
WrappedPropertyDescriptor(descriptor.annotations, descriptor.source)
|
||||||
|
|||||||
+29
-5
@@ -434,7 +434,7 @@ open class WrappedSimpleFunctionDescriptor(
|
|||||||
visibility: Visibility?,
|
visibility: Visibility?,
|
||||||
kind: CallableMemberDescriptor.Kind?,
|
kind: CallableMemberDescriptor.Kind?,
|
||||||
copyOverrides: Boolean
|
copyOverrides: Boolean
|
||||||
): SimpleFunctionDescriptor {
|
): Nothing {
|
||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -797,10 +797,7 @@ open class WrappedPropertyDescriptor(
|
|||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAccessors(): MutableList<PropertyAccessorDescriptor> = listOfNotNull(
|
override fun getAccessors(): List<PropertyAccessorDescriptor> = listOfNotNull(getter, setter)
|
||||||
owner.getter?.descriptor as? PropertyAccessorDescriptor,
|
|
||||||
owner.setter?.descriptor as? PropertyAccessorDescriptor
|
|
||||||
).toMutableList()
|
|
||||||
|
|
||||||
override fun getTypeParameters(): List<TypeParameterDescriptor> = emptyList()
|
override fun getTypeParameters(): List<TypeParameterDescriptor> = emptyList()
|
||||||
|
|
||||||
@@ -867,6 +864,33 @@ class WrappedPropertyDescriptorWithContainerSource(
|
|||||||
override var containerSource: DeserializedContainerSource
|
override var containerSource: DeserializedContainerSource
|
||||||
) : WrappedPropertyDescriptor(), DescriptorWithContainerSource
|
) : 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(
|
open class WrappedFieldDescriptor(
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
annotations: Annotations = Annotations.EMPTY,
|
||||||
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
||||||
|
|||||||
Reference in New Issue
Block a user