diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirClass.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirClass.kt index 2a5aaf793b7..c41e2b650c7 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirClass.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirClass.kt @@ -15,6 +15,7 @@ interface CirClass : CirClassifier, CirContainingClass, AnyClass { val isValue: Boolean val isInner: Boolean val isExternal: Boolean + val hasEnumEntries: Boolean val supertypes: List companion object { @@ -33,6 +34,7 @@ interface CirClass : CirClassifier, CirContainingClass, AnyClass { isValue: Boolean, isInner: Boolean, isExternal: Boolean, + hasEnumEntries: Boolean ): CirClass = CirClassImpl( annotations = annotations, name = name, @@ -46,7 +48,8 @@ interface CirClass : CirClassifier, CirContainingClass, AnyClass { isData = isData, isValue = isValue, isInner = isInner, - isExternal = isExternal + isExternal = isExternal, + hasEnumEntries = hasEnumEntries ) } } @@ -65,4 +68,5 @@ data class CirClassImpl( override val isValue: Boolean, override val isInner: Boolean, override val isExternal: Boolean, + override val hasEnumEntries: Boolean ) : CirClass diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/RecursionMarkers.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/RecursionMarkers.kt index 72e75dbadb6..ae400ab5f5f 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/RecursionMarkers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/RecursionMarkers.kt @@ -20,6 +20,7 @@ object CirClassRecursionMarker : CirClass, CirRecursionMarker { override val isValue get() = unsupported() override val isInner get() = unsupported() override val isExternal get() = unsupported() + override val hasEnumEntries: Boolean get() = unsupported() override var supertypes: List get() = unsupported() set(_) = unsupported() diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt index 706f25d2a9d..0b34cebf307 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/ClassCommonizer.kt @@ -18,6 +18,7 @@ class ClassCommonizer internal constructor( private var isInner = false private var isValue = false private var isCompanion = false + private var hasEnumEntries = false private val supertypesCommonizer = supertypesCommonizer.asCommonizer() private val typeParameterListCommonizer: TypeParameterListCommonizer = TypeParameterListCommonizer(typeCommonizer) private val modalityCommonizer: ModalityCommonizer = ModalityCommonizer() @@ -37,7 +38,8 @@ class ClassCommonizer internal constructor( isData = false, isValue = isValue, isInner = isInner, - isExternal = false + isExternal = false, + hasEnumEntries = hasEnumEntries ) } @@ -47,10 +49,13 @@ class ClassCommonizer internal constructor( isInner = first.isInner isValue = first.isValue isCompanion = first.isCompanion + hasEnumEntries = first.hasEnumEntries } - override fun doCommonizeWith(next: CirClass) = - kind == next.kind + override fun doCommonizeWith(next: CirClass): Boolean { + this.hasEnumEntries = this.hasEnumEntries && next.hasEnumEntries + + return kind == next.kind && isInner == next.isInner && isValue == next.isValue && isCompanion == next.isCompanion @@ -58,4 +63,5 @@ class ClassCommonizer internal constructor( && visibilityCommonizer.commonizeWith(next) && typeParameterListCommonizer.commonizeWith(next.typeParameters) && supertypesCommonizer.commonizeWith(next.supertypes) + } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirDeserializers.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirDeserializers.kt index b00c76edec1..7aaba8984d0 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirDeserializers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/CirDeserializers.kt @@ -12,7 +12,6 @@ import kotlinx.metadata.klib.compileTimeValue import kotlinx.metadata.klib.getterAnnotations import kotlinx.metadata.klib.setterAnnotations import org.jetbrains.kotlin.commonizer.cir.* -import org.jetbrains.kotlin.commonizer.cir.CirProvided import org.jetbrains.kotlin.commonizer.utils.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.types.Variance @@ -266,13 +265,15 @@ object CirDeserializers { isData = Flag.Class.IS_DATA(source.flags), isValue = Flag.Class.IS_VALUE(source.flags), isInner = Flag.Class.IS_INNER(source.flags), - isExternal = Flag.Class.IS_EXTERNAL(source.flags) + isExternal = Flag.Class.IS_EXTERNAL(source.flags), + hasEnumEntries = Flag.Class.HAS_ENUM_ENTRIES(source.flags) ) fun defaultEnumEntry( name: CirName, annotations: List, enumClassId: CirEntityId, + hasEnumEntries: Boolean, typeResolver: CirTypeResolver ): CirClass = CirClass.create( annotations = annotations.compactMap { annotation(it, typeResolver) }, @@ -294,7 +295,8 @@ object CirDeserializers { isData = false, isValue = false, isInner = false, - isExternal = false + isExternal = false, + hasEnumEntries = hasEnumEntries ) @Suppress("NOTHING_TO_INLINE") diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/flags.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/flags.kt index 8727b6d58b3..7b0eecc9830 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/flags.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/metadata/flags.kt @@ -91,6 +91,7 @@ internal fun CirClass.classFlags(isExpect: Boolean): Flags = Flag.Class.IS_EXTERNAL.takeIf { isExternal }, Flag.Class.IS_EXPECT.takeIf { isExpect }, Flag.Class.IS_VALUE.takeIf { isValue }, + Flag.Class.HAS_ENUM_ENTRIES.takeIf { hasEnumEntries } //Flag.Class.IS_FUN.takeIf { false } ) diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/InlineTypeAliasCirNodeTransformer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/InlineTypeAliasCirNodeTransformer.kt index 57703b05e7d..f4a2c5bdad2 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/InlineTypeAliasCirNodeTransformer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/transformer/InlineTypeAliasCirNodeTransformer.kt @@ -127,7 +127,7 @@ internal class InlineTypeAliasCirNodeTransformer( private fun CirTypeAlias.toArtificialCirClass(targetIndex: Int): CirClass = CirClass.create( annotations = emptyList(), name = name, typeParameters = typeParameters, supertypes = resolveSupertypes(targetIndex), visibility = this.visibility, modality = Modality.FINAL, kind = ClassKind.CLASS, - companion = null, isCompanion = false, isData = false, isValue = false, isInner = false, isExternal = false + companion = null, isCompanion = false, isData = false, isValue = false, isInner = false, isExternal = false, hasEnumEntries = false ) private fun CirTypeAlias.resolveSupertypes(targetIndex: Int): List { diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeClassDeserializer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeClassDeserializer.kt index 7f471be203f..8dc27327eb6 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeClassDeserializer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/tree/deserializer/CirTreeClassDeserializer.kt @@ -40,6 +40,7 @@ internal class CirTreeClassDeserializer( name = className, annotations = classEntry.annotations, enumClassId = classEntry.enumClassId, + hasEnumEntries = Flag.Class.HAS_ENUM_ENTRIES(classEntry.enumClass.flags), typeResolver = classTypeResolver ) } diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/ClassifierCommonizationFromSourcesTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/ClassifierCommonizationFromSourcesTest.kt index 05a56e9c74a..40d91ebabbd 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/ClassifierCommonizationFromSourcesTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/ClassifierCommonizationFromSourcesTest.kt @@ -10,13 +10,13 @@ import kotlin.contracts.ExperimentalContracts @ExperimentalContracts class ClassifierCommonizationFromSourcesTest : AbstractCommonizationFromSourcesTest() { - fun testClassKindAndModifiers() = ignore { doTestSuccessfulCommonization() } + fun testClassKindAndModifiers() = doTestSuccessfulCommonization() fun testModality() = doTestSuccessfulCommonization() fun testVisibility() = doTestSuccessfulCommonization() - fun testConstructors() = ignore { doTestSuccessfulCommonization() } + fun testConstructors() = doTestSuccessfulCommonization() fun testTypeParameters() = doTestSuccessfulCommonization() @@ -25,13 +25,4 @@ class ClassifierCommonizationFromSourcesTest : AbstractCommonizationFromSourcesT fun testTypeAliases() = doTestSuccessfulCommonization() fun testDifferentTypeAliasesInArguments() = doTestSuccessfulCommonization() - - private inline fun ignore(block: () -> Unit) { - try { - block() - error("Test is passing, remove `ignore` call") - } catch (e: AssertionError) { - return - } - } } diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/assertions.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/assertions.kt index 4a1d2525f17..654f146c4f9 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/assertions.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/assertions.kt @@ -8,19 +8,12 @@ package org.jetbrains.kotlin.commonizer.utils import kotlinx.metadata.klib.KlibModuleMetadata import kotlinx.metadata.klib.annotations import org.jetbrains.kotlin.commonizer.CommonizerTarget -import org.jetbrains.kotlin.commonizer.cir.CirFunction -import org.jetbrains.kotlin.commonizer.cir.CirProperty import org.jetbrains.kotlin.commonizer.identityString import org.jetbrains.kotlin.commonizer.metadata.utils.MetadataDeclarationsComparator import org.jetbrains.kotlin.commonizer.metadata.utils.MetadataDeclarationsComparator.* import org.jetbrains.kotlin.commonizer.metadata.utils.SerializedMetadataLibraryProvider -import org.jetbrains.kotlin.commonizer.tree.CirTreeClass -import org.jetbrains.kotlin.commonizer.tree.CirTreeModule -import org.jetbrains.kotlin.commonizer.tree.CirTreePackage -import org.jetbrains.kotlin.commonizer.tree.CirTreeTypeAlias import org.jetbrains.kotlin.library.SerializedMetadata import java.io.File -import kotlin.contracts.ExperimentalContracts import kotlin.test.fail fun assertIsDirectory(file: File) { @@ -28,7 +21,6 @@ fun assertIsDirectory(file: File) { fail("Not a directory: $file") } -@OptIn(ExperimentalContracts::class) fun assertModulesAreEqual(reference: SerializedMetadata, generated: SerializedMetadata, target: CommonizerTarget) { val referenceModule = KlibModuleMetadata.read(SerializedMetadataLibraryProvider(reference)) val generatedModule = KlibModuleMetadata.read(SerializedMetadataLibraryProvider(generated)) diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt index fd851d1055d..6d6be7d99a6 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/utils/mocks.kt @@ -75,7 +75,8 @@ internal val MOCK_CLASSIFIERS = CirKnownClassifiers( isData = false, isValue = false, isInner = false, - isExternal = false + isExternal = false, + hasEnumEntries = false ) } )