d4b0688690
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.
153 lines
2.7 KiB
Plaintext
Vendored
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)
|
|
|
|
}
|
|
|