[K2] Add version requirement for definitely non-null types to metadata.
This commit is contained in:
committed by
Mikhail Glukhikh
parent
1f3b8142a8
commit
73191ff9bc
+27
-1
@@ -68,6 +68,8 @@ class FirElementSerializer private constructor(
|
||||
private val contractSerializer = FirContractSerializer()
|
||||
private val providedDeclarationsService = session.providedDeclarationsForMetadataService
|
||||
|
||||
private var metDefinitelyNotNullType: Boolean = false
|
||||
|
||||
fun packagePartProto(
|
||||
packageFqName: FqName,
|
||||
files: List<FirFile>,
|
||||
@@ -247,6 +249,12 @@ class FirElementSerializer private constructor(
|
||||
|
||||
writeVersionRequirementForInlineClasses(klass, builder, versionRequirementTable)
|
||||
|
||||
if (metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(
|
||||
writeLanguageVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes, versionRequirementTable)
|
||||
)
|
||||
}
|
||||
|
||||
typeTable.serialize()?.let { builder.typeTable = it }
|
||||
versionRequirementTable.serialize()?.let { builder.versionRequirementTable = it }
|
||||
|
||||
@@ -412,6 +420,10 @@ class FirElementSerializer private constructor(
|
||||
if (property.hasInlineClassTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses))
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
}
|
||||
|
||||
extension.serializeProperty(property, builder, versionRequirementTable, local)
|
||||
@@ -507,6 +519,10 @@ class FirElementSerializer private constructor(
|
||||
if (function.hasInlineClassTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses))
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
}
|
||||
|
||||
return builder
|
||||
@@ -521,7 +537,7 @@ class FirElementSerializer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun typeAliasProto(typeAlias: FirTypeAlias): ProtoBuf.TypeAlias.Builder? = whileAnalysing(session, typeAlias) {
|
||||
private fun typeAliasProto(typeAlias: FirTypeAlias): ProtoBuf.TypeAlias.Builder? = whileAnalysing<ProtoBuf.TypeAlias.Builder?>(session, typeAlias) {
|
||||
val builder = ProtoBuf.TypeAlias.newBuilder()
|
||||
val local = createChildSerializer(typeAlias)
|
||||
|
||||
@@ -555,6 +571,11 @@ class FirElementSerializer private constructor(
|
||||
|
||||
versionRequirementTable?.run {
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(typeAlias))
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(
|
||||
writeLanguageVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes, versionRequirementTable)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension.serializeTypeAlias(typeAlias, builder)
|
||||
@@ -598,6 +619,10 @@ class FirElementSerializer private constructor(
|
||||
if (constructor.hasInlineClassTypesInSignature()) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses))
|
||||
}
|
||||
|
||||
if (local.metDefinitelyNotNullType) {
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.DefinitelyNonNullableTypes))
|
||||
}
|
||||
}
|
||||
|
||||
extension.serializeConstructor(constructor, builder, local)
|
||||
@@ -769,6 +794,7 @@ class FirElementSerializer private constructor(
|
||||
}
|
||||
|
||||
if (isDefinitelyNotNullType) {
|
||||
metDefinitelyNotNullType = true
|
||||
builder.flags = Flags.getTypeFlags(false, isDefinitelyNotNullType)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-17
@@ -58,12 +58,7 @@ class DescriptorSerializer private constructor(
|
||||
) {
|
||||
private val contractSerializer = ContractSerializer()
|
||||
|
||||
private var metDefinitelyNotNullTypeStack: MutableList<Boolean> = mutableListOf(false)
|
||||
private var metDefinitelyNotNullType: Boolean
|
||||
get() = metDefinitelyNotNullTypeStack.last()
|
||||
set(value) {
|
||||
metDefinitelyNotNullTypeStack[metDefinitelyNotNullTypeStack.lastIndex] = value
|
||||
}
|
||||
private var metDefinitelyNotNullType: Boolean = false
|
||||
|
||||
private fun createChildSerializer(descriptor: DeclarationDescriptor): DescriptorSerializer =
|
||||
DescriptorSerializer(
|
||||
@@ -78,16 +73,7 @@ class DescriptorSerializer private constructor(
|
||||
|
||||
private fun useTypeTable(): Boolean = extension.shouldUseTypeTable()
|
||||
|
||||
private inline fun <T> withNewMetDefinitelyNotNullType(block: () -> T): T {
|
||||
metDefinitelyNotNullTypeStack.add(false)
|
||||
return try {
|
||||
block()
|
||||
} finally {
|
||||
metDefinitelyNotNullTypeStack.removeAt(metDefinitelyNotNullTypeStack.lastIndex)
|
||||
}
|
||||
}
|
||||
|
||||
fun classProto(classDescriptor: ClassDescriptor): ProtoBuf.Class.Builder = withNewMetDefinitelyNotNullType {
|
||||
fun classProto(classDescriptor: ClassDescriptor): ProtoBuf.Class.Builder {
|
||||
val builder = ProtoBuf.Class.newBuilder()
|
||||
|
||||
val hasEnumEntries = classDescriptor.kind == ClassKind.ENUM_CLASS &&
|
||||
@@ -507,7 +493,7 @@ class DescriptorSerializer private constructor(
|
||||
)
|
||||
}
|
||||
|
||||
private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder? = withNewMetDefinitelyNotNullType {
|
||||
private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder? {
|
||||
val builder = ProtoBuf.TypeAlias.newBuilder()
|
||||
val local = createChildSerializer(descriptor)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user