Add Package.packageFqName serializer extension

This commit is contained in:
Alexander Udalov
2017-03-03 19:32:35 +03:00
committed by vvlevchenko
parent c76c214763
commit 1d0ec313b5
3 changed files with 25 additions and 34 deletions
@@ -15,6 +15,10 @@ option optimize_for = LITE_RUNTIME;
// Konan extensions to the "descriptors" protobuf.
extend Package {
optional int32 package_fq_name = 171;
}
extend Class {
repeated Annotation class_annotation = 170;
}
@@ -2,32 +2,26 @@ package org.jetbrains.kotlin.backend.konan.serialization
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.KonanPlatform
import org.jetbrains.kotlin.backend.konan.llvm.base64Encode
import org.jetbrains.kotlin.backend.konan.llvm.base64Decode
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.backend.konan.llvm.base64Encode
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.serialization.AnnotationSerializer
import org.jetbrains.kotlin.serialization.DescriptorSerializer
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.StringTableImpl
import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.serialization.KonanLinkData
import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeDeserializer
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.SimpleType
import org.jetbrains.kotlin.utils.*
import org.jetbrains.kotlin.incremental.components.LookupTracker
/* ------------ Deserializer part ------------------------------------------*/
@@ -152,7 +146,7 @@ internal class KonanSerializationUtil(val context: Context) {
val members = fragments
.flatMap { fragment -> DescriptorUtils.getAllDescriptors(fragment.getMemberScope()) }
.filterNot(skip)
val packageProto = serializer.packagePartProto(members).build()
val packageProto = serializer.packagePartProto(fqName, members).build()
?: error("Package fragments not serialized: $fragments")
@@ -18,26 +18,18 @@ package org.jetbrains.kotlin.backend.konan.serialization
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.descriptors.getKonanInternalClass
import org.jetbrains.kotlin.serialization.Flags
import org.jetbrains.kotlin.serialization.KonanLinkData
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.*
import org.jetbrains.kotlin.backend.konan.descriptors.*
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.source.PsiSourceFile
import org.jetbrains.kotlin.serialization.KotlinSerializerExtensionBase
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
import org.jetbrains.kotlin.types.FlexibleType
import org.jetbrains.kotlin.serialization.*
internal class KonanSerializerExtension(val context: Context) :
KotlinSerializerExtensionBase(KonanSerializerProtocol) {
override val stringTable = KonanStringTable()
private val backingFieldClass =
private val backingFieldClass =
context.builtIns.getKonanInternalClass("HasBackingField").getDefaultType()
private val backingFieldAnnotation = AnnotationDescriptorImpl(
@@ -47,7 +39,7 @@ internal class KonanSerializerExtension(val context: Context) :
super.serializeProperty(descriptor, proto)
if (context.ir.propertiesWithBackingFields.contains(descriptor)) {
proto.addExtension(KonanLinkData.propertyAnnotation,
proto.addExtension(KonanLinkData.propertyAnnotation,
annotationSerializer.serializeAnnotation(backingFieldAnnotation))
proto.flags = proto.flags or Flags.HAS_ANNOTATIONS.toFlags(true)
@@ -56,16 +48,17 @@ internal class KonanSerializerExtension(val context: Context) :
}
object KonanSerializerProtocol : SerializerExtensionProtocol(
ExtensionRegistryLite.newInstance().apply {
KonanLinkData.registerAllExtensions(this)
ExtensionRegistryLite.newInstance().apply {
KonanLinkData.registerAllExtensions(this)
},
KonanLinkData.constructorAnnotation,
KonanLinkData.classAnnotation,
KonanLinkData.functionAnnotation,
KonanLinkData.packageFqName,
KonanLinkData.constructorAnnotation,
KonanLinkData.classAnnotation,
KonanLinkData.functionAnnotation,
KonanLinkData.propertyAnnotation,
KonanLinkData.enumEntryAnnotation,
KonanLinkData.compileTimeValue,
KonanLinkData.parameterAnnotation,
KonanLinkData.enumEntryAnnotation,
KonanLinkData.compileTimeValue,
KonanLinkData.parameterAnnotation,
KonanLinkData.typeAnnotation,
KonanLinkData.typeParameterAnnotation
)