[Commonizer] Encapsulate interning inside of CIR entities: CirFunctionModifiers
This commit is contained in:
+33
@@ -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
|
||||
|
||||
+1
-25
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-17
@@ -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
|
||||
+1
-2
@@ -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,
|
||||
|
||||
+1
-2
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user