[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
|
package org.jetbrains.kotlin.descriptors.commonizer.cir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.Interner
|
||||||
|
|
||||||
interface CirFunctionModifiers {
|
interface CirFunctionModifiers {
|
||||||
val isOperator: Boolean
|
val isOperator: Boolean
|
||||||
val isInfix: Boolean
|
val isInfix: Boolean
|
||||||
@@ -12,4 +14,35 @@ interface CirFunctionModifiers {
|
|||||||
val isTailrec: Boolean
|
val isTailrec: Boolean
|
||||||
val isSuspend: Boolean
|
val isSuspend: Boolean
|
||||||
val isExternal: 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.Flag
|
||||||
import kotlinx.metadata.KmFunction
|
import kotlinx.metadata.KmFunction
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
|
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 {
|
object CirFunctionModifiersFactory {
|
||||||
private val interner = Interner<CirFunctionModifiers>()
|
fun create(source: KmFunction) = CirFunctionModifiers.createInterned(
|
||||||
|
|
||||||
fun create(source: KmFunction): CirFunctionModifiers = create(
|
|
||||||
isOperator = Flag.Function.IS_OPERATOR(source.flags),
|
isOperator = Flag.Function.IS_OPERATOR(source.flags),
|
||||||
isInfix = Flag.Function.IS_INFIX(source.flags),
|
isInfix = Flag.Function.IS_INFIX(source.flags),
|
||||||
isInline = Flag.Function.IS_INLINE(source.flags),
|
isInline = Flag.Function.IS_INLINE(source.flags),
|
||||||
@@ -22,24 +18,4 @@ object CirFunctionModifiersFactory {
|
|||||||
isSuspend = Flag.Function.IS_SUSPEND(source.flags),
|
isSuspend = Flag.Function.IS_SUSPEND(source.flags),
|
||||||
isExternal = Flag.Function.IS_EXTERNAL(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
|
package org.jetbrains.kotlin.descriptors.commonizer.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirFunctionModifiersFactory
|
|
||||||
|
|
||||||
class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifiers, CirFunctionModifiers>() {
|
class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifiers, CirFunctionModifiers>() {
|
||||||
private class MutableModifiers(
|
private class MutableModifiers(
|
||||||
@@ -26,7 +25,7 @@ class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifi
|
|||||||
isExternal = immutable.isExternal
|
isExternal = immutable.isExternal
|
||||||
)
|
)
|
||||||
|
|
||||||
fun toImmutableModifiers(): CirFunctionModifiers = CirFunctionModifiersFactory.create(
|
fun toImmutableModifiers() = CirFunctionModifiers.createInterned(
|
||||||
isOperator = isOperator,
|
isOperator = isOperator,
|
||||||
isInfix = isInfix,
|
isInfix = isInfix,
|
||||||
isInline = isInline,
|
isInline = isInline,
|
||||||
|
|||||||
+1
-2
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.core
|
package org.jetbrains.kotlin.descriptors.commonizer.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionModifiers
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirFunctionModifiersFactory
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class FunctionModifiersCommonizerTest : AbstractCommonizerTest<CirFunctionModifiers, CirFunctionModifiers>() {
|
class FunctionModifiersCommonizerTest : AbstractCommonizerTest<CirFunctionModifiers, CirFunctionModifiers>() {
|
||||||
@@ -171,7 +170,7 @@ private fun mockFunctionModifiers(
|
|||||||
isTailrec: Boolean = false,
|
isTailrec: Boolean = false,
|
||||||
isSuspend: Boolean = false,
|
isSuspend: Boolean = false,
|
||||||
isExternal: Boolean = false
|
isExternal: Boolean = false
|
||||||
) = CirFunctionModifiersFactory.create(
|
) = CirFunctionModifiers.createInterned(
|
||||||
isOperator = isOperator,
|
isOperator = isOperator,
|
||||||
isInfix = isInfix,
|
isInfix = isInfix,
|
||||||
isInline = isInline,
|
isInline = isInline,
|
||||||
|
|||||||
Reference in New Issue
Block a user