Fix KNPE after calling completion in native targeted filesIssue KT-34158 Fixed
This commit is contained in:
+15
-12
@@ -5,7 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.serialization.konan.impl
|
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.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider
|
import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
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.serialization.deserialization.*
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
val ModuleDescriptorImpl.isStdlibModule
|
private val ModuleDescriptorImpl.isStdlibModule
|
||||||
get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin)
|
get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin)?.library?.unresolvedDependencies?.isEmpty() ?: false
|
||||||
?.library?.unresolvedDependencies?.isEmpty() ?: false
|
|
||||||
|
|
||||||
class KlibMetadataModuleDescriptorFactoryImpl(
|
class KlibMetadataModuleDescriptorFactoryImpl(
|
||||||
override val descriptorFactory: KlibModuleDescriptorFactory,
|
override val descriptorFactory: KlibModuleDescriptorFactory,
|
||||||
override val packageFragmentsFactory: KlibMetadataDeserializedPackageFragmentsFactory,
|
override val packageFragmentsFactory: KlibMetadataDeserializedPackageFragmentsFactory,
|
||||||
override val flexibleTypeDeserializer: FlexibleTypeDeserializer
|
override val flexibleTypeDeserializer: FlexibleTypeDeserializer
|
||||||
): KlibMetadataModuleDescriptorFactory {
|
) : KlibMetadataModuleDescriptorFactory {
|
||||||
|
|
||||||
override fun createDescriptorOptionalBuiltIns(
|
override fun createDescriptorOptionalBuiltIns(
|
||||||
library: KotlinLibrary,
|
library: KotlinLibrary,
|
||||||
@@ -89,11 +89,13 @@ class KlibMetadataModuleDescriptorFactoryImpl(
|
|||||||
): PackageFragmentProvider {
|
): PackageFragmentProvider {
|
||||||
|
|
||||||
val deserializedPackageFragments = packageFragmentsFactory.createDeserializedPackageFragments(
|
val deserializedPackageFragments = packageFragmentsFactory.createDeserializedPackageFragments(
|
||||||
library, packageFragmentNames, moduleDescriptor, packageAccessHandler, storageManager)
|
library, packageFragmentNames, moduleDescriptor, packageAccessHandler, storageManager
|
||||||
|
)
|
||||||
|
|
||||||
// TODO: this is native specific. Move to a child class.
|
// TODO: this is native specific. Move to a child class.
|
||||||
val syntheticPackageFragments = packageFragmentsFactory.createSyntheticPackageFragments(
|
val syntheticPackageFragments = packageFragmentsFactory.createSyntheticPackageFragments(
|
||||||
library, deserializedPackageFragments, moduleDescriptor)
|
library, deserializedPackageFragments, moduleDescriptor
|
||||||
|
)
|
||||||
|
|
||||||
val provider = PackageFragmentProviderImpl(deserializedPackageFragments + syntheticPackageFragments)
|
val provider = PackageFragmentProviderImpl(deserializedPackageFragments + syntheticPackageFragments)
|
||||||
|
|
||||||
@@ -119,21 +121,22 @@ class KlibMetadataModuleDescriptorFactoryImpl(
|
|||||||
emptyList(),
|
emptyList(),
|
||||||
notFoundClasses,
|
notFoundClasses,
|
||||||
ContractDeserializerImpl(configuration, storageManager),
|
ContractDeserializerImpl(configuration, storageManager),
|
||||||
extensionRegistryLite = KlibMetadataSerializerProtocol.extensionRegistry)
|
extensionRegistryLite = KlibMetadataSerializerProtocol.extensionRegistry
|
||||||
|
)
|
||||||
|
|
||||||
for (packageFragment in deserializedPackageFragments) {
|
for (packageFragment in deserializedPackageFragments) {
|
||||||
packageFragment.initialize(components)
|
packageFragment.initialize(components)
|
||||||
}
|
}
|
||||||
|
|
||||||
return compositePackageFragmentAddend ?.let {
|
return compositePackageFragmentAddend?.let {
|
||||||
CompositePackageFragmentProvider(listOf(it, provider))
|
CompositePackageFragmentProvider(listOf(it, provider))
|
||||||
} ?: provider
|
} ?: provider
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createForwardDeclarationHackPackagePartProvider(
|
fun createForwardDeclarationHackPackagePartProvider(
|
||||||
storageManager: StorageManager,
|
storageManager: StorageManager,
|
||||||
module: ModuleDescriptorImpl
|
module: ModuleDescriptorImpl
|
||||||
): PackageFragmentProviderImpl {
|
): PackageFragmentProviderImpl {
|
||||||
fun createPackage(fqName: FqName, supertypeName: String, classKind: ClassKind) =
|
fun createPackage(fqName: FqName, supertypeName: String, classKind: ClassKind) =
|
||||||
ForwardDeclarationsPackageFragmentDescriptor(
|
ForwardDeclarationsPackageFragmentDescriptor(
|
||||||
storageManager,
|
storageManager,
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.analyzer.ResolverForModuleFactory
|
|||||||
import org.jetbrains.kotlin.analyzer.getCapability
|
import org.jetbrains.kotlin.analyzer.getCapability
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution
|
import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.context.ProjectContext
|
import org.jetbrains.kotlin.context.ProjectContext
|
||||||
@@ -167,6 +168,7 @@ private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: P
|
|||||||
CompositePackageFragmentProvider(
|
CompositePackageFragmentProvider(
|
||||||
listOf(
|
listOf(
|
||||||
stdlibFragmentProvider,
|
stdlibFragmentProvider,
|
||||||
|
functionInterfacePackageFragmentProvider(storageManager, builtInsModule),
|
||||||
(KonanFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
(KonanFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
||||||
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,10 +8,8 @@ package org.jetbrains.kotlin.konan.library
|
|||||||
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
||||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
||||||
import org.jetbrains.kotlin.serialization.konan.NullFlexibleTypeDeserializer
|
import org.jetbrains.kotlin.serialization.konan.NullFlexibleTypeDeserializer
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
|
||||||
|
|
||||||
fun createKonanBuiltIns(storageManager: StorageManager) = KonanBuiltIns(storageManager)
|
|
||||||
/**
|
/**
|
||||||
* The default Kotlin/Native factories.
|
* The default Kotlin/Native factories.
|
||||||
*/
|
*/
|
||||||
object KonanFactories : KlibMetadataFactories(::createKonanBuiltIns, NullFlexibleTypeDeserializer)
|
object KonanFactories : KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer)
|
||||||
|
|||||||
Reference in New Issue
Block a user