[Commonizer] Apply interner to avoid duplicated CirSetter objects

This commit is contained in:
Dmitriy Dolovov
2020-02-18 13:18:25 +07:00
parent e54640ddad
commit 5663dfb772
@@ -104,7 +104,8 @@ data class CirGetter private constructor(
} }
} }
data class CirSetter( @Suppress("DataClassPrivateConstructor")
data class CirSetter private constructor(
override val annotations: List<CirAnnotation>, override val annotations: List<CirAnnotation>,
val parameterAnnotations: List<CirAnnotation>, val parameterAnnotations: List<CirAnnotation>,
override val visibility: Visibility, override val visibility: Visibility,
@@ -113,22 +114,28 @@ data class CirSetter(
override val isInline: Boolean override val isInline: Boolean
) : CirPropertyAccessor, CirDeclarationWithVisibility { ) : CirPropertyAccessor, CirDeclarationWithVisibility {
companion object { companion object {
fun createDefaultNoAnnotations(visibility: Visibility) = CirSetter( private val interner = NonThreadSafeInterner<CirSetter>()
emptyList(),
emptyList(), fun createDefaultNoAnnotations(visibility: Visibility) = interner.intern(
visibility, CirSetter(
isDefault = visibility == Visibilities.PUBLIC, annotations = emptyList(),
isExternal = false, parameterAnnotations = emptyList(),
isInline = false visibility = visibility,
isDefault = visibility == Visibilities.PUBLIC,
isExternal = false,
isInline = false
)
) )
fun PropertySetterDescriptor.toSetter() = CirSetter( fun PropertySetterDescriptor.toSetter() = interner.intern(
annotations.map(CirAnnotation.Companion::create), CirSetter(
valueParameters.single().annotations.map(CirAnnotation.Companion::create), annotations = annotations.map(CirAnnotation.Companion::create),
visibility, parameterAnnotations = valueParameters.single().annotations.map(CirAnnotation.Companion::create),
isDefault, visibility = visibility,
isExternal, isDefault = isDefault,
isInline isExternal = isExternal,
isInline = isInline
)
) )
} }
} }