[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
|
||||
|
||||
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<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.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<CirPropertySetter>()
|
||||
|
||||
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<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.commonizer.cir.CirHasVisibility
|
||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirPropertySetter
|
||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirPropertySetterFactory
|
||||
|
||||
class PropertySetterCommonizer : AbstractNullableCommonizer<CirPropertySetter, CirPropertySetter, CirHasVisibility, Visibility>(
|
||||
wrappedCommonizerFactory = { VisibilityCommonizer.equalizing() },
|
||||
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.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<CirPropertySetter?, CirPropertySetter?>() {
|
||||
@@ -93,13 +92,13 @@ class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?,
|
||||
|
||||
private fun doTestSuccess(expected: Visibility?, vararg variants: Visibility?) =
|
||||
super.doTestSuccess(
|
||||
expected = expected?.let { CirPropertySetterFactory.createDefaultNoAnnotations(expected) },
|
||||
*variants.map { it?.let(CirPropertySetterFactory::createDefaultNoAnnotations) }.toTypedArray()
|
||||
expected = expected?.let { CirPropertySetter.createDefaultNoAnnotations(expected) },
|
||||
*variants.map { it?.let(CirPropertySetter::createDefaultNoAnnotations) }.toTypedArray()
|
||||
)
|
||||
|
||||
private fun doTestFailure(vararg variants: Visibility?) =
|
||||
super.doTestFailure(
|
||||
*variants.map { it?.let(CirPropertySetterFactory::createDefaultNoAnnotations) }.toTypedArray(),
|
||||
*variants.map { it?.let(CirPropertySetter::createDefaultNoAnnotations) }.toTypedArray(),
|
||||
shouldFailOnFirstVariant = false
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user