[Commonizer] Apply interner to avoid duplicated CirSetter objects
This commit is contained in:
+22
-15
@@ -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
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user