From 69cdf2d3ea875e08fb4f25076cacc64e531addef Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Mon, 18 Dec 2023 19:54:44 +0100 Subject: [PATCH] [K/N] Move `ModuleDescriptor#isFromInteropLibrary` to util-klib-metadata KT-64392 --- .../org/jetbrains/kotlin/library/metadata/utils.kt | 10 ++++++++++ .../org/jetbrains/kotlin/backend/konan/PsiToIr.kt | 6 ++++-- .../kotlin/backend/konan/descriptors/utils.kt | 12 ++---------- .../backend/konan/driver/phases/CacheBuilding.kt | 2 +- .../jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt | 9 ++++++--- .../backend/konan/serialization/KonanIdSignaturer.kt | 1 - .../backend/konan/serialization/KonanIrLinker.kt | 6 +++--- 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/utils.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/utils.kt index cfb84488b4d..b410435dd83 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/utils.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/utils.kt @@ -5,8 +5,18 @@ package org.jetbrains.kotlin.library.metadata +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER import org.jetbrains.kotlin.library.BaseKotlinLibrary import org.jetbrains.kotlin.library.irProviderName fun BaseKotlinLibrary.isInteropLibrary() = irProviderName == KLIB_INTEROP_IR_PROVIDER_IDENTIFIER + +fun ModuleDescriptor.isFromInteropLibrary() = + when (this) { + is ModuleDescriptorImpl -> + if (klibModuleOrigin !is DeserializedKlibModuleOrigin) false + else kotlinLibrary.isInteropLibrary() + else -> false // cinterop libraries are deserialized by Fir2Ir as ModuleDescriptorImpl, not FirModuleDescriptor + } \ No newline at end of file diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt index 1d529d3c4e2..845455e045c 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/PsiToIr.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.common.serialization.DescriptorByIdSignature import org.jetbrains.kotlin.backend.common.serialization.mangle.ManglerChecker import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.Ir2DescriptorManglerAdapter import org.jetbrains.kotlin.backend.konan.descriptors.isForwardDeclarationModule -import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.backend.konan.driver.phases.PsiToIrContext import org.jetbrains.kotlin.backend.konan.driver.phases.PsiToIrInput import org.jetbrains.kotlin.backend.konan.driver.phases.PsiToIrOutput @@ -17,7 +16,9 @@ import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.SymbolOverDescriptorsLookupUtils import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs import org.jetbrains.kotlin.backend.konan.ir.konanLibrary -import org.jetbrains.kotlin.backend.konan.serialization.* +import org.jetbrains.kotlin.backend.konan.serialization.KonanIrLinker +import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerDesc +import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerIr import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -33,6 +34,7 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.library.metadata.DeserializedKlibModuleOrigin import org.jetbrains.kotlin.library.metadata.KlibModuleOrigin +import org.jetbrains.kotlin.library.metadata.isFromInteropLibrary import org.jetbrains.kotlin.library.uniqueName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/utils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/utils.kt index 38a61cc5a9d..2544da551de 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/utils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/utils.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration @@ -18,8 +17,9 @@ import org.jetbrains.kotlin.fir.lazy.AbstractFir2IrLazyDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.descriptors.IrBasedDeclarationDescriptor -import org.jetbrains.kotlin.library.metadata.* +import org.jetbrains.kotlin.library.metadata.KlibDeserializedContainerSource import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME +import org.jetbrains.kotlin.library.metadata.isFromInteropLibrary import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.descriptorUtil.module @@ -67,11 +67,3 @@ private fun DeclarationDescriptor.isFromFirDeserializedInteropLibrary(): Boolean return containerSource is KlibDeserializedContainerSource && containerSource.isFromNativeInteropLibrary } - -fun ModuleDescriptor.isFromInteropLibrary() = - when (this) { - is ModuleDescriptorImpl -> - if (klibModuleOrigin !is DeserializedKlibModuleOrigin) false - else kotlinLibrary.isInteropLibrary() - else -> false // cinterop libraries are deserialized by Fir2Ir as ModuleDescriptorImpl, not FirModuleDescriptor - } \ No newline at end of file diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/CacheBuilding.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/CacheBuilding.kt index 05d8237ab81..e9141c42685 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/CacheBuilding.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/CacheBuilding.kt @@ -9,11 +9,11 @@ import org.jetbrains.kotlin.backend.common.phaser.createSimpleNamedCompilerPhase import org.jetbrains.kotlin.backend.konan.CacheStorage import org.jetbrains.kotlin.backend.konan.NativeGenerationState import org.jetbrains.kotlin.backend.konan.OutputFiles -import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.backend.konan.driver.PhaseContext import org.jetbrains.kotlin.backend.konan.driver.utilities.getDefaultIrActions import org.jetbrains.kotlin.backend.konan.lower.CacheInfoBuilder import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.library.metadata.isFromInteropLibrary internal val BuildAdditionalCacheInfoPhase = createSimpleNamedCompilerPhase( name = "BuildAdditionalCacheInfo", diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt index 0503b2b2518..9cb1a1a7b52 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/NewIrUtils.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.backend.konan.ir -import org.jetbrains.kotlin.utils.atMostOne import org.jetbrains.kotlin.backend.konan.DECLARATION_ORIGIN_INLINE_CLASS_SPECIAL_FUNCTION import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary @@ -14,7 +13,10 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -24,8 +26,9 @@ import org.jetbrains.kotlin.ir.types.isMarkedNullable import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.metadata.DeserializedKlibModuleOrigin -import org.jetbrains.kotlin.library.metadata.klibModuleOrigin import org.jetbrains.kotlin.library.metadata.isInteropLibrary +import org.jetbrains.kotlin.library.metadata.klibModuleOrigin +import org.jetbrains.kotlin.utils.atMostOne private fun IrClass.isClassTypeWithSignature(signature: IdSignature.CommonSignature): Boolean { return signature == symbol.signature diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIdSignaturer.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIdSignaturer.kt index a9fa4d8eb5b..18eb3dc7328 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIdSignaturer.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIdSignaturer.kt @@ -6,7 +6,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.KotlinMangler -import org.jetbrains.kotlin.resolve.descriptorUtil.module class KonanIdSignaturer(mangler: KotlinMangler.DescriptorMangler) : IdSignatureDescriptor(mangler) { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrLinker.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrLinker.kt index 65bcf3d8665..0625284bc05 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrLinker.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrLinker.kt @@ -21,12 +21,10 @@ import org.jetbrains.kotlin.backend.common.linkage.partial.PartialLinkageSupport import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideClassFilter import org.jetbrains.kotlin.backend.common.overrides.IrLinkerFakeOverrideProvider import org.jetbrains.kotlin.backend.common.serialization.* -import org.jetbrains.kotlin.backend.common.serialization.proto.IdSignature as ProtoIdSignature import org.jetbrains.kotlin.backend.konan.CacheDeserializationStrategy import org.jetbrains.kotlin.backend.konan.CachedLibraries import org.jetbrains.kotlin.backend.konan.InlineFunctionOriginInfo import org.jetbrains.kotlin.backend.konan.PartialCacheInfo -import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs import org.jetbrains.kotlin.backend.konan.ir.isFromInteropLibraryByDescriptor import org.jetbrains.kotlin.backend.konan.ir.konanLibrary @@ -50,8 +48,10 @@ import org.jetbrains.kotlin.library.impl.IrArrayMemoryReader import org.jetbrains.kotlin.library.impl.IrMemoryArrayWriter import org.jetbrains.kotlin.library.impl.IrMemoryStringWriter import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME -import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.library.metadata.isFromInteropLibrary import org.jetbrains.kotlin.library.metadata.isInteropLibrary +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.backend.common.serialization.proto.IdSignature as ProtoIdSignature data class SerializedFileReference(val fqName: String, val path: String) { constructor(irFile: IrFile) : this(irFile.packageFqName.asString(), irFile.path)