FIR JS: Refactor Klib serialization for FIR support

This commit is contained in:
Ilya Chernikov
2022-07-05 18:36:06 +02:00
parent c0cf8e508a
commit 0fbc099d32
6 changed files with 146 additions and 51 deletions
@@ -17,13 +17,14 @@
package org.jetbrains.kotlin.serialization
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.ProtoBuf.QualifiedNameTable.QualifiedName
import org.jetbrains.kotlin.metadata.serialization.Interner
import org.jetbrains.kotlin.metadata.serialization.StringTable
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
open class StringTableImpl : DescriptorAwareStringTable {
private class FqNameProto(val fqName: QualifiedName.Builder) {
open class SerializableStringTable : StringTable {
private class FqNameProto(val fqName: ProtoBuf.QualifiedNameTable.QualifiedName.Builder) {
override fun hashCode(): Int {
var result = 13
result = 31 * result + fqName.parentQualifiedName
@@ -48,14 +49,14 @@ open class StringTableImpl : DescriptorAwareStringTable {
override fun getStringIndex(string: String): Int = strings.intern(string)
override fun getQualifiedClassNameIndex(className: String, isLocal: Boolean): Int =
getQualifiedClassNameIndex(ClassId.fromString(className, isLocal))
getClassIdIndex(ClassId.fromString(className, isLocal))
override fun getQualifiedClassNameIndex(classId: ClassId): Int {
val builder = QualifiedName.newBuilder()
builder.kind = QualifiedName.Kind.CLASS
fun getClassIdIndex(classId: ClassId): Int {
val builder = ProtoBuf.QualifiedNameTable.QualifiedName.newBuilder()
builder.kind = ProtoBuf.QualifiedNameTable.QualifiedName.Kind.CLASS
builder.parentQualifiedName =
classId.outerClassId?.let(this::getQualifiedClassNameIndex)
classId.outerClassId?.let(this::getClassIdIndex)
?: getPackageFqNameIndex(classId.packageFqName)
builder.shortName = getStringIndex(classId.shortClassName.asString())
@@ -66,7 +67,7 @@ open class StringTableImpl : DescriptorAwareStringTable {
fun getPackageFqNameIndex(fqName: FqName): Int {
var result = -1
for (segment in fqName.pathSegments()) {
val builder = QualifiedName.newBuilder()
val builder = ProtoBuf.QualifiedNameTable.QualifiedName.newBuilder()
builder.shortName = getStringIndex(segment.asString())
if (result != -1) {
builder.parentQualifiedName = result
@@ -89,6 +90,11 @@ open class StringTableImpl : DescriptorAwareStringTable {
return Pair(strings.build(), qualifiedNames.build())
}
}
open class StringTableImpl : DescriptorAwareStringTable, SerializableStringTable() {
override fun getQualifiedClassNameIndex(classId: ClassId): Int = getClassIdIndex(classId)
override val isLocalClassIdReplacementKeptGeneric: Boolean
get() = false