[analysis api] optimize search for declarations in IDE

This commit is contained in:
Ilya Kirillov
2022-04-17 19:00:43 +02:00
parent 9088da7b33
commit 9a562a0293
6 changed files with 19 additions and 13 deletions
@@ -19,8 +19,10 @@ import org.jetbrains.kotlin.psi.*
* May be called frequently, so for implementations it is better to cache results.
*/
public abstract class KotlinDeclarationProvider {
public abstract fun getClassesByClassId(classId: ClassId): Collection<KtClassOrObject>
public abstract fun getTypeAliasesByClassId(classId: ClassId): Collection<KtTypeAlias>
public abstract fun getClassLikeDeclarationByClassId(classId: ClassId): KtClassLikeDeclaration?
public abstract fun getAllClassesByClassId(classId: ClassId): Collection<KtClassOrObject>
public abstract fun getAllTypeAliasesByClassId(classId: ClassId): Collection<KtTypeAlias>
public abstract fun getClassNamesInPackage(packageFqName: FqName): Set<Name>
public abstract fun getTypeAliasNamesInPackage(packageFqName: FqName): Set<Name>
@@ -32,14 +32,19 @@ public class KotlinStaticDeclarationProvider internal constructor(
private val KtElement.inScope: Boolean
get() = containingKtFile.virtualFile in scope
override fun getClassesByClassId(classId: ClassId): Collection<KtClassOrObject> =
override fun getClassLikeDeclarationByClassId(classId: ClassId): KtClassLikeDeclaration? {
return getAllClassesByClassId(classId).firstOrNull()
?: getAllTypeAliasesByClassId(classId).firstOrNull()
}
override fun getAllClassesByClassId(classId: ClassId): Collection<KtClassOrObject> =
index.classMap[classId.packageFqName]
?.filter { ktClassOrObject ->
ktClassOrObject.getClassId() == classId && ktClassOrObject.inScope
}
?: emptyList()
override fun getTypeAliasesByClassId(classId: ClassId): Collection<KtTypeAlias> =
override fun getAllTypeAliasesByClassId(classId: ClassId): Collection<KtTypeAlias> =
index.typeAliasMap[classId.packageFqName]
?.filter { ktTypeAlias ->
ktTypeAlias.getClassId() == classId && ktTypeAlias.inScope