Skip to content

Commit c591a99

Browse files
BlaBlaHumanSpace Team
authored and
Space Team
committed
[Analysis API] Add a Caffeine cache to store computer resolution scopes in KaBaseResolutionScopeProvider
^KT-77135
1 parent ad5e29a commit c591a99

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/projectStructure/KaBaseResolutionScopeProvider.kt

+13-4
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,27 @@
55

66
package org.jetbrains.kotlin.analysis.api.impl.base.projectStructure
77

8+
import com.github.benmanes.caffeine.cache.Cache
9+
import com.github.benmanes.caffeine.cache.Caffeine
810
import com.intellij.openapi.project.Project
911
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
1014
import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaResolutionScope
1115
import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaResolutionScopeProvider
12-
import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KaGlobalSearchScopeMerger
1316
import org.jetbrains.kotlin.analysis.api.projectStructure.KaBuiltinsModule
1417
import org.jetbrains.kotlin.analysis.api.projectStructure.KaLibrarySourceModule
1518
import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule
1619
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltinsVirtualFileProvider
20+
import java.time.Duration
1721

1822
class KaBaseResolutionScopeProvider : KaResolutionScopeProvider {
1923
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+
}
2329
}
2430

2531
private fun getAnalyzableModules(module: KaModule): Set<KaModule> =
@@ -50,4 +56,7 @@ class KaBaseResolutionScopeProvider : KaResolutionScopeProvider {
5056
private fun createBuiltinsScope(project: Project): GlobalSearchScope {
5157
return BuiltinsVirtualFileProvider.getInstance().createBuiltinsScope(project)
5258
}
59+
60+
private val resolutionScopeCache: Cache<KaModule, KaResolutionScope> =
61+
Caffeine.newBuilder().weakKeys().softValues().expireAfterAccess(Duration.ofSeconds(10)).build()
5362
}

0 commit comments

Comments
 (0)