[FIR] Safe VersionRequirementTable in deserialized declarations
This commit is contained in:
+2
@@ -193,6 +193,8 @@ fun deserializeClassToSymbol(
|
||||
}
|
||||
(it.annotations as MutableList<FirAnnotationCall>) +=
|
||||
context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver)
|
||||
|
||||
it.versionRequirementsTable = context.versionRequirementTable
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+21
-10
@@ -76,10 +76,11 @@ class FirDeserializationContext(
|
||||
annotationDeserializer: AbstractAnnotationDeserializer,
|
||||
constDeserializer: FirConstDeserializer,
|
||||
containerSource: DeserializedContainerSource?
|
||||
) = createRootContext(
|
||||
): FirDeserializationContext = createRootContext(
|
||||
nameResolver,
|
||||
TypeTable(packageProto.typeTable),
|
||||
session,
|
||||
VersionRequirementTable.create(packageProto.versionRequirementTable),
|
||||
annotationDeserializer,
|
||||
constDeserializer,
|
||||
fqName,
|
||||
@@ -96,10 +97,11 @@ class FirDeserializationContext(
|
||||
annotationDeserializer: AbstractAnnotationDeserializer,
|
||||
constDeserializer: FirConstDeserializer,
|
||||
containerSource: DeserializedContainerSource?
|
||||
) = createRootContext(
|
||||
): FirDeserializationContext = createRootContext(
|
||||
nameResolver,
|
||||
TypeTable(classProto.typeTable),
|
||||
session,
|
||||
VersionRequirementTable.create(classProto.versionRequirementTable),
|
||||
annotationDeserializer,
|
||||
constDeserializer,
|
||||
classId.packageFqName,
|
||||
@@ -112,6 +114,7 @@ class FirDeserializationContext(
|
||||
nameResolver: NameResolver,
|
||||
typeTable: TypeTable,
|
||||
session: FirSession,
|
||||
versionRequirementTable: VersionRequirementTable,
|
||||
annotationDeserializer: AbstractAnnotationDeserializer,
|
||||
constDeserializer: FirConstDeserializer,
|
||||
packageFqName: FqName,
|
||||
@@ -121,7 +124,7 @@ class FirDeserializationContext(
|
||||
): FirDeserializationContext {
|
||||
return FirDeserializationContext(
|
||||
nameResolver, typeTable,
|
||||
VersionRequirementTable.EMPTY, // TODO:
|
||||
versionRequirementTable,
|
||||
session,
|
||||
packageFqName,
|
||||
relativeClassName,
|
||||
@@ -178,6 +181,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
}
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir }
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,6 +236,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
c.containerSource, proto, local.nameResolver, local.typeTable, getterFlags
|
||||
)
|
||||
this.symbol = FirPropertyAccessorSymbol()
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
} else {
|
||||
FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
|
||||
@@ -265,6 +272,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER,
|
||||
classProto
|
||||
)
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
} else {
|
||||
FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
|
||||
@@ -314,6 +323,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
this.setter = setter
|
||||
this.containerSource = c.containerSource
|
||||
this.initializer = c.constDeserializer.loadConstant(proto, symbol.callableId, c.nameResolver)
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,10 +342,6 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
emptyList()
|
||||
}
|
||||
|
||||
val versionRequirementTable =
|
||||
// TODO: Support case for KOTLIN_SUSPEND_BUILT_IN_FUNCTION_FQ_NAME
|
||||
c.versionRequirementTable
|
||||
|
||||
val callableName = c.nameResolver.getName(proto.name)
|
||||
val callableId = CallableId(c.packageFqName, c.relativeClassName, callableName)
|
||||
val symbol = FirNamedFunctionSymbol(callableId)
|
||||
@@ -374,6 +381,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
annotations +=
|
||||
c.annotationDeserializer.loadFunctionAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
||||
this.containerSource = c.containerSource
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
if (proto.hasContract()) {
|
||||
val contractDescription = contractDeserializer.loadContract(proto.contract, simpleFunction)
|
||||
@@ -438,7 +447,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
)
|
||||
annotations +=
|
||||
c.annotationDeserializer.loadConstructorAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
||||
}.build()
|
||||
}.build().apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
}
|
||||
|
||||
private fun defaultValue(flags: Int): FirExpression? {
|
||||
@@ -482,6 +493,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
callableKind,
|
||||
index,
|
||||
)
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
}.toList()
|
||||
}
|
||||
@@ -493,6 +506,4 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
type = context.typeDeserializer.type(this@toTypeRef, attributes)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirementTable
|
||||
|
||||
object FirVersionRequirementsTableKey : FirDeclarationDataKey()
|
||||
|
||||
var FirDeclaration.versionRequirementsTable: VersionRequirementTable? by FirDeclarationDataRegistry.data(FirVersionRequirementsTableKey)
|
||||
Reference in New Issue
Block a user