interface Base { fun foo() } var ~setter1~Int.setter1: Int = 2 set(i: Int) { field = `setter1`this@setter1 } var ~setter2~Int.setter2: Base? = null set(i: Base?) { field = object: Base { override fun foo() { `setter2`this@setter2 } } } var ~setter3~Int.setter3: Int = 1 set(i: Int) { { `setter3`this@setter3 }.invoke() } var ~setter4~Int.setter4: Int = 1 set(i: Int) { val extFun = { Int.() -> `setter4`this@setter4 } `setter4`this@setter4.extFun() }