[LL FIR] introduce LLFirCompositeSymbolProviderNameCache
^KT-57930
This commit is contained in:
committed by
Space Team
parent
2beb4c0017
commit
9dcc9d0d10
+40
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.caches.createCache
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.caches.getValue
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.flatMapToNullableSet
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.mayHaveTopLevelClassifier
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
@@ -58,3 +59,42 @@ internal abstract class LLFirSymbolProviderNameCacheBase(
|
||||
return name in names
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal object LLFirEmptySymbolProviderNameCache : LLFirSymbolProviderNameCache() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? = emptySet()
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name>? = emptySet()
|
||||
override fun mayHaveTopLevelClassifier(classId: ClassId, mayHaveFunctionClass: Boolean): Boolean = false
|
||||
override fun mayHaveTopLevelCallable(packageFqName: FqName, name: Name): Boolean = false
|
||||
}
|
||||
|
||||
internal class LLFirCompositeSymbolProviderNameCache
|
||||
private constructor(
|
||||
private val caches: List<LLFirSymbolProviderNameCache>
|
||||
) : LLFirSymbolProviderNameCache() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? {
|
||||
return caches.flatMapToNullableSet { it.getTopLevelClassifierNamesInPackage(packageFqName) }
|
||||
}
|
||||
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name>? {
|
||||
return caches.flatMapToNullableSet { it.getTopLevelCallableNamesInPackage(packageFqName) }
|
||||
}
|
||||
|
||||
override fun mayHaveTopLevelClassifier(classId: ClassId, mayHaveFunctionClass: Boolean): Boolean {
|
||||
return caches.any { it.mayHaveTopLevelClassifier(classId, mayHaveFunctionClass) }
|
||||
}
|
||||
|
||||
override fun mayHaveTopLevelCallable(packageFqName: FqName, name: Name): Boolean {
|
||||
return caches.any { it.mayHaveTopLevelCallable(packageFqName, name) }
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun create(caches: List<LLFirSymbolProviderNameCache>): LLFirSymbolProviderNameCache {
|
||||
return when (caches.size) {
|
||||
0 -> LLFirEmptySymbolProviderNameCache
|
||||
1 -> caches.single()
|
||||
else -> LLFirCompositeSymbolProviderNameCache(caches)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user