Minor. Extract FirDeserializationContext factories
This commit is contained in:
+49
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.*
|
import org.jetbrains.kotlin.metadata.deserialization.*
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
import org.jetbrains.kotlin.protobuf.MessageLite
|
||||||
@@ -50,6 +51,54 @@ class FirDeserializationContext(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val memberDeserializer: FirMemberDeserializer = FirMemberDeserializer(this)
|
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
|
// TODO: Move something here
|
||||||
|
|||||||
+9
-32
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
|
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.FirDeserializationContext
|
||||||
import org.jetbrains.kotlin.fir.deserialization.FirTypeDeserializer
|
import org.jetbrains.kotlin.fir.deserialization.FirTypeDeserializer
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
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.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
|
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.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
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 }
|
val classDataFinder = ProtoBasedClassDataFinder(packageProto, nameResolver, version) { SourceElement.NO_SOURCE }
|
||||||
|
|
||||||
private val memberDeserializer by lazy {
|
private val memberDeserializer by lazy {
|
||||||
FirDeserializationContext(
|
FirDeserializationContext.createForPackage(fqName, packageProto, nameResolver, session).memberDeserializer
|
||||||
nameResolver, TypeTable(packageProto.`package`.typeTable),
|
|
||||||
VersionRequirementTable.EMPTY, // TODO:
|
|
||||||
session,
|
|
||||||
fqName,
|
|
||||||
null,
|
|
||||||
FirTypeDeserializer(
|
|
||||||
nameResolver,
|
|
||||||
TypeTable(packageProto.`package`.typeTable),
|
|
||||||
emptyList(),
|
|
||||||
null
|
|
||||||
),
|
|
||||||
FirDeserializationComponents()
|
|
||||||
).memberDeserializer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val lookup = mutableMapOf<ClassId, ConeClassLikeSymbol>()
|
val lookup = mutableMapOf<ClassId, ConeClassLikeSymbol>()
|
||||||
@@ -120,7 +109,6 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
|
|||||||
null
|
null
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
val superTypesDeserialized = classProto.supertypes(typeTable).map { supertypeProto ->
|
val superTypesDeserialized = classProto.supertypes(typeTable).map { supertypeProto ->
|
||||||
typeDeserializer.simpleType(supertypeProto)
|
typeDeserializer.simpleType(supertypeProto)
|
||||||
}// TODO: + c.components.additionalClassPartsProvider.getSupertypes(this@DeserializedClassDescriptor)
|
}// 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())
|
FirResolvedTypeRefImpl(this@BuiltInsPackageFragment.session, null, it, false, emptyList())
|
||||||
}
|
}
|
||||||
|
|
||||||
val classTypeTable = TypeTable(classProto.typeTable)
|
val classDeserializer =
|
||||||
val classDeserializer = FirDeserializationContext(
|
FirDeserializationContext
|
||||||
nameResolver, classTypeTable,
|
.createForClass(classId, classProto, nameResolver, this@BuiltInsPackageFragment.session)
|
||||||
VersionRequirementTable.EMPTY, // TODO:
|
.memberDeserializer
|
||||||
this@BuiltInsPackageFragment.session,
|
|
||||||
fqName,
|
|
||||||
null,
|
|
||||||
FirTypeDeserializer(
|
|
||||||
nameResolver,
|
|
||||||
classTypeTable,
|
|
||||||
classProto.typeParameterList,
|
|
||||||
null
|
|
||||||
),
|
|
||||||
FirDeserializationComponents()
|
|
||||||
).memberDeserializer
|
|
||||||
|
|
||||||
// TODO: properties + nested classes
|
// TODO: properties + nested classes
|
||||||
declarations += classData.classProto.functionList.map(classDeserializer::loadFunction)
|
declarations += classData.classProto.functionList.map(classDeserializer::loadFunction)
|
||||||
|
|||||||
Reference in New Issue
Block a user