FirTypeIntersectionScope: optimize/cleanup processOverriddenFunctions

This commit is contained in:
Mikhail Glukhikh
2020-07-11 12:37:26 +03:00
parent 1bbed6c4ed
commit 5a422b5ef6
@@ -232,19 +232,18 @@ class FirTypeIntersectionScope private constructor(
super.processClassifiersByNameWithSubstitution(name, processor) super.processClassifiersByNameWithSubstitution(name, processor)
} }
@Suppress("UNCHECKED_CAST")
private fun getDirectOverriddenSymbols(functionSymbol: FirFunctionSymbol<*>): Collection<FirFunctionSymbol<*>> =
overriddenSymbols[functionSymbol].orEmpty() as Collection<FirFunctionSymbol<*>>
override fun processOverriddenFunctionsWithDepth( override fun processOverriddenFunctionsWithDepth(
functionSymbol: FirFunctionSymbol<*>, functionSymbol: FirFunctionSymbol<*>,
processor: (FirFunctionSymbol<*>, Int) -> ProcessorAction processor: (FirFunctionSymbol<*>, Int) -> ProcessorAction
): ProcessorAction { ): ProcessorAction {
@Suppress("UNCHECKED_CAST") for (directOverridden in getDirectOverriddenSymbols(functionSymbol)) {
val directOverriddenSymbols = if (!processor(directOverridden, 0)) return ProcessorAction.STOP
overriddenSymbols[functionSymbol] as Collection<FirFunctionSymbol<*>>?
?: return ProcessorAction.NEXT
for (directOverridden in directOverriddenSymbols) {
// TODO: Preserve the scope where directOverridden came from // TODO: Preserve the scope where directOverridden came from
for (scope in scopes) { for (scope in scopes) {
if (!processor(directOverridden, 0)) return ProcessorAction.STOP
if (!scope.processOverriddenFunctionsWithDepth(directOverridden) { symbol, depth -> if (!scope.processOverriddenFunctionsWithDepth(directOverridden) { symbol, depth ->
processor(symbol, depth) processor(symbol, depth)
} }