Support property getters/setters in reflection
This commit is contained in:
+30
@@ -0,0 +1,30 @@
|
||||
import kotlin.reflect.*
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
var foo = ""
|
||||
var String.bar: String
|
||||
get() = this
|
||||
set(value) {}
|
||||
|
||||
class A(var baz: Int) {
|
||||
var String.quux: String
|
||||
get() = this
|
||||
set(value) {}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("<get-foo>", ::foo.getter.name)
|
||||
assertEquals("<set-foo>", ::foo.setter.name)
|
||||
|
||||
assertEquals("<get-bar>", String::bar.getter.name)
|
||||
assertEquals("<set-bar>", String::bar.setter.name)
|
||||
|
||||
assertEquals("<get-baz>", A::baz.getter.name)
|
||||
assertEquals("<set-baz>", A::baz.setter.name)
|
||||
|
||||
val me = A::class.extensionProperties.single() as KMutableProperty2<A, String, String>
|
||||
assertEquals("<get-quux>", me.getter.name)
|
||||
assertEquals("<set-quux>", me.setter.name)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
var state: String = ""
|
||||
|
||||
var String.prop: String
|
||||
get() = length().toString()
|
||||
set(value) { state = this + value }
|
||||
|
||||
fun box(): String {
|
||||
val prop = String::prop
|
||||
|
||||
assertEquals("3", prop.getter.invoke("abc"))
|
||||
assertEquals("5", prop.getter("defgh"))
|
||||
|
||||
prop.setter("O", "K")
|
||||
|
||||
return state
|
||||
}
|
||||
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
import kotlin.reflect.KMutableProperty2
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class C(var state: String) {
|
||||
var String.prop: String
|
||||
get() = length().toString()
|
||||
set(value) { state = this + value }
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val prop = C::class.extensionProperties.single() as KMutableProperty2<C, String, String>
|
||||
|
||||
val c = C("")
|
||||
assertEquals("3", prop.getter.invoke(c, "abc"))
|
||||
assertEquals("1", prop.getter(c, "d"))
|
||||
|
||||
prop.setter(c, "O", "K")
|
||||
|
||||
return c.state
|
||||
}
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class C(var state: String)
|
||||
|
||||
fun box(): String {
|
||||
val prop = C::state
|
||||
|
||||
val c = C("1")
|
||||
assertEquals("1", prop.getter.invoke(c))
|
||||
assertEquals("1", prop.getter(c))
|
||||
|
||||
prop.setter(c, "OK")
|
||||
|
||||
return prop.get(c)
|
||||
}
|
||||
compiler/testData/codegen/boxWithStdlib/reflection/properties/accessors/topLevelPropertyAccessors.kt
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
var state: String = ""
|
||||
|
||||
fun box(): String {
|
||||
val prop = ::state
|
||||
|
||||
assertEquals("", prop.getter.invoke())
|
||||
assertEquals("", prop.getter())
|
||||
|
||||
prop.setter("OK")
|
||||
|
||||
return prop.get()
|
||||
}
|
||||
Reference in New Issue
Block a user