mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-23 15:52:40 +00:00
[Commonizer] Apply interner to avoid duplicated Name objects
This commit is contained in:
@@ -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 }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Name, ConstantValue<*>> = original.allValueArguments
|
||||
val allValueArguments: Map<Name, ConstantValue<*>> = original.allValueArguments.mapKeys { it.key.intern() }
|
||||
|
||||
init {
|
||||
allValueArguments.forEach { (name, constantValue) ->
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<T : CallableMemberDescriptor>(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
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<Pair<Name, String>>
|
||||
) {
|
||||
constructor(constructor: ConstructorDescriptor) : this(
|
||||
constructor.valueParameters.map { it.name to it.type.fqNameWithTypeParameters }
|
||||
constructor.valueParameters.map { it.name.intern() to it.type.fqNameWithTypeParameters }
|
||||
)
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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 }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<String>()
|
||||
|
||||
private val fqNameInterner = NonThreadSafeInterner<FqName>()
|
||||
private val nameInterner = NonThreadSafeInterner<Name>()
|
||||
|
||||
Reference in New Issue
Block a user