diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiers.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiers.kt index e5a1c67acfc..6ae326997ed 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiers.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiers.kt @@ -63,10 +63,12 @@ object CirProvided { sealed interface Class : Classifier { val visibility: Visibility + val supertypes: List } data class RegularClass( override val typeParameters: List, + override val supertypes: List, override val visibility: Visibility ) : Class @@ -77,6 +79,8 @@ object CirProvided { override val typeParameters: List get() = emptyList() override val visibility: Visibility get() = Visibilities.Public + override val supertypes: List + get() = emptyList() // TODO!! } data class TypeAlias( diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiersByModules.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiersByModules.kt index e3fe76fcc84..9cd536ab00c 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiersByModules.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/mergedtree/CirProvidedClassifiersByModules.kt @@ -64,7 +64,7 @@ internal class CirProvidedClassifiersByModules private constructor( return CirProvidedClassifiersByModules(hasForwardDeclarations, classifiers) } - private val FALLBACK_FORWARD_DECLARATION_CLASS = CirProvided.RegularClass(emptyList(), Visibilities.Public) + private val FALLBACK_FORWARD_DECLARATION_CLASS = CirProvided.RegularClass(emptyList(), emptyList(), Visibilities.Public) } } @@ -125,7 +125,9 @@ private fun readModule(metadata: SerializedMetadata, consumer: (CirEntityId, Cir } private class ClassProtosToRead { - data class ClassEntry(val classId: CirEntityId, val proto: ProtoBuf.Class) + data class ClassEntry( + val classId: CirEntityId, val proto: ProtoBuf.Class, val strings: NameResolver + ) // key = parent class ID (or NON_EXISTING_CLASSIFIER_ID for top-level classes) // value = class protos under this parent class (MutableList to preserve order of classes) @@ -138,7 +140,7 @@ private class ClassProtosToRead { val classId = CirEntityId.create(strings.getQualifiedClassName(classProto.fqName)) val parentClassId: CirEntityId = classId.getParentEntityId() ?: NON_EXISTING_CLASSIFIER_ID - groupedByParentClassId.getValue(parentClassId) += ClassEntry(classId, classProto) + groupedByParentClassId.getValue(parentClassId) += ClassEntry(classId, classProto, strings) } } @@ -155,12 +157,20 @@ private fun readClass( ) { val (classId, classProto) = classEntry + val typeParameterNameToIndex = HashMap() + val typeParameters = readTypeParameters( typeParameterProtos = classProto.typeParameterList, - typeParameterIndexOffset = typeParameterIndexOffset + typeParameterIndexOffset = typeParameterIndexOffset, + nameToIndexMapper = typeParameterNameToIndex::set ) + val typeReadContext = TypeReadContext(classEntry.strings, TypeTable(classProto.typeTable), typeParameterNameToIndex) + + val supertypes = classProto.supertypeList.map { readType(it, typeReadContext) } + + classProto.supertypeIdList.map { readType(classProto.typeTable.getType(it), typeReadContext) } + val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(classProto.flags)) - val clazz = CirProvided.RegularClass(typeParameters, visibility) + val clazz = CirProvided.RegularClass(typeParameters, supertypes, visibility) consumer(classId, clazz)