From 7e5e2fe1e418a293220b4a02ef996e2418ca8ea5 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Tue, 25 Jul 2023 12:13:48 +0200 Subject: [PATCH] [FIR] Drop dependency on `ir.serialization` from `fir-serialization` --- .../fir/fir-serialization/build.gradle.kts | 5 ++- .../fir/serialization/firKlibSerialization.kt | 3 +- .../metadata/KlibMetadataSerializer.kt | 28 +-------------- .../KlibMetadataSerializationUtils.kt | 35 +++++++++++++++++++ 4 files changed, 41 insertions(+), 30 deletions(-) create mode 100644 compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataSerializationUtils.kt diff --git a/compiler/fir/fir-serialization/build.gradle.kts b/compiler/fir/fir-serialization/build.gradle.kts index 94bbcfb81dc..bebd0ffdc09 100644 --- a/compiler/fir/fir-serialization/build.gradle.kts +++ b/compiler/fir/fir-serialization/build.gradle.kts @@ -8,7 +8,10 @@ dependencies { implementation(project(":core:compiler.common.jvm")) implementation(project(":core:deserialization.common.jvm")) implementation(project(":compiler:fir:fir-deserialization")) - implementation(project(":compiler:ir.serialization.common")) + + implementation(project(":compiler:serialization")) + implementation(project(":kotlin-util-klib")) + implementation(project(":kotlin-util-klib-metadata")) api(project(":compiler:fir:cones")) api(project(":compiler:fir:tree")) diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/firKlibSerialization.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/firKlibSerialization.kt index d5dabd4614c..345628fbc80 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/firKlibSerialization.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/firKlibSerialization.kt @@ -5,15 +5,14 @@ package org.jetbrains.kotlin.fir.serialization -import org.jetbrains.kotlin.backend.common.serialization.metadata.buildKlibPackageFragment import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.utils.classId import org.jetbrains.kotlin.fir.packageFqName import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.library.metadata.buildKlibPackageFragment import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.serialization.SerializableStringTable diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializer.kt index d5f8d70ca5b..8a1bbc74390 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataSerializer.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.library.metadata.KlibMetadataHeaderFlags import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf +import org.jetbrains.kotlin.library.metadata.buildKlibPackageFragment import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.name.ClassId @@ -21,7 +22,6 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.serialization.ApproximatingStringTable import org.jetbrains.kotlin.serialization.DescriptorSerializer -import org.jetbrains.kotlin.serialization.SerializableStringTable import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor @@ -291,29 +291,3 @@ fun DeclarationDescriptor.extractFileId(): Int? = when (this) { internal val ModuleDescriptor.packageFragmentProviderForModuleContentWithoutDependencies: PackageFragmentProvider get() = (this as? ModuleDescriptorImpl)?.packageFragmentProviderForModuleContentWithoutDependencies ?: error("Can't get a module content package fragments, it's not a ${ModuleDescriptorImpl::class.simpleName}.") - -fun buildKlibPackageFragment( - packageProto: ProtoBuf.Package, - classesProto: List>, - fqName: FqName, - isEmpty: Boolean, - stringTable: SerializableStringTable, -): ProtoBuf.PackageFragment { - - val (stringTableProto, nameTableProto) = stringTable.buildProto() - - return ProtoBuf.PackageFragment.newBuilder() - .setPackage(packageProto) - .addAllClass_(classesProto.map { it.first }) - .setStrings(stringTableProto) - .setQualifiedNames(nameTableProto) - .also { packageFragment -> - classesProto.forEach { - packageFragment.addExtension(KlibMetadataProtoBuf.className, it.second ) - } - packageFragment.setExtension(KlibMetadataProtoBuf.isEmpty, isEmpty) - packageFragment.setExtension(KlibMetadataProtoBuf.fqName, fqName.asString()) - } - .build() -} - diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataSerializationUtils.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataSerializationUtils.kt new file mode 100644 index 00000000000..5363cf3f754 --- /dev/null +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataSerializationUtils.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.library.metadata + +import org.jetbrains.kotlin.metadata.ProtoBuf +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.serialization.SerializableStringTable + +fun buildKlibPackageFragment( + packageProto: ProtoBuf.Package, + classesProto: List>, + fqName: FqName, + isEmpty: Boolean, + stringTable: SerializableStringTable, +): ProtoBuf.PackageFragment { + + val (stringTableProto, nameTableProto) = stringTable.buildProto() + + return ProtoBuf.PackageFragment.newBuilder() + .setPackage(packageProto) + .addAllClass_(classesProto.map { it.first }) + .setStrings(stringTableProto) + .setQualifiedNames(nameTableProto) + .also { packageFragment -> + classesProto.forEach { + packageFragment.addExtension(KlibMetadataProtoBuf.className, it.second ) + } + packageFragment.setExtension(KlibMetadataProtoBuf.isEmpty, isEmpty) + packageFragment.setExtension(KlibMetadataProtoBuf.fqName, fqName.asString()) + } + .build() +}