A new kind of synthetic accessors for backing fields, if accessed inside lambda / object literal / local class #KT-9657 Fixed
A set of tests provided Also #KT-4867 Fixed Also #KT-8750 Fixed Slight codegen refactoring
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
abstract class Your {
|
||||
abstract val your: String
|
||||
|
||||
fun foo() = your
|
||||
}
|
||||
|
||||
class My {
|
||||
val back = "O"
|
||||
val my: String
|
||||
get() = object : Your() {
|
||||
override val your = back
|
||||
}.foo() + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
@@ -0,0 +1,6 @@
|
||||
class My {
|
||||
val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
@@ -0,0 +1,18 @@
|
||||
class My {
|
||||
var my: String = "U"
|
||||
get() = { field }()
|
||||
set(arg) {
|
||||
class Local {
|
||||
fun foo() {
|
||||
field = arg + "K"
|
||||
}
|
||||
}
|
||||
Local().foo()
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val m = My()
|
||||
m.my = "O"
|
||||
return m.my
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
abstract class Your {
|
||||
abstract val your: String
|
||||
|
||||
fun foo() = your
|
||||
}
|
||||
|
||||
class My {
|
||||
val my: String = "O"
|
||||
get() = object : Your() {
|
||||
override val your = field
|
||||
}.foo() + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
abstract class Your {
|
||||
abstract val your: String
|
||||
|
||||
fun foo() = your
|
||||
}
|
||||
|
||||
class My {
|
||||
private val back = "O"
|
||||
val my: String
|
||||
get() = object : Your() {
|
||||
override val your = back
|
||||
}.foo() + "K"
|
||||
}
|
||||
|
||||
fun box() = My().my
|
||||
@@ -0,0 +1,8 @@
|
||||
class My {
|
||||
companion object {
|
||||
val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
}
|
||||
}
|
||||
|
||||
fun box() = My.my
|
||||
@@ -0,0 +1,4 @@
|
||||
val my: String = "O"
|
||||
get() = { field }() + "K"
|
||||
|
||||
fun box() = my
|
||||
Reference in New Issue
Block a user