From dec9704cea375e7c1c5e820792edeefdd915b128 Mon Sep 17 00:00:00 2001 From: Oleksandr Karpovich Date: Wed, 1 Feb 2023 11:49:17 +0100 Subject: [PATCH] Add more methods to DescriptorSerializerPlugin New methods: afterFunction, afterConstructor, afterProperty, afterTypealias --- .../serialization/DescriptorSerializer.kt | 10 +++++ .../DescriptorSerializerPlugin.kt | 40 ++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 6984cb377e4..0ff38eda300 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -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 diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializerPlugin.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializerPlugin.kt index a2854c2ceff..a85336521ce 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializerPlugin.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializerPlugin.kt @@ -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( "org.jetbrains.kotlin.DescriptorSerializerPlugin", DescriptorSerializerPlugin::class.java) -} \ No newline at end of file +}