IDE: Don't use direct refs on IdePlatformKindResolution EP instances
This commit is contained in:
+53
-61
@@ -55,13 +55,21 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
||||
}
|
||||
}
|
||||
|
||||
override fun createPlatformSpecificPackageFragmentProvider(
|
||||
override fun createKlibPackageFragmentProvider(
|
||||
moduleInfo: ModuleInfo,
|
||||
storageManager: StorageManager,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider? =
|
||||
createNativeKlibPackageFragmentProvider(moduleInfo, storageManager, languageVersionSettings, moduleDescriptor)
|
||||
): PackageFragmentProvider? {
|
||||
return (moduleInfo as? NativeKlibLibraryInfo)
|
||||
?.resolvedKotlinLibrary
|
||||
?.createKlibPackageFragmentProvider(
|
||||
storageManager = storageManager,
|
||||
metadataModuleDescriptorFactory = metadataFactories.DefaultDeserializedDescriptorFactory,
|
||||
languageVersionSettings = languageVersionSettings,
|
||||
moduleDescriptor = moduleDescriptor
|
||||
)
|
||||
}
|
||||
|
||||
override fun isLibraryFileForPlatform(virtualFile: VirtualFile): Boolean =
|
||||
virtualFile.isKlibLibraryRootForPlatform(NativePlatforms.defaultNativePlatform)
|
||||
@@ -84,69 +92,53 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
||||
override fun createBuiltIns(moduleInfo: ModuleInfo, projectContext: ProjectContext, sdkDependency: SdkInfo?) =
|
||||
createKotlinNativeBuiltIns(moduleInfo, projectContext)
|
||||
|
||||
private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: ProjectContext): KotlinBuiltIns {
|
||||
val stdlibInfo = moduleInfo.findNativeStdlib() ?: return DefaultBuiltIns.Instance
|
||||
|
||||
val project = projectContext.project
|
||||
val storageManager = projectContext.storageManager
|
||||
|
||||
val builtInsModule = metadataFactories.DefaultDescriptorFactory.createDescriptorAndNewBuiltIns(
|
||||
KotlinBuiltIns.BUILTINS_MODULE_NAME,
|
||||
storageManager,
|
||||
DeserializedKlibModuleOrigin(stdlibInfo.resolvedKotlinLibrary),
|
||||
stdlibInfo.capabilities
|
||||
)
|
||||
|
||||
val languageVersionSettings = IDELanguageSettingsProvider.getLanguageVersionSettings(
|
||||
stdlibInfo,
|
||||
project,
|
||||
isReleaseCoroutines = false
|
||||
)
|
||||
|
||||
val stdlibPackageFragmentProvider = createKlibPackageFragmentProvider(
|
||||
stdlibInfo,
|
||||
storageManager,
|
||||
languageVersionSettings,
|
||||
builtInsModule
|
||||
) ?: return DefaultBuiltIns.Instance
|
||||
|
||||
builtInsModule.initialize(
|
||||
CompositePackageFragmentProvider(
|
||||
listOf(
|
||||
stdlibPackageFragmentProvider,
|
||||
functionInterfacePackageFragmentProvider(storageManager, builtInsModule),
|
||||
(metadataFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
||||
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
builtInsModule.setDependencies(listOf(builtInsModule))
|
||||
|
||||
return builtInsModule.builtIns
|
||||
}
|
||||
|
||||
object NativeBuiltInsCacheKey : BuiltInsCacheKey
|
||||
|
||||
companion object {
|
||||
private val metadataFactories = KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer)
|
||||
|
||||
fun createNativeKlibPackageFragmentProvider(
|
||||
moduleInfo: ModuleInfo,
|
||||
storageManager: StorageManager,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider? {
|
||||
return (moduleInfo as? NativeKlibLibraryInfo)
|
||||
?.resolvedKotlinLibrary
|
||||
?.createKlibPackageFragmentProvider(
|
||||
storageManager = storageManager,
|
||||
metadataModuleDescriptorFactory = metadataFactories.DefaultDeserializedDescriptorFactory,
|
||||
languageVersionSettings = languageVersionSettings,
|
||||
moduleDescriptor = moduleDescriptor
|
||||
)
|
||||
}
|
||||
|
||||
private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: ProjectContext): KotlinBuiltIns {
|
||||
val stdlibInfo = moduleInfo.findNativeStdlib() ?: return DefaultBuiltIns.Instance
|
||||
|
||||
val project = projectContext.project
|
||||
val storageManager = projectContext.storageManager
|
||||
|
||||
val builtInsModule = metadataFactories.DefaultDescriptorFactory.createDescriptorAndNewBuiltIns(
|
||||
KotlinBuiltIns.BUILTINS_MODULE_NAME,
|
||||
storageManager,
|
||||
DeserializedKlibModuleOrigin(stdlibInfo.resolvedKotlinLibrary),
|
||||
stdlibInfo.capabilities
|
||||
)
|
||||
|
||||
val languageVersionSettings = IDELanguageSettingsProvider.getLanguageVersionSettings(
|
||||
stdlibInfo,
|
||||
project,
|
||||
isReleaseCoroutines = false
|
||||
)
|
||||
|
||||
val stdlibPackageFragmentProvider = createNativeKlibPackageFragmentProvider(
|
||||
stdlibInfo,
|
||||
storageManager,
|
||||
languageVersionSettings,
|
||||
builtInsModule
|
||||
) ?: return DefaultBuiltIns.Instance
|
||||
|
||||
builtInsModule.initialize(
|
||||
CompositePackageFragmentProvider(
|
||||
listOf(
|
||||
stdlibPackageFragmentProvider,
|
||||
functionInterfacePackageFragmentProvider(storageManager, builtInsModule),
|
||||
(metadataFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
||||
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
builtInsModule.setDependencies(listOf(builtInsModule))
|
||||
|
||||
return builtInsModule.builtIns
|
||||
}
|
||||
|
||||
private fun ModuleInfo.findNativeStdlib(): NativeKlibLibraryInfo? =
|
||||
dependencies().lazyClosure { it.dependencies() }
|
||||
.filterIsInstance<NativeKlibLibraryInfo>()
|
||||
|
||||
+9
-7
@@ -6,14 +6,15 @@
|
||||
package org.jetbrains.kotlin.ide.konan.analyzer
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.*
|
||||
import org.jetbrains.kotlin.caches.resolve.resolution
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.container.get
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve
|
||||
import org.jetbrains.kotlin.ide.konan.NativePlatformKindResolution.Companion.createNativeKlibPackageFragmentProvider
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.idePlatformKind
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
|
||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||
@@ -54,12 +55,13 @@ class NativeResolverForModuleFactory(
|
||||
|
||||
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
|
||||
|
||||
val klibPackageFragmentProvider = createNativeKlibPackageFragmentProvider(
|
||||
moduleContent.moduleInfo,
|
||||
moduleContext.storageManager,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor
|
||||
)
|
||||
val klibPackageFragmentProvider =
|
||||
NativePlatforms.defaultNativePlatform.idePlatformKind.resolution.createKlibPackageFragmentProvider(
|
||||
moduleContent.moduleInfo,
|
||||
moduleContext.storageManager,
|
||||
languageVersionSettings,
|
||||
moduleDescriptor
|
||||
)
|
||||
|
||||
if (klibPackageFragmentProvider != null) {
|
||||
packageFragmentProvider = CompositePackageFragmentProvider(listOf(packageFragmentProvider, klibPackageFragmentProvider))
|
||||
|
||||
Reference in New Issue
Block a user