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()