diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirPropertySetter.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirPropertySetter.kt index 8f28912ee73..5bd403dcd49 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirPropertySetter.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirPropertySetter.kt @@ -5,6 +5,51 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner + interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibility { val parameterAnnotations: List + + companion object { + fun createInterned( + annotations: List, + parameterAnnotations: List, + visibility: Visibility, + isDefault: Boolean, + isExternal: Boolean, + isInline: Boolean + ): CirPropertySetter = interner.intern( + CirPropertySetterInternedImpl( + annotations = annotations, + parameterAnnotations = parameterAnnotations, + visibility = visibility, + isDefault = isDefault, + isExternal = isExternal, + isInline = isInline + ) + ) + + @Suppress("NOTHING_TO_INLINE") + inline fun createDefaultNoAnnotations(visibility: Visibility): CirPropertySetter = createInterned( + annotations = emptyList(), + parameterAnnotations = emptyList(), + visibility = visibility, + isDefault = visibility == Visibilities.Public, + isExternal = false, + isInline = false + ) + + private val interner = Interner() + } } + +private data class CirPropertySetterInternedImpl( + override val annotations: List, + override val parameterAnnotations: List, + override val visibility: Visibility, + override val isDefault: Boolean, + override val isExternal: Boolean, + override val isInline: Boolean +) : CirPropertySetter diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirPropertySetterFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirPropertySetterFactory.kt index a2c15f841ed..fa161ddf96a 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirPropertySetterFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirPropertySetterFactory.kt @@ -9,24 +9,17 @@ import kotlinx.metadata.Flag import kotlinx.metadata.KmProperty import kotlinx.metadata.klib.annotations import kotlinx.metadata.klib.setterAnnotations -import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirAnnotation import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter -import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertySetterImpl import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeVisibility -import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner object CirPropertySetterFactory { - private val interner = Interner() - fun create(source: KmProperty, typeResolver: CirTypeResolver): CirPropertySetter? { if (!Flag.Property.HAS_SETTER(source.flags)) return null val setterFlags = source.setterFlags - return create( + return CirPropertySetter.createInterned( annotations = CirAnnotationFactory.createAnnotations(setterFlags, typeResolver, source::setterAnnotations), parameterAnnotations = source.setterParameter?.let { setterParameter -> CirAnnotationFactory.createAnnotations(setterParameter.flags, typeResolver, setterParameter::annotations) @@ -37,34 +30,4 @@ object CirPropertySetterFactory { isInline = Flag.PropertyAccessor.IS_INLINE(setterFlags) ) } - - fun create( - annotations: List, - parameterAnnotations: List, - visibility: Visibility, - isDefault: Boolean, - isExternal: Boolean, - isInline: Boolean - ): CirPropertySetter { - return interner.intern( - CirPropertySetterImpl( - annotations = annotations, - parameterAnnotations = parameterAnnotations, - visibility = visibility, - isDefault = isDefault, - isExternal = isExternal, - isInline = isInline - ) - ) - } - - @Suppress("NOTHING_TO_INLINE") - inline fun createDefaultNoAnnotations(visibility: Visibility): CirPropertySetter = create( - annotations = emptyList(), - parameterAnnotations = emptyList(), - visibility = visibility, - isDefault = visibility == Visibilities.Public, - isExternal = false, - isInline = false - ) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirPropertySetterImpl.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirPropertySetterImpl.kt deleted file mode 100644 index 6feb94c2b27..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirPropertySetterImpl.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.descriptors.commonizer.cir.impl - -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirAnnotation -import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter - -data class CirPropertySetterImpl( - override val annotations: List, - override val parameterAnnotations: List, - override val visibility: Visibility, - override val isDefault: Boolean, - override val isExternal: Boolean, - override val isInline: Boolean -) : CirPropertySetter diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizer.kt index f620f772512..7bf994cd654 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizer.kt @@ -8,10 +8,9 @@ package org.jetbrains.kotlin.descriptors.commonizer.core import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter -import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory class PropertySetterCommonizer : AbstractNullableCommonizer( wrappedCommonizerFactory = { VisibilityCommonizer.equalizing() }, extractor = { it }, - builder = CirPropertySetterFactory::createDefaultNoAnnotations + builder = CirPropertySetter::createDefaultNoAnnotations ) diff --git a/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizerTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizerTest.kt index d05bae5200c..c963d393e49 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizerTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/core/PropertySetterCommonizerTest.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.Visibilities.Protected import org.jetbrains.kotlin.descriptors.Visibilities.Public import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter -import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory import org.junit.Test class PropertySetterCommonizerTest : AbstractCommonizerTest() { @@ -93,13 +92,13 @@ class PropertySetterCommonizerTest : AbstractCommonizerTest