diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index c54992b6046..a8987cacaf5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.* +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.protobuf.MessageLite @@ -50,6 +51,54 @@ class FirDeserializationContext( ) val memberDeserializer: FirMemberDeserializer = FirMemberDeserializer(this) + + companion object { + fun createForPackage( + fqName: FqName, + packageProto: ProtoBuf.PackageFragment, + nameResolver: NameResolver, + session: FirSession + ): FirDeserializationContext { + val typeTable = TypeTable(packageProto.`package`.typeTable) + return FirDeserializationContext( + nameResolver, typeTable, + VersionRequirementTable.EMPTY, // TODO: + session, + fqName, + null, + FirTypeDeserializer( + nameResolver, + typeTable, + emptyList(), + null + ), + FirDeserializationComponents() + ) + } + + fun createForClass( + classId: ClassId, + classProto: ProtoBuf.Class, + nameResolver: NameResolver, + session: FirSession + ): FirDeserializationContext { + val classTypeTable = TypeTable(classProto.typeTable) + return FirDeserializationContext( + nameResolver, classTypeTable, + VersionRequirementTable.EMPTY, // TODO: + session, + classId.packageFqName, + classId.relativeClassName, + FirTypeDeserializer( + nameResolver, + classTypeTable, + classProto.typeParameterList, + null + ), + FirDeserializationComponents() + ) + } + } } // TODO: Move something here diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt index b2547896596..52a28fcf666 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl -import org.jetbrains.kotlin.fir.deserialization.FirDeserializationComponents import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext import org.jetbrains.kotlin.fir.deserialization.FirTypeDeserializer import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider @@ -28,7 +27,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion -import org.jetbrains.kotlin.metadata.deserialization.* +import org.jetbrains.kotlin.metadata.deserialization.Flags +import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl +import org.jetbrains.kotlin.metadata.deserialization.TypeTable +import org.jetbrains.kotlin.metadata.deserialization.supertypes import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -65,20 +67,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider val classDataFinder = ProtoBasedClassDataFinder(packageProto, nameResolver, version) { SourceElement.NO_SOURCE } private val memberDeserializer by lazy { - FirDeserializationContext( - nameResolver, TypeTable(packageProto.`package`.typeTable), - VersionRequirementTable.EMPTY, // TODO: - session, - fqName, - null, - FirTypeDeserializer( - nameResolver, - TypeTable(packageProto.`package`.typeTable), - emptyList(), - null - ), - FirDeserializationComponents() - ).memberDeserializer + FirDeserializationContext.createForPackage(fqName, packageProto, nameResolver, session).memberDeserializer } val lookup = mutableMapOf() @@ -120,7 +109,6 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider null ) - val superTypesDeserialized = classProto.supertypes(typeTable).map { supertypeProto -> typeDeserializer.simpleType(supertypeProto) }// TODO: + c.components.additionalClassPartsProvider.getSupertypes(this@DeserializedClassDescriptor) @@ -130,21 +118,10 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider FirResolvedTypeRefImpl(this@BuiltInsPackageFragment.session, null, it, false, emptyList()) } - val classTypeTable = TypeTable(classProto.typeTable) - val classDeserializer = FirDeserializationContext( - nameResolver, classTypeTable, - VersionRequirementTable.EMPTY, // TODO: - this@BuiltInsPackageFragment.session, - fqName, - null, - FirTypeDeserializer( - nameResolver, - classTypeTable, - classProto.typeParameterList, - null - ), - FirDeserializationComponents() - ).memberDeserializer + val classDeserializer = + FirDeserializationContext + .createForClass(classId, classProto, nameResolver, this@BuiltInsPackageFragment.session) + .memberDeserializer // TODO: properties + nested classes declarations += classData.classProto.functionList.map(classDeserializer::loadFunction)