[FIR] KTIJ-24296 Allow special names in symbol provider pre-filtering
- A special name such as `<no name provided>` may not be contained in the list of names, but may still be found by a provider.
This commit is contained in:
committed by
Space Team
parent
ece038b49b
commit
a725fe559c
+1
@@ -56,6 +56,7 @@ internal abstract class LLFirSymbolProviderNameCache(private val firSession: Fir
|
||||
}
|
||||
|
||||
fun mayHaveTopLevelCallable(packageFqName: FqName, name: Name): Boolean {
|
||||
if (name.isSpecial) return true
|
||||
val names = getTopLevelCallableNamesInPackage(packageFqName) ?: return true
|
||||
return name in names
|
||||
}
|
||||
|
||||
+11
-6
@@ -131,16 +131,21 @@ fun Set<String>.mayHaveTopLevelClassifier(
|
||||
): Boolean {
|
||||
if (mayBeFunctionClass && isNameForFunctionClass(classId, session)) return true
|
||||
|
||||
val outerClassId = classId.outerClassId
|
||||
if (outerClassId == null && classId.shortClassName.asString() !in this) return false
|
||||
if (outerClassId != null && classId.outermostClassId.shortClassName.asString() !in this) return false
|
||||
if (classId.outerClassId == null) {
|
||||
if (!mayHaveTopLevelClassifier(classId.shortClassName)) return false
|
||||
} else {
|
||||
if (!mayHaveTopLevelClassifier(classId.outermostClassId.shortClassName)) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun isNameForFunctionClass(classId: ClassId, session: FirSession): Boolean {
|
||||
return session.functionTypeService.getKindByClassNamePrefix(classId.packageFqName, classId.shortClassName.asString()) != null
|
||||
}
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
private inline fun Set<String>.mayHaveTopLevelClassifier(shortClassName: Name): Boolean =
|
||||
shortClassName.asString() in this || shortClassName.isSpecial
|
||||
|
||||
private fun isNameForFunctionClass(classId: ClassId, session: FirSession): Boolean =
|
||||
session.functionTypeService.getKindByClassNamePrefix(classId.packageFqName, classId.shortClassName.asString()) != null
|
||||
|
||||
fun ClassId.toSymbol(session: FirSession): FirClassifierSymbol<*>? {
|
||||
return session.symbolProvider.getClassLikeSymbolByClassId(this)
|
||||
|
||||
Reference in New Issue
Block a user