[IR] Clean up WrappedDescriptors API
This commit is contained in:
@@ -32,11 +32,11 @@ import org.jetbrains.kotlin.storage.StorageManager
|
|||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
abstract class WrappedDeclarationDescriptor<T : IrDeclaration>(annotations: Annotations) : DeclarationDescriptor {
|
abstract class WrappedDeclarationDescriptor<T : IrDeclaration> : DeclarationDescriptorWithSource {
|
||||||
private val annotations_ = annotations
|
|
||||||
|
|
||||||
override val annotations: Annotations
|
override val annotations: Annotations
|
||||||
get() = if (annotations_ != Annotations.EMPTY) annotations_ else annotationsFromOwner
|
get() = annotationsFromOwner
|
||||||
|
|
||||||
|
override fun getSource(): SourceElement = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
private val annotationsFromOwner by lazy {
|
private val annotationsFromOwner by lazy {
|
||||||
val ownerAnnotations = (owner as? IrAnnotationContainer)?.annotations ?: return@lazy Annotations.EMPTY
|
val ownerAnnotations = (owner as? IrAnnotationContainer)?.annotations ?: return@lazy Annotations.EMPTY
|
||||||
@@ -107,10 +107,7 @@ abstract class WrappedDeclarationDescriptor<T : IrDeclaration>(annotations: Anno
|
|||||||
fun isBound(): Boolean = _owner != null
|
fun isBound(): Boolean = _owner != null
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class WrappedCallableDescriptor<T : IrDeclaration>(
|
abstract class WrappedCallableDescriptor<T : IrDeclaration> : CallableDescriptor, WrappedDeclarationDescriptor<T>() {
|
||||||
annotations: Annotations,
|
|
||||||
private val sourceElement: SourceElement
|
|
||||||
) : CallableDescriptor, WrappedDeclarationDescriptor<T>(annotations) {
|
|
||||||
override fun getOriginal() = this
|
override fun getOriginal() = this
|
||||||
|
|
||||||
override fun substitute(substitutor: TypeSubstitutor): CallableDescriptor =
|
override fun substitute(substitutor: TypeSubstitutor): CallableDescriptor =
|
||||||
@@ -120,7 +117,7 @@ abstract class WrappedCallableDescriptor<T : IrDeclaration>(
|
|||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSource() = sourceElement
|
override fun getSource() = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
override fun getExtensionReceiverParameter(): ReceiverParameterDescriptor? = null
|
override fun getExtensionReceiverParameter(): ReceiverParameterDescriptor? = null
|
||||||
|
|
||||||
@@ -162,10 +159,7 @@ abstract class WrappedCallableDescriptor<T : IrDeclaration>(
|
|||||||
// TODO: (Roman Artemev) do not create this kind of descriptor for dispatch receiver parameters
|
// TODO: (Roman Artemev) do not create this kind of descriptor for dispatch receiver parameters
|
||||||
// WrappedReceiverParameterDescriptor should be used instead
|
// WrappedReceiverParameterDescriptor should be used instead
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedValueParameterDescriptor(
|
open class WrappedValueParameterDescriptor : ValueParameterDescriptor, WrappedCallableDescriptor<IrValueParameter>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : ValueParameterDescriptor, WrappedCallableDescriptor<IrValueParameter>(annotations, sourceElement) {
|
|
||||||
|
|
||||||
override val index get() = owner.index
|
override val index get() = owner.index
|
||||||
override val isCrossinline get() = owner.isCrossinline
|
override val isCrossinline get() = owner.isCrossinline
|
||||||
@@ -207,10 +201,7 @@ open class WrappedValueParameterDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedReceiverParameterDescriptor(
|
open class WrappedReceiverParameterDescriptor : ReceiverParameterDescriptor, WrappedCallableDescriptor<IrValueParameter>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : ReceiverParameterDescriptor, WrappedCallableDescriptor<IrValueParameter>(annotations, sourceElement) {
|
|
||||||
|
|
||||||
override fun getValue(): ReceiverValue {
|
override fun getValue(): ReceiverValue {
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||||
@@ -245,10 +236,7 @@ open class WrappedReceiverParameterDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedTypeParameterDescriptor(
|
open class WrappedTypeParameterDescriptor : TypeParameterDescriptor, WrappedCallableDescriptor<IrTypeParameter>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : TypeParameterDescriptor, WrappedCallableDescriptor<IrTypeParameter>(annotations, sourceElement) {
|
|
||||||
override fun getName() = owner.name
|
override fun getName() = owner.name
|
||||||
|
|
||||||
override fun isReified() = owner.isReified
|
override fun isReified() = owner.isReified
|
||||||
@@ -311,10 +299,7 @@ open class WrappedTypeParameterDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedVariableDescriptor(
|
open class WrappedVariableDescriptor : VariableDescriptor, WrappedCallableDescriptor<IrVariable>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : VariableDescriptor, WrappedCallableDescriptor<IrVariable>(annotations, sourceElement) {
|
|
||||||
|
|
||||||
override fun getContainingDeclaration() = (owner.parent as IrFunction).descriptor
|
override fun getContainingDeclaration() = (owner.parent as IrFunction).descriptor
|
||||||
override fun getType() = owner.type.toKotlinType()
|
override fun getType() = owner.type.toKotlinType()
|
||||||
@@ -347,8 +332,8 @@ open class WrappedVariableDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedVariableDescriptorWithAccessor() : VariableDescriptorWithAccessors,
|
open class WrappedVariableDescriptorWithAccessor : VariableDescriptorWithAccessors,
|
||||||
WrappedCallableDescriptor<IrLocalDelegatedProperty>(Annotations.EMPTY, SourceElement.NO_SOURCE) {
|
WrappedCallableDescriptor<IrLocalDelegatedProperty>() {
|
||||||
override fun getName(): Name = owner.name
|
override fun getName(): Name = owner.name
|
||||||
|
|
||||||
override fun substitute(substitutor: TypeSubstitutor): VariableDescriptor {
|
override fun substitute(substitutor: TypeSubstitutor): VariableDescriptor {
|
||||||
@@ -378,10 +363,7 @@ open class WrappedVariableDescriptorWithAccessor() : VariableDescriptorWithAcces
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedSimpleFunctionDescriptor(
|
open class WrappedSimpleFunctionDescriptor : SimpleFunctionDescriptor, WrappedCallableDescriptor<IrSimpleFunction>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : SimpleFunctionDescriptor, WrappedCallableDescriptor<IrSimpleFunction>(annotations, sourceElement) {
|
|
||||||
|
|
||||||
override fun getOverriddenDescriptors() = owner.overriddenSymbols.map { it.descriptor }
|
override fun getOverriddenDescriptors() = owner.overriddenSymbols.map { it.descriptor }
|
||||||
|
|
||||||
@@ -462,10 +444,7 @@ class WrappedFunctionDescriptorWithContainerSource : WrappedSimpleFunctionDescri
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedClassConstructorDescriptor(
|
open class WrappedClassConstructorDescriptor : ClassConstructorDescriptor, WrappedCallableDescriptor<IrConstructor>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : ClassConstructorDescriptor, WrappedCallableDescriptor<IrConstructor>(annotations, sourceElement) {
|
|
||||||
override fun getContainingDeclaration() = (owner.parent as IrClass).descriptor
|
override fun getContainingDeclaration() = (owner.parent as IrClass).descriptor
|
||||||
|
|
||||||
override fun getDispatchReceiverParameter() = owner.dispatchReceiverParameter?.run {
|
override fun getDispatchReceiverParameter() = owner.dispatchReceiverParameter?.run {
|
||||||
@@ -557,10 +536,7 @@ open class WrappedClassConstructorDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedClassDescriptor(
|
open class WrappedClassDescriptor : ClassDescriptor, WrappedDeclarationDescriptor<IrClass>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : ClassDescriptor, WrappedDeclarationDescriptor<IrClass>(annotations) {
|
|
||||||
override fun getName() = owner.name
|
override fun getName() = owner.name
|
||||||
|
|
||||||
override fun getMemberScope(typeArguments: MutableList<out TypeProjection>) = MemberScope.Empty
|
override fun getMemberScope(typeArguments: MutableList<out TypeProjection>) = MemberScope.Empty
|
||||||
@@ -573,8 +549,6 @@ open class WrappedClassDescriptor(
|
|||||||
|
|
||||||
override fun getStaticScope() = MemberScope.Empty
|
override fun getStaticScope() = MemberScope.Empty
|
||||||
|
|
||||||
override fun getSource() = sourceElement
|
|
||||||
|
|
||||||
override fun getConstructors() =
|
override fun getConstructors() =
|
||||||
owner.declarations.filterIsInstance<IrConstructor>().filter { !it.origin.isSynthetic }.map { it.descriptor }.toList()
|
owner.declarations.filterIsInstance<IrConstructor>().filter { !it.origin.isSynthetic }.map { it.descriptor }.toList()
|
||||||
|
|
||||||
@@ -686,10 +660,7 @@ class LazyTypeConstructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedEnumEntryDescriptor(
|
open class WrappedEnumEntryDescriptor : ClassDescriptor, WrappedDeclarationDescriptor<IrEnumEntry>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : ClassDescriptor, WrappedDeclarationDescriptor<IrEnumEntry>(annotations) {
|
|
||||||
override fun getName() = owner.name
|
override fun getName() = owner.name
|
||||||
|
|
||||||
override fun getMemberScope(typeArguments: MutableList<out TypeProjection>) = MemberScope.Empty
|
override fun getMemberScope(typeArguments: MutableList<out TypeProjection>) = MemberScope.Empty
|
||||||
@@ -702,7 +673,7 @@ open class WrappedEnumEntryDescriptor(
|
|||||||
|
|
||||||
override fun getStaticScope() = MemberScope.Empty
|
override fun getStaticScope() = MemberScope.Empty
|
||||||
|
|
||||||
override fun getSource() = sourceElement
|
override fun getSource() = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
override fun getConstructors() =
|
override fun getConstructors() =
|
||||||
getCorrespondingClass().declarations.asSequence().filterIsInstance<IrConstructor>().map { it.descriptor }.toList()
|
getCorrespondingClass().declarations.asSequence().filterIsInstance<IrConstructor>().map { it.descriptor }.toList()
|
||||||
@@ -783,10 +754,7 @@ open class WrappedEnumEntryDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedPropertyDescriptor(
|
open class WrappedPropertyDescriptor : PropertyDescriptor, WrappedDeclarationDescriptor<IrProperty>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : PropertyDescriptor, WrappedDeclarationDescriptor<IrProperty>(annotations) {
|
|
||||||
override fun getModality() = owner.modality
|
override fun getModality() = owner.modality
|
||||||
|
|
||||||
override fun setOverriddenDescriptors(overriddenDescriptors: MutableCollection<out CallableMemberDescriptor>) {
|
override fun setOverriddenDescriptors(overriddenDescriptors: MutableCollection<out CallableMemberDescriptor>) {
|
||||||
@@ -797,7 +765,7 @@ open class WrappedPropertyDescriptor(
|
|||||||
|
|
||||||
override fun getName() = owner.name
|
override fun getName() = owner.name
|
||||||
|
|
||||||
override fun getSource() = sourceElement
|
override fun getSource() = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
override fun hasSynthesizedParameterNames(): Boolean {
|
override fun hasSynthesizedParameterNames(): Boolean {
|
||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
@@ -894,8 +862,7 @@ class WrappedPropertyDescriptorWithContainerSource : WrappedPropertyDescriptor()
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
abstract class WrappedPropertyAccessorDescriptor(annotations: Annotations, sourceElement: SourceElement) :
|
abstract class WrappedPropertyAccessorDescriptor : WrappedSimpleFunctionDescriptor(), PropertyAccessorDescriptor {
|
||||||
WrappedSimpleFunctionDescriptor(annotations, sourceElement), PropertyAccessorDescriptor {
|
|
||||||
override fun isDefault(): Boolean = false
|
override fun isDefault(): Boolean = false
|
||||||
|
|
||||||
override fun getOriginal(): WrappedPropertyAccessorDescriptor = this
|
override fun getOriginal(): WrappedPropertyAccessorDescriptor = this
|
||||||
@@ -907,25 +874,22 @@ abstract class WrappedPropertyAccessorDescriptor(annotations: Annotations, sourc
|
|||||||
override val correspondingVariable: VariableDescriptorWithAccessors get() = correspondingProperty
|
override val correspondingVariable: VariableDescriptorWithAccessors get() = correspondingProperty
|
||||||
}
|
}
|
||||||
|
|
||||||
class WrappedPropertyGetterDescriptor(annotations: Annotations, sourceElement: SourceElement) :
|
class WrappedPropertyGetterDescriptor :
|
||||||
WrappedPropertyAccessorDescriptor(annotations, sourceElement), PropertyGetterDescriptor {
|
WrappedPropertyAccessorDescriptor(), PropertyGetterDescriptor {
|
||||||
override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertyGetterDescriptor }
|
override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertyGetterDescriptor }
|
||||||
|
|
||||||
override fun getOriginal(): WrappedPropertyGetterDescriptor = this
|
override fun getOriginal(): WrappedPropertyGetterDescriptor = this
|
||||||
}
|
}
|
||||||
|
|
||||||
class WrappedPropertySetterDescriptor(annotations: Annotations, sourceElement: SourceElement) :
|
class WrappedPropertySetterDescriptor :
|
||||||
WrappedPropertyAccessorDescriptor(annotations, sourceElement), PropertySetterDescriptor {
|
WrappedPropertyAccessorDescriptor(), PropertySetterDescriptor {
|
||||||
override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertySetterDescriptor }
|
override fun getOverriddenDescriptors() = super.getOverriddenDescriptors().map { it as PropertySetterDescriptor }
|
||||||
|
|
||||||
override fun getOriginal(): WrappedPropertySetterDescriptor = this
|
override fun getOriginal(): WrappedPropertySetterDescriptor = this
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedTypeAliasDescriptor(
|
open class WrappedTypeAliasDescriptor : WrappedDeclarationDescriptor<IrTypeAlias>(), TypeAliasDescriptor {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : WrappedDeclarationDescriptor<IrTypeAlias>(annotations), TypeAliasDescriptor {
|
|
||||||
|
|
||||||
override val underlyingType: SimpleType
|
override val underlyingType: SimpleType
|
||||||
get() = throw UnsupportedOperationException("Unexpected use of WrappedTypeAliasDescriptor $this")
|
get() = throw UnsupportedOperationException("Unexpected use of WrappedTypeAliasDescriptor $this")
|
||||||
@@ -960,7 +924,7 @@ open class WrappedTypeAliasDescriptor(
|
|||||||
|
|
||||||
override fun getModality(): Modality = Modality.FINAL
|
override fun getModality(): Modality = Modality.FINAL
|
||||||
|
|
||||||
override fun getSource(): SourceElement = sourceElement
|
override fun getSource(): SourceElement = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
override fun getVisibility(): Visibility = owner.visibility
|
override fun getVisibility(): Visibility = owner.visibility
|
||||||
|
|
||||||
@@ -979,10 +943,7 @@ open class WrappedTypeAliasDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
open class WrappedFieldDescriptor(
|
open class WrappedFieldDescriptor : PropertyDescriptor, WrappedDeclarationDescriptor<IrField>() {
|
||||||
annotations: Annotations = Annotations.EMPTY,
|
|
||||||
private val sourceElement: SourceElement = SourceElement.NO_SOURCE
|
|
||||||
) : PropertyDescriptor, WrappedDeclarationDescriptor<IrField>(annotations) {
|
|
||||||
override fun getModality() = if (owner.isFinal) Modality.FINAL else Modality.OPEN
|
override fun getModality() = if (owner.isFinal) Modality.FINAL else Modality.OPEN
|
||||||
|
|
||||||
override fun setOverriddenDescriptors(overriddenDescriptors: MutableCollection<out CallableMemberDescriptor>) {
|
override fun setOverriddenDescriptors(overriddenDescriptors: MutableCollection<out CallableMemberDescriptor>) {
|
||||||
@@ -993,7 +954,7 @@ open class WrappedFieldDescriptor(
|
|||||||
|
|
||||||
override fun getName() = owner.name
|
override fun getName() = owner.name
|
||||||
|
|
||||||
override fun getSource() = sourceElement
|
override fun getSource() = SourceElement.NO_SOURCE
|
||||||
|
|
||||||
override fun hasSynthesizedParameterNames() = false
|
override fun hasSynthesizedParameterNames() = false
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user