[Commonizer] Apply interner to avoid duplicated CirAnnotation objects
This commit is contained in:
+8
-1
@@ -6,12 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.NonThreadSafeInterner
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
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.constants.*
|
import org.jetbrains.kotlin.resolve.constants.*
|
||||||
|
|
||||||
class CirAnnotation(original: AnnotationDescriptor) {
|
class CirAnnotation private constructor(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.mapKeys { it.key.intern() }
|
val allValueArguments: Map<Name, ConstantValue<*>> = original.allValueArguments.mapKeys { it.key.intern() }
|
||||||
|
|
||||||
@@ -40,6 +41,12 @@ class CirAnnotation(original: AnnotationDescriptor) {
|
|||||||
fqName == other.fqName && allValueArguments == other.allValueArguments
|
fqName == other.fqName && allValueArguments == other.allValueArguments
|
||||||
} else
|
} else
|
||||||
false
|
false
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val interner = NonThreadSafeInterner<CirAnnotation>()
|
||||||
|
|
||||||
|
fun create(original: AnnotationDescriptor): CirAnnotation = interner.intern(CirAnnotation(original))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun checkSupportedInCommonization(constantValue: ConstantValue<*>, location: () -> String) {
|
internal fun checkSupportedInCommonization(constantValue: ConstantValue<*>, location: () -> String) {
|
||||||
|
|||||||
+2
-2
@@ -63,7 +63,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.Companion::create)
|
||||||
override val name = original.name.intern()
|
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()
|
||||||
@@ -84,7 +84,7 @@ class CirClassConstructorImpl(original: ClassConstructorDescriptor) : CirClassCo
|
|||||||
override val containingClassKind = original.containingDeclaration.kind
|
override val containingClassKind = original.containingDeclaration.kind
|
||||||
override val containingClassModality = original.containingDeclaration.modality
|
override val containingClassModality = original.containingDeclaration.modality
|
||||||
override val containingClassIsData = original.containingDeclaration.isData
|
override val containingClassIsData = original.containingDeclaration.isData
|
||||||
override val annotations = original.annotations.map(::CirAnnotation)
|
override val annotations = original.annotations.map(CirAnnotation.Companion::create)
|
||||||
override val visibility = original.visibility
|
override val visibility = original.visibility
|
||||||
override val typeParameters = original.typeParameters.mapNotNull { typeParameter ->
|
override val typeParameters = original.typeParameters.mapNotNull { typeParameter ->
|
||||||
// save only type parameters that are contributed by the constructor itself
|
// save only type parameters that are contributed by the constructor itself
|
||||||
|
|||||||
+1
-1
@@ -74,7 +74,7 @@ data class CirCommonValueParameter(
|
|||||||
|
|
||||||
class CirValueParameterImpl(original: ValueParameterDescriptor) : CirValueParameter {
|
class CirValueParameterImpl(original: ValueParameterDescriptor) : CirValueParameter {
|
||||||
override val name = original.name.intern()
|
override val name = original.name.intern()
|
||||||
override val annotations = original.annotations.map(::CirAnnotation)
|
override val annotations = original.annotations.map(CirAnnotation.Companion::create)
|
||||||
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)
|
||||||
override val declaresDefaultValue = original.declaresDefaultValue()
|
override val declaresDefaultValue = original.declaresDefaultValue()
|
||||||
|
|||||||
+2
-2
@@ -24,7 +24,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.Companion::create)
|
||||||
final override val name = original.name.intern()
|
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
|
||||||
@@ -51,7 +51,7 @@ data class CirExtensionReceiver(
|
|||||||
) {
|
) {
|
||||||
companion object {
|
companion object {
|
||||||
fun CirType.toReceiverNoAnnotations() = CirExtensionReceiver( /* TODO: commonize annotations, KT-34234 */ emptyList(), this)
|
fun CirType.toReceiverNoAnnotations() = CirExtensionReceiver( /* TODO: commonize annotations, KT-34234 */ emptyList(), this)
|
||||||
fun ReceiverParameterDescriptor.toReceiver() = CirExtensionReceiver(annotations.map(::CirAnnotation), CirType.create(type))
|
fun ReceiverParameterDescriptor.toReceiver() = CirExtensionReceiver(annotations.map(CirAnnotation.Companion::create), CirType.create(type))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -51,8 +51,8 @@ class CirPropertyImpl(original: PropertyDescriptor) : CirFunctionOrPropertyImpl<
|
|||||||
override val isDelegate = @Suppress("DEPRECATION") original.isDelegated
|
override val isDelegate = @Suppress("DEPRECATION") original.isDelegated
|
||||||
override val getter = original.getter?.toGetter()
|
override val getter = original.getter?.toGetter()
|
||||||
override val setter = original.setter?.toSetter()
|
override val setter = original.setter?.toSetter()
|
||||||
override val backingFieldAnnotations = original.backingField?.annotations?.map(::CirAnnotation)
|
override val backingFieldAnnotations = original.backingField?.annotations?.map(CirAnnotation.Companion::create)
|
||||||
override val delegateFieldAnnotations = original.delegateField?.annotations?.map(::CirAnnotation)
|
override val delegateFieldAnnotations = original.delegateField?.annotations?.map(CirAnnotation.Companion::create)
|
||||||
override val compileTimeInitializer = original.compileTimeInitializer
|
override val compileTimeInitializer = original.compileTimeInitializer
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -82,7 +82,7 @@ data class CirGetter(
|
|||||||
if (isDefault && annotations.isEmpty())
|
if (isDefault && annotations.isEmpty())
|
||||||
DEFAULT_NO_ANNOTATIONS
|
DEFAULT_NO_ANNOTATIONS
|
||||||
else
|
else
|
||||||
CirGetter(annotations.map(::CirAnnotation), isDefault, isExternal, isInline)
|
CirGetter(annotations.map(CirAnnotation.Companion::create), isDefault, isExternal, isInline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,8 +105,8 @@ data class CirSetter(
|
|||||||
)
|
)
|
||||||
|
|
||||||
fun PropertySetterDescriptor.toSetter() = CirSetter(
|
fun PropertySetterDescriptor.toSetter() = CirSetter(
|
||||||
annotations.map(::CirAnnotation),
|
annotations.map(CirAnnotation.Companion::create),
|
||||||
valueParameters.single().annotations.map(::CirAnnotation),
|
valueParameters.single().annotations.map(CirAnnotation.Companion::create),
|
||||||
visibility,
|
visibility,
|
||||||
isDefault,
|
isDefault,
|
||||||
isExternal,
|
isExternal,
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ class CirSimpleType private constructor(original: SimpleType) : CirType() {
|
|||||||
val abbreviation = (original as? AbbreviatedType)?.abbreviation ?: original
|
val abbreviation = (original as? AbbreviatedType)?.abbreviation ?: original
|
||||||
val expanded = (original as? AbbreviatedType)?.expandedType ?: original
|
val expanded = (original as? AbbreviatedType)?.expandedType ?: original
|
||||||
|
|
||||||
annotations = abbreviation.annotations.map(::CirAnnotation)
|
annotations = abbreviation.annotations.map(CirAnnotation.Companion::create)
|
||||||
kind = CirSimpleTypeKind.determineKind(abbreviation.declarationDescriptor)
|
kind = CirSimpleTypeKind.determineKind(abbreviation.declarationDescriptor)
|
||||||
fqName = abbreviation.fqNameInterned
|
fqName = abbreviation.fqNameInterned
|
||||||
arguments = abbreviation.arguments.map(::CirTypeProjection)
|
arguments = abbreviation.arguments.map(::CirTypeProjection)
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,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.Companion::create)
|
||||||
override val name = original.name.intern()
|
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
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,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.Companion::create)
|
||||||
override val name = original.name.intern()
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user