Remove redundant check for 'all parameters are properties' in a case of fully-customized serializer

This commit is contained in:
Leonid Startsev
2018-11-26 16:21:20 +03:00
parent 7e32e2e9b9
commit 5f2cea917f
@@ -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>()
} }