Module(Production/Test)SourceInfo#dependencies() is cached
This commit is contained in:
+24
-16
@@ -16,24 +16,20 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.resolve
|
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 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.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.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 org.jetbrains.kotlin.utils.emptyOrSingletonList
|
||||||
|
import java.util.LinkedHashSet
|
||||||
|
|
||||||
public val LIBRARY_NAME_PREFIX: String = "library "
|
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> {
|
fun ideaModelDependencies(module: Module, productionOnly: Boolean): List<IdeaModuleInfo> {
|
||||||
//NOTE: lib dependencies can be processed several times during recursive traversal
|
//NOTE: lib dependencies can be processed several times during recursive traversal
|
||||||
val result = LinkedHashSet<IdeaModuleInfo>()
|
val result = LinkedHashSet<IdeaModuleInfo>()
|
||||||
@@ -89,7 +89,11 @@ public data class ModuleProductionSourceInfo(override val module: Module) : Modu
|
|||||||
|
|
||||||
override fun contentScope() = ModuleProductionSourceScope(module)
|
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())
|
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 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
|
private fun ModuleSourceInfo.isTests() = this is ModuleTestSourceInfo
|
||||||
|
|||||||
Reference in New Issue
Block a user