K/N: Correct creation of module descriptors for K/N module

This commit is contained in:
Dmitriy Dolovov
2018-09-06 19:34:06 +03:00
committed by Mikhail Glukhikh
parent fbeff9245e
commit 2ff538fc87
2 changed files with 20 additions and 24 deletions
@@ -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 <M : ModuleInfo> 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<String, LibraryInfo>()
ModuleRootManager.getInstance(this).orderEntries().forEachLibrary { intellijLibrary ->
intellijLibrary.name?.let { name -> libraryMap[name] = LibraryInfo(project, intellijLibrary) }
true
}
val libraryMap =
this.dependencies().filterIsInstance<LibraryInfo>().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
@@ -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<ResolveSession>().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)
}