Fix version requirement serialization for nested classes
Use the version requierement table of the outer DescriptorSerializer instance when serializing metadata for a class. Pass parent serializer to DescriptorSerializer.create to make sure the correct table is used. Serialize nested classes before the outer class in JS and common code, to make sure requirements are not lost. Also, split VersionRequirementTest to JVM and JS #KT-25120 In Progress
This commit is contained in:
@@ -151,29 +151,29 @@ open class MetadataSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
private val extension = createSerializerExtension()
|
||||
|
||||
fun run() {
|
||||
serializeClasses(classes)
|
||||
serializeMembers(members)
|
||||
val serializer = DescriptorSerializer.createTopLevel(extension)
|
||||
serializeClasses(classes, serializer)
|
||||
serializeMembers(members, serializer)
|
||||
serializeStringTable()
|
||||
serializeBuiltInsFile()
|
||||
}
|
||||
|
||||
private fun serializeClass(classDescriptor: ClassDescriptor) {
|
||||
val classProto = DescriptorSerializer.create(classDescriptor, extension).classProto(classDescriptor).build()
|
||||
proto.addClass_(classProto)
|
||||
|
||||
serializeClasses(classDescriptor.unsubstitutedInnerClassesScope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS))
|
||||
}
|
||||
|
||||
private fun serializeClasses(classes: Collection<DeclarationDescriptor>) {
|
||||
private fun serializeClasses(classes: Collection<DeclarationDescriptor>, parentSerializer: DescriptorSerializer) {
|
||||
for (descriptor in DescriptorSerializer.sort(classes)) {
|
||||
if (descriptor is ClassDescriptor && descriptor.kind != ClassKind.ENUM_ENTRY) {
|
||||
serializeClass(descriptor)
|
||||
}
|
||||
if (descriptor !is ClassDescriptor || descriptor.kind == ClassKind.ENUM_ENTRY) continue
|
||||
|
||||
val serializer = DescriptorSerializer.create(descriptor, extension, parentSerializer)
|
||||
serializeClasses(
|
||||
descriptor.unsubstitutedInnerClassesScope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS),
|
||||
serializer
|
||||
)
|
||||
|
||||
proto.addClass_(serializer.classProto(descriptor).build())
|
||||
}
|
||||
}
|
||||
|
||||
private fun serializeMembers(members: Collection<DeclarationDescriptor>) {
|
||||
proto.`package` = DescriptorSerializer.createTopLevel(extension).packagePartProto(packageFqName, members).build()
|
||||
private fun serializeMembers(members: Collection<DeclarationDescriptor>, serializer: DescriptorSerializer) {
|
||||
proto.`package` = serializer.packagePartProto(packageFqName, members).build()
|
||||
}
|
||||
|
||||
private fun serializeStringTable() {
|
||||
|
||||
Reference in New Issue
Block a user