added constraint for package level delegated property

This commit is contained in:
Svetlana Isakova
2013-06-04 19:58:56 +04:00
parent 2b0616b1c4
commit 7e564de71a
4 changed files with 80 additions and 20 deletions
@@ -5,7 +5,8 @@ class A1 {
var b1: String by getMyProperty1()
}
var c1: String by getMyProperty1<Nothing?, String>()
var c1: String by getMyProperty1()
var d1: String by MyProperty1()
fun getMyProperty1<A, B>() = MyProperty1<A, B>()
@@ -28,6 +29,9 @@ class A2 {
var b2: String by getMyProperty2()
}
var c2: String by getMyProperty2()
var d2: String by MyProperty2()
fun getMyProperty2<A>() = MyProperty2<A>()
class MyProperty2<T> {
@@ -49,6 +53,9 @@ class A3 {
var b3: String by getMyProperty3()
}
var c3: String by getMyProperty3()
var d3: String by MyProperty3()
fun getMyProperty3<A>() = MyProperty3<A>()
class MyProperty3<T> {
@@ -63,22 +70,5 @@ class MyProperty3<T> {
}
}
//--------------------------
class A4 {
val a4: String by MyProperty4()
val b4: String by getMyProperty4()
}
fun getMyProperty4<A, B>() = MyProperty4<A, B>()
class MyProperty4<R, T> {
public fun get(thisRef: R, desc: PropertyMetadata): T {
println("get $thisRef ${desc.name}")
throw Exception()
}
}
//--------------------------
fun println(a: Any?) = a
@@ -0,0 +1,62 @@
package foo
class A1 {
val a1: String by MyProperty1()
val b1: String by getMyProperty1()
}
val c1: String by getMyProperty1()
val d1: String by MyProperty1()
fun getMyProperty1<A, B>() = MyProperty1<A, B>()
class MyProperty1<R, T> {
public fun get(thisRef: R, desc: PropertyMetadata): T {
println("get $thisRef ${desc.name}")
throw Exception()
}
}
//--------------------------
class A2 {
val a2: String by MyProperty2()
val b2: String by getMyProperty2()
}
val c2: String by getMyProperty2()
val d2: String by MyProperty2()
fun getMyProperty2<A>() = MyProperty2<A>()
class MyProperty2<T> {
public fun get(thisRef: Any?, desc: PropertyMetadata): T {
println("get $thisRef ${desc.name}")
throw Exception()
}
}
//--------------------------
class A3 {
val a3: String by MyProperty3()
val b3: String by getMyProperty3()
}
val c3: String by getMyProperty3()
val d3: String by MyProperty3()
fun getMyProperty3<A>() = MyProperty3<A>()
class MyProperty3<T> {
public fun get(thisRef: T, desc: PropertyMetadata): String {
println("get $thisRef ${desc.name}")
return ""
}
}
//--------------------------
fun println(a: Any?) = a