From 5663dfb77234b0f87265af0fe19093d4f5947ddd Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Tue, 18 Feb 2020 13:18:25 +0700 Subject: [PATCH] [Commonizer] Apply interner to avoid duplicated CirSetter objects --- .../commonizer/mergedtree/ir/CirProperty.kt | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirProperty.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirProperty.kt index 4d46ab90543..f8da6e1e793 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirProperty.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/mergedtree/ir/CirProperty.kt @@ -104,7 +104,8 @@ data class CirGetter private constructor( } } -data class CirSetter( +@Suppress("DataClassPrivateConstructor") +data class CirSetter private constructor( override val annotations: List, val parameterAnnotations: List, override val visibility: Visibility, @@ -113,22 +114,28 @@ data class CirSetter( override val isInline: Boolean ) : CirPropertyAccessor, CirDeclarationWithVisibility { companion object { - fun createDefaultNoAnnotations(visibility: Visibility) = CirSetter( - emptyList(), - emptyList(), - visibility, - isDefault = visibility == Visibilities.PUBLIC, - isExternal = false, - isInline = false + private val interner = NonThreadSafeInterner() + + fun createDefaultNoAnnotations(visibility: Visibility) = interner.intern( + CirSetter( + annotations = emptyList(), + parameterAnnotations = emptyList(), + visibility = visibility, + isDefault = visibility == Visibilities.PUBLIC, + isExternal = false, + isInline = false + ) ) - fun PropertySetterDescriptor.toSetter() = CirSetter( - annotations.map(CirAnnotation.Companion::create), - valueParameters.single().annotations.map(CirAnnotation.Companion::create), - visibility, - isDefault, - isExternal, - isInline + fun PropertySetterDescriptor.toSetter() = interner.intern( + CirSetter( + annotations = annotations.map(CirAnnotation.Companion::create), + parameterAnnotations = valueParameters.single().annotations.map(CirAnnotation.Companion::create), + visibility = visibility, + isDefault = isDefault, + isExternal = isExternal, + isInline = isInline + ) ) } }