[kotlinx-metadata-klib] Fix library reading
* To be able to deserialize metadata we need to include ":core:deserialization". * Use per-fragment string tables. * Read file names from strings instead of file names list.
This commit is contained in:
@@ -31,6 +31,7 @@ dependencies {
|
||||
// TODO: Get rid of this heavyweight dependency.
|
||||
shadows(project(":core:descriptors"))
|
||||
shadows(project(":core:metadata"))
|
||||
shadows(project(":core:deserialization"))
|
||||
shadows(project(":compiler:serialization"))
|
||||
shadows(project(":kotlin-util-klib-metadata"))
|
||||
shadows(project(":kotlin-util-klib"))
|
||||
|
||||
@@ -83,12 +83,13 @@ class KlibModuleMetadata(
|
||||
readStrategy: KlibModuleFragmentReadStrategy = KlibModuleFragmentReadStrategy.DEFAULT
|
||||
): KlibModuleMetadata {
|
||||
val moduleHeaderProto = parseModuleHeader(library.moduleHeaderData)
|
||||
val nameResolver = NameResolverImpl(moduleHeaderProto.strings, moduleHeaderProto.qualifiedNames)
|
||||
val moduleHeader = moduleHeaderProto.readHeader(nameResolver)
|
||||
val headerNameResolver = NameResolverImpl(moduleHeaderProto.strings, moduleHeaderProto.qualifiedNames)
|
||||
val moduleHeader = moduleHeaderProto.readHeader(headerNameResolver)
|
||||
val fileIndex = SourceFileIndexReadExtension(moduleHeader.file)
|
||||
val moduleFragments = moduleHeader.packageFragmentName.flatMap { packageFqName ->
|
||||
library.packageMetadataParts(packageFqName).map { part ->
|
||||
val packageFragment = parsePackageFragment(library.packageMetadata(packageFqName, part))
|
||||
val nameResolver = NameResolverImpl(packageFragment.strings, packageFragment.qualifiedNames)
|
||||
KmModuleFragment().apply { packageFragment.accept(this, nameResolver, listOf(fileIndex)) }
|
||||
}.let(readStrategy::processModuleParts)
|
||||
}
|
||||
|
||||
+2
-2
@@ -20,10 +20,10 @@ import org.jetbrains.kotlin.serialization.StringTableImpl
|
||||
internal class KlibMetadataExtensions : MetadataExtensions {
|
||||
|
||||
private fun ReadContext.getSourceFile(index: Int) =
|
||||
contextExtensions.filterIsInstance<SourceFileIndexReadExtension>().first().getSourceFile(index)
|
||||
strings.getString(index).let(::KlibSourceFile)
|
||||
|
||||
private fun WriteContext.getIndexOf(file: KlibSourceFile) =
|
||||
contextExtensions.filterIsInstance<ReverseSourceFileIndexWriteExtension>().first().getIndexOf(file)
|
||||
strings.getStringIndex(file.name)
|
||||
|
||||
override fun readClassExtensions(v: KmClassVisitor, proto: ProtoBuf.Class, c: ReadContext) {
|
||||
val extension = v.visitExtensions(KlibClassExtensionVisitor.TYPE) as? KlibClassExtensionVisitor ?: return
|
||||
|
||||
Reference in New Issue
Block a user