From a44f74ea208497d07d7cbfead47e02c7d62ee1c0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 5 Oct 2015 00:04:54 +0300 Subject: [PATCH] Load new proto messages for constructors --- .../deserialization/MemberDeserializer.kt | 13 ++++++------- .../descriptors/DeserializedClassDescriptor.kt | 17 ++++++++--------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index c83aad595cc..afa7d2d15d6 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl import org.jetbrains.kotlin.resolve.DescriptorFactory import org.jetbrains.kotlin.serialization.Flags import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.ProtoBuf.Callable import org.jetbrains.kotlin.serialization.deserialization.descriptors.* import org.jetbrains.kotlin.utils.toReadOnlyList @@ -155,19 +154,19 @@ public class MemberDeserializer(private val c: DeserializationContext) { return (c.containingDeclaration as? ClassDescriptor)?.getThisAsReceiverParameter() } - public fun loadConstructor(proto: Callable, isPrimary: Boolean): ConstructorDescriptor { + public fun loadConstructor(proto: ProtoBuf.Constructor, isPrimary: Boolean): ConstructorDescriptor { val classDescriptor = c.containingDeclaration as ClassDescriptor val descriptor = DeserializedConstructorDescriptor( - classDescriptor, null, getAnnotations(proto, proto.getFlags(), AnnotatedCallableKind.FUNCTION), - isPrimary, CallableMemberDescriptor.Kind.DECLARATION, TODO("proto"), c.nameResolver + classDescriptor, null, getAnnotations(proto, proto.flags, AnnotatedCallableKind.FUNCTION), + isPrimary, CallableMemberDescriptor.Kind.DECLARATION, proto, c.nameResolver ) val local = c.childContext(descriptor, listOf()) descriptor.initialize( - classDescriptor.getTypeConstructor().getParameters(), + classDescriptor.typeConstructor.parameters, local.memberDeserializer.valueParameters(proto.valueParameterList, proto, AnnotatedCallableKind.FUNCTION), - Deserialization.visibility(Flags.VISIBILITY.get(proto.getFlags())) + Deserialization.visibility(Flags.VISIBILITY.get(proto.flags)) ) - descriptor.setReturnType(local.typeDeserializer.type(proto.getReturnType())) + descriptor.returnType = classDescriptor.defaultType return descriptor } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index c1af06ddae2..f2028aa99a6 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -102,16 +102,15 @@ public class DeserializedClassDescriptor( override fun isCompanionObject(): Boolean = isCompanion private fun computePrimaryConstructor(): ConstructorDescriptor? { - if (!classProto.hasPrimaryConstructor()) return null - - val constructorProto = classProto.getPrimaryConstructor() - if (!constructorProto.hasData()) { - val descriptor = DescriptorFactory.createPrimaryConstructorForObject(this, SourceElement.NO_SOURCE) - descriptor.setReturnType(getDefaultType()) - return descriptor + if (kind.isSingleton) { + return DescriptorFactory.createPrimaryConstructorForObject(this, SourceElement.NO_SOURCE).apply { + returnType = getDefaultType() + } } - return c.memberDeserializer.loadConstructor(constructorProto.getData(), true) + return classProto.constructorList.firstOrNull { !Flags.IS_SECONDARY.get(it.flags) }?.let { constructorProto -> + c.memberDeserializer.loadConstructor(constructorProto, true) + } } override fun getUnsubstitutedPrimaryConstructor(): ConstructorDescriptor? = primaryConstructor() @@ -120,7 +119,7 @@ public class DeserializedClassDescriptor( computeSecondaryConstructors() + getUnsubstitutedPrimaryConstructor().singletonOrEmptyList() private fun computeSecondaryConstructors(): List = - classProto.getSecondaryConstructorList().map { + classProto.constructorList.filter { Flags.IS_SECONDARY.get(it.flags) }.map { c.memberDeserializer.loadConstructor(it, false) }