diff --git a/idea/idea-native/src/org/jetbrains/konan/KonanPluginUtil.kt b/idea/idea-native/src/org/jetbrains/konan/KonanPluginUtil.kt index c7595acea7d..d70386cfc6d 100644 --- a/idea/idea-native/src/org/jetbrains/konan/KonanPluginUtil.kt +++ b/idea/idea-native/src/org/jetbrains/konan/KonanPluginUtil.kt @@ -6,9 +6,7 @@ package org.jetbrains.konan import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project -import com.intellij.openapi.roots.ModuleRootManager import com.intellij.psi.PsiFileFactory import com.intellij.psi.SingleRootFileViewProvider import com.intellij.psi.impl.PsiFileFactoryImpl @@ -61,21 +59,24 @@ fun createDeclarationProviderFactory( moduleInfo ) -fun Module.createResolvedModuleDescriptors( +fun ModuleInfo.createResolvedModuleDescriptors( + project: Project, storageManager: StorageManager, builtIns: KotlinBuiltIns, languageVersionSettings: LanguageVersionSettings ): KonanResolvedModuleDescriptors { // This is to preserve "capabilities" from the original IntelliJ LibraryInfo: - val libraryMap = mutableMapOf() - ModuleRootManager.getInstance(this).orderEntries().forEachLibrary { intellijLibrary -> - intellijLibrary.name?.let { name -> libraryMap[name] = LibraryInfo(project, intellijLibrary) } - true - } + val libraryMap = + this.dependencies().filterIsInstance().flatMap { dependency -> + dependency.getLibraryRoots().map { file -> + file to dependency + } + }.toMap() val resolvedLibraries = - KonanPluginSearchPathResolver(project).libraryResolver(KONAN_CURRENT_ABI_VERSION).resolveWithDependencies(libraryMap.keys.toList()) + KonanPluginSearchPathResolver(project).libraryResolver(KONAN_CURRENT_ABI_VERSION) + .resolveWithDependencies(libraryMap.keys.toList(), true, true) return DefaultResolvedDescriptorsFactory.createResolved( resolvedLibraries, @@ -84,7 +85,7 @@ fun Module.createResolvedModuleDescriptors( languageVersionSettings, null // This is to preserve "capabilities" from the original IntelliJ LibraryInfo: - ) { konanLibrary -> libraryMap[konanLibrary.pureName]?.capabilities ?: emptyMap() } + ) { konanLibrary -> libraryMap[konanLibrary.libraryFile.path]?.capabilities ?: emptyMap() } } private val KonanLibrary.pureName diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeAnalyzerFacade.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeAnalyzerFacade.kt index 5794e29a18e..51c7cc6fac2 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeAnalyzerFacade.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeAnalyzerFacade.kt @@ -58,22 +58,17 @@ object NativeAnalyzerFacade : ResolverForModuleFactory() { languageVersionSettings ) + val moduleDescriptors = moduleContent.moduleInfo.createResolvedModuleDescriptors( + moduleContext.project, + moduleContext.storageManager, + moduleContext.module.builtIns, + languageVersionSettings + ) + val packageFragmentProvider = container.get().packageFragmentProvider - val module = (moduleContent.moduleInfo as? ModuleProductionSourceInfo)?.module - val fragmentProviders = mutableListOf(packageFragmentProvider) - - if (module != null) { - - val moduleDescriptors = module.createResolvedModuleDescriptors( - moduleContext.storageManager, - moduleContext.module.builtIns, - languageVersionSettings - ) - - moduleDescriptors.resolvedDescriptors.mapTo(fragmentProviders) { it.packageFragmentProvider } - fragmentProviders.add(moduleDescriptors.forwardDeclarationsModule.packageFragmentProvider) - } + moduleDescriptors.resolvedDescriptors.mapTo(fragmentProviders) { it.packageFragmentProvider } + fragmentProviders.add(moduleDescriptors.forwardDeclarationsModule.packageFragmentProvider) return ResolverForModule(CompositePackageFragmentProvider(fragmentProviders), container) }