Do not add synthetic deserialization constructor if .deserialize method is customized

Otherwise, there was an added descriptor without generated IR on Native
This commit is contained in:
Leonid Startsev
2019-10-09 16:34:35 +03:00
parent 1ed4930a2e
commit d8ad0ec43a
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
import org.jetbrains.kotlin.resolve.lazy.LazyClassContext
import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen
import org.jetbrains.kotlinx.serialization.compiler.resolve.*
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations.serialInfoFqName
import java.util.*
@@ -78,6 +79,8 @@ open class SerializationResolveExtension : SyntheticResolveExtension {
result: MutableCollection<ClassConstructorDescriptor>
) {
if (thisDescriptor.isInternalSerializable) {
// do not add synthetic deserialization constructor if .deserialize method is customized
if (thisDescriptor.hasCompanionObjectAsSerializer && SerializerCodegen.getSyntheticLoadMember(thisDescriptor.companionObjectDescriptor!!) == null) return
result.add(KSerializerDescriptorResolver.createLoadConstructorDescriptor(thisDescriptor, bindingContext))
}
}