From 7a1ecabe0a8ce25c357c97b38eb75a052d431133 Mon Sep 17 00:00:00 2001 From: "simon.ogorodnik" Date: Thu, 9 Apr 2020 22:33:36 +0300 Subject: [PATCH] [FIR2IR] Use deepest matching symbol on fake override calls --- .../org/jetbrains/kotlin/fir/backend/ConversionUtils.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 7fb51f3545f..236b7ff6a55 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -108,9 +108,7 @@ fun FirReference.toSymbol( is FirResolvedNamedReference -> { when (val resolvedSymbol = resolvedSymbol) { is FirCallableSymbol<*> -> { - val originalCallableSymbol = - resolvedSymbol.overriddenSymbol?.takeIf { it.callableId == resolvedSymbol.callableId } ?: resolvedSymbol - originalCallableSymbol.toSymbol(declarationStorage, preferGetter) + resolvedSymbol.deepestMatchingOverriddenSymbol().toSymbol(declarationStorage, preferGetter) } is FirClassifierSymbol<*> -> { resolvedSymbol.toSymbol(session, classifierStorage) @@ -249,6 +247,11 @@ internal tailrec fun FirCallableSymbol<*>.deepestOverriddenSymbol(): FirCallable return overriddenSymbol.deepestOverriddenSymbol() } +internal tailrec fun FirCallableSymbol<*>.deepestMatchingOverriddenSymbol(root: FirCallableSymbol<*> = this): FirCallableSymbol<*> { + val overriddenSymbol = overriddenSymbol?.takeIf { it.callableId == root.callableId } ?: return this + return overriddenSymbol.deepestMatchingOverriddenSymbol(this) +} + private val nameToOperationConventionOrigin = mutableMapOf( OperatorNameConventions.PLUS to IrStatementOrigin.PLUS, OperatorNameConventions.MINUS to IrStatementOrigin.MINUS,