[FIR] Safe VersionRequirementTable in deserialized declarations
This commit is contained in:
+2
@@ -193,6 +193,8 @@ fun deserializeClassToSymbol(
|
|||||||
}
|
}
|
||||||
(it.annotations as MutableList<FirAnnotationCall>) +=
|
(it.annotations as MutableList<FirAnnotationCall>) +=
|
||||||
context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver)
|
context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver)
|
||||||
|
|
||||||
|
it.versionRequirementsTable = context.versionRequirementTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+21
-10
@@ -76,10 +76,11 @@ class FirDeserializationContext(
|
|||||||
annotationDeserializer: AbstractAnnotationDeserializer,
|
annotationDeserializer: AbstractAnnotationDeserializer,
|
||||||
constDeserializer: FirConstDeserializer,
|
constDeserializer: FirConstDeserializer,
|
||||||
containerSource: DeserializedContainerSource?
|
containerSource: DeserializedContainerSource?
|
||||||
) = createRootContext(
|
): FirDeserializationContext = createRootContext(
|
||||||
nameResolver,
|
nameResolver,
|
||||||
TypeTable(packageProto.typeTable),
|
TypeTable(packageProto.typeTable),
|
||||||
session,
|
session,
|
||||||
|
VersionRequirementTable.create(packageProto.versionRequirementTable),
|
||||||
annotationDeserializer,
|
annotationDeserializer,
|
||||||
constDeserializer,
|
constDeserializer,
|
||||||
fqName,
|
fqName,
|
||||||
@@ -96,10 +97,11 @@ class FirDeserializationContext(
|
|||||||
annotationDeserializer: AbstractAnnotationDeserializer,
|
annotationDeserializer: AbstractAnnotationDeserializer,
|
||||||
constDeserializer: FirConstDeserializer,
|
constDeserializer: FirConstDeserializer,
|
||||||
containerSource: DeserializedContainerSource?
|
containerSource: DeserializedContainerSource?
|
||||||
) = createRootContext(
|
): FirDeserializationContext = createRootContext(
|
||||||
nameResolver,
|
nameResolver,
|
||||||
TypeTable(classProto.typeTable),
|
TypeTable(classProto.typeTable),
|
||||||
session,
|
session,
|
||||||
|
VersionRequirementTable.create(classProto.versionRequirementTable),
|
||||||
annotationDeserializer,
|
annotationDeserializer,
|
||||||
constDeserializer,
|
constDeserializer,
|
||||||
classId.packageFqName,
|
classId.packageFqName,
|
||||||
@@ -112,6 +114,7 @@ class FirDeserializationContext(
|
|||||||
nameResolver: NameResolver,
|
nameResolver: NameResolver,
|
||||||
typeTable: TypeTable,
|
typeTable: TypeTable,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
versionRequirementTable: VersionRequirementTable,
|
||||||
annotationDeserializer: AbstractAnnotationDeserializer,
|
annotationDeserializer: AbstractAnnotationDeserializer,
|
||||||
constDeserializer: FirConstDeserializer,
|
constDeserializer: FirConstDeserializer,
|
||||||
packageFqName: FqName,
|
packageFqName: FqName,
|
||||||
@@ -121,7 +124,7 @@ class FirDeserializationContext(
|
|||||||
): FirDeserializationContext {
|
): FirDeserializationContext {
|
||||||
return FirDeserializationContext(
|
return FirDeserializationContext(
|
||||||
nameResolver, typeTable,
|
nameResolver, typeTable,
|
||||||
VersionRequirementTable.EMPTY, // TODO:
|
versionRequirementTable,
|
||||||
session,
|
session,
|
||||||
packageFqName,
|
packageFqName,
|
||||||
relativeClassName,
|
relativeClassName,
|
||||||
@@ -178,6 +181,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
}
|
}
|
||||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||||
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir }
|
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
|
c.containerSource, proto, local.nameResolver, local.typeTable, getterFlags
|
||||||
)
|
)
|
||||||
this.symbol = FirPropertyAccessorSymbol()
|
this.symbol = FirPropertyAccessorSymbol()
|
||||||
|
}.apply {
|
||||||
|
versionRequirementsTable = c.versionRequirementTable
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
|
FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
|
||||||
@@ -265,6 +272,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER,
|
AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER,
|
||||||
classProto
|
classProto
|
||||||
)
|
)
|
||||||
|
}.apply {
|
||||||
|
versionRequirementsTable = c.versionRequirementTable
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
|
FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
|
||||||
@@ -314,6 +323,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
this.setter = setter
|
this.setter = setter
|
||||||
this.containerSource = c.containerSource
|
this.containerSource = c.containerSource
|
||||||
this.initializer = c.constDeserializer.loadConstant(proto, symbol.callableId, c.nameResolver)
|
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()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val versionRequirementTable =
|
|
||||||
// TODO: Support case for KOTLIN_SUSPEND_BUILT_IN_FUNCTION_FQ_NAME
|
|
||||||
c.versionRequirementTable
|
|
||||||
|
|
||||||
val callableName = c.nameResolver.getName(proto.name)
|
val callableName = c.nameResolver.getName(proto.name)
|
||||||
val callableId = CallableId(c.packageFqName, c.relativeClassName, callableName)
|
val callableId = CallableId(c.packageFqName, c.relativeClassName, callableName)
|
||||||
val symbol = FirNamedFunctionSymbol(callableId)
|
val symbol = FirNamedFunctionSymbol(callableId)
|
||||||
@@ -374,6 +381,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
annotations +=
|
annotations +=
|
||||||
c.annotationDeserializer.loadFunctionAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
c.annotationDeserializer.loadFunctionAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
||||||
this.containerSource = c.containerSource
|
this.containerSource = c.containerSource
|
||||||
|
}.apply {
|
||||||
|
versionRequirementsTable = c.versionRequirementTable
|
||||||
}
|
}
|
||||||
if (proto.hasContract()) {
|
if (proto.hasContract()) {
|
||||||
val contractDescription = contractDeserializer.loadContract(proto.contract, simpleFunction)
|
val contractDescription = contractDeserializer.loadContract(proto.contract, simpleFunction)
|
||||||
@@ -438,7 +447,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
)
|
)
|
||||||
annotations +=
|
annotations +=
|
||||||
c.annotationDeserializer.loadConstructorAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
c.annotationDeserializer.loadConstructorAnnotations(c.containerSource, proto, local.nameResolver, local.typeTable)
|
||||||
}.build()
|
}.build().apply {
|
||||||
|
versionRequirementsTable = c.versionRequirementTable
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun defaultValue(flags: Int): FirExpression? {
|
private fun defaultValue(flags: Int): FirExpression? {
|
||||||
@@ -482,6 +493,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
callableKind,
|
callableKind,
|
||||||
index,
|
index,
|
||||||
)
|
)
|
||||||
|
}.apply {
|
||||||
|
versionRequirementsTable = c.versionRequirementTable
|
||||||
}
|
}
|
||||||
}.toList()
|
}.toList()
|
||||||
}
|
}
|
||||||
@@ -493,6 +506,4 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
type = context.typeDeserializer.type(this@toTypeRef, attributes)
|
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