From 5a422b5ef636b438e2f75b5c538d890f7922473d Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Sat, 11 Jul 2020 12:37:26 +0300 Subject: [PATCH] FirTypeIntersectionScope: optimize/cleanup processOverriddenFunctions --- .../fir/scopes/impl/FirTypeIntersectionScope.kt | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt index a3eb9cfdb64..31776d84647 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt @@ -232,19 +232,18 @@ class FirTypeIntersectionScope private constructor( super.processClassifiersByNameWithSubstitution(name, processor) } + @Suppress("UNCHECKED_CAST") + private fun getDirectOverriddenSymbols(functionSymbol: FirFunctionSymbol<*>): Collection> = + overriddenSymbols[functionSymbol].orEmpty() as Collection> + override fun processOverriddenFunctionsWithDepth( functionSymbol: FirFunctionSymbol<*>, processor: (FirFunctionSymbol<*>, Int) -> ProcessorAction ): ProcessorAction { - @Suppress("UNCHECKED_CAST") - val directOverriddenSymbols = - overriddenSymbols[functionSymbol] as Collection>? - ?: return ProcessorAction.NEXT - - for (directOverridden in directOverriddenSymbols) { + for (directOverridden in getDirectOverriddenSymbols(functionSymbol)) { + if (!processor(directOverridden, 0)) return ProcessorAction.STOP // TODO: Preserve the scope where directOverridden came from for (scope in scopes) { - if (!processor(directOverridden, 0)) return ProcessorAction.STOP if (!scope.processOverriddenFunctionsWithDepth(directOverridden) { symbol, depth -> processor(symbol, depth) }