[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
|
@DelicateDeclarationStorageApi
|
||||||
fun forEachCachedDeclarationSymbol(block: (IrSymbol) -> Unit) {
|
fun forEachCachedDeclarationSymbol(block: (IrSymbol) -> Unit) {
|
||||||
functionCache.values.forEach(block)
|
functionCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapFunctionSymbol, block)
|
||||||
constructorCache.values.forEach(block)
|
constructorCache.values.forEach(block)
|
||||||
propertyCache.values.forEach(block)
|
propertyCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapPropertySymbol, block)
|
||||||
getterForPropertyCache.values.forEach(block)
|
getterForPropertyCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapFunctionSymbol, block)
|
||||||
setterForPropertyCache.values.forEach(block)
|
setterForPropertyCache.values.forEachWithRemapping(symbolsMappingForLazyClasses::remapFunctionSymbol, block)
|
||||||
backingFieldForPropertyCache.values.forEach(block)
|
backingFieldForPropertyCache.values.forEach(block)
|
||||||
propertyForBackingFieldCache.values.forEach(block)
|
propertyForBackingFieldCache.values.forEach(block)
|
||||||
delegateVariableForPropertyCache.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 A { /* $1 */ fun foo() }
|
||||||
// interface B : A {
|
// interface B : A {
|
||||||
// /* $2 */ fake_override fun foo()
|
// /* $2 */ fake_override fun foo()
|
||||||
|
|||||||
Reference in New Issue
Block a user