diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index f01199c0706..4547bc1ef80 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -154,11 +154,15 @@ sealed class ModuleSourceInfoWithExpectedBy(private val forProduction: Boolean) return if (forProduction) expectedByModule?.productionSourceInfo() else expectedByModule?.testSourceInfo() } - override fun dependencies(): List = module.cached(CachedValueProvider { + override fun dependencies(): List = module.cached(createCachedValueProvider { CachedValueProvider.Result( ideaModelDependencies(module, forProduction), ProjectRootModificationTracker.getInstance(module.project)) }) + + // NB: CachedValueProvider must exist separately in Production / Test source info, + // otherwise caching does not work properly + protected abstract fun createCachedValueProvider(f: () -> CachedValueProvider.Result): CachedValueProvider } data class ModuleProductionSourceInfo internal constructor( @@ -168,6 +172,8 @@ data class ModuleProductionSourceInfo internal constructor( override val name = Name.special("") override fun contentScope(): GlobalSearchScope = ModuleProductionSourceScope(module) + + override fun createCachedValueProvider(f: () -> CachedValueProvider.Result) = CachedValueProvider { f() } } //TODO: (module refactoring) do not create ModuleTestSourceInfo when there are no test roots for module @@ -192,6 +198,8 @@ data class ModuleTestSourceInfo internal constructor( CachedValueProvider.Result(list, ProjectRootModificationTracker.getInstance(module.project)) }) + + override fun createCachedValueProvider(f: () -> CachedValueProvider.Result) = CachedValueProvider { f() } } internal fun ModuleSourceInfo.isTests() = this is ModuleTestSourceInfo