From f36ed934726e4b0ed6946052d3198edcecb08758 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 11 Jan 2024 12:30:49 +0200 Subject: [PATCH] [FIR2IR] Remap fake-override symbols in `forEachCachedDeclarationSymbol` ^KT-64742 --- .../fir/backend/Fir2IrDeclarationStorage.kt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 40044c63b97..27660880602 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -101,16 +101,27 @@ class Fir2IrDeclarationStorage( */ @DelicateDeclarationStorageApi fun forEachCachedDeclarationSymbol(block: (IrSymbol) -> Unit) { - functionCache.values.forEach(block) + functionCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapFunctionSymbol, block) constructorCache.values.forEach(block) - propertyCache.values.forEach(block) - getterForPropertyCache.values.forEach(block) - setterForPropertyCache.values.forEach(block) + propertyCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapPropertySymbol, block) + getterForPropertyCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapFunctionSymbol, block) + setterForPropertyCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapFunctionSymbol, block) backingFieldForPropertyCache.values.forEach(block) propertyForBackingFieldCache.values.forEach(block) delegateVariableForPropertyCache.values.forEach(block) } + private inline fun Collection.forEachWithRemapping(remapper: (S) -> S, block: (S) -> Unit) { + for (symbol in this) { + val updatedSymbol = if (symbol is IrFakeOverrideSymbolBase<*, *, *>) { + remapper(symbol) + } else { + symbol + } + block(updatedSymbol) + } + } + // interface A { /* $1 */ fun foo() } // interface B : A { // /* $2 */ fake_override fun foo()