[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.
This commit is contained in:
Anna Kozlova
2023-06-16 13:33:14 +02:00
committed by Space Team
parent 0afe712f07
commit 583aad2350
@@ -140,19 +140,21 @@ internal open class JvmStubBasedFirDeserializedSymbolProvider(
foundFunctions: Collection<KtNamedFunction>?, foundFunctions: Collection<KtNamedFunction>?,
): List<FirNamedFunctionSymbol> { ): List<FirNamedFunctionSymbol> {
val topLevelFunctions = foundFunctions ?: declarationProvider.getTopLevelFunctions(callableId) val topLevelFunctions = foundFunctions ?: declarationProvider.getTopLevelFunctions(callableId)
return topLevelFunctions val result = ArrayList<FirNamedFunctionSymbol>(topLevelFunctions.size)
.mapNotNull { function -> topLevelFunctions
.mapNotNullTo(result) { function ->
val file = function.containingKtFile val file = function.containingKtFile
val virtualFile = file.virtualFile 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() if (initialOrigin != FirDeclarationOrigin.BuiltIns && file.packageFqName.asString()
.replace(".", "/") + "/" + virtualFile.nameWithoutExtension in KotlinBuiltins .replace(".", "/") + "/" + virtualFile.nameWithoutExtension in KotlinBuiltins
) return@mapNotNull null ) return@mapNotNullTo null
val symbol = FirNamedFunctionSymbol(callableId) val symbol = FirNamedFunctionSymbol(callableId)
val rootContext = val rootContext =
StubBasedFirDeserializationContext.createRootContext(session, moduleData, callableId, function, symbol, initialOrigin) StubBasedFirDeserializationContext.createRootContext(session, moduleData, callableId, function, symbol, initialOrigin)
rootContext.memberDeserializer.loadFunction(function, null, session, symbol).symbol rootContext.memberDeserializer.loadFunction(function, null, session, symbol).symbol
} }
return result
} }
private fun loadPropertiesByCallableId(callableId: CallableId, foundProperties: Collection<KtProperty>?): List<FirPropertySymbol> { private fun loadPropertiesByCallableId(callableId: CallableId, foundProperties: Collection<KtProperty>?): List<FirPropertySymbol> {