Minor. Extract FirDeserializationContext factories

This commit is contained in:
Denis Zharkov
2019-03-19 12:33:49 +03:00
parent aec5ec89e7
commit b3e5e059bb
2 changed files with 58 additions and 32 deletions
@@ -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
@@ -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<ClassId, ConeClassLikeSymbol>()
@@ -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)