[FIR2IR] Remap fake-override symbols in forEachCachedDeclarationSymbol
^KT-64742
This commit is contained in:
committed by
Space Team
parent
fc56f2af1c
commit
f36ed93472
+15
-4
@@ -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 <S : IrSymbol> Collection<S>.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()
|
||||
|
||||
Reference in New Issue
Block a user