Add more methods to DescriptorSerializerPlugin

New methods:
afterFunction, afterConstructor, afterProperty, afterTypealias
This commit is contained in:
Oleksandr Karpovich
2023-02-01 11:49:17 +01:00
committed by teamcity
parent 7db32f6430
commit dec9704cea
2 changed files with 48 additions and 2 deletions
@@ -70,6 +70,7 @@ class DescriptorSerializer private constructor(
descriptor, Interner(typeParameters), extension, typeTable, versionRequirementTable,
serializeTypeTableToFunction = false, typeAttributeTranslators = typeAttributeTranslators,
languageVersionSettings = languageVersionSettings,
plugins = plugins,
)
val stringTable: DescriptorAwareStringTable
@@ -362,6 +363,8 @@ class DescriptorSerializer private constructor(
extension.serializeProperty(descriptor, builder, versionRequirementTable, local)
plugins.forEach { it.afterProperty(descriptor, builder, versionRequirementTable, this, extension) }
return builder
}
@@ -435,6 +438,8 @@ class DescriptorSerializer private constructor(
extension.serializeFunction(descriptor, builder, versionRequirementTable, local)
plugins.forEach { it.afterFunction(descriptor, builder, versionRequirementTable, this, extension) }
if (serializeTypeTableToFunction) {
typeTable.serialize()?.let { builder.typeTable = it }
}
@@ -497,6 +502,8 @@ class DescriptorSerializer private constructor(
extension.serializeConstructor(descriptor, builder, local)
plugins.forEach { it.afterConstructor(descriptor, builder, versionRequirementTable, this, extension) }
return builder
}
@@ -569,6 +576,8 @@ class DescriptorSerializer private constructor(
extension.serializeTypeAlias(descriptor, builder)
plugins.forEach { it.afterTypealias(descriptor, builder, versionRequirementTable, this, extension) }
return builder
}
@@ -874,6 +883,7 @@ class DescriptorSerializer private constructor(
null, Interner(), extension, MutableTypeTable(), MutableVersionRequirementTable(), serializeTypeTableToFunction = false,
typeAttributeTranslators = project?.let { TypeAttributeTranslatorExtension.createTranslators(it) },
languageVersionSettings = languageVersionSettings,
plugins = project?.let { DescriptorSerializerPlugin.getInstances(it) }.orEmpty(),
)
@JvmStatic
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.serialization
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
@@ -20,6 +20,42 @@ interface DescriptorSerializerPlugin {
) {
}
fun afterFunction(
descriptor: FunctionDescriptor,
proto: ProtoBuf.Function.Builder,
versionRequirementTable: MutableVersionRequirementTable?,
childSerializer: DescriptorSerializer,
extension: SerializerExtension
) {
}
fun afterConstructor(
descriptor: ConstructorDescriptor,
proto: ProtoBuf.Constructor.Builder,
versionRequirementTable: MutableVersionRequirementTable?,
childSerializer: DescriptorSerializer,
extension: SerializerExtension
) {
}
fun afterProperty(
descriptor: PropertyDescriptor,
proto: ProtoBuf.Property.Builder,
versionRequirementTable: MutableVersionRequirementTable?,
childSerializer: DescriptorSerializer,
extension: SerializerExtension
) {
}
fun afterTypealias(
descriptor: TypeAliasDescriptor,
proto: ProtoBuf.TypeAlias.Builder,
versionRequirementTable: MutableVersionRequirementTable?,
childSerializer: DescriptorSerializer,
extension: SerializerExtension
) {
}
companion object : ProjectExtensionDescriptor<DescriptorSerializerPlugin>(
"org.jetbrains.kotlin.DescriptorSerializerPlugin", DescriptorSerializerPlugin::class.java)
}
}