KTIJ-28167 [AA] Refactor FirShorteningContext.findFunctionsInScopes

It will make it easier processing SAM constructor there later
This commit is contained in:
Roman Golyshev
2024-01-03 22:38:59 +01:00
committed by Space Team
parent 31291fc8fa
commit e561de8a22
@@ -283,18 +283,26 @@ private class FirShorteningContext(val analysisSession: KtFirAnalysisSession) {
return AvailableSymbol(classifierSymbol, ImportKind.fromScope(scope)) return AvailableSymbol(classifierSymbol, ImportKind.fromScope(scope))
} }
/**
* Finds available constructors with a given [targetClassName] within the [scope].
*
* Do not confuse with constructors **declared** in the scope (see [FirScope.processDeclaredConstructors]).
*/
private fun findAvailableConstructors(scope: FirScope, targetClassName: Name): List<FirConstructorSymbol> {
val classifierSymbol = scope.findFirstClassifierByName(targetClassName) ?: return emptyList()
return (classifierSymbol as? FirClassSymbol)?.declarationSymbols?.filterIsInstance<FirConstructorSymbol>().orEmpty()
}
fun findFunctionsInScopes(scopes: List<FirScope>, name: Name): List<AvailableSymbol<FirFunctionSymbol<*>>> { fun findFunctionsInScopes(scopes: List<FirScope>, name: Name): List<AvailableSymbol<FirFunctionSymbol<*>>> {
return scopes.flatMap { scope -> return scopes.flatMap { scope ->
val importKind = ImportKind.fromScope(scope) val importKind = ImportKind.fromScope(scope)
buildList { buildList {
// Collect constructors // Collect constructors
scope.findFirstClassifierByName(name)?.let { classifierSymbol -> findAvailableConstructors(scope, name).mapTo(this) { AvailableSymbol(it, importKind) }
val classSymbol = classifierSymbol as? FirClassSymbol ?: return@let null
classSymbol.declarationSymbols.filterIsInstance<FirConstructorSymbol>()
}?.forEach { add(AvailableSymbol(it, importKind)) }
// Collect functions // Collect functions
addAll(scope.getFunctions(name).map { AvailableSymbol(it, importKind) }) scope.getFunctions(name).mapTo(this) { AvailableSymbol(it, importKind) }
} }
} }
} }