mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-17 08:31:29 +00:00
1. Scheme of capturing local variables not touched 2. Lowered local functions are transposed to the nearest class (including local) or file 3. Local classes are also transpose to the nearest class (including local) or file
32 lines
871 B
Kotlin
Vendored
32 lines
871 B
Kotlin
Vendored
// TARGET_BACKEND: JVM
|
|
// IGNORE_BACKEND: JVM_IR
|
|
// WITH_REFLECT
|
|
|
|
interface C {
|
|
val a: Any
|
|
}
|
|
|
|
fun box(): String {
|
|
val l = object : C {
|
|
override val a: Any
|
|
|
|
init {
|
|
a = {}
|
|
}
|
|
}
|
|
|
|
val javaClass = l.a.javaClass
|
|
val enclosingMethod = javaClass.getEnclosingConstructor()!!.getName()
|
|
if (enclosingMethod != "LambdaInObjectExpressionKt\$box\$l\$1") return "ctor: $enclosingMethod"
|
|
|
|
val enclosingClass = javaClass.getEnclosingClass()!!.getName()
|
|
if (enclosingClass != "LambdaInObjectExpressionKt\$box\$l\$1") return "enclosing class: $enclosingClass"
|
|
|
|
if (enclosingMethod != enclosingClass) return "$enclosingClass != $enclosingMethod"
|
|
|
|
val declaringClass = javaClass.getDeclaringClass()
|
|
if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass"
|
|
|
|
return "OK"
|
|
}
|