Introduce propertyDelegated method in delegates

This commit is contained in:
Denis Mekhanikov
2014-09-20 17:42:02 +04:00
parent 9e38d207f2
commit c4bfa0edca
35 changed files with 597 additions and 42 deletions
@@ -0,0 +1,11 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata, s: String = "is OK") { name = "${p.name} $s" }
}
val prop by Delegate()
fun box(): String {
return if (prop == "prop is OK") "OK" else "fail";
}
@@ -0,0 +1,13 @@
class A {
val prop: String by Delegate()
inner class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
}
fun box(): String {
return if (A().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,14 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
class A {
val p = Delegate()
val prop by p
}
fun box(): String {
return if (A().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,15 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
fun foo() = Delegate()
class A {
val prop by foo()
}
fun box(): String {
return if (A().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,15 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
val p = Delegate()
class A {
val prop by p
}
fun box(): String {
return if (A().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,14 @@
class Delegate {
var name = ""
fun get(t: A, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
val A.prop by Delegate()
class A {
}
fun box(): String {
return if (A().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,20 @@
class Delegate {
var name = ""
fun get(t: F.A, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
class F {
val A.prop by Delegate()
class A {
}
fun foo(): String {
return A().prop
}
}
fun box(): String {
return if (F().foo() == "prop") "OK" else "fail"
}
@@ -0,0 +1,17 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
trait A {
val prop: String
}
class AImpl: A {
override val prop by Delegate()
}
fun box(): String {
return if(AImpl().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,17 @@
class Delegate {
var inner = "OK"
fun get(t: Any?, p: PropertyMetadata): String = inner
private fun propertyDelegated(p: PropertyMetadata) { inner = "fail" }
fun propertyDelegated() { inner = "fail" }
fun propertyDelegated(a: Int) { inner = "fail" }
fun propertyDelegated(a: String) { inner = "fail" }
fun propertyDelegated(p: PropertyMetadata, a: Int) { inner = "fail" }
fun propertyDelegated<T>(p: PropertyMetadata, s: String = "") { inner = "fail" }
}
val prop by Delegate()
fun box(): String {
return prop
}
@@ -0,0 +1,14 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
}
fun Delegate.propertyDelegated(p: PropertyMetadata) { name = p.name }
class A {
val prop by Delegate()
}
fun box(): String {
return if (A().prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,17 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
class A {
private val prop by Delegate()
fun test(): String {
return if (prop == "prop") "OK" else "fail"
}
}
fun box(): String {
return A().test()
}
@@ -0,0 +1,11 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
val prop by Delegate()
fun box(): String {
return if (prop == "prop") "OK" else "fail"
}
@@ -0,0 +1,14 @@
class Delegate {
var count = 0
fun get(t: Any?, p: PropertyMetadata) {}
fun propertyDelegated(vararg p: PropertyMetadata) { count++ }
}
val delegate = Delegate()
val prop1 by delegate
val prop2 by delegate
fun box(): String {
return if(delegate.count == 2) "OK" else "fail"
}
@@ -0,0 +1,16 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(p: PropertyMetadata) { name = p.name }
}
class A {
inner class B {
val prop by Delegate()
}
}
fun box(): String {
val p = A().B().prop
return if(p == "prop") "OK" else "fail"
}
@@ -0,0 +1,11 @@
class Delegate {
var name = ""
fun get(t: Any?, p: PropertyMetadata): String = name
fun propertyDelegated(vararg p: PropertyMetadata) { name = p[0].name }
}
val prop by Delegate()
fun box(): String {
return if (prop == "prop") "OK" else "fail"
}