FIR deserializer: handle context in more correct way

This commit is contained in:
Mikhail Glukhikh
2019-04-26 12:00:00 +03:00
parent 1e653226ef
commit f457cb099f
3 changed files with 6 additions and 7 deletions
@@ -313,11 +313,8 @@ class KotlinDeserializedJvmSymbolsProvider(
val symbol = FirClassSymbol(classId) val symbol = FirClassSymbol(classId)
deserializeClassToSymbol( deserializeClassToSymbol(
classId, classProto, symbol, nameResolver, session, classId, classProto, symbol, nameResolver, session,
parentContext ?: FirDeserializationContext.createForClass( JvmBinaryAnnotationDeserializer(session, nameResolver),
classId, classProto, nameResolver, session, parentContext, this::findAndDeserializeClass
JvmBinaryAnnotationDeserializer(session, nameResolver)
),
this::findAndDeserializeClass
) )
classesCache[classId] = symbol classesCache[classId] = symbol
val annotations = mutableListOf<FirAnnotationCall>() val annotations = mutableListOf<FirAnnotationCall>()
@@ -26,6 +26,7 @@ fun deserializeClassToSymbol(
symbol: FirClassSymbol, symbol: FirClassSymbol,
nameResolver: NameResolver, nameResolver: NameResolver,
session: FirSession, session: FirSession,
defaultAnnotationDeserializer: AbstractAnnotationDeserializer?,
parentContext: FirDeserializationContext? = null, parentContext: FirDeserializationContext? = null,
deserializeNestedClass: (ClassId, FirDeserializationContext) -> FirClassSymbol? deserializeNestedClass: (ClassId, FirDeserializationContext) -> FirClassSymbol?
) { ) {
@@ -50,7 +51,8 @@ fun deserializeClassToSymbol(
TypeTable(classProto.typeTable), TypeTable(classProto.typeTable),
classId.relativeClassName classId.relativeClassName
) ?: FirDeserializationContext.createForClass( ) ?: FirDeserializationContext.createForClass(
classId, classProto, nameResolver, session, FirBuiltinAnnotationDeserializer(session, nameResolver) classId, classProto, nameResolver, session,
defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session, nameResolver)
) )
typeParameters += context.typeDeserializer.ownTypeParameters.map { it.firUnsafe() } typeParameters += context.typeDeserializer.ownTypeParameters.map { it.firUnsafe() }
annotations += context.annotationDeserializer.loadClassAnnotations(classProto) annotations += context.annotationDeserializer.loadClassAnnotations(classProto)
@@ -100,7 +100,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
deserializeClassToSymbol( deserializeClassToSymbol(
classId, classProto, symbol, nameResolver, session, classId, classProto, symbol, nameResolver, session,
parentContext, null, parentContext,
this::findAndDeserializeClass this::findAndDeserializeClass
) )
} }