From d3c60ab72ec9cb148502d264b246860f183fe092 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Fri, 5 Mar 2021 00:50:39 +0300 Subject: [PATCH] [Commonizer] Extract creation of CirClass from CirClassFactory --- .../descriptors/commonizer/cir/CirClass.kt | 60 +++++++++++++++++++ .../commonizer/cir/factory/CirClassFactory.kt | 42 ++----------- .../commonizer/cir/impl/CirClassImpl.kt | 36 ----------- .../commonizer/core/ClassCommonizer.kt | 3 +- .../commonizer/core/TypeAliasCommonizer.kt | 3 +- .../commonizer/core/TypeCommonizerTest.kt | 3 +- .../descriptors/commonizer/utils/mocks.kt | 2 +- 7 files changed, 70 insertions(+), 79 deletions(-) delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassImpl.kt diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClass.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClass.kt index b7078dfcb64..3f3c2e6b043 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClass.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/CirClass.kt @@ -5,6 +5,10 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibility + interface CirClass : CirClassifier, CirContainingClass { var companion: CirName? // null means no companion object val isCompanion: Boolean @@ -14,4 +18,60 @@ interface CirClass : CirClassifier, CirContainingClass { val supertypes: Collection fun setSupertypes(supertypes: Collection) + + companion object { + @Suppress("NOTHING_TO_INLINE") + inline fun create( + annotations: List, + name: CirName, + typeParameters: List, + visibility: Visibility, + modality: Modality, + kind: ClassKind, + companion: CirName?, + isCompanion: Boolean, + isData: Boolean, + isInline: Boolean, + isInner: Boolean, + isExternal: Boolean + ): CirClass = CirClassImpl( + annotations = annotations, + name = name, + typeParameters = typeParameters, + visibility = visibility, + modality = modality, + kind = kind, + companion = companion, + isCompanion = isCompanion, + isData = isData, + isInline = isInline, + isInner = isInner, + isExternal = isExternal + ) + } +} + +data class CirClassImpl( + override val annotations: List, + override val name: CirName, + override val typeParameters: List, + override val visibility: Visibility, + override val modality: Modality, + override val kind: ClassKind, + override var companion: CirName?, + override val isCompanion: Boolean, + override val isData: Boolean, + override val isInline: Boolean, + override val isInner: Boolean, + override val isExternal: Boolean, +) : CirClass { + private var _supertypes: Collection? = null + + override val supertypes: Collection + get() = _supertypes.orEmpty() + + override fun setSupertypes(supertypes: Collection) { + check(_supertypes == null) + _supertypes = supertypes + } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassFactory.kt index 2f0b43e320f..b5bdcda9623 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirClassFactory.kt @@ -12,9 +12,10 @@ import kotlinx.metadata.klib.annotations import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.descriptors.commonizer.cir.* -import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirClassImpl +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClass +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClassType +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirEntityId +import org.jetbrains.kotlin.descriptors.commonizer.cir.CirName import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeClassKind import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeModality import org.jetbrains.kotlin.descriptors.commonizer.metadata.decodeVisibility @@ -22,7 +23,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.utils.compactMap import org.jetbrains.kotlin.descriptors.commonizer.utils.filteredSupertypes object CirClassFactory { - fun create(name: CirName, source: KmClass, typeResolver: CirTypeResolver): CirClass = create( + fun create(name: CirName, source: KmClass, typeResolver: CirTypeResolver): CirClass = CirClass.create( annotations = CirAnnotationFactory.createAnnotations(source.flags, typeResolver, source::annotations), name = name, typeParameters = source.typeParameters.compactMap { CirTypeParameterFactory.create(it, typeResolver) }, @@ -45,7 +46,7 @@ object CirClassFactory { enumClassId: CirEntityId, enumClass: KmClass, typeResolver: CirTypeResolver - ): CirClass = create( + ): CirClass = CirClass.create( annotations = annotations.compactMap { CirAnnotationFactory.create(it, typeResolver) }, name = name, typeParameters = emptyList(), @@ -68,35 +69,4 @@ object CirClassFactory { ) setSupertypes(listOf(enumClassType)) } - - @Suppress("NOTHING_TO_INLINE") - inline fun create( - annotations: List, - name: CirName, - typeParameters: List, - visibility: Visibility, - modality: Modality, - kind: ClassKind, - companion: CirName?, - isCompanion: Boolean, - isData: Boolean, - isInline: Boolean, - isInner: Boolean, - isExternal: Boolean - ): CirClass { - return CirClassImpl( - annotations = annotations, - name = name, - typeParameters = typeParameters, - visibility = visibility, - modality = modality, - kind = kind, - companion = companion, - isCompanion = isCompanion, - isData = isData, - isInline = isInline, - isInner = isInner, - isExternal = isExternal - ) - } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassImpl.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassImpl.kt deleted file mode 100644 index 1e75e6e39e7..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/impl/CirClassImpl.kt +++ /dev/null @@ -1,36 +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.ClassKind -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.descriptors.commonizer.cir.* - -data class CirClassImpl( - override val annotations: List, - override val name: CirName, - override val typeParameters: List, - override val visibility: Visibility, - override val modality: Modality, - override val kind: ClassKind, - override var companion: CirName?, - override val isCompanion: Boolean, - override val isData: Boolean, - override val isInline: Boolean, - override val isInner: Boolean, - override val isExternal: Boolean, -) : CirClass { - private var _supertypes: Collection? = null - - override val supertypes: Collection - get() = _supertypes.orEmpty() - - override fun setSupertypes(supertypes: Collection) { - check(_supertypes == null) - _supertypes = supertypes - } -} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassCommonizer.kt index 8fa13fbd82d..46a1d20ee0e 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/ClassCommonizer.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.core import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClass import org.jetbrains.kotlin.descriptors.commonizer.cir.CirName -import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassFactory import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirKnownClassifiers class ClassCommonizer(classifiers: CirKnownClassifiers) : AbstractStandardCommonizer() { @@ -21,7 +20,7 @@ class ClassCommonizer(classifiers: CirKnownClassifiers) : AbstractStandardCommon private var isInline = false private var isCompanion = false - override fun commonizationResult() = CirClassFactory.create( + override fun commonizationResult() = CirClass.create( annotations = emptyList(), name = name, typeParameters = typeParameters.result, diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt index a635407cc6c..5b2b1eb91e1 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/core/TypeAliasCommonizer.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.core import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.commonizer.cir.* -import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassFactory import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirKnownClassifiers /** @@ -112,7 +111,7 @@ private class TypeAliasExpectClassCommonizer : AbstractStandardCommonizer() { classId = type.classifierId ) } - node.targetDeclarations[index] = CirClassFactory.create( + node.targetDeclarations[index] = CirClass.create( annotations = emptyList(), name = type.classifierId.relativeNameSegments.last(), typeParameters = emptyList(), diff --git a/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/mocks.kt b/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/mocks.kt index 2bb4b35501d..dd8b86598d1 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/mocks.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/descriptors/commonizer/utils/mocks.kt @@ -56,7 +56,7 @@ internal val MOCK_CLASSIFIERS = CirKnownClassifiers( private val MOCK_CLASS_NODE = CirClassNode( CommonizedGroup(0), LockBasedStorageManager.NO_LOCKS.createNullableLazyValue { - CirClassFactory.create( + CirClass.create( annotations = emptyList(), name = CirName.create("Any"), typeParameters = emptyList(),