Provide SerializerExtension methods with child DescriptorSerializer instance
to make Native be able to serialize backing properties and inline bodies. Change visibility for functions and properties of DescriptorSerializer.
This commit is contained in:
committed by
Pavel Punegov
parent
726b9272f3
commit
fe0a2bc75e
+18
-12
@@ -35,25 +35,30 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
|
||||
get() = JvmMetadataVersion.INVALID_VERSION
|
||||
|
||||
override fun serializeClass(
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
super.serializeClass(descriptor, proto, versionRequirementTable)
|
||||
super.serializeClass(descriptor, proto, versionRequirementTable, childSerializer)
|
||||
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
|
||||
proto.setExtension(JavaClassProtoBuf.isPackagePrivateClass, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeConstructor(descriptor: ConstructorDescriptor, proto: ProtoBuf.Constructor.Builder) {
|
||||
super.serializeConstructor(descriptor, proto)
|
||||
override fun serializeConstructor(descriptor: ConstructorDescriptor,
|
||||
proto: ProtoBuf.Constructor.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
super.serializeConstructor(descriptor, proto, childSerializer)
|
||||
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
|
||||
proto.setExtension(JavaClassProtoBuf.isPackagePrivateConstructor, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) {
|
||||
super.serializeFunction(descriptor, proto)
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor,
|
||||
proto: ProtoBuf.Function.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
super.serializeFunction(descriptor, proto, childSerializer)
|
||||
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
|
||||
proto.setExtension(JavaClassProtoBuf.isPackagePrivateMethod, true)
|
||||
}
|
||||
@@ -64,11 +69,12 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
|
||||
}
|
||||
|
||||
override fun serializeProperty(
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
super.serializeProperty(descriptor, proto, versionRequirementTable)
|
||||
super.serializeProperty(descriptor, proto, versionRequirementTable, childSerializer)
|
||||
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
|
||||
proto.setExtension(JavaClassProtoBuf.isPackagePrivateField, true)
|
||||
}
|
||||
|
||||
+14
-8
@@ -49,9 +49,10 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
|
||||
override fun shouldUseTypeTable(): Boolean = useTypeTable
|
||||
|
||||
override fun serializeClass(
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
if (moduleName != JvmAbi.DEFAULT_MODULE_NAME) {
|
||||
proto.setExtension(JvmProtoBuf.classModuleName, stringTable.getStringIndex(moduleName))
|
||||
@@ -134,7 +135,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeConstructor(descriptor: ConstructorDescriptor, proto: ProtoBuf.Constructor.Builder) {
|
||||
override fun serializeConstructor(descriptor: ConstructorDescriptor,
|
||||
proto: ProtoBuf.Constructor.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
val method = bindings.get(METHOD_FOR_FUNCTION, descriptor)
|
||||
if (method != null) {
|
||||
val signature = SignatureSerializer().methodSignature(descriptor, method)
|
||||
@@ -144,7 +147,9 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) {
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor,
|
||||
proto: ProtoBuf.Function.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
val method = bindings.get(METHOD_FOR_FUNCTION, descriptor)
|
||||
if (method != null) {
|
||||
val signature = SignatureSerializer().methodSignature(descriptor, method)
|
||||
@@ -155,9 +160,10 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta
|
||||
}
|
||||
|
||||
override fun serializeProperty(
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
val signatureSerializer = SignatureSerializer()
|
||||
|
||||
|
||||
+9
-9
@@ -44,13 +44,13 @@ class DescriptorSerializer private constructor(
|
||||
private val containingDeclaration: DeclarationDescriptor?,
|
||||
private val typeParameters: Interner<TypeParameterDescriptor>,
|
||||
private val extension: SerializerExtension,
|
||||
private val typeTable: MutableTypeTable,
|
||||
val typeTable: MutableTypeTable,
|
||||
private val versionRequirementTable: MutableVersionRequirementTable,
|
||||
private val serializeTypeTableToFunction: Boolean
|
||||
) {
|
||||
private val contractSerializer = ContractSerializer()
|
||||
|
||||
private fun createChildSerializer(descriptor: DeclarationDescriptor): DescriptorSerializer =
|
||||
fun createChildSerializer(descriptor: DeclarationDescriptor): DescriptorSerializer =
|
||||
DescriptorSerializer(descriptor, Interner(typeParameters), extension, typeTable, versionRequirementTable,
|
||||
serializeTypeTableToFunction = false)
|
||||
|
||||
@@ -145,7 +145,7 @@ class DescriptorSerializer private constructor(
|
||||
|
||||
builder.addAllVersionRequirement(serializeVersionRequirements(classDescriptor))
|
||||
|
||||
extension.serializeClass(classDescriptor, builder, versionRequirementTable)
|
||||
extension.serializeClass(classDescriptor, builder, versionRequirementTable, this)
|
||||
|
||||
writeVersionRequirementForInlineClasses(classDescriptor, builder, versionRequirementTable)
|
||||
|
||||
@@ -269,7 +269,7 @@ class DescriptorSerializer private constructor(
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses))
|
||||
}
|
||||
|
||||
extension.serializeProperty(descriptor, builder, versionRequirementTable)
|
||||
extension.serializeProperty(descriptor, builder, versionRequirementTable, local)
|
||||
|
||||
return builder
|
||||
}
|
||||
@@ -344,7 +344,7 @@ class DescriptorSerializer private constructor(
|
||||
|
||||
contractSerializer.serializeContractOfFunctionIfAny(descriptor, builder, this)
|
||||
|
||||
extension.serializeFunction(descriptor, builder)
|
||||
extension.serializeFunction(descriptor, builder, local)
|
||||
|
||||
return builder
|
||||
}
|
||||
@@ -375,7 +375,7 @@ class DescriptorSerializer private constructor(
|
||||
builder.addVersionRequirement(writeVersionRequirement(LanguageFeature.InlineClasses))
|
||||
}
|
||||
|
||||
extension.serializeConstructor(descriptor, builder)
|
||||
extension.serializeConstructor(descriptor, builder, local)
|
||||
|
||||
return builder
|
||||
}
|
||||
@@ -402,7 +402,7 @@ class DescriptorSerializer private constructor(
|
||||
)
|
||||
}
|
||||
|
||||
fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder {
|
||||
private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder {
|
||||
val builder = ProtoBuf.TypeAlias.newBuilder()
|
||||
val local = createChildSerializer(descriptor)
|
||||
|
||||
@@ -442,7 +442,7 @@ class DescriptorSerializer private constructor(
|
||||
return builder
|
||||
}
|
||||
|
||||
fun enumEntryProto(descriptor: ClassDescriptor): ProtoBuf.EnumEntry.Builder {
|
||||
private fun enumEntryProto(descriptor: ClassDescriptor): ProtoBuf.EnumEntry.Builder {
|
||||
val builder = ProtoBuf.EnumEntry.newBuilder()
|
||||
builder.name = getSimpleNameIndex(descriptor.name)
|
||||
extension.serializeEnumEntry(descriptor, builder)
|
||||
@@ -517,7 +517,7 @@ class DescriptorSerializer private constructor(
|
||||
return builder
|
||||
}
|
||||
|
||||
internal fun typeId(type: KotlinType): Int = typeTable[type(type)]
|
||||
fun typeId(type: KotlinType): Int = typeTable[type(type)]
|
||||
|
||||
internal fun type(type: KotlinType): ProtoBuf.Type.Builder {
|
||||
val builder = ProtoBuf.Type.newBuilder()
|
||||
|
||||
+14
-8
@@ -32,25 +32,31 @@ abstract class SerializerExtension {
|
||||
|
||||
|
||||
open fun serializeClass(
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
}
|
||||
|
||||
open fun serializePackage(packageFqName: FqName, proto: ProtoBuf.Package.Builder) {
|
||||
}
|
||||
|
||||
open fun serializeConstructor(descriptor: ConstructorDescriptor, proto: ProtoBuf.Constructor.Builder) {
|
||||
open fun serializeConstructor(descriptor: ConstructorDescriptor,
|
||||
proto: ProtoBuf.Constructor.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
}
|
||||
|
||||
open fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) {
|
||||
open fun serializeFunction(descriptor: FunctionDescriptor,
|
||||
proto: ProtoBuf.Function.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
}
|
||||
|
||||
open fun serializeProperty(
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
}
|
||||
|
||||
|
||||
+14
-8
@@ -28,9 +28,10 @@ abstract class KotlinSerializerExtensionBase(private val protocol: SerializerExt
|
||||
override val stringTable = StringTableImpl()
|
||||
|
||||
override fun serializeClass(
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
for (annotation in descriptor.nonSourceAnnotations) {
|
||||
proto.addExtension(protocol.classAnnotation, annotationSerializer.serializeAnnotation(annotation))
|
||||
@@ -41,22 +42,27 @@ abstract class KotlinSerializerExtensionBase(private val protocol: SerializerExt
|
||||
proto.setExtension(protocol.packageFqName, stringTable.getPackageFqNameIndex(packageFqName))
|
||||
}
|
||||
|
||||
override fun serializeConstructor(descriptor: ConstructorDescriptor, proto: ProtoBuf.Constructor.Builder) {
|
||||
override fun serializeConstructor(descriptor: ConstructorDescriptor,
|
||||
proto: ProtoBuf.Constructor.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
for (annotation in descriptor.nonSourceAnnotations) {
|
||||
proto.addExtension(protocol.constructorAnnotation, annotationSerializer.serializeAnnotation(annotation))
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) {
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor,
|
||||
proto: ProtoBuf.Function.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
for (annotation in descriptor.nonSourceAnnotations) {
|
||||
proto.addExtension(protocol.functionAnnotation, annotationSerializer.serializeAnnotation(annotation))
|
||||
}
|
||||
}
|
||||
|
||||
override fun serializeProperty(
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
for (annotation in descriptor.nonSourceAnnotations) {
|
||||
proto.addExtension(protocol.propertyAnnotation, annotationSerializer.serializeAnnotation(annotation))
|
||||
|
||||
+15
-10
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTabl
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceFile
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.KotlinSerializerExtensionBase
|
||||
import org.jetbrains.kotlin.types.FlexibleType
|
||||
|
||||
@@ -41,35 +42,39 @@ class KotlinJavascriptSerializerExtension(
|
||||
}
|
||||
|
||||
override fun serializeClass(
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: ClassDescriptor,
|
||||
proto: ProtoBuf.Class.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
val id = getFileId(descriptor)
|
||||
if (id != null) {
|
||||
proto.setExtension(JsProtoBuf.classContainingFileId, id)
|
||||
}
|
||||
super.serializeClass(descriptor, proto, versionRequirementTable)
|
||||
super.serializeClass(descriptor, proto, versionRequirementTable, childSerializer)
|
||||
}
|
||||
|
||||
override fun serializeProperty(
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
val id = getFileId(descriptor)
|
||||
if (id != null) {
|
||||
proto.setExtension(JsProtoBuf.propertyContainingFileId, id)
|
||||
}
|
||||
super.serializeProperty(descriptor, proto, versionRequirementTable)
|
||||
super.serializeProperty(descriptor, proto, versionRequirementTable, childSerializer)
|
||||
}
|
||||
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor, proto: ProtoBuf.Function.Builder) {
|
||||
override fun serializeFunction(descriptor: FunctionDescriptor,
|
||||
proto: ProtoBuf.Function.Builder,
|
||||
childSerializer: DescriptorSerializer) {
|
||||
val id = getFileId(descriptor)
|
||||
if (id != null) {
|
||||
proto.setExtension(JsProtoBuf.functionContainingFileId, id)
|
||||
}
|
||||
super.serializeFunction(descriptor, proto)
|
||||
super.serializeFunction(descriptor, proto, childSerializer)
|
||||
}
|
||||
|
||||
private fun getFileId(descriptor: DeclarationDescriptor): Int? {
|
||||
|
||||
Reference in New Issue
Block a user