Don't generate writeSelf/internal constructor if corresponding serialize/deserialize aren't auto-generated
This commit is contained in:
+12
-4
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.KSerializerDescriptorResolver
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializableProperties
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.classSerializer
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.toClassDescriptor
|
||||
|
||||
abstract class SerializableCodegen(
|
||||
protected val serializableDescriptor: ClassDescriptor,
|
||||
@@ -35,13 +37,19 @@ abstract class SerializableCodegen(
|
||||
}
|
||||
|
||||
private fun generateSyntheticInternalConstructor() {
|
||||
val constrDesc = KSerializerDescriptorResolver.createLoadConstructorDescriptor(serializableDescriptor, bindingContext)
|
||||
generateInternalConstructor(constrDesc)
|
||||
val serializerDescriptor = serializableDescriptor.classSerializer?.toClassDescriptor ?: return
|
||||
if (SerializerCodegen.getSyntheticLoadMember(serializerDescriptor) != null) {
|
||||
val constrDesc = KSerializerDescriptorResolver.createLoadConstructorDescriptor(serializableDescriptor, bindingContext)
|
||||
generateInternalConstructor(constrDesc)
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateSyntheticMethods() {
|
||||
val func = KSerializerDescriptorResolver.createWriteSelfFunctionDescriptor(serializableDescriptor)
|
||||
generateWriteSelfMethod(func)
|
||||
val serializerDescriptor = serializableDescriptor.classSerializer?.toClassDescriptor ?: return
|
||||
if (SerializerCodegen.getSyntheticSaveMember(serializerDescriptor) != null) {
|
||||
val func = KSerializerDescriptorResolver.createWriteSelfFunctionDescriptor(serializableDescriptor)
|
||||
generateWriteSelfMethod(func)
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract fun generateInternalConstructor(constructorDescriptor: ClassConstructorDescriptor)
|
||||
|
||||
+14
-10
@@ -110,22 +110,14 @@ abstract class SerializerCodegen(
|
||||
}
|
||||
|
||||
private fun generateSaveIfNeeded(): Boolean {
|
||||
val function = getMemberToGenerate(
|
||||
serializerDescriptor, SerialEntityNames.SAVE,
|
||||
serializerDescriptor::checkSaveMethodResult, serializerDescriptor::checkSaveMethodParameters
|
||||
)
|
||||
?: return false
|
||||
val function = getSyntheticSaveMember(serializerDescriptor) ?: return false
|
||||
checkSerializability()
|
||||
generateSave(function)
|
||||
return true
|
||||
}
|
||||
|
||||
private fun generateLoadIfNeeded(): Boolean {
|
||||
val function = getMemberToGenerate(
|
||||
serializerDescriptor, SerialEntityNames.LOAD,
|
||||
serializerDescriptor::checkLoadMethodResult, serializerDescriptor::checkLoadMethodParameters
|
||||
)
|
||||
?: return false
|
||||
val function = getSyntheticLoadMember(serializerDescriptor) ?: return false
|
||||
checkSerializability()
|
||||
generateLoad(function)
|
||||
return true
|
||||
@@ -160,4 +152,16 @@ abstract class SerializerCodegen(
|
||||
|
||||
protected fun ClassDescriptor.getFuncDesc(funcName: String): Sequence<FunctionDescriptor> =
|
||||
unsubstitutedMemberScope.getDescriptorsFiltered { it == Name.identifier(funcName) }.asSequence().filterIsInstance<FunctionDescriptor>()
|
||||
|
||||
companion object {
|
||||
fun getSyntheticLoadMember(serializerDescriptor: ClassDescriptor): FunctionDescriptor? = getMemberToGenerate(
|
||||
serializerDescriptor, SerialEntityNames.LOAD,
|
||||
serializerDescriptor::checkLoadMethodResult, serializerDescriptor::checkLoadMethodParameters
|
||||
)
|
||||
|
||||
fun getSyntheticSaveMember(serializerDescriptor: ClassDescriptor): FunctionDescriptor? = getMemberToGenerate(
|
||||
serializerDescriptor, SerialEntityNames.SAVE,
|
||||
serializerDescriptor::checkSaveMethodResult, serializerDescriptor::checkSaveMethodParameters
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user