[Commonizer] Encapsulate interning inside of CIR entities: CirFunctionModifiers

This commit is contained in:
Dmitriy Dolovov
2021-03-04 13:07:57 +03:00
parent 5e41a7c66b
commit ec1e4fb26e
5 changed files with 36 additions and 46 deletions
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir
import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner
interface CirFunctionModifiers {
val isOperator: Boolean
val isInfix: Boolean
@@ -12,4 +14,35 @@ interface CirFunctionModifiers {
val isTailrec: Boolean
val isSuspend: Boolean
val isExternal: Boolean
companion object {
fun createInterned(
isOperator: Boolean,
isInfix: Boolean,
isInline: Boolean,
isTailrec: Boolean,
isSuspend: Boolean,
isExternal: Boolean
): CirFunctionModifiers = interner.intern(
CirFunctionModifiersInternedImpl(
isOperator = isOperator,
isInfix = isInfix,
isInline = isInline,
isTailrec = isTailrec,
isSuspend = isSuspend,
isExternal = isExternal
)
)
private val interner = Interner<CirFunctionModifiersInternedImpl>()
}
}
private data class CirFunctionModifiersInternedImpl(
override val isOperator: Boolean,
override val isInfix: Boolean,
override val isInline: Boolean,
override val isTailrec: Boolean,
override val isSuspend: Boolean,
override val isExternal: Boolean
) : CirFunctionModifiers
@@ -8,13 +8,9 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import kotlinx.metadata.Flag
import kotlinx.metadata.KmFunction
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirFunctionModifiersImpl
import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner
object CirFunctionModifiersFactory {
private val interner = Interner<CirFunctionModifiers>()
fun create(source: KmFunction): CirFunctionModifiers = create(
fun create(source: KmFunction) = CirFunctionModifiers.createInterned(
isOperator = Flag.Function.IS_OPERATOR(source.flags),
isInfix = Flag.Function.IS_INFIX(source.flags),
isInline = Flag.Function.IS_INLINE(source.flags),
@@ -22,24 +18,4 @@ object CirFunctionModifiersFactory {
isSuspend = Flag.Function.IS_SUSPEND(source.flags),
isExternal = Flag.Function.IS_EXTERNAL(source.flags)
)
fun create(
isOperator: Boolean,
isInfix: Boolean,
isInline: Boolean,
isTailrec: Boolean,
isSuspend: Boolean,
isExternal: Boolean
): CirFunctionModifiers {
return interner.intern(
CirFunctionModifiersImpl(
isOperator = isOperator,
isInfix = isInfix,
isInline = isInline,
isTailrec = isTailrec,
isSuspend = isSuspend,
isExternal = isExternal
)
)
}
}
@@ -1,17 +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.commonizer.cir.CirFunctionModifiers
data class CirFunctionModifiersImpl(
override val isOperator: Boolean,
override val isInfix: Boolean,
override val isInline: Boolean,
override val isTailrec: Boolean,
override val isSuspend: Boolean,
override val isExternal: Boolean
) : CirFunctionModifiers
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirFunctionModifiersFactory
class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifiers, CirFunctionModifiers>() {
private class MutableModifiers(
@@ -26,7 +25,7 @@ class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifi
isExternal = immutable.isExternal
)
fun toImmutableModifiers(): CirFunctionModifiers = CirFunctionModifiersFactory.create(
fun toImmutableModifiers() = CirFunctionModifiers.createInterned(
isOperator = isOperator,
isInfix = isInfix,
isInline = isInline,
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirFunctionModifiersFactory
import org.junit.Test
class FunctionModifiersCommonizerTest : AbstractCommonizerTest<CirFunctionModifiers, CirFunctionModifiers>() {
@@ -171,7 +170,7 @@ private fun mockFunctionModifiers(
isTailrec: Boolean = false,
isSuspend: Boolean = false,
isExternal: Boolean = false
) = CirFunctionModifiersFactory.create(
) = CirFunctionModifiers.createInterned(
isOperator = isOperator,
isInfix = isInfix,
isInline = isInline,