Refactoring: move collectAllModuleInfosFromIdeaModel function
This commit is contained in:
@@ -14,7 +14,6 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.search.NonClasspathDirectoriesScope
|
import com.intellij.psi.search.NonClasspathDirectoriesScope
|
||||||
import com.intellij.util.containers.SLRUCache
|
import com.intellij.util.containers.SLRUCache
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getAllProjectSdks
|
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|||||||
@@ -5,7 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.project
|
package org.jetbrains.kotlin.idea.caches.project
|
||||||
|
|
||||||
|
import com.intellij.openapi.module.Module
|
||||||
|
import com.intellij.openapi.module.ModuleManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
||||||
|
import com.intellij.openapi.projectRoots.Sdk
|
||||||
import com.intellij.openapi.roots.*
|
import com.intellij.openapi.roots.*
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
@@ -55,6 +59,39 @@ fun getLibrarySourcesModuleInfos(project: Project, virtualFile: VirtualFile) =
|
|||||||
virtualFile
|
virtualFile
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModuleInfo> {
|
||||||
|
val ideaModules = ModuleManager.getInstance(project).modules.toList()
|
||||||
|
val modulesSourcesInfos = ideaModules.flatMap(Module::correspondingModuleInfos)
|
||||||
|
|
||||||
|
//TODO: (module refactoring) include libraries that are not among dependencies of any module
|
||||||
|
val ideaLibraries = ideaModules.flatMap {
|
||||||
|
ModuleRootManager.getInstance(it).orderEntries.filterIsInstance<LibraryOrderEntry>().map {
|
||||||
|
it.library
|
||||||
|
}
|
||||||
|
}.filterNotNull().toSet()
|
||||||
|
|
||||||
|
val librariesInfos = ideaLibraries.map { LibraryInfo(project, it) }
|
||||||
|
|
||||||
|
val sdksFromModulesDependencies = ideaModules.flatMap {
|
||||||
|
ModuleRootManager.getInstance(it).orderEntries.filterIsInstance<JdkOrderEntry>().map {
|
||||||
|
it.jdk
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val sdksInfos = (sdksFromModulesDependencies + getAllProjectSdks()).filterNotNull().toSet().map {
|
||||||
|
SdkInfo(
|
||||||
|
project,
|
||||||
|
it
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return modulesSourcesInfos + librariesInfos + sdksInfos
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun getAllProjectSdks(): Collection<Sdk> {
|
||||||
|
return ProjectJdkTable.getInstance().allJdks.toList()
|
||||||
|
}
|
||||||
|
|
||||||
private typealias VirtualFileProcessor<T> = (Project, VirtualFile, Boolean) -> T
|
private typealias VirtualFileProcessor<T> = (Project, VirtualFile, Boolean) -> T
|
||||||
|
|
||||||
private sealed class ModuleInfoCollector<out T>(
|
private sealed class ModuleInfoCollector<out T>(
|
||||||
|
|||||||
+4
-42
@@ -17,14 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.caches.resolve
|
package org.jetbrains.kotlin.idea.caches.resolve
|
||||||
|
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import com.intellij.openapi.module.Module
|
|
||||||
import com.intellij.openapi.module.ModuleManager
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
|
||||||
import com.intellij.openapi.projectRoots.Sdk
|
|
||||||
import com.intellij.openapi.roots.JdkOrderEntry
|
|
||||||
import com.intellij.openapi.roots.LibraryOrderEntry
|
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleContent
|
import org.jetbrains.kotlin.analyzer.ModuleContent
|
||||||
import org.jetbrains.kotlin.analyzer.ResolverForProject
|
import org.jetbrains.kotlin.analyzer.ResolverForProject
|
||||||
import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl
|
import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl
|
||||||
@@ -33,7 +26,10 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.caches.resolve.IdePlatformSupport
|
import org.jetbrains.kotlin.caches.resolve.IdePlatformSupport
|
||||||
import org.jetbrains.kotlin.context.GlobalContextImpl
|
import org.jetbrains.kotlin.context.GlobalContextImpl
|
||||||
import org.jetbrains.kotlin.context.withProject
|
import org.jetbrains.kotlin.context.withProject
|
||||||
import org.jetbrains.kotlin.idea.caches.project.*
|
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
||||||
|
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
|
||||||
|
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||||
|
import org.jetbrains.kotlin.idea.caches.project.getNullableModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
|
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
|
||||||
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
@@ -107,45 +103,11 @@ fun createModuleResolverProvider(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModuleInfo> {
|
|
||||||
val ideaModules = ModuleManager.getInstance(project).modules.toList()
|
|
||||||
val modulesSourcesInfos = ideaModules.flatMap(Module::correspondingModuleInfos)
|
|
||||||
|
|
||||||
//TODO: (module refactoring) include libraries that are not among dependencies of any module
|
|
||||||
val ideaLibraries = ideaModules.flatMap {
|
|
||||||
ModuleRootManager.getInstance(it).orderEntries.filterIsInstance<LibraryOrderEntry>().map {
|
|
||||||
it.library
|
|
||||||
}
|
|
||||||
}.filterNotNull().toSet()
|
|
||||||
|
|
||||||
val librariesInfos = ideaLibraries.map { LibraryInfo(project, it) }
|
|
||||||
|
|
||||||
val sdksFromModulesDependencies = ideaModules.flatMap {
|
|
||||||
ModuleRootManager.getInstance(it).orderEntries.filterIsInstance<JdkOrderEntry>().map {
|
|
||||||
it.jdk
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val sdksInfos = (sdksFromModulesDependencies + getAllProjectSdks()).filterNotNull().toSet().map {
|
|
||||||
SdkInfo(
|
|
||||||
project,
|
|
||||||
it
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return modulesSourcesInfos + librariesInfos + sdksInfos
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createBuiltIns(settings: PlatformAnalysisSettings, sdkContext: GlobalContextImpl): KotlinBuiltIns {
|
private fun createBuiltIns(settings: PlatformAnalysisSettings, sdkContext: GlobalContextImpl): KotlinBuiltIns {
|
||||||
val supportInstance = IdePlatformSupport.platformSupport[settings.platform] ?: return DefaultBuiltIns.Instance
|
val supportInstance = IdePlatformSupport.platformSupport[settings.platform] ?: return DefaultBuiltIns.Instance
|
||||||
return supportInstance.createBuiltIns(settings, sdkContext)
|
return supportInstance.createBuiltIns(settings, sdkContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllProjectSdks(): Collection<Sdk> {
|
|
||||||
return ProjectJdkTable.getInstance().allJdks.toList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleResolverProvider(
|
class ModuleResolverProvider(
|
||||||
val resolverForProject: ResolverForProject<IdeaModuleInfo>,
|
val resolverForProject: ResolverForProject<IdeaModuleInfo>,
|
||||||
val builtIns: KotlinBuiltIns,
|
val builtIns: KotlinBuiltIns,
|
||||||
|
|||||||
+1
-4
@@ -27,10 +27,7 @@ import org.jetbrains.kotlin.analyzer.EmptyResolverForProject
|
|||||||
import org.jetbrains.kotlin.analyzer.ResolverForModule
|
import org.jetbrains.kotlin.analyzer.ResolverForModule
|
||||||
import org.jetbrains.kotlin.context.GlobalContextImpl
|
import org.jetbrains.kotlin.context.GlobalContextImpl
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.*
|
||||||
import org.jetbrains.kotlin.idea.caches.project.NotUnderContentRootModuleInfo
|
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfos
|
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.CompositeBindingContext
|
import org.jetbrains.kotlin.resolve.CompositeBindingContext
|
||||||
|
|||||||
Reference in New Issue
Block a user