From 73149fdf0b1420f36a9d824ff85a11687c65a81c Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Tue, 3 Jan 2023 16:20:58 +0100 Subject: [PATCH] Cleanup: Use concrete subclass instead of BinaryVersion when possible Review: https://jetbrains.team/p/kt/reviews/8401 BinaryVersion is a problematic class, because it doesn't represent any logical entity in the codebase, it's just a way to reuse common logic for Kotlin versions. But unfortunately, BinaryVersion is used in a lot of API definitions, which makes code hard to read because it's not obvious which subclasses are supposed to be passed in the particular API. --- .../metadata/KlibMetadataIncrementalSerializer.kt | 4 ++-- .../serialization/js/KotlinJavascriptSerializationUtil.kt | 2 +- .../serialization/js/KotlinJavascriptSerializerExtension.kt | 5 ++--- .../src/org/jetbrains/kotlin/js/facade/K2JSTranslator.kt | 3 +++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt index e45430f19d2..29c0006944a 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt @@ -12,8 +12,8 @@ import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.library.SerializedMetadata +import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion import org.jetbrains.kotlin.metadata.ProtoBuf -import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.module @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.serialization.DescriptorSerializer // TODO: need a refactoring between IncrementalSerializer and MonolithicSerializer. class KlibMetadataIncrementalSerializer( languageVersionSettings: LanguageVersionSettings, - metadataVersion: BinaryVersion, + metadataVersion: KlibMetadataVersion, project: Project, exportKDoc: Boolean, skipExpects: Boolean, diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt index 891b7d96a96..5fd37bfa16c 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt @@ -161,7 +161,7 @@ object KotlinJavascriptSerializationUtil { fqName: FqName, languageVersionSettings: LanguageVersionSettings, project: Project, - metadataVersion: BinaryVersion + metadataVersion: JsMetadataVersion ): ProtoBuf.PackageFragment { val builder = ProtoBuf.PackageFragment.newBuilder() diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt index 3a772113334..1efce540f62 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt @@ -16,11 +16,9 @@ package org.jetbrains.kotlin.serialization.js -import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.metadata.ProtoBuf -import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.js.JsProtoBuf import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable import org.jetbrains.kotlin.psi.KtFile @@ -31,11 +29,12 @@ import org.jetbrains.kotlin.serialization.DescriptorSerializer import org.jetbrains.kotlin.serialization.KotlinSerializerExtensionBase import org.jetbrains.kotlin.serialization.deserialization.DYNAMIC_TYPE_DESERIALIZER_ID import org.jetbrains.kotlin.types.FlexibleType +import org.jetbrains.kotlin.utils.JsMetadataVersion class KotlinJavascriptSerializerExtension( private val fileRegistry: KotlinFileRegistry, private val languageVersionSettings: LanguageVersionSettings, - override val metadataVersion: BinaryVersion + override val metadataVersion: JsMetadataVersion ) : KotlinSerializerExtensionBase(JsSerializerProtocol) { override val stringTable = ApproximatingStringTable() diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.kt index e60eeb9bb8c..e76469bb6a5 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.kt @@ -243,6 +243,9 @@ class K2JSTranslator @JvmOverloads constructor( scope: Collection ): ProtoBuf.PackageFragment { val metadataVersion = config.configuration.get(CommonConfigurationKeys.METADATA_VERSION) + if (metadataVersion !is JsMetadataVersion?) { + error("${metadataVersion?.let { it::class }} must be either null or ${JsMetadataVersion::class.simpleName}") + } return KotlinJavascriptSerializationUtil.serializeDescriptors( bindingContext, moduleDescriptor,