IdeaModuleInfos: cache Module.findImplementedModules
Calling ModuleSourceInfo.expectedBy can be quite costly otherwise
because creating IdeModifiableModuleProvider is not cheap
This commit is contained in:
@@ -21,7 +21,6 @@ import com.intellij.openapi.util.ModificationTracker
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.util.CachedValueProvider
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
import com.intellij.psi.util.CachedValuesManager
|
|
||||||
import com.intellij.util.PathUtil
|
import com.intellij.util.PathUtil
|
||||||
import com.intellij.util.SmartList
|
import com.intellij.util.SmartList
|
||||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||||
@@ -131,8 +130,15 @@ fun Module.findImplementedModuleNames(modelsProvider: IdeModifiableModelsProvide
|
|||||||
return facet?.configuration?.settings?.implementedModuleNames ?: emptyList()
|
return facet?.configuration?.settings?.implementedModuleNames ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Module.findImplementedModules(modelsProvider: IdeModifiableModelsProvider) =
|
fun Module.findImplementedModules() = this.cached<List<Module>>(
|
||||||
findImplementedModuleNames(modelsProvider).mapNotNull { modelsProvider.findIdeModule(it) }
|
CachedValueProvider {
|
||||||
|
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||||
|
CachedValueProvider.Result(
|
||||||
|
findImplementedModuleNames(modelsProvider).mapNotNull { modelsProvider.findIdeModule(it) },
|
||||||
|
ProjectRootModificationTracker.getInstance(project)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
|
interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
|
||||||
val module: Module
|
val module: Module
|
||||||
@@ -154,8 +160,7 @@ interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
|
|||||||
sealed class ModuleSourceInfoWithExpectedBy(private val forProduction: Boolean) : ModuleSourceInfo {
|
sealed class ModuleSourceInfoWithExpectedBy(private val forProduction: Boolean) : ModuleSourceInfo {
|
||||||
override val expectedBy: List<ModuleSourceInfo>
|
override val expectedBy: List<ModuleSourceInfo>
|
||||||
get() {
|
get() {
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(module.project)
|
val expectedByModules = module.findImplementedModules()
|
||||||
val expectedByModules = module.findImplementedModules(modelsProvider)
|
|
||||||
return expectedByModules.mapNotNull { if (forProduction) it.productionSourceInfo() else it.testSourceInfo() }
|
return expectedByModules.mapNotNull { if (forProduction) it.productionSourceInfo() else it.testSourceInfo() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user