Support multiple version requirements on single element
This commit is contained in:
+2
-3
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
|
||||
@@ -138,7 +137,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
||||
}
|
||||
|
||||
private fun DeserializedMemberDescriptor.versionAndReleaseCoroutinesMismatch(): Boolean =
|
||||
c.components.configuration.releaseCoroutines && versionRequirement?.version != VersionRequirement.Version(1, 3)
|
||||
c.components.configuration.releaseCoroutines && versionRequirements.none { it.version == VersionRequirement.Version(1, 3) }
|
||||
|
||||
private fun loadOldFlags(oldFlags: Int): Int {
|
||||
val lowSixBits = oldFlags and 0x3f
|
||||
@@ -231,7 +230,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
||||
descriptor.isExperimentalCoroutineInReleaseEnvironment = local.typeDeserializer.experimentalSuspendFunctionTypeEncountered ||
|
||||
((c.containingDeclaration as? DeserializedClassDescriptor)?.c?.typeDeserializer?.experimentalSuspendFunctionTypeEncountered == true &&
|
||||
c.components.configuration.releaseCoroutines &&
|
||||
descriptor.versionRequirement?.version != VersionRequirement.Version(1, 3))
|
||||
descriptor.versionRequirements.none { it.version == VersionRequirement.Version(1, 3) })
|
||||
|
||||
return descriptor
|
||||
}
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ class DeserializedClassDescriptor(
|
||||
(containingDeclaration as? DeserializedClassDescriptor)?.thisAsProtoContainer
|
||||
)
|
||||
|
||||
val versionRequirement: VersionRequirement?
|
||||
val versionRequirements: List<VersionRequirement>
|
||||
get() = VersionRequirement.create(classProto, c.nameResolver, c.versionRequirementTable)
|
||||
|
||||
override val annotations =
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ interface DeserializedMemberDescriptor : MemberDescriptor {
|
||||
|
||||
val versionRequirementTable: VersionRequirementTable
|
||||
|
||||
val versionRequirement: VersionRequirement?
|
||||
val versionRequirements: List<VersionRequirement>
|
||||
get() = VersionRequirement.create(proto, nameResolver, versionRequirementTable)
|
||||
|
||||
// Information about the origin of this callable's container (class or package part on JVM) or null if there's no such information.
|
||||
|
||||
@@ -220,7 +220,7 @@ message Class {
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
optional VersionRequirementTable version_requirement_table = 32;
|
||||
|
||||
@@ -258,7 +258,7 @@ message Constructor {
|
||||
repeated ValueParameter value_parameter = 2;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
@@ -295,7 +295,7 @@ message Function {
|
||||
optional TypeTable type_table = 30;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
optional Contract contract = 32;
|
||||
|
||||
@@ -349,7 +349,7 @@ message Property {
|
||||
optional int32 setter_flags = 8;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 18999;
|
||||
}
|
||||
@@ -394,7 +394,7 @@ message TypeAlias {
|
||||
repeated Annotation annotation = 8;
|
||||
|
||||
// Index into the VersionRequirementTable
|
||||
optional int32 version_requirement = 31;
|
||||
repeated int32 version_requirement = 31;
|
||||
|
||||
extensions 100 to 199;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+11
-7
@@ -81,16 +81,20 @@ class VersionRequirement(
|
||||
"since $version $level" + (if (errorCode != null) " error $errorCode" else "") + (if (message != null) ": $message" else "")
|
||||
|
||||
companion object {
|
||||
fun create(proto: MessageLite, nameResolver: NameResolver, table: VersionRequirementTable): VersionRequirement? {
|
||||
val id = when (proto) {
|
||||
is ProtoBuf.Class -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.Constructor -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.Function -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.Property -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
is ProtoBuf.TypeAlias -> if (proto.hasVersionRequirement()) proto.versionRequirement else return null
|
||||
fun create(proto: MessageLite, nameResolver: NameResolver, table: VersionRequirementTable): List<VersionRequirement> {
|
||||
val ids = when (proto) {
|
||||
is ProtoBuf.Class -> proto.versionRequirementList
|
||||
is ProtoBuf.Constructor -> proto.versionRequirementList
|
||||
is ProtoBuf.Function -> proto.versionRequirementList
|
||||
is ProtoBuf.Property -> proto.versionRequirementList
|
||||
is ProtoBuf.TypeAlias -> proto.versionRequirementList
|
||||
else -> throw IllegalStateException("Unexpected declaration: ${proto::class.java}")
|
||||
}
|
||||
|
||||
return ids.mapNotNull { id -> create(id, nameResolver, table) }
|
||||
}
|
||||
|
||||
fun create(id: Int, nameResolver: NameResolver, table: VersionRequirementTable): VersionRequirement? {
|
||||
val info = table[id] ?: return null
|
||||
|
||||
val version = Version.decode(
|
||||
|
||||
Reference in New Issue
Block a user