[Analysis API FIR] collect scope sequences more lazily
This commit is contained in:
+28
-20
@@ -20,14 +20,16 @@ internal fun FirScope.getCallableSymbols(
|
|||||||
builder: KtSymbolByFirBuilder
|
builder: KtSymbolByFirBuilder
|
||||||
): Sequence<KtCallableSymbol> = sequence {
|
): Sequence<KtCallableSymbol> = sequence {
|
||||||
callableNames.forEach { name ->
|
callableNames.forEach { name ->
|
||||||
val callables = mutableListOf<KtCallableSymbol>()
|
yieldList {
|
||||||
processFunctionsByName(name) { firSymbol ->
|
processFunctionsByName(name) { firSymbol ->
|
||||||
callables.add(builder.functionLikeBuilder.buildFunctionSymbol(firSymbol))
|
add(builder.functionLikeBuilder.buildFunctionSymbol(firSymbol))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
processPropertiesByName(name) { firSymbol ->
|
yieldList {
|
||||||
callables.add(builder.callableBuilder.buildCallableSymbol(firSymbol))
|
processPropertiesByName(name) { firSymbol ->
|
||||||
|
add(builder.callableBuilder.buildCallableSymbol(firSymbol))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
yieldAll(callables)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,33 +38,39 @@ internal fun FirScope.getCallableSignatures(
|
|||||||
builder: KtSymbolByFirBuilder
|
builder: KtSymbolByFirBuilder
|
||||||
): Sequence<KtCallableSignature<*>> = sequence {
|
): Sequence<KtCallableSignature<*>> = sequence {
|
||||||
callableNames.forEach { name ->
|
callableNames.forEach { name ->
|
||||||
val signatures = mutableListOf<KtCallableSignature<*>>()
|
yieldList {
|
||||||
processFunctionsByName(name) { firSymbol ->
|
processFunctionsByName(name) { firSymbol ->
|
||||||
signatures.add(builder.functionLikeBuilder.buildFunctionLikeSignature(firSymbol))
|
add(builder.functionLikeBuilder.buildFunctionLikeSignature(firSymbol))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
processPropertiesByName(name) { firSymbol ->
|
yieldList {
|
||||||
signatures.add(builder.variableLikeBuilder.buildVariableLikeSignature(firSymbol))
|
processPropertiesByName(name) { firSymbol ->
|
||||||
|
add(builder.variableLikeBuilder.buildVariableLikeSignature(firSymbol))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
yieldAll(signatures)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirScope.getClassifierSymbols(classLikeNames: Collection<Name>, builder: KtSymbolByFirBuilder): Sequence<KtClassifierSymbol> =
|
internal fun FirScope.getClassifierSymbols(classLikeNames: Collection<Name>, builder: KtSymbolByFirBuilder): Sequence<KtClassifierSymbol> =
|
||||||
sequence {
|
sequence {
|
||||||
classLikeNames.forEach { name ->
|
classLikeNames.forEach { name ->
|
||||||
val classifierSymbols = mutableListOf<KtClassifierSymbol>()
|
yieldList {
|
||||||
processClassifiersByName(name) { firSymbol ->
|
processClassifiersByName(name) { firSymbol ->
|
||||||
classifierSymbols.add(builder.classifierBuilder.buildClassifierSymbol(firSymbol))
|
add(builder.classifierBuilder.buildClassifierSymbol(firSymbol))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
yieldAll(classifierSymbols)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirScope.getConstructors(builder: KtSymbolByFirBuilder): Sequence<KtConstructorSymbol> =
|
internal fun FirScope.getConstructors(builder: KtSymbolByFirBuilder): Sequence<KtConstructorSymbol> =
|
||||||
sequence {
|
sequence {
|
||||||
val constructorSymbols = mutableListOf<KtConstructorSymbol>()
|
yieldList {
|
||||||
processDeclaredConstructors { firSymbol ->
|
processDeclaredConstructors { firSymbol ->
|
||||||
constructorSymbols.add(builder.functionLikeBuilder.buildConstructorSymbol(firSymbol))
|
add(builder.functionLikeBuilder.buildConstructorSymbol(firSymbol))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
yieldAll(constructorSymbols)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend inline fun <T> SequenceScope<T>.yieldList(listBuilder: MutableList<T>.() -> Unit) {
|
||||||
|
yieldAll(buildList(listBuilder))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user