[Commonizer] Apply interner to avoid duplicated Name objects
This commit is contained in:
+2
-1
@@ -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.buildClassNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildTypeAliasNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.storage.NullableLazyValue
|
import org.jetbrains.kotlin.storage.NullableLazyValue
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
@@ -33,7 +34,7 @@ internal fun mergeClasses(
|
|||||||
clazz?.unsubstitutedMemberScope?.collectMembers(
|
clazz?.unsubstitutedMemberScope?.collectMembers(
|
||||||
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
||||||
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
|
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
|
||||||
ClassCollector { classesMap[it.name][index] = it }
|
ClassCollector { classesMap[it.name.intern()][index] = it }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.resolve.constants.*
|
|||||||
|
|
||||||
class CirAnnotation(original: AnnotationDescriptor) {
|
class CirAnnotation(original: AnnotationDescriptor) {
|
||||||
val fqName: FqName = original.fqName?.intern() ?: error("Annotation with no FQ name: ${original::class.java}, $original")
|
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 {
|
init {
|
||||||
allValueArguments.forEach { (name, constantValue) ->
|
allValueArguments.forEach { (name, constantValue) ->
|
||||||
|
|||||||
+1
-1
@@ -64,7 +64,7 @@ data class CirCommonClassConstructor(
|
|||||||
|
|
||||||
class CirClassImpl(original: ClassDescriptor) : CirClass {
|
class CirClassImpl(original: ClassDescriptor) : CirClass {
|
||||||
override val annotations = original.annotations.map(::CirAnnotation)
|
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 typeParameters = original.declaredTypeParameters.map(::CirTypeParameterImpl)
|
||||||
override val companion = original.companionObjectDescriptor?.fqNameSafe?.intern()
|
override val companion = original.companionObjectDescriptor?.fqNameSafe?.intern()
|
||||||
override val kind = original.kind
|
override val kind = original.kind
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface CirFunctionModifiers {
|
interface CirFunctionModifiers {
|
||||||
@@ -72,7 +73,7 @@ data class CirCommonValueParameter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
class CirValueParameterImpl(original: ValueParameterDescriptor) : CirValueParameter {
|
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 annotations = original.annotations.map(::CirAnnotation)
|
||||||
override val returnType = CirType.create(original.returnType!!)
|
override val returnType = CirType.create(original.returnType!!)
|
||||||
override val varargElementType = original.varargElementType?.let(CirType.Companion::create)
|
override val varargElementType = original.varargElementType?.let(CirType.Companion::create)
|
||||||
|
|||||||
+2
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.CirExtensionReceiver.Companion.toReceiver
|
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 {
|
interface CirFunctionOrProperty : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclarationWithTypeParameters, CirDeclarationWithVisibility, CirDeclarationWithModality, CirMaybeCallableMemberOfClass {
|
||||||
val isExternal: Boolean
|
val isExternal: Boolean
|
||||||
@@ -24,7 +25,7 @@ abstract class CirCommonFunctionOrProperty : CirFunctionOrProperty {
|
|||||||
|
|
||||||
abstract class CirFunctionOrPropertyImpl<T : CallableMemberDescriptor>(original: T) : CirFunctionOrProperty {
|
abstract class CirFunctionOrPropertyImpl<T : CallableMemberDescriptor>(original: T) : CirFunctionOrProperty {
|
||||||
final override val annotations = original.annotations.map(::CirAnnotation)
|
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 modality = original.modality
|
||||||
final override val visibility = original.visibility
|
final override val visibility = original.visibility
|
||||||
final override val isExternal = original.isExternal
|
final override val isExternal = original.isExternal
|
||||||
|
|||||||
+2
-1
@@ -6,8 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
data class CirModule(val name: Name) : CirDeclaration {
|
data class CirModule(val name: Name) : CirDeclaration {
|
||||||
constructor(descriptor: ModuleDescriptor) : this(descriptor.name)
|
constructor(descriptor: ModuleDescriptor) : this(descriptor.name.intern())
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
||||||
|
|
||||||
interface CirTypeAlias : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclarationWithTypeParameters, CirDeclarationWithVisibility {
|
interface CirTypeAlias : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclarationWithTypeParameters, CirDeclarationWithVisibility {
|
||||||
val underlyingType: CirSimpleType
|
val underlyingType: CirSimpleType
|
||||||
@@ -14,7 +15,7 @@ interface CirTypeAlias : CirAnnotatedDeclaration, CirNamedDeclaration, CirDeclar
|
|||||||
|
|
||||||
class CirTypeAliasImpl(original: TypeAliasDescriptor) : CirTypeAlias {
|
class CirTypeAliasImpl(original: TypeAliasDescriptor) : CirTypeAlias {
|
||||||
override val annotations = original.annotations.map(::CirAnnotation)
|
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 typeParameters = original.declaredTypeParameters.map(::CirTypeParameterImpl)
|
||||||
override val visibility = original.visibility
|
override val visibility = original.visibility
|
||||||
override val underlyingType = CirSimpleType(original.underlyingType)
|
override val underlyingType = CirSimpleType(original.underlyingType)
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ data class CirCommonTypeParameter(
|
|||||||
|
|
||||||
class CirTypeParameterImpl(original: TypeParameterDescriptor) : CirTypeParameter {
|
class CirTypeParameterImpl(original: TypeParameterDescriptor) : CirTypeParameter {
|
||||||
override val annotations = original.annotations.map(::CirAnnotation)
|
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 isReified = original.isReified
|
||||||
override val variance = original.variance
|
override val variance = original.variance
|
||||||
override val upperBounds = original.upperBounds.map(CirType.Companion::create)
|
override val upperBounds = original.upperBounds.map(CirType.Companion::create)
|
||||||
|
|||||||
+5
-4
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.core.Commonizer
|
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.fqNameWithTypeParameters
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.isBlacklistedDarwinFunction
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isBlacklistedDarwinFunction
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.isDeprecated
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isDeprecated
|
||||||
@@ -69,7 +70,7 @@ internal data class PropertyApproximationKey(
|
|||||||
val extensionReceiverParameter: String?
|
val extensionReceiverParameter: String?
|
||||||
) {
|
) {
|
||||||
constructor(property: PropertyDescriptor) : this(
|
constructor(property: PropertyDescriptor) : this(
|
||||||
property.name,
|
property.name.intern(),
|
||||||
property.extensionReceiverParameter?.type?.fqNameWithTypeParameters
|
property.extensionReceiverParameter?.type?.fqNameWithTypeParameters
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -81,8 +82,8 @@ internal data class FunctionApproximationKey(
|
|||||||
val extensionReceiverParameter: String?
|
val extensionReceiverParameter: String?
|
||||||
) {
|
) {
|
||||||
constructor(function: SimpleFunctionDescriptor) : this(
|
constructor(function: SimpleFunctionDescriptor) : this(
|
||||||
function.name,
|
function.name.intern(),
|
||||||
function.valueParameters.map { it.name to it.type.fqNameWithTypeParameters },
|
function.valueParameters.map { it.name.intern() to it.type.fqNameWithTypeParameters },
|
||||||
function.extensionReceiverParameter?.type?.fqNameWithTypeParameters
|
function.extensionReceiverParameter?.type?.fqNameWithTypeParameters
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -92,6 +93,6 @@ internal data class ConstructorApproximationKey(
|
|||||||
val valueParameters: List<Pair<Name, String>>
|
val valueParameters: List<Pair<Name, String>>
|
||||||
) {
|
) {
|
||||||
constructor(constructor: ConstructorDescriptor) : this(
|
constructor(constructor: ConstructorDescriptor) : this(
|
||||||
constructor.valueParameters.map { it.name to it.type.fqNameWithTypeParameters }
|
constructor.valueParameters.map { it.name.intern() to it.type.fqNameWithTypeParameters }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
+1
-1
@@ -32,7 +32,7 @@ internal fun mergeModules(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val moduleName = modules.firstNonNull().name
|
val moduleName = modules.firstNonNull().name.intern()
|
||||||
for ((packageFqName, packageMemberScopesGroup) in packageMemberScopesMap) {
|
for ((packageFqName, packageMemberScopesGroup) in packageMemberScopesMap) {
|
||||||
node.packages += mergePackages(storageManager, cacheRW, moduleName, packageFqName, packageMemberScopesGroup.toList())
|
node.packages += mergePackages(storageManager, cacheRW, moduleName, packageFqName, packageMemberScopesGroup.toList())
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -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.CirRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildPackageNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildPackageNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
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.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
@@ -36,8 +37,8 @@ internal fun mergePackages(
|
|||||||
memberScope?.collectMembers(
|
memberScope?.collectMembers(
|
||||||
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
PropertyCollector { propertiesMap[PropertyApproximationKey(it)][index] = it },
|
||||||
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
|
FunctionCollector { functionsMap[FunctionApproximationKey(it)][index] = it },
|
||||||
ClassCollector { classesMap[it.name][index] = it },
|
ClassCollector { classesMap[it.name.intern()][index] = it },
|
||||||
TypeAliasCollector { typeAliasesMap[it.name][index] = it }
|
TypeAliasCollector { typeAliasesMap[it.name.intern()][index] = it }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -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.CirRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir.buildRootNode
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.CommonizedGroupMap
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
@@ -23,7 +24,7 @@ internal fun mergeRoots(
|
|||||||
|
|
||||||
targetProviders.forEachIndexed { index, targetProvider ->
|
targetProviders.forEachIndexed { index, targetProvider ->
|
||||||
for (module in targetProvider.modulesProvider.loadModules()) {
|
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.descriptors.ClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
@@ -21,6 +22,7 @@ internal inline val KotlinType.fqNameInterned: FqName
|
|||||||
get() = declarationDescriptor.fqNameSafe.intern()
|
get() = declarationDescriptor.fqNameSafe.intern()
|
||||||
|
|
||||||
internal fun FqName.intern(): FqName = fqNameInterner.intern(this)
|
internal fun FqName.intern(): FqName = fqNameInterner.intern(this)
|
||||||
|
internal fun Name.intern(): Name = nameInterner.intern(this)
|
||||||
|
|
||||||
internal val KotlinType.fqNameWithTypeParameters: String
|
internal val KotlinType.fqNameWithTypeParameters: String
|
||||||
get() {
|
get() {
|
||||||
@@ -75,3 +77,4 @@ private fun StringBuilder.buildFqNameWithTypeParameters(type: KotlinType, explor
|
|||||||
private val stringInterner = NonThreadSafeInterner<String>()
|
private val stringInterner = NonThreadSafeInterner<String>()
|
||||||
|
|
||||||
private val fqNameInterner = NonThreadSafeInterner<FqName>()
|
private val fqNameInterner = NonThreadSafeInterner<FqName>()
|
||||||
|
private val nameInterner = NonThreadSafeInterner<Name>()
|
||||||
|
|||||||
Reference in New Issue
Block a user