From b1e3226ed5ee2d3bcc72d13294b4cc5b401439f7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Tue, 10 Jan 2023 18:10:02 +0100 Subject: [PATCH] K2: add KlibDeserializedContainerSource.isFromNativeInteropLibrary This will be required when serializing IR symbols referring declarations from interop libraries. --- .../fir/session/KlibBasedSymbolProvider.kt | 1 + .../KlibDeserializedContainerSource.kt | 18 +++++++++++++++--- ...aDeserializedPackageFragmentsFactoryImpl.kt | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedSymbolProvider.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedSymbolProvider.kt index e516acf556c..4b2429dd305 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedSymbolProvider.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedSymbolProvider.kt @@ -145,6 +145,7 @@ class KlibBasedSymbolProvider( resolvedLibrary: KotlinResolvedLibrary, packageFqName: FqName ) = KlibDeserializedContainerSource( + resolvedLibrary.library, moduleHeaders[resolvedLibrary]!!, deserializationConfiguration, packageFqName diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibDeserializedContainerSource.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibDeserializedContainerSource.kt index ffec6d52329..a59fbf8717d 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibDeserializedContainerSource.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibDeserializedContainerSource.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.library.metadata import org.jetbrains.kotlin.descriptors.SourceFile +import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER +import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf.Header import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration @@ -15,13 +17,20 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ class KlibDeserializedContainerSource private constructor( override val isPreReleaseInvisible: Boolean, - override val presentableString: String + override val presentableString: String, + val isFromNativeInteropLibrary: Boolean ) : DeserializedContainerSource { - constructor(header: Header, configuration: DeserializationConfiguration, packageFqName: FqName) : this( + constructor( + library: KotlinLibrary, + header: Header, + configuration: DeserializationConfiguration, + packageFqName: FqName + ) : this( configuration.reportErrorsOnPreReleaseDependencies && (header.flags and KlibMetadataHeaderFlags.PRE_RELEASE) != 0, - "Package '$packageFqName'" + "Package '$packageFqName'", + library.isInteropLibrary() ) override val incompatibility: IncompatibleVersionErrorData<*>? @@ -33,3 +42,6 @@ class KlibDeserializedContainerSource private constructor( // TODO: move [CallableMemberDescriptor.findSourceFile] here. override fun getContainingFile(): SourceFile = SourceFile.NO_SOURCE_FILE } + +private fun KotlinLibrary.isInteropLibrary() = + manifestProperties["ir_provider"] == KLIB_INTEROP_IR_PROVIDER_IDENTIFIER diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataDeserializedPackageFragmentsFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataDeserializedPackageFragmentsFactoryImpl.kt index d1efe5f4748..84754ea2a3e 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataDeserializedPackageFragmentsFactoryImpl.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataDeserializedPackageFragmentsFactoryImpl.kt @@ -33,7 +33,7 @@ open class KlibMetadataDeserializedPackageFragmentsFactoryImpl : KlibMetadataDes return packageFragmentNames.flatMap { val fqName = FqName(it) - val containerSource = KlibDeserializedContainerSource(libraryHeader, configuration, fqName) + val containerSource = KlibDeserializedContainerSource(library, libraryHeader, configuration, fqName) val parts = library.packageMetadataParts(fqName.asString()) val isBuiltInModule = moduleDescriptor.builtIns.builtInsModule === moduleDescriptor parts.map { partName ->