FIR2IR: bind fake overrides for classes on the fly right after member processing

#KT-57441 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-03-22 14:57:59 +01:00
committed by Space Team
parent d3f1571d35
commit 9af944669a
3 changed files with 194 additions and 2 deletions
@@ -259,9 +259,19 @@ class Fir2IrClassifierStorage(
processMembersOfClassesOnTheFlyImmediately = true
for ((klass, irClass) in localClassesCreatedOnTheFly) {
processMembersOfClassCreatedOnTheFly(klass, irClass)
// See the problem from KT-57441
// class Wrapper {
// private val dummy = object: Bar {}
// private val bar = object: Bar by dummy {}
// }
// interface Bar {
// val foo: String
// get() = ""
// }
// When we are building bar.foo fake override, we should call dummy.foo,
// so we should have object : Bar.foo fake override to be built and bound.
converter.bindFakeOverridesInClass(irClass)
}
// Note: it's better to bind everything AFTER members are built, in case local classes are dependent on each other
localClassesCreatedOnTheFly.values.forEach(converter::bindFakeOverridesInClass)
localClassesCreatedOnTheFly.clear()
}