K2: add KlibDeserializedContainerSource.isFromNativeInteropLibrary

This will be required when serializing IR symbols referring declarations
from interop libraries.
This commit is contained in:
Svyatoslav Scherbina
2023-01-10 18:10:02 +01:00
committed by Space Team
parent 6877b2fc55
commit b1e3226ed5
3 changed files with 17 additions and 4 deletions
@@ -145,6 +145,7 @@ class KlibBasedSymbolProvider(
resolvedLibrary: KotlinResolvedLibrary,
packageFqName: FqName
) = KlibDeserializedContainerSource(
resolvedLibrary.library,
moduleHeaders[resolvedLibrary]!!,
deserializationConfiguration,
packageFqName
@@ -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
@@ -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 ->