From 2bc0a3c9c00cd8440437a7e57b8b24f7c075209e Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Fri, 4 Oct 2019 15:32:50 +0700 Subject: [PATCH] Fix KNPE after calling completion in native targeted filesIssue KT-34158 Fixed --- ...KlibMetadataModuleDescriptorFactoryImpl.kt | 27 ++++++++++--------- .../ide/konan/NativePlatformKindResolution.kt | 2 ++ .../kotlin/konan/library/KonanFactories.kt | 4 +-- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt index 5982ee1080e..624ca1a0086 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.serialization.konan.impl -import org.jetbrains.kotlin.backend.common.serialization.metadata.* +import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataDeserializedPackageFragmentsFactory +import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataModuleDescriptorFactory import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -28,15 +29,14 @@ import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.storage.StorageManager -val ModuleDescriptorImpl.isStdlibModule - get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin) - ?.library?.unresolvedDependencies?.isEmpty() ?: false +private val ModuleDescriptorImpl.isStdlibModule + get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin)?.library?.unresolvedDependencies?.isEmpty() ?: false class KlibMetadataModuleDescriptorFactoryImpl( override val descriptorFactory: KlibModuleDescriptorFactory, override val packageFragmentsFactory: KlibMetadataDeserializedPackageFragmentsFactory, override val flexibleTypeDeserializer: FlexibleTypeDeserializer -): KlibMetadataModuleDescriptorFactory { +) : KlibMetadataModuleDescriptorFactory { override fun createDescriptorOptionalBuiltIns( library: KotlinLibrary, @@ -89,11 +89,13 @@ class KlibMetadataModuleDescriptorFactoryImpl( ): PackageFragmentProvider { val deserializedPackageFragments = packageFragmentsFactory.createDeserializedPackageFragments( - library, packageFragmentNames, moduleDescriptor, packageAccessHandler, storageManager) + library, packageFragmentNames, moduleDescriptor, packageAccessHandler, storageManager + ) // TODO: this is native specific. Move to a child class. val syntheticPackageFragments = packageFragmentsFactory.createSyntheticPackageFragments( - library, deserializedPackageFragments, moduleDescriptor) + library, deserializedPackageFragments, moduleDescriptor + ) val provider = PackageFragmentProviderImpl(deserializedPackageFragments + syntheticPackageFragments) @@ -119,21 +121,22 @@ class KlibMetadataModuleDescriptorFactoryImpl( emptyList(), notFoundClasses, ContractDeserializerImpl(configuration, storageManager), - extensionRegistryLite = KlibMetadataSerializerProtocol.extensionRegistry) + extensionRegistryLite = KlibMetadataSerializerProtocol.extensionRegistry + ) for (packageFragment in deserializedPackageFragments) { packageFragment.initialize(components) } - return compositePackageFragmentAddend ?.let { + return compositePackageFragmentAddend?.let { CompositePackageFragmentProvider(listOf(it, provider)) } ?: provider } fun createForwardDeclarationHackPackagePartProvider( - storageManager: StorageManager, - module: ModuleDescriptorImpl - ): PackageFragmentProviderImpl { + storageManager: StorageManager, + module: ModuleDescriptorImpl + ): PackageFragmentProviderImpl { fun createPackage(fqName: FqName, supertypeName: String, classKind: ClassKind) = ForwardDeclarationsPackageFragmentDescriptor( storageManager, diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt index 5ed2658eb5b..e164e64dc3c 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory import org.jetbrains.kotlin.analyzer.getCapability import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.context.ProjectContext @@ -167,6 +168,7 @@ private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: P CompositePackageFragmentProvider( listOf( stdlibFragmentProvider, + functionInterfacePackageFragmentProvider(storageManager, builtInsModule), (KonanFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl) .createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule) ) diff --git a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanFactories.kt b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanFactories.kt index 45225770b91..d9596669125 100644 --- a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanFactories.kt +++ b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanFactories.kt @@ -8,10 +8,8 @@ package org.jetbrains.kotlin.konan.library import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.serialization.konan.NullFlexibleTypeDeserializer -import org.jetbrains.kotlin.storage.StorageManager -fun createKonanBuiltIns(storageManager: StorageManager) = KonanBuiltIns(storageManager) /** * The default Kotlin/Native factories. */ -object KonanFactories : KlibMetadataFactories(::createKonanBuiltIns, NullFlexibleTypeDeserializer) \ No newline at end of file +object KonanFactories : KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer)