diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirType.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirType.kt index b7df3f6a9bc..77d1223c1bb 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirType.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirType.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir import kotlinx.metadata.KmType +import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner import org.jetbrains.kotlin.types.Variance typealias CirTypeSignature = String @@ -46,14 +47,27 @@ sealed class CirSimpleType : CirType() { } } -data class CirTypeParameterType( - val index: Int, - override val isMarkedNullable: Boolean -) : CirSimpleType() { +abstract class CirTypeParameterType : CirSimpleType() { + abstract val index: Int + override fun appendDescriptionTo(builder: StringBuilder) { builder.append('#').append(index) super.appendDescriptionTo(builder) } + + companion object { + fun createInterned( + index: Int, + isMarkedNullable: Boolean + ): CirTypeParameterType = interner.intern( + CirTypeParameterTypeInternedImpl( + index = index, + isMarkedNullable = isMarkedNullable + ) + ) + + private val interner = Interner() + } } sealed class CirClassOrTypeAliasType : CirSimpleType() { @@ -111,3 +125,8 @@ data class CirTypeProjectionImpl(val projectionKind: Variance, val type: CirType type.appendDescriptionTo(this) } } + +private data class CirTypeParameterTypeInternedImpl( + override val index: Int, + override val isMarkedNullable: Boolean +) : CirTypeParameterType() diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirAnnotationFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirAnnotationFactory.kt index fdf3eb62689..115e056fff2 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirAnnotationFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirAnnotationFactory.kt @@ -34,7 +34,7 @@ object CirAnnotationFactory { arguments = clazz.typeParameters.compactMap { typeParameter -> CirTypeProjectionImpl( projectionKind = typeParameter.variance, - type = CirTypeFactory.createTypeParameterType( + type = CirTypeParameterType.createInterned( index = typeParameter.index, isMarkedNullable = false ) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt index 1ca014c610b..cadcfd55798 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt @@ -32,7 +32,6 @@ object CirTypeFactory { private val classTypeInterner = Interner() private val typeAliasTypeInterner = Interner() - private val typeParameterTypeInterner = Interner() fun create(source: KmType, typeResolver: CirTypeResolver): CirType { @Suppress("NAME_SHADOWING") @@ -76,7 +75,7 @@ object CirTypeFactory { ) } is KmClassifier.TypeParameter -> { - createTypeParameterType( + CirTypeParameterType.createInterned( index = typeResolver.resolveTypeParameterIndex(classifier.id), isMarkedNullable = isMarkedNullable ) @@ -118,19 +117,6 @@ object CirTypeFactory { ) } - @Suppress("MemberVisibilityCanBePrivate") - fun createTypeParameterType( - index: Int, - isMarkedNullable: Boolean - ): CirTypeParameterType { - return typeParameterTypeInterner.intern( - CirTypeParameterType( - index = index, - isMarkedNullable = isMarkedNullable - ) - ) - } - fun makeNullable(type: T): T { if (type.isMarkedNullable) return type @@ -149,7 +135,7 @@ object CirTypeFactory { arguments = type.arguments, isMarkedNullable = true ) - is CirTypeParameterType -> createTypeParameterType( + is CirTypeParameterType -> CirTypeParameterType.createInterned( index = type.index, isMarkedNullable = true )