Misc: Eliminate instances of IdeModifiableModelsProviderImpl or dispose them after use

This commit is contained in:
Alexey Sedunov
2018-05-31 17:52:03 +03:00
parent e3223ab6d8
commit 8198599ef5
5 changed files with 36 additions and 34 deletions
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.idea.caches.project
import com.intellij.facet.FacetManager
import com.intellij.facet.FacetTypeRegistry
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
import com.intellij.openapi.externalSystem.service.project.IdeModelsProviderImpl
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.impl.scopes.LibraryScopeBase
import com.intellij.openapi.project.Project
@@ -121,21 +121,20 @@ private fun ideaModelDependencies(
return result.filterNot { it is LibraryInfo && it.platform != platform }
}
fun Module.findImplementedModuleNames(modelsProvider: IdeModifiableModelsProvider): List<String> {
val facetModel = modelsProvider.getModifiableFacetModel(this)
val facet = facetModel.findFacet(
KotlinFacetType.TYPE_ID,
FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName
fun Module.findImplementedModuleNames(): List<String> {
val facet = FacetManager.getInstance(this).findFacet(
KotlinFacetType.TYPE_ID,
FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName
)
return facet?.configuration?.settings?.implementedModuleNames ?: emptyList()
}
fun Module.findImplementedModules() = this.cached<List<Module>>(
CachedValueProvider {
val modelsProvider = IdeModifiableModelsProviderImpl(project)
val modelsProvider = IdeModelsProviderImpl(project)
CachedValueProvider.Result(
findImplementedModuleNames(modelsProvider).mapNotNull { modelsProvider.findIdeModule(it) },
ProjectRootModificationTracker.getInstance(project)
findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) },
ProjectRootModificationTracker.getInstance(project)
)
}
)
@@ -5,23 +5,22 @@
package org.jetbrains.kotlin.idea.caches.project
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.roots.ProjectRootModificationTracker
import com.intellij.psi.util.CachedValueProvider
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider) =
modelsProvider.modules.filter { name in it.findImplementedModuleNames(modelsProvider) }
fun Module.findImplementingModules() =
ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() }
val Module.implementingModules: List<Module>
get() = cached(CachedValueProvider {
CachedValueProvider.Result(
findImplementingModules(IdeModifiableModelsProviderImpl(project)),
ProjectRootModificationTracker.getInstance(project)
findImplementingModules(),
ProjectRootModificationTracker.getInstance(project)
)
})
@@ -32,11 +31,8 @@ private fun Module.getModuleInfo(baseModuleSourceInfo: ModuleSourceInfo): Module
else -> null
}
private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo): List<ModuleSourceInfo> {
val modelsProvider = IdeModifiableModelsProviderImpl(project)
val implementingModules = findImplementingModules(modelsProvider)
return implementingModules.mapNotNull { it.getModuleInfo(moduleSourceInfo) }
}
private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo) =
findImplementingModules().mapNotNull { it.getModuleInfo(moduleSourceInfo) }
val ModuleDescriptor.implementingDescriptors: List<ModuleDescriptor>
get() {