From 1d0ec313b5c371ae3a07c825fc672ff2f0698f69 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 3 Mar 2017 19:32:35 +0300 Subject: [PATCH] Add Package.packageFqName serializer extension --- .../konan/serialization/KonanLinkData.proto | 4 ++ .../serialization/KonanSerializationUtil.kt | 18 +++------ .../serialization/KonanSerializerExtension.kt | 37 ++++++++----------- 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanLinkData.proto b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanLinkData.proto index a2fe0f3fcb5..2bb717d9e89 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanLinkData.proto +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanLinkData.proto @@ -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; } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt index 544269797c5..7d4ffb4b9ac 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt @@ -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") diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt index f65905a2b72..eddf457278e 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt @@ -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 )