[kotlinx-metadata] Add extensions for type aliases.
This commit is contained in:
@@ -33,6 +33,9 @@ internal val KmPackage.klibExtensions: KlibPackageExtension
|
||||
internal val KmModuleFragment.klibExtensions: KlibModuleFragmentExtension
|
||||
get() = visitExtensions(KlibModuleFragmentExtensionVisitor.TYPE) as KlibModuleFragmentExtension
|
||||
|
||||
internal val KmTypeAlias.klibExtensions: KlibTypeAliasExtension
|
||||
get() = visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as KlibTypeAliasExtension
|
||||
|
||||
internal class KlibFunctionExtension : KlibFunctionExtensionVisitor(), KmFunctionExtension {
|
||||
|
||||
val annotations: MutableList<KmAnnotation> = mutableListOf()
|
||||
@@ -221,4 +224,17 @@ internal class KlibModuleFragmentExtension : KlibModuleFragmentExtensionVisitor(
|
||||
fqName?.let(visitor::visitFqName)
|
||||
className.forEach(visitor::visitClassName)
|
||||
}
|
||||
}
|
||||
|
||||
internal class KlibTypeAliasExtension : KlibTypeAliasExtensionVisitor(), KmTypeAliasExtension {
|
||||
var uniqId: UniqId? = null
|
||||
|
||||
override fun visitUniqId(uniqId: UniqId) {
|
||||
this.uniqId = uniqId
|
||||
}
|
||||
|
||||
override fun accept(visitor: KmTypeExtensionVisitor) {
|
||||
require(visitor is KlibTypeAliasExtensionVisitor)
|
||||
uniqId?.let(visitor::visitUniqId)
|
||||
}
|
||||
}
|
||||
+27
@@ -126,6 +126,14 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun readTypeAliasExtensions(v: KmTypeAliasVisitor, proto: ProtoBuf.TypeAlias, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibTypeAliasExtensionVisitor.TYPE) as? KlibTypeAliasExtensionVisitor ?: return
|
||||
|
||||
proto.getExtension(KlibMetadataProtoBuf.typeAliasUniqId).let { descriptorUniqId ->
|
||||
extension.visitUniqId(descriptorUniqId.readUniqId())
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeClassExtensions(type: KmExtensionType, proto: ProtoBuf.Class.Builder, c: WriteContext): KmClassExtensionVisitor? {
|
||||
if (type != KlibClassExtensionVisitor.TYPE) return null
|
||||
return object : KlibClassExtensionVisitor() {
|
||||
@@ -324,6 +332,22 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
override fun writeTypeAliasExtensions(
|
||||
type: KmExtensionType,
|
||||
proto: ProtoBuf.TypeAlias.Builder,
|
||||
c: WriteContext
|
||||
): KmTypeAliasExtensionVisitor? {
|
||||
if (type != KlibTypeAliasExtensionVisitor.TYPE) return null
|
||||
return object : KlibTypeAliasExtensionVisitor() {
|
||||
override fun visitUniqId(uniqId: UniqId) {
|
||||
proto.setExtension(
|
||||
KlibMetadataProtoBuf.typeAliasUniqId,
|
||||
uniqId.writeUniqId().build()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun createClassExtension(): KmClassExtension =
|
||||
KlibClassExtension()
|
||||
|
||||
@@ -347,4 +371,7 @@ internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
|
||||
override fun createTypeExtension(): KmTypeExtension =
|
||||
KlibTypeExtension()
|
||||
|
||||
override fun createTypeAliasExtension(): KmTypeAliasExtension =
|
||||
KlibTypeAliasExtension()
|
||||
}
|
||||
@@ -99,6 +99,12 @@ val KmTypeParameter.annotations: MutableList<KmAnnotation>
|
||||
get() = klibExtensions.annotations
|
||||
|
||||
var KmTypeParameter.uniqId: UniqId?
|
||||
get() = klibExtensions.uniqId
|
||||
set(value) {
|
||||
klibExtensions.uniqId = value
|
||||
}
|
||||
|
||||
var KmTypeAlias.uniqId: UniqId?
|
||||
get() = klibExtensions.uniqId
|
||||
set(value) {
|
||||
klibExtensions.uniqId = value
|
||||
|
||||
+12
@@ -127,4 +127,16 @@ abstract class KlibModuleFragmentExtensionVisitor : KmModuleFragmentExtensionVis
|
||||
companion object {
|
||||
val TYPE = KmExtensionType(KlibModuleFragmentExtensionVisitor::class)
|
||||
}
|
||||
}
|
||||
|
||||
abstract class KlibTypeAliasExtensionVisitor : KmTypeAliasExtensionVisitor {
|
||||
|
||||
abstract fun visitUniqId(uniqId: UniqId)
|
||||
|
||||
override val type: KmExtensionType
|
||||
get() = TYPE
|
||||
|
||||
companion object {
|
||||
val TYPE = KmExtensionType(KlibTypeAliasExtensionVisitor::class)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user