[kotlinx-metadata] Add extensions for KmValueParameter
There is no extension on jvm, but klibs have parameter annotations.
This commit is contained in:
+17
-1
@@ -36,6 +36,9 @@ internal val KmModuleFragment.klibExtensions: KlibModuleFragmentExtension
|
||||
internal val KmTypeAlias.klibExtensions: KlibTypeAliasExtension
|
||||
get() = visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as KlibTypeAliasExtension
|
||||
|
||||
internal val KmValueParameter.klibExtensions: KlibValueParameterExtension
|
||||
get() = visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as KlibValueParameterExtension
|
||||
|
||||
internal class KlibFunctionExtension : KlibFunctionExtensionVisitor(), KmFunctionExtension {
|
||||
|
||||
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
||||
@@ -233,8 +236,21 @@ internal class KlibTypeAliasExtension : KlibTypeAliasExtensionVisitor(), KmTypeA
|
||||
this.uniqId = uniqId
|
||||
}
|
||||
|
||||
override fun accept(visitor: KmTypeExtensionVisitor) {
|
||||
override fun accept(visitor: KmTypeAliasExtensionVisitor) {
|
||||
require(visitor is KlibTypeAliasExtensionVisitor)
|
||||
uniqId?.let(visitor::visitUniqId)
|
||||
}
|
||||
}
|
||||
|
||||
internal class KlibValueParameterExtension : KlibValueParameterExtensionVisitor(), KmValueParameterExtension {
|
||||
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
||||
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
annotations += annotation
|
||||
}
|
||||
|
||||
override fun accept(visitor: KmValueParameterExtensionVisitor) {
|
||||
require(visitor is KlibValueParameterExtensionVisitor)
|
||||
annotations.forEach(visitor::visitAnnotation)
|
||||
}
|
||||
}
|
||||
+27
@@ -134,6 +134,14 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readValueParameterExtensions(v: KmValueParameterVisitor, proto: ProtoBuf.ValueParameter, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibValueParameterExtensionVisitor.TYPE) as? KlibValueParameterExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.parameterAnnotation).forEach { annotation ->
|
||||
extension.visitAnnotation(annotation.readAnnotation(c.strings))
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, c: WriteContext): KmClassExtensionVisitor? {
|
||||
if (type != KlibClassExtensionVisitor.TYPE) return null
|
||||
return object : KlibClassExtensionVisitor() {
|
||||
@@ -348,6 +356,22 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeValueParameterExtensions(
|
||||
type: KmExtensionType,
|
||||
proto: ProtoBuf.ValueParameter.Builder,
|
||||
c: WriteContext
|
||||
): KmValueParameterExtensionVisitor? {
|
||||
if (type != KlibValueParameterExtensionVisitor.TYPE) return null
|
||||
return object : KlibValueParameterExtensionVisitor() {
|
||||
override fun visitAnnotation(annotation: KmAnnotation) {
|
||||
proto.addExtension(
|
||||
KlibMetadataProtoBuf.parameterAnnotation,
|
||||
annotation.writeAnnotation(c.strings).build()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun createClassExtension(): KmClassExtension =
|
||||
KlibClassExtension()
|
||||
|
||||
@@ -374,4 +398,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
|
||||
override fun createTypeAliasExtension(): KmTypeAliasExtension =
|
||||
KlibTypeAliasExtension()
|
||||
|
||||
override fun createValueParameterExtension(): KmValueParameterExtension =
|
||||
KlibValueParameterExtension()
|
||||
}
|
||||
@@ -108,4 +108,7 @@ var KmTypeAlias.uniqId: UniqId?
|
||||
get() = klibExtensions.uniqId
|
||||
set(value) {
|
||||
klibExtensions.uniqId = value
|
||||
}
|
||||
}
|
||||
|
||||
val KmValueParameter.annotations: MutableList<KmAnnotation>
|
||||
get() = klibExtensions.annotations
|
||||
+12
@@ -139,4 +139,16 @@ abstract class KlibTypeAliasExtensionVisitor : KmTypeAliasExtensionVisitor {
|
||||
companion object {
|
||||
val TYPE = KmExtensionType(KlibTypeAliasExtensionVisitor::class)
|
||||
}
|
||||
}
|
||||
|
||||
abstract class KlibValueParameterExtensionVisitor : KmValueParameterExtensionVisitor {
|
||||
|
||||
abstract fun visitAnnotation(annotation: KmAnnotation)
|
||||
|
||||
override val type: KmExtensionType
|
||||
get() = TYPE
|
||||
|
||||
companion object {
|
||||
val TYPE = KmExtensionType(KlibValueParameterExtensionVisitor::class)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user