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 9df7a932815..6a51dea11d4 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 @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.backend.common.descriptors -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.ReceiverParameterDescriptorImpl @@ -529,12 +528,103 @@ open class WrappedClassDescriptor( } } +open class WrappedEnumEntryDescriptor( + annotations: Annotations = Annotations.EMPTY, + private val sourceElement: SourceElement = SourceElement.NO_SOURCE +) : ClassDescriptor, WrappedDeclarationDescriptor(annotations) { + override fun getName() = owner.name + + override fun getMemberScope(typeArguments: MutableList) = MemberScope.Empty + + override fun getMemberScope(typeSubstitution: TypeSubstitution) = MemberScope.Empty + + override fun getUnsubstitutedMemberScope() = MemberScope.Empty + + override fun getUnsubstitutedInnerClassesScope() = MemberScope.Empty + + override fun getStaticScope() = MemberScope.Empty + + override fun getSource() = sourceElement + + override fun getConstructors() = + getCorrespondingClass().declarations.asSequence().filterIsInstance().map { it.descriptor }.toList() + + private fun getCorrespondingClass() = owner.correspondingClass ?: (owner.parent as IrClass) + + override fun getContainingDeclaration() = (owner.parent as IrSymbolOwner).symbol.descriptor + + + private val _defaultType: SimpleType by lazy { + TypeUtils.makeUnsubstitutedType(this, unsubstitutedMemberScope) + } + + override fun getDefaultType(): SimpleType = _defaultType + + override fun getKind() = ClassKind.ENUM_ENTRY + + override fun getModality() = Modality.FINAL + + override fun getCompanionObjectDescriptor() = null + + override fun getVisibility() = Visibilities.DEFAULT_VISIBILITY + + override fun isCompanionObject() = false + + override fun isData() = false + + override fun isInline() = false + + override fun getThisAsReceiverParameter() = (owner.parent as IrClass).descriptor.thisAsReceiverParameter + + override fun getUnsubstitutedPrimaryConstructor(): ClassConstructorDescriptor? { + TODO("not implemented") + } + + override fun getDeclaredTypeParameters() = emptyList() + + override fun getSealedSubclasses(): Collection { + TODO("not implemented") + } + + override fun getOriginal() = this + + override fun isExpect() = false + + override fun substitute(substitutor: TypeSubstitutor): ClassifierDescriptorWithTypeParameters { + TODO("not implemented") + } + + override fun isActual() = false + + private val _typeConstructor: TypeConstructor by lazy { + ClassTypeConstructorImpl( + this, + emptyList(), + getCorrespondingClass().superTypes.map { it.toKotlinType() }, + LockBasedStorageManager.NO_LOCKS + ) + } + + override fun getTypeConstructor(): TypeConstructor = _typeConstructor + + override fun isInner() = false + + override fun isExternal() = false + + override fun accept(visitor: DeclarationDescriptorVisitor?, data: D): R = + visitor!!.visitClassDescriptor(this, data) + + override fun acceptVoid(visitor: DeclarationDescriptorVisitor?) { + visitor!!.visitClassDescriptor(this, null) + } +} + open class WrappedPropertyDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE -) : PropertyDescriptor, WrappedDeclarationDescriptor(annotations) { - override fun getModality() = owner.correspondingProperty?.modality ?: Modality.FINAL +) : PropertyDescriptor, WrappedDeclarationDescriptor(annotations) { + override fun getModality() = owner.modality override fun setOverriddenDescriptors(overriddenDescriptors: MutableCollection) { TODO("not implemented") @@ -572,6 +662,118 @@ open class WrappedPropertyDescriptor( TODO("not implemented") } + override fun getAccessors(): MutableList = listOfNotNull( + owner.getter?.descriptor as? PropertyAccessorDescriptor, + owner.setter?.descriptor as? PropertyAccessorDescriptor + ).toMutableList() + + override fun getTypeParameters() = emptyList() + + override fun getVisibility() = owner.visibility + + override val setter: PropertySetterDescriptor? get() = owner.setter?.descriptor as? PropertySetterDescriptor + + override fun getOriginal() = this + + override fun isExpect() = false + + override fun substitute(substitutor: TypeSubstitutor): PropertyDescriptor { + TODO("not implemented") + } + + override fun isActual() = false + + override fun getReturnType() = (owner.getter?.returnType ?: owner.backingField?.type!!).toKotlinType() + + override fun hasStableParameterNames() = false + + override fun getType(): KotlinType = returnType + + override fun isVar() = owner.isVar + + override fun getDispatchReceiverParameter(): ReceiverParameterDescriptor? { + TODO("not implemented") + } + + override fun isConst() = owner.isConst + + override fun getContainingDeclaration() = (owner.parent as IrSymbolOwner).symbol.descriptor + + override fun isLateInit() = owner.isLateinit + + override fun getExtensionReceiverParameter(): ReceiverParameterDescriptor? { + TODO("not implemented") + } + + override fun isExternal() = owner.isExternal + + override fun accept(visitor: DeclarationDescriptorVisitor?, data: D) = + visitor!!.visitPropertyDescriptor(this, data) + + override fun acceptVoid(visitor: DeclarationDescriptorVisitor?) { + visitor!!.visitPropertyDescriptor(this, null) + } + + override val getter: PropertyGetterDescriptor? get() = owner.getter?.descriptor as? PropertyGetterDescriptor + + override fun newCopyBuilder(): CallableMemberDescriptor.CopyBuilder { + TODO("not implemented") + } + + override val isDelegated get() = owner.isDelegated + + override fun getBackingField(): FieldDescriptor? { + TODO("not implemented") + } + + override fun getDelegateField(): FieldDescriptor? { + TODO("not implemented") + } + + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null +} + +open class WrappedFieldDescriptor( + annotations: Annotations = Annotations.EMPTY, + private val sourceElement: SourceElement = SourceElement.NO_SOURCE +) : PropertyDescriptor, WrappedDeclarationDescriptor(annotations) { + override fun getModality() = if (owner.isFinal) Modality.FINAL else Modality.OPEN + + override fun setOverriddenDescriptors(overriddenDescriptors: MutableCollection) { + TODO("not implemented") + } + + override fun getKind() = CallableMemberDescriptor.Kind.SYNTHESIZED + + override fun getName() = owner.name + + override fun getSource() = sourceElement + + override fun hasSynthesizedParameterNames() = false + + override fun getOverriddenDescriptors(): MutableCollection = + owner.overriddenSymbols.map { it.descriptor }.toMutableList() + + override fun copy( + newOwner: DeclarationDescriptor?, + modality: Modality?, + visibility: Visibility?, + kind: CallableMemberDescriptor.Kind?, + copyOverrides: Boolean + ): CallableMemberDescriptor { + TODO("not implemented") + } + + override fun getValueParameters(): MutableList = mutableListOf() + + override fun getCompileTimeInitializer(): ConstantValue<*>? { + TODO("not implemented") + } + + override fun isSetterProjectedOut(): Boolean { + TODO("not implemented") + } + override fun getAccessors(): MutableList = mutableListOf() override fun getTypeParameters() = emptyList() diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index 7e0d0ec2248..3f3f7261577 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -624,7 +624,7 @@ class LocalDeclarationsLowering( parent: IrClass, fieldType: IrType ): IrField { - val descriptor = WrappedPropertyDescriptor() + val descriptor = WrappedFieldDescriptor() val symbol = IrFieldSymbolImpl(descriptor) return IrFieldImpl( startOffset, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt index def9bfba1d5..2bc945a38af 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.backend.js import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor -import org.jetbrains.kotlin.backend.common.descriptors.WrappedPropertyDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.backend.common.ir.DeclarationFactory import org.jetbrains.kotlin.backend.common.ir.copyTo import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom @@ -51,7 +51,7 @@ class JsDeclarationFactory : DeclarationFactory { } private fun createPropertyWithBackingField(name: Name, visibility: Visibility, parent: IrClass, fieldType: IrType, origin: IrDeclarationOrigin): IrField { - val descriptor = WrappedPropertyDescriptor() + val descriptor = WrappedFieldDescriptor() val symbol = IrFieldSymbolImpl(descriptor) return IrFieldImpl( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt index 5e70f3c787f..2041c9f7f4d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassDescriptor -import org.jetbrains.kotlin.backend.common.descriptors.WrappedPropertyDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedVariableDescriptor import org.jetbrains.kotlin.backend.common.ir.DeclarationFactory import org.jetbrains.kotlin.backend.common.ir.SharedVariablesManager @@ -143,7 +143,7 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration } private fun createClosureBoxPropertyDeclaration(): IrField { - val descriptor = WrappedPropertyDescriptor() + val descriptor = WrappedFieldDescriptor() val symbol = IrFieldSymbolImpl(descriptor) val fieldName = Name.identifier("v") return IrFieldImpl( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt index 7c052e04709..38540c6bac6 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor -import org.jetbrains.kotlin.backend.common.descriptors.WrappedPropertyDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.backend.common.ir.copyParameterDeclarationsFrom import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.lower.irBlockBody @@ -60,7 +60,7 @@ class EnumUsageLowering(val context: JsIrBackendContext) : FileLoweringPass { } private fun createFieldForEntry(entry: IrEnumEntry, irClass: IrClass): IrField { - val descriptor = WrappedPropertyDescriptor() + val descriptor = WrappedFieldDescriptor() val symbol = IrFieldSymbolImpl(descriptor) return entry.run { IrFieldImpl(startOffset, endOffset, origin, symbol, name, irClass.defaultType, Visibilities.PUBLIC, false, true, true).also { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableSuccessorsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableSuccessorsLowering.kt index 2c91f3ef8d2..77998bec10c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableSuccessorsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableSuccessorsLowering.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.atMostOne -import org.jetbrains.kotlin.backend.common.descriptors.WrappedPropertyDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.backend.common.ir.copyTo import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.IrElement @@ -157,7 +157,7 @@ class ThrowableSuccessorsLowering(context: JsIrBackendContext) : FileLoweringPas } private fun createBackingField(declaration: IrClass, name: Name, type: IrType): IrField { - val fieldDescriptor = WrappedPropertyDescriptor() + val fieldDescriptor = WrappedFieldDescriptor() val fieldSymbol = IrFieldSymbolImpl(fieldDescriptor) val fieldDeclaration = IrFieldImpl( UNDEFINED_OFFSET, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendFunctionsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendFunctionsLowering.kt index 8aa39543fcb..caf94f52b31 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendFunctionsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/SuspendFunctionsLowering.kt @@ -763,7 +763,7 @@ internal class SuspendFunctionsLowering(val context: JsIrBackendContext): FileLo } private fun addField(name: Name, type: IrType, isMutable: Boolean): IrField { - val descriptor = WrappedPropertyDescriptor() + val descriptor = WrappedFieldDescriptor() val symbol = IrFieldSymbolImpl(descriptor) return IrFieldImpl( irFunction.startOffset, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt index 530a0d19da1..f64a41c598d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/DeepCopyIrTreeWithDescriptors.kt @@ -90,7 +90,7 @@ internal class DeepCopyIrTreeWithSymbolsForInliner(val context: Context, } override fun visitField(declaration: IrField) { - (declaration.descriptor as WrappedPropertyDescriptor).bind(declaration) + (declaration.descriptor as WrappedFieldDescriptor).bind(declaration) declaration.acceptChildrenVoid(this) } @@ -149,7 +149,7 @@ internal class DeepCopyIrTreeWithSymbolsForInliner(val context: Context, WrappedClassDescriptor(descriptor.annotations, descriptor.source) override fun remapDeclaredField(descriptor: PropertyDescriptor) = - WrappedPropertyDescriptor(descriptor.annotations, descriptor.source) + WrappedFieldDescriptor(descriptor.annotations, descriptor.source) override fun remapDeclaredSimpleFunction(descriptor: FunctionDescriptor) = WrappedSimpleFunctionDescriptor(descriptor.annotations, descriptor.source) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt index af3ad30f2ba..1300e33602a 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/MoveCompanionObjectFieldsLowering.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.backend.jvm.lower import org.jetbrains.kotlin.backend.common.ClassLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext -import org.jetbrains.kotlin.backend.common.descriptors.WrappedPropertyDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedVariableDescriptor import org.jetbrains.kotlin.backend.common.lower.replaceThisByStaticReference import org.jetbrains.kotlin.backend.common.makePhase @@ -170,7 +170,7 @@ class MoveCompanionObjectFieldsLowering(val context: CommonBackendContext) : Cla oldField.name else Name.identifier(oldField.name.toString() + "\$companion") - val descriptor = WrappedPropertyDescriptor(oldField.descriptor.annotations, oldField.descriptor.source) + val descriptor = WrappedFieldDescriptor(oldField.descriptor.annotations, oldField.descriptor.source) val field = IrFieldImpl( oldField.startOffset, oldField.endOffset, IrDeclarationOrigin.PROPERTY_BACKING_FIELD,