[IR] Clean up WrappedDescriptors API

This commit is contained in:
Roman Artemev
2020-08-26 20:49:04 +03:00
parent c7b57c0fb3
commit cae29a5d1c
@@ -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