Remove redundant check for 'all parameters are properties' in a case of fully-customized serializer
This commit is contained in:
+26
-14
@@ -35,8 +35,13 @@ abstract class SerializerCodegen(
|
|||||||
protected val properties = SerializableProperties(serializableDescriptor, bindingContext)
|
protected val properties = SerializableProperties(serializableDescriptor, bindingContext)
|
||||||
protected val orderedProperties = properties.serializableProperties
|
protected val orderedProperties = properties.serializableProperties
|
||||||
|
|
||||||
|
private fun checkSerializability() {
|
||||||
|
check(properties.isExternallySerializable) {
|
||||||
|
"Class ${serializableDescriptor.name} have constructor parameters which are not properties and therefore it is not serializable automatically"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun generate() {
|
fun generate() {
|
||||||
check(properties.isExternallySerializable) { "Class ${serializableDescriptor.name} is not externally serializable" }
|
|
||||||
val prop = generateSerializableClassPropertyIfNeeded()
|
val prop = generateSerializableClassPropertyIfNeeded()
|
||||||
if (prop)
|
if (prop)
|
||||||
generateSerialDesc()
|
generateSerialDesc()
|
||||||
@@ -98,31 +103,38 @@ abstract class SerializerCodegen(
|
|||||||
|
|
||||||
private fun generateSerializableClassPropertyIfNeeded(): Boolean {
|
private fun generateSerializableClassPropertyIfNeeded(): Boolean {
|
||||||
val property = generatedSerialDescPropertyDescriptor
|
val property = generatedSerialDescPropertyDescriptor
|
||||||
?: return false
|
?: return false
|
||||||
|
checkSerializability()
|
||||||
generateSerializableClassProperty(property)
|
generateSerializableClassProperty(property)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateSaveIfNeeded(): Boolean {
|
private fun generateSaveIfNeeded(): Boolean {
|
||||||
val function = getMemberToGenerate(serializerDescriptor, SerialEntityNames.SAVE,
|
val function = getMemberToGenerate(
|
||||||
serializerDescriptor::checkSaveMethodResult, serializerDescriptor::checkSaveMethodParameters)
|
serializerDescriptor, SerialEntityNames.SAVE,
|
||||||
?: return false
|
serializerDescriptor::checkSaveMethodResult, serializerDescriptor::checkSaveMethodParameters
|
||||||
|
)
|
||||||
|
?: return false
|
||||||
|
checkSerializability()
|
||||||
generateSave(function)
|
generateSave(function)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateLoadIfNeeded(): Boolean {
|
private fun generateLoadIfNeeded(): Boolean {
|
||||||
val function = getMemberToGenerate(serializerDescriptor, SerialEntityNames.LOAD,
|
val function = getMemberToGenerate(
|
||||||
serializerDescriptor::checkLoadMethodResult, serializerDescriptor::checkLoadMethodParameters)
|
serializerDescriptor, SerialEntityNames.LOAD,
|
||||||
?: return false
|
serializerDescriptor::checkLoadMethodResult, serializerDescriptor::checkLoadMethodParameters
|
||||||
|
)
|
||||||
|
?: return false
|
||||||
|
checkSerializability()
|
||||||
generateLoad(function)
|
generateLoad(function)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPropertyToGenerate(
|
private fun getPropertyToGenerate(
|
||||||
classDescriptor: ClassDescriptor,
|
classDescriptor: ClassDescriptor,
|
||||||
name: String,
|
name: String,
|
||||||
isReturnTypeOk: (PropertyDescriptor) -> Boolean
|
isReturnTypeOk: (PropertyDescriptor) -> Boolean
|
||||||
): PropertyDescriptor? = getProperty(
|
): PropertyDescriptor? = getProperty(
|
||||||
classDescriptor,
|
classDescriptor,
|
||||||
name,
|
name,
|
||||||
@@ -131,7 +143,7 @@ abstract class SerializerCodegen(
|
|||||||
kind == CallableMemberDescriptor.Kind.SYNTHESIZED || kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
kind == CallableMemberDescriptor.Kind.SYNTHESIZED || kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getProperty(
|
private fun getProperty(
|
||||||
classDescriptor: ClassDescriptor,
|
classDescriptor: ClassDescriptor,
|
||||||
name: String,
|
name: String,
|
||||||
isReturnTypeOk: (PropertyDescriptor) -> Boolean,
|
isReturnTypeOk: (PropertyDescriptor) -> Boolean,
|
||||||
@@ -147,5 +159,5 @@ abstract class SerializerCodegen(
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun ClassDescriptor.getFuncDesc(funcName: String): Sequence<FunctionDescriptor> =
|
protected fun ClassDescriptor.getFuncDesc(funcName: String): Sequence<FunctionDescriptor> =
|
||||||
unsubstitutedMemberScope.getDescriptorsFiltered { it == Name.identifier(funcName) }.asSequence().filterIsInstance<FunctionDescriptor>()
|
unsubstitutedMemberScope.getDescriptorsFiltered { it == Name.identifier(funcName) }.asSequence().filterIsInstance<FunctionDescriptor>()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user