Properly calculate outermost parent class for sam wrapper

#KT-22906 Fixed
This commit is contained in:
Mikhael Bogdanov
2018-02-19 09:37:47 +01:00
parent 6d035f1d28
commit cc4ab832b7
8 changed files with 168 additions and 4 deletions
+36
View File
@@ -0,0 +1,36 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FILE: Foo.kt
@file:JvmMultifileClass
@file:JvmName("testX")
package test
class A2 {
fun doWork(job: () -> Unit) {
Runnable(job)
Runnable(job)
Runnable(job)
}
fun foo(job: () -> Unit) {
Runnable(job)
Runnable(job)
Runnable(job)
}
}
// FILE: kt17091_3.kt
fun box(): String {
if (java.lang.Class.forName("Kt17091_3Kt\$sam\$java_util_concurrent_Callable$0") == null) return "fail: can't find sam wrapper"
if (java.lang.Class.forName("test.A2\$sam\$java_lang_Runnable$0") == null) return "fail 2: can't find sam wrapper"
return A().foo().call()
}
class A {
val f = {"OK"}
fun foo() = java.util.concurrent.Callable(f)
}
+26
View File
@@ -0,0 +1,26 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FILE: kt22906_1.kt
package test
class C {
fun startTemplate(): String {
val y = object {
fun foo(): String {
val job = { "OK" }
return java.util.concurrent.Callable(job).call()
}
}
return y.foo()
}
}
// FILE: kt22906_2.kt
import test.*
fun box(): String {
if (java.lang.Class.forName("test.C\$sam\$java_util_concurrent_Callable\$0") == null) return "fail: can't find sam wrapper"
return C().startTemplate()
}
+36
View File
@@ -0,0 +1,36 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FILE: kt22906_1.kt
package test
class C {
fun startTemplate(): String {
val y = object {
fun foo(): String {
val job = { "OK" }
return java.util.concurrent.Callable(job).call()
}
}
return y.foo()
}
fun foo() {
val y = object {
fun foo(): String {
val job = { "OK2" }
return java.util.concurrent.Callable(job).call()
}
}
}
}
// FILE: kt22906_2.kt
import test.*
fun box(): String {
if (java.lang.Class.forName("test.C\$sam\$java_util_concurrent_Callable\$0") == null) return "fail: can't find sam wrapper"
return C().startTemplate()
}