From 872b5a6a33bd8540354cafb471e3ecfc0eb9cc4a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 24 Jun 2022 06:49:53 +0200 Subject: [PATCH] [Analysis API FIR] collect scope sequences more lazily --- .../analysis/api/fir/scopes/firScopeUtils.kt | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt index b12e8f3d260..1506c81f82e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt @@ -20,14 +20,16 @@ internal fun FirScope.getCallableSymbols( builder: KtSymbolByFirBuilder ): Sequence = sequence { callableNames.forEach { name -> - val callables = mutableListOf() - processFunctionsByName(name) { firSymbol -> - callables.add(builder.functionLikeBuilder.buildFunctionSymbol(firSymbol)) + yieldList { + processFunctionsByName(name) { firSymbol -> + add(builder.functionLikeBuilder.buildFunctionSymbol(firSymbol)) + } } - processPropertiesByName(name) { firSymbol -> - callables.add(builder.callableBuilder.buildCallableSymbol(firSymbol)) + yieldList { + processPropertiesByName(name) { firSymbol -> + add(builder.callableBuilder.buildCallableSymbol(firSymbol)) + } } - yieldAll(callables) } } @@ -36,33 +38,39 @@ internal fun FirScope.getCallableSignatures( builder: KtSymbolByFirBuilder ): Sequence> = sequence { callableNames.forEach { name -> - val signatures = mutableListOf>() - processFunctionsByName(name) { firSymbol -> - signatures.add(builder.functionLikeBuilder.buildFunctionLikeSignature(firSymbol)) + yieldList { + processFunctionsByName(name) { firSymbol -> + add(builder.functionLikeBuilder.buildFunctionLikeSignature(firSymbol)) + } } - processPropertiesByName(name) { firSymbol -> - signatures.add(builder.variableLikeBuilder.buildVariableLikeSignature(firSymbol)) + yieldList { + processPropertiesByName(name) { firSymbol -> + add(builder.variableLikeBuilder.buildVariableLikeSignature(firSymbol)) + } } - yieldAll(signatures) } } internal fun FirScope.getClassifierSymbols(classLikeNames: Collection, builder: KtSymbolByFirBuilder): Sequence = sequence { classLikeNames.forEach { name -> - val classifierSymbols = mutableListOf() - processClassifiersByName(name) { firSymbol -> - classifierSymbols.add(builder.classifierBuilder.buildClassifierSymbol(firSymbol)) + yieldList { + processClassifiersByName(name) { firSymbol -> + add(builder.classifierBuilder.buildClassifierSymbol(firSymbol)) + } } - yieldAll(classifierSymbols) } } internal fun FirScope.getConstructors(builder: KtSymbolByFirBuilder): Sequence = sequence { - val constructorSymbols = mutableListOf() - processDeclaredConstructors { firSymbol -> - constructorSymbols.add(builder.functionLikeBuilder.buildConstructorSymbol(firSymbol)) + yieldList { + processDeclaredConstructors { firSymbol -> + add(builder.functionLikeBuilder.buildConstructorSymbol(firSymbol)) + } } - yieldAll(constructorSymbols) } + +private suspend inline fun SequenceScope.yieldList(listBuilder: MutableList.() -> Unit) { + yieldAll(buildList(listBuilder)) +} \ No newline at end of file