[FIR] Support FirMetadataSource.File in FIR2IR & serializer (KT-38156)

This commit is contained in:
Mikhail Glukhikh
2020-04-16 15:35:58 +03:00
parent 95a17eadb2
commit f98c73cb30
21 changed files with 57 additions and 22 deletions
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.metadata.serialization.Interner
import org.jetbrains.kotlin.metadata.serialization.MutableTypeTable
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.RequireKotlinConstants
import org.jetbrains.kotlin.resolve.constants.ConstantValue
@@ -57,6 +58,31 @@ class FirElementSerializer private constructor(
) {
private val contractSerializer = FirContractSerializer()
fun packagePartProto(packageFqName: FqName, file: FirFile): ProtoBuf.Package.Builder {
val builder = ProtoBuf.Package.newBuilder()
for (declaration in file.declarations) {
when (declaration) {
is FirProperty -> propertyProto(declaration)?.let { builder.addProperty(it) }
is FirSimpleFunction -> functionProto(declaration)?.let { builder.addFunction(it) }
}
}
val typeTableProto = typeTable.serialize()
if (typeTableProto != null) {
builder.typeTable = typeTableProto
}
val versionRequirementTableProto = versionRequirementTable?.serialize()
if (versionRequirementTableProto != null) {
builder.versionRequirementTable = versionRequirementTableProto
}
extension.serializePackage(packageFqName, builder)
return builder
}
fun classProto(irClass: IrClass): ProtoBuf.Class.Builder {
val klass = (irClass.metadata as FirMetadataSource.Class).klass
val builder = ProtoBuf.Class.newBuilder()