[LL FIR] KTIJ-24296 LL FIR symbol provider: Remove function class check
- `LLFirProvider$SymbolProvider` cannot provide synthetic function classes, so there is no need to check `isNameForFunctionClass` for the `ClassId`.
This commit is contained in:
committed by
Space Team
parent
32297c0f21
commit
bf1ee6ebed
+2
-2
@@ -109,7 +109,7 @@ internal class LLFirProvider(
|
|||||||
@NoMutableState
|
@NoMutableState
|
||||||
private inner class SymbolProvider : FirSymbolProvider(session) {
|
private inner class SymbolProvider : FirSymbolProvider(session) {
|
||||||
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
if (!providerHelper.symbolNameCache.mayHaveTopLevelClassifier(classId)) return null
|
if (!providerHelper.symbolNameCache.mayHaveTopLevelClassifier(classId, mayHaveFunctionClass = false)) return null
|
||||||
return getFirClassifierByFqName(classId)?.symbol
|
return getFirClassifierByFqName(classId)?.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ internal class LLFirProvider(
|
|||||||
override fun computePackageSetWithTopLevelCallables(): Set<String>? = null
|
override fun computePackageSetWithTopLevelCallables(): Set<String>? = null
|
||||||
|
|
||||||
override fun knownTopLevelClassifiersInPackage(packageFqName: FqName): Set<String>? =
|
override fun knownTopLevelClassifiersInPackage(packageFqName: FqName): Set<String>? =
|
||||||
providerHelper.symbolNameCache.getTopLevelClassifierNamesInPackage(packageFqName)?.names
|
providerHelper.symbolNameCache.getTopLevelClassifierNamesInPackage(packageFqName)
|
||||||
|
|
||||||
override fun computeCallableNamesInPackage(packageFqName: FqName): Set<Name>? =
|
override fun computeCallableNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||||
providerHelper.symbolNameCache.getTopLevelCallableNamesInPackage(packageFqName)
|
providerHelper.symbolNameCache.getTopLevelCallableNamesInPackage(packageFqName)
|
||||||
|
|||||||
+4
-20
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.caches.createCache
|
|||||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||||
import org.jetbrains.kotlin.fir.caches.getValue
|
import org.jetbrains.kotlin.fir.caches.getValue
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.mayHaveTopLevelClassifier
|
import org.jetbrains.kotlin.fir.resolve.providers.mayHaveTopLevelClassifier
|
||||||
import org.jetbrains.kotlin.fir.types.functionTypeService
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -20,38 +19,23 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
* symbol finding early if the symbol name isn't contained in the symbol provider's domain.
|
* symbol finding early if the symbol name isn't contained in the symbol provider's domain.
|
||||||
*/
|
*/
|
||||||
internal abstract class LLFirSymbolProviderNameCache(private val firSession: FirSession) {
|
internal abstract class LLFirSymbolProviderNameCache(private val firSession: FirSession) {
|
||||||
internal data class ClassifierNamesInPackage(
|
|
||||||
val names: Set<String>,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Some packages (such as `kotlin` or `kotlin.coroutines`) may contain function classes generated by the compiler. To avoid a hash
|
|
||||||
* map access when checking `mayHaveTopLevelClassifier`, [mayHaveFunctionClass] is precomputed for each package name. Also see
|
|
||||||
* [org.jetbrains.kotlin.builtins.functions.FunctionTypeKind].
|
|
||||||
*/
|
|
||||||
val mayHaveFunctionClass: Boolean,
|
|
||||||
)
|
|
||||||
|
|
||||||
abstract fun computeClassifierNames(packageFqName: FqName): Set<String>?
|
abstract fun computeClassifierNames(packageFqName: FqName): Set<String>?
|
||||||
abstract fun computeCallableNames(packageFqName: FqName): Set<Name>?
|
abstract fun computeCallableNames(packageFqName: FqName): Set<Name>?
|
||||||
|
|
||||||
private val topLevelClassifierNamesByPackage =
|
private val topLevelClassifierNamesByPackage =
|
||||||
firSession.firCachesFactory.createCache<FqName, ClassifierNamesInPackage?> { packageFqName ->
|
firSession.firCachesFactory.createCache<FqName, Set<String>?>(::computeClassifierNames)
|
||||||
val names = computeClassifierNames(packageFqName) ?: return@createCache null
|
|
||||||
val mayHaveFunctionClass = firSession.functionTypeService.hasKindWithSpecificPackage(packageFqName)
|
|
||||||
ClassifierNamesInPackage(names, mayHaveFunctionClass)
|
|
||||||
}
|
|
||||||
|
|
||||||
private val topLevelCallableNamesByPackage =
|
private val topLevelCallableNamesByPackage =
|
||||||
firSession.firCachesFactory.createCache<FqName, Set<Name>?>(::computeCallableNames)
|
firSession.firCachesFactory.createCache<FqName, Set<Name>?>(::computeCallableNames)
|
||||||
|
|
||||||
fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): ClassifierNamesInPackage? =
|
fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? =
|
||||||
topLevelClassifierNamesByPackage.getValue(packageFqName)
|
topLevelClassifierNamesByPackage.getValue(packageFqName)
|
||||||
|
|
||||||
fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name>? =
|
fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||||
topLevelCallableNamesByPackage.getValue(packageFqName)
|
topLevelCallableNamesByPackage.getValue(packageFqName)
|
||||||
|
|
||||||
fun mayHaveTopLevelClassifier(classId: ClassId): Boolean {
|
fun mayHaveTopLevelClassifier(classId: ClassId, mayHaveFunctionClass: Boolean): Boolean {
|
||||||
val (names, mayHaveFunctionClass) = getTopLevelClassifierNamesInPackage(classId.packageFqName) ?: return true
|
val names = getTopLevelClassifierNamesInPackage(classId.packageFqName) ?: return true
|
||||||
return names.mayHaveTopLevelClassifier(classId, firSession, mayHaveFunctionClass)
|
return names.mayHaveTopLevelClassifier(classId, firSession, mayHaveFunctionClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user