diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/CommonizedClassDescriptor.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/CommonizedClassDescriptor.kt index 9d7da19ed4c..8261964c993 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/CommonizedClassDescriptor.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/CommonizedClassDescriptor.kt @@ -23,23 +23,23 @@ import org.jetbrains.kotlin.types.TypeConstructor import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner class CommonizedClassDescriptor( - targetComponents: TargetDeclarationsBuilderComponents, - containingDeclaration: DeclarationDescriptor, - override val annotations: Annotations, - name: Name, - private val kind: ClassKind, - private val modality: Modality, - private val visibility: DescriptorVisibility, - private val isCompanion: Boolean, - private val isData: Boolean, - private val isInline: Boolean, - private val isInner: Boolean, - isExternal: Boolean, - private val isExpect: Boolean, - private val isActual: Boolean, - cirDeclaredTypeParameters: List, - companionObjectName: Name?, - cirSupertypes: Collection + targetComponents: TargetDeclarationsBuilderComponents, + containingDeclaration: DeclarationDescriptor, + override val annotations: Annotations, + name: Name, + private val kind: ClassKind, + private val modality: Modality, + private val visibility: DescriptorVisibility, + private val isCompanion: Boolean, + private val isData: Boolean, + private val isInline: Boolean, + private val isInner: Boolean, + isExternal: Boolean, + private val isExpect: Boolean, + private val isActual: Boolean, + cirDeclaredTypeParameters: List, + companionObjectName: Name?, + cirSupertypes: Collection ) : ClassDescriptorBase(targetComponents.storageManager, containingDeclaration, name, SourceElement.NO_SOURCE, isExternal) { private lateinit var _unsubstitutedMemberScope: CommonizedMemberScope private lateinit var constructors: Collection @@ -147,6 +147,12 @@ class CommonizedClassDescriptor( class CommonizedClassConstructorDescriptor( containingDeclaration: ClassDescriptor, annotations: Annotations, - isPrimary: Boolean, - kind: CallableMemberDescriptor.Kind -) : ClassConstructorDescriptorImpl(containingDeclaration, null, annotations, isPrimary, kind, SourceElement.NO_SOURCE) + isPrimary: Boolean +) : ClassConstructorDescriptorImpl( + containingDeclaration, + null, + annotations, + isPrimary, + CallableMemberDescriptor.Kind.DECLARATION, + SourceElement.NO_SOURCE +) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/classDescriptors.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/classDescriptors.kt index bdbd3aadde8..b19d2b33103 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/classDescriptors.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/builder/classDescriptors.kt @@ -105,8 +105,7 @@ private fun CirClassConstructor.buildDescriptor( val constructorDescriptor = CommonizedClassConstructorDescriptor( containingDeclaration = containingDeclaration, annotations = annotations.buildDescriptors(targetComponents), - isPrimary = isPrimary, - kind = kind + isPrimary = isPrimary ) constructorDescriptor.isExpect = isExpect diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClassConstructor.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClassConstructor.kt index d4ec55b248f..b241f85e641 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClassConstructor.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClassConstructor.kt @@ -5,8 +5,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor - interface CirClassConstructor : CirDeclaration, CirHasAnnotations, @@ -16,6 +14,5 @@ interface CirClassConstructor : CirCallableMemberWithParameters { val isPrimary: Boolean - val kind: CallableMemberDescriptor.Kind override val containingClassDetails: CirContainingClassDetails // non-nullable } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassConstructorFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassConstructorFactory.kt index 307c450059b..7d0e19e9e37 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassConstructorFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassConstructorFactory.kt @@ -12,30 +12,34 @@ import org.jetbrains.kotlin.descriptors.commonizer.cir.* import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirClassConstructorImpl object CirClassConstructorFactory { - fun create(source: ClassConstructorDescriptor): CirClassConstructor = create( - annotations = source.annotations.map(CirAnnotationFactory::create), - typeParameters = source.typeParameters.mapNotNull { typeParameter -> - // save only type parameters that are contributed by the constructor itself - typeParameter.takeIf { it.containingDeclaration == source }?.let(CirTypeParameterFactory::create) - }, - visibility = source.visibility, - containingClassDetails = CirContainingClassDetailsFactory.create(source), - valueParameters = source.valueParameters.map(CirValueParameterFactory::create), - hasStableParameterNames = source.hasStableParameterNames(), - isPrimary = source.isPrimary, - kind = source.kind - ) + fun create(source: ClassConstructorDescriptor): CirClassConstructor { + check(source.kind == CallableMemberDescriptor.Kind.DECLARATION) { + "Unexpected ${CallableMemberDescriptor.Kind::class.java} for class constructor $source, ${source::class.java}: ${source.kind}" + } + + return create( + annotations = source.annotations.map(CirAnnotationFactory::create), + typeParameters = source.typeParameters.mapNotNull { typeParameter -> + // save only type parameters that are contributed by the constructor itself + typeParameter.takeIf { it.containingDeclaration == source }?.let(CirTypeParameterFactory::create) + }, + visibility = source.visibility, + containingClassDetails = CirContainingClassDetailsFactory.create(source), + valueParameters = source.valueParameters.map(CirValueParameterFactory::create), + hasStableParameterNames = source.hasStableParameterNames(), + isPrimary = source.isPrimary + ) + } @Suppress("NOTHING_TO_INLINE") inline fun create( - annotations: List, - typeParameters: List, - visibility: DescriptorVisibility, - containingClassDetails: CirContainingClassDetails, - valueParameters: List, - hasStableParameterNames: Boolean, - isPrimary: Boolean, - kind: CallableMemberDescriptor.Kind + annotations: List, + typeParameters: List, + visibility: DescriptorVisibility, + containingClassDetails: CirContainingClassDetails, + valueParameters: List, + hasStableParameterNames: Boolean, + isPrimary: Boolean ): CirClassConstructor { return CirClassConstructorImpl( annotations = annotations, @@ -44,8 +48,7 @@ object CirClassConstructorFactory { containingClassDetails = containingClassDetails, valueParameters = valueParameters, hasStableParameterNames = hasStableParameterNames, - isPrimary = isPrimary, - kind = kind + isPrimary = isPrimary ) } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassConstructorImpl.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassConstructorImpl.kt index 26df3f4c428..a2406026584 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassConstructorImpl.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassConstructorImpl.kt @@ -5,17 +5,15 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.impl -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.descriptors.commonizer.cir.* data class CirClassConstructorImpl( - override val annotations: List, - override val typeParameters: List, - override val visibility: DescriptorVisibility, - override val containingClassDetails: CirContainingClassDetails, - override var valueParameters: List, - override var hasStableParameterNames: Boolean, - override val isPrimary: Boolean, - override val kind: CallableMemberDescriptor.Kind + override val annotations: List, + override val typeParameters: List, + override val visibility: DescriptorVisibility, + override val containingClassDetails: CirContainingClassDetails, + override var valueParameters: List, + override var hasStableParameterNames: Boolean, + override val isPrimary: Boolean ) : CirClassConstructor diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassConstructorCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassConstructorCommonizer.kt index 5d2ec24ff59..7b1f595e4c0 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassConstructorCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassConstructorCommonizer.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.core -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClassConstructor import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassConstructorFactory @@ -14,7 +13,6 @@ import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirClassifiersCach class ClassConstructorCommonizer(cache: CirClassifiersCache) : AbstractStandardCommonizer() { private var isPrimary = false - private lateinit var kind: CallableMemberDescriptor.Kind private val visibility = VisibilityCommonizer.equalizing() private val typeParameters = TypeParameterListCommonizer(cache) private val valueParameters = CallableValueParametersCommonizer(cache) @@ -30,21 +28,18 @@ class ClassConstructorCommonizer(cache: CirClassifiersCache) : AbstractStandardC containingClassDetails = CirContainingClassDetailsFactory.DOES_NOT_MATTER, valueParameters = valueParameters.valueParameters, hasStableParameterNames = valueParameters.hasStableParameterNames, - isPrimary = isPrimary, - kind = kind + isPrimary = isPrimary ) } override fun initialize(first: CirClassConstructor) { isPrimary = first.isPrimary - kind = first.kind } override fun doCommonizeWith(next: CirClassConstructor): Boolean { return !next.containingClassDetails.kind.isSingleton // don't commonize constructors for objects and enum entries && next.containingClassDetails.modality != Modality.SEALED // don't commonize constructors for sealed classes (not not their subclasses) && isPrimary == next.isPrimary - && kind == next.kind && visibility.commonizeWith(next) && typeParameters.commonizeWith(next.typeParameters) && valueParameters.commonizeWith(next)