FIR: introduce delegate field initializers
Before this commit we initialized delegate fields in primary constructor, that could provoke NPE in case delegate is used in initializer of some property backing field. Now we initialize delegate fields directly instead.
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
class FirSession(val name: String)
|
||||
|
||||
interface Fir2IrComponents {
|
||||
val session: FirSession
|
||||
val classifierStorage: Fir2IrClassifierStorage
|
||||
}
|
||||
|
||||
class Fir2IrComponentsStorage(
|
||||
override val session: FirSession
|
||||
) : Fir2IrComponents {
|
||||
override lateinit var classifierStorage: Fir2IrClassifierStorage
|
||||
}
|
||||
|
||||
class Fir2IrClassifierStorage(
|
||||
private val components: Fir2IrComponents
|
||||
) : Fir2IrComponents by components {
|
||||
private val name = session.name
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val session = FirSession("OK")
|
||||
val components = Fir2IrComponentsStorage(session)
|
||||
val classifierStorage = Fir2IrClassifierStorage(components)
|
||||
components.classifierStorage = classifierStorage
|
||||
return classifierStorage.session.name
|
||||
}
|
||||
Reference in New Issue
Block a user