From 5661316d7abbfb0e34f1bad9769070399977c251 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Tue, 15 Aug 2023 12:13:40 +0200 Subject: [PATCH] [Native] Use `FORWARD_DECLARATIONS_MODULE_NAME` instead of hardcoded value --- .../kotlin/fir/session/FirNativeSessionFactory.kt | 3 ++- .../backend/common/serialization/LegacyDescriptorUtils.kt | 4 ---- .../jetbrains/kotlin/backend/konan/descriptors/utils.kt | 7 ++----- .../kotlin/backend/konan/optimizations/DataFlowIR.kt | 3 ++- .../kotlin/backend/konan/serialization/KonanIrLinker.kt | 4 +++- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt index b377f4c064f..f7edc2f5a80 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFuncti import org.jetbrains.kotlin.fir.resolve.providers.impl.FirExtensionSyntheticFunctionInterfaceProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary import org.jetbrains.kotlin.name.Name @@ -43,7 +44,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { createKotlinScopeProvider = { FirKotlinScopeProvider() }, createProviders = { session, builtinsModuleData, kotlinScopeProvider, syntheticFunctionInterfaceProvider -> val forwardDeclarationsModuleData = BinaryModuleData.createDependencyModuleData( - Name.special(""), + FORWARD_DECLARATIONS_MODULE_NAME, moduleDataProvider.platform, moduleDataProvider.analyzerServices, ).apply { diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/LegacyDescriptorUtils.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/LegacyDescriptorUtils.kt index 118ab8ce2d2..c1d98316aa5 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/LegacyDescriptorUtils.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/LegacyDescriptorUtils.kt @@ -29,10 +29,6 @@ tailrec fun DeclarationDescriptor.findPackage(): PackageFragmentDescriptor { else this.containingDeclaration!!.findPackage() } -// This is Native specific. Try to eliminate. -val ModuleDescriptor.isForwardDeclarationModule get() = - name == Name.special("") - private fun sourceByIndex(descriptor: CallableMemberDescriptor, index: Int): SourceFile { val fragment = descriptor.findPackage() as KlibMetadataDeserializedPackageFragment val fileName = fragment.proto.strings.stringList[index] 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 882bdc2955d..ba3def3a272 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 @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.library.BaseKotlinLibrary import org.jetbrains.kotlin.library.irProviderName import org.jetbrains.kotlin.library.metadata.DeserializedKlibModuleOrigin 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.klibModuleOrigin import org.jetbrains.kotlin.library.metadata.kotlinLibrary import org.jetbrains.kotlin.name.Name @@ -46,11 +47,7 @@ private fun IrDeclaration.propertyIfAccessor(): IrDeclaration = (this as? IrSimpleFunction)?.correspondingPropertySymbol?.owner ?: this val ModuleDescriptor.isForwardDeclarationModule: Boolean - get() { - // TODO: use KlibResolvedModuleDescriptorsFactoryImpl.FORWARD_DECLARATIONS_MODULE_NAME instead of - // manually created Name instance - return name == Name.special("") - } + get() = name == FORWARD_DECLARATIONS_MODULE_NAME fun BaseKotlinLibrary.isInteropLibrary() = irProviderName == KLIB_INTEROP_IR_PROVIDER_IDENTIFIER diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt index e5a71ec7bf3..9b3319a09dd 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.types.isUnit import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid +import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -483,7 +484,7 @@ internal object DataFlowIR { @OptIn(ObsoleteDescriptorBasedAPI::class) fun mapClassReferenceType(irClass: IrClass): Type { // Do not try to devirtualize ObjC classes. - if (irClass.module.name == Name.special("") || irClass.isObjCClass()) + if (irClass.module.name == FORWARD_DECLARATIONS_MODULE_NAME || irClass.isObjCClass()) return Type.Virtual val isFinal = irClass.isFinalClass 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 93fb3b6bc9c..9394ce29c0f 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 @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolD import org.jetbrains.kotlin.backend.common.serialization.encodings.FunctionFlags import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.descriptors.findPackage +import org.jetbrains.kotlin.backend.konan.descriptors.isForwardDeclarationModule import org.jetbrains.kotlin.backend.konan.descriptors.isFromInteropLibrary import org.jetbrains.kotlin.backend.konan.descriptors.isInteropLibrary import org.jetbrains.kotlin.backend.konan.ir.interop.IrProviderForCEnumAndCStructStubs @@ -48,6 +49,7 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.library.KotlinLibrary +import org.jetbrains.kotlin.library.metadata.impl.KlibResolvedModuleDescriptorsFactoryImpl.Companion.FORWARD_DECLARATIONS_MODULE_NAME import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.NativeForwardDeclarationKind import org.jetbrains.kotlin.name.FqName @@ -659,7 +661,7 @@ internal class KonanIrLinker( override val kind get() = IrModuleDeserializerKind.SYNTHETIC } - private val String.isForwardDeclarationModuleName: Boolean get() = this == "" + private val String.isForwardDeclarationModuleName: Boolean get() = this == FORWARD_DECLARATIONS_MODULE_NAME.asString() val modules: Map get() = mutableMapOf().apply {