Files
kotlin-fork/compiler/testData/ir/irText/classes/delegatedImplementation.fir.kt.txt
T
Mikhail Glukhikh d4b0688690 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.
2021-02-08 14:28:27 +03:00

153 lines
2.7 KiB
Plaintext
Vendored

interface IBase {
abstract fun foo(x: Int, s: String)
abstract fun bar(): Int
abstract fun String.qux()
}
object BaseImpl : IBase {
private constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override fun foo(x: Int, s: String) {
}
override fun bar(): Int {
return 42
}
override fun String.qux() {
}
}
interface IOther {
abstract val x: String
abstract get
abstract var y: Int
abstract get
abstract set
abstract val Byte.z1: Int
abstract get
abstract var Byte.z2: Int
abstract get
abstract set
}
fun otherImpl(x0: String, y0: Int): IOther {
return { // BLOCK
local class <no name provided> : IOther {
private constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override val x: String
field = x0
override get
override var y: Int
field = y0
override get
override set
override val Byte.z1: Int
override get(): Int {
return 1
}
override var Byte.z2: Int
override get(): Int {
return 2
}
override set(value: Int) {
}
}
<no name provided>()
}
}
class Test1 : IBase {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override fun foo(x: Int, s: String) {
<this>.#<$$delegate_0>.foo(x = x, s = s)
}
override fun bar(): Int {
return <this>.#<$$delegate_0>.bar()
}
override fun String.qux() {
(<this>.#<$$delegate_0>, <this>).qux()
}
local /* final field */ val <$$delegate_0>: IBase = BaseImpl
}
class Test2 : IBase, IOther {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override fun foo(x: Int, s: String) {
<this>.#<$$delegate_0>.foo(x = x, s = s)
}
override fun bar(): Int {
return <this>.#<$$delegate_0>.bar()
}
override fun String.qux() {
(<this>.#<$$delegate_0>, <this>).qux()
}
local /* final field */ val <$$delegate_0>: IBase = BaseImpl
override val x: String
override get(): String {
return <this>.#<$$delegate_1>.<get-x>()
}
override var y: Int
override get(): Int {
return <this>.#<$$delegate_1>.<get-y>()
}
override set(<set-?>: Int) {
<this>.#<$$delegate_1>.<set-y>(<set-?> = <set-?>)
}
override val Byte.z1: Int
override get(): Int {
return (<this>.#<$$delegate_1>, <this>).<get-z1>()
}
override var Byte.z2: Int
override get(): Int {
return (<this>.#<$$delegate_1>, <this>).<get-z2>()
}
override set(<set-?>: Int) {
(<this>.#<$$delegate_1>, <this>).<set-z2>(<set-?> = <set-?>)
}
local /* final field */ val <$$delegate_1>: IOther = otherImpl(x0 = "", y0 = 42)
}