From 583aad23506ef235a6136cab5c540a4d620dd60f Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 16 Jun 2023 13:33:14 +0200 Subject: [PATCH] [LL] spare some memory on lists By default, a list with a single element would have capacity of 10; in big numbers, it might be a lot of wasted memory. --- .../JvmStubBasedFirDeserializedSymbolProvider.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt index 0d037bb0043..d36beb9c2e4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt @@ -140,19 +140,21 @@ internal open class JvmStubBasedFirDeserializedSymbolProvider( foundFunctions: Collection?, ): List { val topLevelFunctions = foundFunctions ?: declarationProvider.getTopLevelFunctions(callableId) - return topLevelFunctions - .mapNotNull { function -> + val result = ArrayList(topLevelFunctions.size) + topLevelFunctions + .mapNotNullTo(result) { function -> val file = function.containingKtFile val virtualFile = file.virtualFile - if (virtualFile.extension == MetadataPackageFragment.METADATA_FILE_EXTENSION) return@mapNotNull null + if (virtualFile.extension == MetadataPackageFragment.METADATA_FILE_EXTENSION) return@mapNotNullTo null if (initialOrigin != FirDeclarationOrigin.BuiltIns && file.packageFqName.asString() .replace(".", "/") + "/" + virtualFile.nameWithoutExtension in KotlinBuiltins - ) return@mapNotNull null + ) return@mapNotNullTo null val symbol = FirNamedFunctionSymbol(callableId) val rootContext = StubBasedFirDeserializationContext.createRootContext(session, moduleData, callableId, function, symbol, initialOrigin) rootContext.memberDeserializer.loadFunction(function, null, session, symbol).symbol } + return result } private fun loadPropertiesByCallableId(callableId: CallableId, foundProperties: Collection?): List {