Module(Production/Test)SourceInfo#dependencies() is cached

This commit is contained in:
Pavel V. Talanov
2015-06-10 19:06:32 +03:00
parent e3c3af6aab
commit b3b7da22d4
@@ -16,24 +16,20 @@
package org.jetbrains.kotlin.idea.caches.resolve
import org.jetbrains.kotlin.analyzer.ModuleInfo
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.OrderEntry
import com.intellij.openapi.roots.ModuleSourceOrderEntry
import com.intellij.openapi.roots.ModuleOrderEntry
import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.JdkOrderEntry
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.name.Name
import java.util.LinkedHashSet
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.libraries.Library
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.module.impl.scopes.LibraryScopeBase
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.*
import com.intellij.openapi.roots.libraries.Library
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.emptyOrSingletonList
import java.util.LinkedHashSet
public val LIBRARY_NAME_PREFIX: String = "library "
@@ -65,6 +61,10 @@ private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, pro
}
}
private fun <T> Module.cached(provider: CachedValueProvider<T>): T {
return CachedValuesManager.getManager(getProject()).getCachedValue(this, provider)
}
fun ideaModelDependencies(module: Module, productionOnly: Boolean): List<IdeaModuleInfo> {
//NOTE: lib dependencies can be processed several times during recursive traversal
val result = LinkedHashSet<IdeaModuleInfo>()
@@ -89,7 +89,11 @@ public data class ModuleProductionSourceInfo(override val module: Module) : Modu
override fun contentScope() = ModuleProductionSourceScope(module)
override fun dependencies() = ideaModelDependencies(module, productionOnly = true)
override fun dependencies() = module.cached(CachedValueProvider {
CachedValueProvider.Result(
ideaModelDependencies(module, productionOnly = true),
ProjectRootModificationTracker.getInstance(module.getProject()))
})
override fun friends() = listOf(module.testSourceInfo())
}
@@ -100,7 +104,11 @@ public data class ModuleTestSourceInfo(override val module: Module) : ModuleSour
override fun contentScope() = ModuleTestSourceScope(module)
override fun dependencies() = ideaModelDependencies(module, productionOnly = false)
override fun dependencies() = module.cached(CachedValueProvider {
CachedValueProvider.Result(
ideaModelDependencies(module, productionOnly = false),
ProjectRootModificationTracker.getInstance(module.getProject()))
})
}
private fun ModuleSourceInfo.isTests() = this is ModuleTestSourceInfo