|
5 | 5 |
|
6 | 6 | package org.jetbrains.kotlin.analysis.api.impl.base.projectStructure
|
7 | 7 |
|
| 8 | +import com.github.benmanes.caffeine.cache.Cache |
| 9 | +import com.github.benmanes.caffeine.cache.Caffeine |
8 | 10 | import com.intellij.openapi.project.Project
|
9 | 11 | import com.intellij.psi.search.GlobalSearchScope
|
| 12 | +import org.jetbrains.kotlin.analysis.api.platform.caches.getOrPut |
| 13 | +import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaGlobalSearchScopeMerger |
10 | 14 | import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaResolutionScope
|
11 | 15 | import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaResolutionScopeProvider
|
12 |
| -import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaGlobalSearchScopeMerger |
13 | 16 | import org.jetbrains.kotlin.analysis.api.projectStructure.KaBuiltinsModule
|
14 | 17 | import org.jetbrains.kotlin.analysis.api.projectStructure.KaLibrarySourceModule
|
15 | 18 | import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule
|
16 | 19 | import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltinsVirtualFileProvider
|
| 20 | +import java.time.Duration |
17 | 21 |
|
18 | 22 | class KaBaseResolutionScopeProvider : KaResolutionScopeProvider {
|
19 | 23 | override fun getResolutionScope(module: KaModule): KaResolutionScope {
|
20 |
| - val analyzableModules = getAnalyzableModules(module) |
21 |
| - val searchScope = buildSearchScope(module, analyzableModules) |
22 |
| - return KaBaseResolutionScope(module, searchScope, analyzableModules) |
| 24 | + return resolutionScopeCache.getOrPut(module) { module -> |
| 25 | + val analyzableModules = getAnalyzableModules(module) |
| 26 | + val searchScope = buildSearchScope(module, analyzableModules) |
| 27 | + KaBaseResolutionScope(module, searchScope, analyzableModules) |
| 28 | + } |
23 | 29 | }
|
24 | 30 |
|
25 | 31 | private fun getAnalyzableModules(module: KaModule): Set<KaModule> =
|
@@ -50,4 +56,7 @@ class KaBaseResolutionScopeProvider : KaResolutionScopeProvider {
|
50 | 56 | private fun createBuiltinsScope(project: Project): GlobalSearchScope {
|
51 | 57 | return BuiltinsVirtualFileProvider.getInstance().createBuiltinsScope(project)
|
52 | 58 | }
|
| 59 | + |
| 60 | + private val resolutionScopeCache: Cache<KaModule, KaResolutionScope> = |
| 61 | + Caffeine.newBuilder().weakKeys().softValues().expireAfterAccess(Duration.ofSeconds(10)).build() |
53 | 62 | }
|
0 commit comments