[analysis api] optimize search for declarations in IDE
This commit is contained in:
+4
-2
@@ -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>
|
||||
|
||||
+7
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user