[LL FIR] KT-57314 Prepare for getting top-level names from index
- Getting top-level names from `declarationProvider` directly instead of from subordinate symbol providers has a lot of potential for performance, but the current performance of the index access is worse than the iterative version because scopes aren't optimized yet. - This commit prepares `LLFirCombinedKotlinSymbolProvider` for the switch to getting top-level names from `declarationProvider`.
This commit is contained in:
committed by
Space Team
parent
028d65e402
commit
a7360a54fe
+2
-10
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirElementFinder
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirSymbolProviderNameCache
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirKotlinSymbolProviderNameCache
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
@@ -60,15 +60,7 @@ internal class LLFirProviderHelper(
|
||||
}
|
||||
}
|
||||
|
||||
val symbolNameCache = object : LLFirSymbolProviderNameCache(firSession) {
|
||||
override fun computeClassifierNames(packageFqName: FqName): Set<String>? =
|
||||
declarationProvider
|
||||
.getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName)
|
||||
.mapTo(mutableSetOf()) { it.asString() }
|
||||
|
||||
override fun computeCallableNames(packageFqName: FqName): Set<Name>? =
|
||||
declarationProvider.getTopLevelCallableNamesInPackage(packageFqName)
|
||||
}
|
||||
val symbolNameCache = LLFirKotlinSymbolProviderNameCache(firSession, declarationProvider)
|
||||
|
||||
fun getFirClassifierByFqNameAndDeclaration(
|
||||
classId: ClassId,
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
|
||||
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
/**
|
||||
* An [LLFirSymbolProviderNameCache] that fetches top-level names from a Kotlin [declarationProvider].
|
||||
*/
|
||||
internal class LLFirKotlinSymbolProviderNameCache(
|
||||
firSession: FirSession,
|
||||
private val declarationProvider: KotlinDeclarationProvider,
|
||||
) : LLFirSymbolProviderNameCache(firSession) {
|
||||
override fun computeClassifierNames(packageFqName: FqName): Set<String> =
|
||||
declarationProvider
|
||||
.getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName)
|
||||
.mapTo(mutableSetOf()) { it.asString() }
|
||||
|
||||
override fun computeCallableNames(packageFqName: FqName): Set<Name> =
|
||||
declarationProvider.getTopLevelCallableNamesInPackage(packageFqName)
|
||||
}
|
||||
Reference in New Issue
Block a user