[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.file.builder.LLFirFileBuilder
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirElementFinder
|
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.KotlinDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
@@ -60,15 +60,7 @@ internal class LLFirProviderHelper(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val symbolNameCache = object : LLFirSymbolProviderNameCache(firSession) {
|
val symbolNameCache = LLFirKotlinSymbolProviderNameCache(firSession, declarationProvider)
|
||||||
override fun computeClassifierNames(packageFqName: FqName): Set<String>? =
|
|
||||||
declarationProvider
|
|
||||||
.getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName)
|
|
||||||
.mapTo(mutableSetOf()) { it.asString() }
|
|
||||||
|
|
||||||
override fun computeCallableNames(packageFqName: FqName): Set<Name>? =
|
|
||||||
declarationProvider.getTopLevelCallableNamesInPackage(packageFqName)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getFirClassifierByFqNameAndDeclaration(
|
fun getFirClassifierByFqNameAndDeclaration(
|
||||||
classId: ClassId,
|
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