Load new proto messages for constructors
This commit is contained in:
+6
-7
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
||||||
import org.jetbrains.kotlin.serialization.Flags
|
import org.jetbrains.kotlin.serialization.Flags
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf.Callable
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.*
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.*
|
||||||
import org.jetbrains.kotlin.utils.toReadOnlyList
|
import org.jetbrains.kotlin.utils.toReadOnlyList
|
||||||
|
|
||||||
@@ -155,19 +154,19 @@ public class MemberDeserializer(private val c: DeserializationContext) {
|
|||||||
return (c.containingDeclaration as? ClassDescriptor)?.getThisAsReceiverParameter()
|
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 classDescriptor = c.containingDeclaration as ClassDescriptor
|
||||||
val descriptor = DeserializedConstructorDescriptor(
|
val descriptor = DeserializedConstructorDescriptor(
|
||||||
classDescriptor, null, getAnnotations(proto, proto.getFlags(), AnnotatedCallableKind.FUNCTION),
|
classDescriptor, null, getAnnotations(proto, proto.flags, AnnotatedCallableKind.FUNCTION),
|
||||||
isPrimary, CallableMemberDescriptor.Kind.DECLARATION, TODO("proto"), c.nameResolver
|
isPrimary, CallableMemberDescriptor.Kind.DECLARATION, proto, c.nameResolver
|
||||||
)
|
)
|
||||||
val local = c.childContext(descriptor, listOf())
|
val local = c.childContext(descriptor, listOf())
|
||||||
descriptor.initialize(
|
descriptor.initialize(
|
||||||
classDescriptor.getTypeConstructor().getParameters(),
|
classDescriptor.typeConstructor.parameters,
|
||||||
local.memberDeserializer.valueParameters(proto.valueParameterList, proto, AnnotatedCallableKind.FUNCTION),
|
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
|
return descriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-9
@@ -102,16 +102,15 @@ public class DeserializedClassDescriptor(
|
|||||||
override fun isCompanionObject(): Boolean = isCompanion
|
override fun isCompanionObject(): Boolean = isCompanion
|
||||||
|
|
||||||
private fun computePrimaryConstructor(): ConstructorDescriptor? {
|
private fun computePrimaryConstructor(): ConstructorDescriptor? {
|
||||||
if (!classProto.hasPrimaryConstructor()) return null
|
if (kind.isSingleton) {
|
||||||
|
return DescriptorFactory.createPrimaryConstructorForObject(this, SourceElement.NO_SOURCE).apply {
|
||||||
val constructorProto = classProto.getPrimaryConstructor()
|
returnType = getDefaultType()
|
||||||
if (!constructorProto.hasData()) {
|
}
|
||||||
val descriptor = DescriptorFactory.createPrimaryConstructorForObject(this, SourceElement.NO_SOURCE)
|
|
||||||
descriptor.setReturnType(getDefaultType())
|
|
||||||
return descriptor
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
override fun getUnsubstitutedPrimaryConstructor(): ConstructorDescriptor? = primaryConstructor()
|
||||||
@@ -120,7 +119,7 @@ public class DeserializedClassDescriptor(
|
|||||||
computeSecondaryConstructors() + getUnsubstitutedPrimaryConstructor().singletonOrEmptyList()
|
computeSecondaryConstructors() + getUnsubstitutedPrimaryConstructor().singletonOrEmptyList()
|
||||||
|
|
||||||
private fun computeSecondaryConstructors(): List<ConstructorDescriptor> =
|
private fun computeSecondaryConstructors(): List<ConstructorDescriptor> =
|
||||||
classProto.getSecondaryConstructorList().map {
|
classProto.constructorList.filter { Flags.IS_SECONDARY.get(it.flags) }.map {
|
||||||
c.memberDeserializer.loadConstructor(it, false)
|
c.memberDeserializer.loadConstructor(it, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user