From ec1e4fb26e7dd720bf92f900320955cb691c221e Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Thu, 4 Mar 2021 13:07:57 +0300 Subject: [PATCH] [Commonizer] Encapsulate interning inside of CIR entities: CirFunctionModifiers --- .../commonizer/cir/CirFunctionModifiers.kt | 33 +++++++++++++++++++ .../factory/CirFunctionModifiersFactory.kt | 26 +-------------- .../cir/impl/CirFunctionModifiersImpl.kt | 17 ---------- .../core/FunctionModifiersCommonizer.kt | 3 +- .../core/FunctionModifiersCommonizerTest.kt | 3 +- 5 files changed, 36 insertions(+), 46 deletions(-) delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirFunctionModifiersImpl.kt diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirFunctionModifiers.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirFunctionModifiers.kt index 5770a5c5451..85719820c5c 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirFunctionModifiers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirFunctionModifiers.kt @@ -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() + } } + +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 diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirFunctionModifiersFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirFunctionModifiersFactory.kt index ca1e7a5050d..77e6427a430 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirFunctionModifiersFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirFunctionModifiersFactory.kt @@ -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() - - 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 - ) - ) - } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirFunctionModifiersImpl.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirFunctionModifiersImpl.kt deleted file mode 100644 index 1cbe788b07f..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirFunctionModifiersImpl.kt +++ /dev/null @@ -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 diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/FunctionModifiersCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/FunctionModifiersCommonizer.kt index ed48e9f9a78..808648c02e3 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/FunctionModifiersCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/FunctionModifiersCommonizer.kt @@ -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() { private class MutableModifiers( @@ -26,7 +25,7 @@ class FunctionModifiersCommonizer : AbstractStandardCommonizer() { @@ -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,