[Commonizer] Encapsulate interning inside of CIR entities: CirPropertySetter
This commit is contained in:
+45
@@ -5,6 +5,51 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.cir
|
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 {
|
interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibility {
|
||||||
val parameterAnnotations: List<CirAnnotation>
|
val parameterAnnotations: List<CirAnnotation>
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun createInterned(
|
||||||
|
annotations: List<CirAnnotation>,
|
||||||
|
parameterAnnotations: List<CirAnnotation>,
|
||||||
|
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<CirPropertySetterInternedImpl>()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private data class CirPropertySetterInternedImpl(
|
||||||
|
override val annotations: List<CirAnnotation>,
|
||||||
|
override val parameterAnnotations: List<CirAnnotation>,
|
||||||
|
override val visibility: Visibility,
|
||||||
|
override val isDefault: Boolean,
|
||||||
|
override val isExternal: Boolean,
|
||||||
|
override val isInline: Boolean
|
||||||
|
) : CirPropertySetter
|
||||||
|
|||||||
+1
-38
@@ -9,24 +9,17 @@ import kotlinx.metadata.Flag
|
|||||||
import kotlinx.metadata.KmProperty
|
import kotlinx.metadata.KmProperty
|
||||||
import kotlinx.metadata.klib.annotations
|
import kotlinx.metadata.klib.annotations
|
||||||
import kotlinx.metadata.klib.setterAnnotations
|
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.CirPropertySetter
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertySetterImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeVisibility
|
import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeVisibility
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner
|
|
||||||
|
|
||||||
object CirPropertySetterFactory {
|
object CirPropertySetterFactory {
|
||||||
private val interner = Interner<CirPropertySetter>()
|
|
||||||
|
|
||||||
fun create(source: KmProperty, typeResolver: CirTypeResolver): CirPropertySetter? {
|
fun create(source: KmProperty, typeResolver: CirTypeResolver): CirPropertySetter? {
|
||||||
if (!Flag.Property.HAS_SETTER(source.flags))
|
if (!Flag.Property.HAS_SETTER(source.flags))
|
||||||
return null
|
return null
|
||||||
|
|
||||||
val setterFlags = source.setterFlags
|
val setterFlags = source.setterFlags
|
||||||
|
|
||||||
return create(
|
return CirPropertySetter.createInterned(
|
||||||
annotations = CirAnnotationFactory.createAnnotations(setterFlags, typeResolver, source::setterAnnotations),
|
annotations = CirAnnotationFactory.createAnnotations(setterFlags, typeResolver, source::setterAnnotations),
|
||||||
parameterAnnotations = source.setterParameter?.let { setterParameter ->
|
parameterAnnotations = source.setterParameter?.let { setterParameter ->
|
||||||
CirAnnotationFactory.createAnnotations(setterParameter.flags, typeResolver, setterParameter::annotations)
|
CirAnnotationFactory.createAnnotations(setterParameter.flags, typeResolver, setterParameter::annotations)
|
||||||
@@ -37,34 +30,4 @@ object CirPropertySetterFactory {
|
|||||||
isInline = Flag.PropertyAccessor.IS_INLINE(setterFlags)
|
isInline = Flag.PropertyAccessor.IS_INLINE(setterFlags)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun create(
|
|
||||||
annotations: List<CirAnnotation>,
|
|
||||||
parameterAnnotations: List<CirAnnotation>,
|
|
||||||
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
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
-19
@@ -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<CirAnnotation>,
|
|
||||||
override val parameterAnnotations: List<CirAnnotation>,
|
|
||||||
override val visibility: Visibility,
|
|
||||||
override val isDefault: Boolean,
|
|
||||||
override val isExternal: Boolean,
|
|
||||||
override val isInline: Boolean
|
|
||||||
) : CirPropertySetter
|
|
||||||
+1
-2
@@ -8,10 +8,9 @@ package org.jetbrains.kotlin.descriptors.commonizer.core
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory
|
|
||||||
|
|
||||||
class PropertySetterCommonizer : AbstractNullableCommonizer<CirPropertySetter, CirPropertySetter, CirHasVisibility, Visibility>(
|
class PropertySetterCommonizer : AbstractNullableCommonizer<CirPropertySetter, CirPropertySetter, CirHasVisibility, Visibility>(
|
||||||
wrappedCommonizerFactory = { VisibilityCommonizer.equalizing() },
|
wrappedCommonizerFactory = { VisibilityCommonizer.equalizing() },
|
||||||
extractor = { it },
|
extractor = { it },
|
||||||
builder = CirPropertySetterFactory::createDefaultNoAnnotations
|
builder = CirPropertySetter::createDefaultNoAnnotations
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-4
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.Visibilities.Protected
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibilities.Public
|
import org.jetbrains.kotlin.descriptors.Visibilities.Public
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?, CirPropertySetter?>() {
|
class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?, CirPropertySetter?>() {
|
||||||
@@ -93,13 +92,13 @@ class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?,
|
|||||||
|
|
||||||
private fun doTestSuccess(expected: Visibility?, vararg variants: Visibility?) =
|
private fun doTestSuccess(expected: Visibility?, vararg variants: Visibility?) =
|
||||||
super.doTestSuccess(
|
super.doTestSuccess(
|
||||||
expected = expected?.let { CirPropertySetterFactory.createDefaultNoAnnotations(expected) },
|
expected = expected?.let { CirPropertySetter.createDefaultNoAnnotations(expected) },
|
||||||
*variants.map { it?.let(CirPropertySetterFactory::createDefaultNoAnnotations) }.toTypedArray()
|
*variants.map { it?.let(CirPropertySetter::createDefaultNoAnnotations) }.toTypedArray()
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun doTestFailure(vararg variants: Visibility?) =
|
private fun doTestFailure(vararg variants: Visibility?) =
|
||||||
super.doTestFailure(
|
super.doTestFailure(
|
||||||
*variants.map { it?.let(CirPropertySetterFactory::createDefaultNoAnnotations) }.toTypedArray(),
|
*variants.map { it?.let(CirPropertySetter::createDefaultNoAnnotations) }.toTypedArray(),
|
||||||
shouldFailOnFirstVariant = false
|
shouldFailOnFirstVariant = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user