diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt index 10f8901c101..29dcdfcf67f 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt @@ -283,18 +283,26 @@ private class FirShorteningContext(val analysisSession: KtFirAnalysisSession) { 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 { + val classifierSymbol = scope.findFirstClassifierByName(targetClassName) ?: return emptyList() + + return (classifierSymbol as? FirClassSymbol)?.declarationSymbols?.filterIsInstance().orEmpty() + } + fun findFunctionsInScopes(scopes: List, name: Name): List>> { return scopes.flatMap { scope -> val importKind = ImportKind.fromScope(scope) buildList { // Collect constructors - scope.findFirstClassifierByName(name)?.let { classifierSymbol -> - val classSymbol = classifierSymbol as? FirClassSymbol ?: return@let null - classSymbol.declarationSymbols.filterIsInstance() - }?.forEach { add(AvailableSymbol(it, importKind)) } + findAvailableConstructors(scope, name).mapTo(this) { AvailableSymbol(it, importKind) } // Collect functions - addAll(scope.getFunctions(name).map { AvailableSymbol(it, importKind) }) + scope.getFunctions(name).mapTo(this) { AvailableSymbol(it, importKind) } } } }