diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt index 218ea712028..0fe482841a6 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/classifiers.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode.Cla import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildClassNode import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.storage.NullableLazyValue import org.jetbrains.kotlin.storage.StorageManager @@ -33,7 +34,7 @@ internal fun mergeClasses( clazz?.unsubstitutedMemberScope?.collectMembers( PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it }, FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it }, - ClassCollector { classesMap[it.name][index] = it } + ClassCollector { classesMap[it.name.intern()][index] = it } ) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirAnnotation.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirAnnotation.kt index 4bd09de5aa6..d523b1fa4c4 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirAnnotation.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirAnnotation.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.resolve.constants.* class CirAnnotation(original: AnnotationDescriptor) { val fqName: FqName = original.fqName?.intern() ?: error("Annotation with no FQ name: ${original::class.java}, $original") - val allValueArguments: Map> = original.allValueArguments + val allValueArguments: Map> = original.allValueArguments.mapKeys { it.key.intern() } init { allValueArguments.forEach { (name, constantValue) -> diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirClass.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirClass.kt index 71d3a8aa1ac..7e08a068c0c 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirClass.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirClass.kt @@ -64,7 +64,7 @@ data class CirCommonClassConstructor( class CirClassImpl(original: ClassDescriptor) : CirClass { override val annotations = original.annotations.map(::CirAnnotation) - override val name = original.name + override val name = original.name.intern() override val typeParameters = original.declaredTypeParameters.map(::CirTypeParameterImpl) override val companion = original.companionObjectDescriptor?.fqNameSafe?.intern() override val kind = original.kind diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunction.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunction.kt index 0922a722dfb..29ffb185254 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunction.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunction.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.name.Name interface CirFunctionModifiers { @@ -72,7 +73,7 @@ data class CirCommonValueParameter( } class CirValueParameterImpl(original: ValueParameterDescriptor) : CirValueParameter { - override val name = original.name + override val name = original.name.intern() override val annotations = original.annotations.map(::CirAnnotation) override val returnType = CirType.create(original.returnType!!) override val varargElementType = original.varargElementType?.let(CirType.Companion::create) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunctionOrProperty.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunctionOrProperty.kt index 0d4a18a3dd2..002a0950031 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunctionOrProperty.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirFunctionOrProperty.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirExtensionReceiver.Companion.toReceiver +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern interface CirFunctionOrProperty : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclarationWithTypeParameters, CirDeclarationWithVisibility, CirDeclarationWithModality, CirMaybeCallableMemberOfClass { val isExternal: Boolean @@ -24,7 +25,7 @@ abstract class CirCommonFunctionOrProperty : CirFunctionOrProperty { abstract class CirFunctionOrPropertyImpl(original: T) : CirFunctionOrProperty { final override val annotations = original.annotations.map(::CirAnnotation) - final override val name = original.name + final override val name = original.name.intern() final override val modality = original.modality final override val visibility = original.visibility final override val isExternal = original.isExternal diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirModule.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirModule.kt index 5e35a8c949f..a4bc2f2dc6e 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirModule.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirModule.kt @@ -6,8 +6,9 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.name.Name data class CirModule(val name: Name) : CirDeclaration { - constructor(descriptor: ModuleDescriptor) : this(descriptor.name) + constructor(descriptor: ModuleDescriptor) : this(descriptor.name.intern()) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeAlias.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeAlias.kt index 9bdb3d465bf..8675fffd367 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeAlias.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeAlias.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern interface CirTypeAlias : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclarationWithTypeParameters, CirDeclarationWithVisibility { val underlyingType: CirSimpleType @@ -14,7 +15,7 @@ interface CirTypeAlias : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclar class CirTypeAliasImpl(original: TypeAliasDescriptor) : CirTypeAlias { override val annotations = original.annotations.map(::CirAnnotation) - override val name = original.name + override val name = original.name.intern() override val typeParameters = original.declaredTypeParameters.map(::CirTypeParameterImpl) override val visibility = original.visibility override val underlyingType = CirSimpleType(original.underlyingType) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeParameter.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeParameter.kt index f6027d9b503..d48eccc2a8f 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeParameter.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirTypeParameter.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance @@ -28,7 +29,7 @@ data class CirCommonTypeParameter( class CirTypeParameterImpl(original: TypeParameterDescriptor) : CirTypeParameter { override val annotations = original.annotations.map(::CirAnnotation) - override val name = original.name + override val name = original.name.intern() override val isReified = original.isReified override val variance = original.variance override val upperBounds = original.upperBounds.map(CirType.Companion::create) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt index ef5f2a1bc98..e796a57b68a 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/memberScopes.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.commonizer.core.Commonizer +import org.jetbrains.kotlin.descriptors.commonizer.utils.* import org.jetbrains.kotlin.descriptors.commonizer.utils.fqNameWithTypeParameters import org.jetbrains.kotlin.descriptors.commonizer.utils.isBlacklistedDarwinFunction import org.jetbrains.kotlin.descriptors.commonizer.utils.isDeprecated @@ -69,7 +70,7 @@ internal data class PropertyApproximationKey( val extensionReceiverParameter: String? ) { constructor(property: PropertyDescriptor) : this( - property.name, + property.name.intern(), property.extensionReceiverParameter?.type?.fqNameWithTypeParameters ) } @@ -81,8 +82,8 @@ internal data class FunctionApproximationKey( val extensionReceiverParameter: String? ) { constructor(function: SimpleFunctionDescriptor) : this( - function.name, - function.valueParameters.map { it.name to it.type.fqNameWithTypeParameters }, + function.name.intern(), + function.valueParameters.map { it.name.intern() to it.type.fqNameWithTypeParameters }, function.extensionReceiverParameter?.type?.fqNameWithTypeParameters ) } @@ -92,6 +93,6 @@ internal data class ConstructorApproximationKey( val valueParameters: List> ) { constructor(constructor: ConstructorDescriptor) : this( - constructor.valueParameters.map { it.name to it.type.fqNameWithTypeParameters } + constructor.valueParameters.map { it.name.intern() to it.type.fqNameWithTypeParameters } ) } \ No newline at end of file diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/modules.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/modules.kt index b7090a5cc42..53a1811fdca 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/modules.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/modules.kt @@ -32,7 +32,7 @@ internal fun mergeModules( } } - val moduleName = modules.firstNonNull().name + val moduleName = modules.firstNonNull().name.intern() for ((packageFqName, packageMemberScopesGroup) in packageMemberScopesMap) { node.packages += mergePackages(storageManager, cacheRW, moduleName, packageFqName, packageMemberScopesGroup.toList()) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt index beaf4716de5..b4aec8a3cd5 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/packages.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirPackageNode import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildPackageNode import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.MemberScope @@ -36,8 +37,8 @@ internal fun mergePackages( memberScope?.collectMembers( PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it }, FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it }, - ClassCollector { classesMap[it.name][index] = it }, - TypeAliasCollector { typeAliasesMap[it.name][index] = it } + ClassCollector { classesMap[it.name.intern()][index] = it }, + TypeAliasCollector { typeAliasesMap[it.name.intern()][index] = it } ) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/root.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/root.kt index f8d2cb667cc..68572a52cd6 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/root.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/root.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.TargetProvider import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirRootNode import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildRootNode import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap +import org.jetbrains.kotlin.descriptors.commonizer.utils.intern import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.storage.StorageManager @@ -23,7 +24,7 @@ internal fun mergeRoots( targetProviders.forEachIndexed { index, targetProvider -> for (module in targetProvider.modulesProvider.loadModules()) { - modulesMap[module.name][index] = module + modulesMap[module.name.intern()][index] = module } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/type.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/type.kt index 264dece1e16..3f01cd7cb56 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/type.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/type.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.utils import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils @@ -21,6 +22,7 @@ internal inline val KotlinType.fqNameInterned: FqName get() = declarationDescriptor.fqNameSafe.intern() internal fun FqName.intern(): FqName = fqNameInterner.intern(this) +internal fun Name.intern(): Name = nameInterner.intern(this) internal val KotlinType.fqNameWithTypeParameters: String get() { @@ -75,3 +77,4 @@ private fun StringBuilder.buildFqNameWithTypeParameters(type: KotlinType, explor private val stringInterner = NonThreadSafeInterner() private val fqNameInterner = NonThreadSafeInterner() +private val nameInterner = NonThreadSafeInterner()