From b5ef063b0fe63de18bd2f2aafee958314d3a55e2 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 21 Nov 2019 17:09:37 +0300 Subject: [PATCH] FIR: Cache functions in use-site member scope --- .../impl/AbstractFirUseSiteMemberScope.kt | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index 200ce1c350d..c751db65242 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -27,22 +27,37 @@ abstract class AbstractFirUseSiteMemberScope( protected val superTypesScope: FirSuperTypeScope, protected val declaredMemberScope: FirScope ) : AbstractFirOverrideScope(session, overrideChecker) { + + private val functions = hashMapOf>>() + override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction { + functions.getOrPut(name) { + doProcessFunctions(name) + }.forEach { + if (processor(it) == ProcessorAction.STOP) return ProcessorAction.STOP + } + + return ProcessorAction.NEXT + } + + private fun doProcessFunctions( + name: Name + ): Collection> = mutableListOf>().apply { val overrideCandidates = mutableSetOf>() if (!declaredMemberScope.processFunctionsByName(name) { val symbol = processInheritedDefaultParameters(it) overrideCandidates += symbol - processor(symbol) - } - ) return ProcessorAction.STOP - - return superTypesScope.processFunctionsByName(name) { - val overriddenBy = it.getOverridden(overrideCandidates) - if (overriddenBy == null) { - processor(it) - } else { + add(symbol) ProcessorAction.NEXT } + ) return@apply + + superTypesScope.processFunctionsByName(name) { + val overriddenBy = it.getOverridden(overrideCandidates) + if (overriddenBy == null) { + add(it) + } + ProcessorAction.NEXT } }