Do not return whole list of generated property descriptors for type
arguments' serializers when only one name is needed. Fixes https://github.com/Kotlin/kotlinx.serialization/issues/383
This commit is contained in:
+16
-11
@@ -154,7 +154,7 @@ object KSerializerDescriptorResolver {
|
|||||||
if (classDescriptor.declaredTypeParameters.isNotEmpty() &&
|
if (classDescriptor.declaredTypeParameters.isNotEmpty() &&
|
||||||
findSerializerConstructorForTypeArgumentsSerializers(thisDescriptor, onlyIfSynthetic = true) != null
|
findSerializerConstructorForTypeArgumentsSerializers(thisDescriptor, onlyIfSynthetic = true) != null
|
||||||
) {
|
) {
|
||||||
result.addAll(createLocalSerializersFieldsDescriptors(classDescriptor, thisDescriptor))
|
result.addAll(createLocalSerializersFieldsDescriptor(name, classDescriptor, thisDescriptor))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,17 +547,22 @@ object KSerializerDescriptorResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create properties typeSerial0, typeSerial1, etc... for storing generic arguments' serializers
|
// create properties typeSerial0, typeSerial1, etc... for storing generic arguments' serializers
|
||||||
private fun createLocalSerializersFieldsDescriptors(serializableDescriptor: ClassDescriptor, serializerDescriptor: ClassDescriptor): List<PropertyDescriptor> {
|
private fun createLocalSerializersFieldsDescriptor(
|
||||||
|
name: Name,
|
||||||
|
serializableDescriptor: ClassDescriptor,
|
||||||
|
serializerDescriptor: ClassDescriptor
|
||||||
|
): List<PropertyDescriptor> {
|
||||||
if (serializableDescriptor.declaredTypeParameters.isEmpty()) return emptyList()
|
if (serializableDescriptor.declaredTypeParameters.isEmpty()) return emptyList()
|
||||||
val serializerClass = serializableDescriptor.getClassFromSerializationPackage(SerialEntityNames.KSERIALIZER_CLASS)
|
val serializerClass = serializableDescriptor.getClassFromSerializationPackage(SerialEntityNames.KSERIALIZER_CLASS)
|
||||||
return serializerDescriptor.declaredTypeParameters.mapIndexed { index, param ->
|
val index = name.identifier.removePrefix(typeArgPrefix).toIntOrNull() ?: return emptyList()
|
||||||
val pType =
|
val param = serializerDescriptor.declaredTypeParameters[index]
|
||||||
KotlinTypeFactory.simpleNotNullType(
|
val pType =
|
||||||
Annotations.EMPTY,
|
KotlinTypeFactory.simpleNotNullType(
|
||||||
serializerClass,
|
Annotations.EMPTY,
|
||||||
listOf(TypeProjectionImpl(param.defaultType))
|
serializerClass,
|
||||||
)
|
listOf(TypeProjectionImpl(param.defaultType))
|
||||||
SimpleSyntheticPropertyDescriptor(serializerDescriptor, "$typeArgPrefix$index", pType)
|
)
|
||||||
}
|
val desc = SimpleSyntheticPropertyDescriptor(serializerDescriptor, "$typeArgPrefix$index", pType)
|
||||||
|
return listOf(desc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user