Fix for KT-7557: NoSuchMethodError when capturing receiver in object expression

#KT-7557 Fixed
   #KT-7769 Fixed
This commit is contained in:
Michael Bogdanov
2015-05-19 11:38:23 +03:00
parent 34100fff99
commit 319c5aec60
5 changed files with 102 additions and 7 deletions
@@ -0,0 +1,40 @@
interface B<T> {
val bar: T
}
fun String.foo() = object : B<String> {
override val bar: String = length().toString()
}
class C {
fun String.extension() = this.length()
fun String.fooInClass() = object : B<String> {
override val bar: String = extension().toString()
}
fun String.fooInClassNoReceiver() = object : B<String> {
override val bar: String = "123".extension().toString()
}
fun fooInClass(s: String) = s.fooInClass().bar
fun fooInClassNoReceiver(s: String) = s.fooInClassNoReceiver().bar
}
fun box(): String {
var result = "Hello, world!".foo().bar
if (result != "13") return "fail 1: $result"
result = C().fooInClass("Hello, world!")
if (result != "13") return "fail 2: $result"
result = C().fooInClassNoReceiver("Hello, world!")
if (result != "3") return "fail 3: $result"
return "OK"
}