Files
kotlin-fork/compiler/testData/codegen/box/reflection/enclosing/lambdaInLocalFunction.kt
T
Mikhail Glukhikh 20c4a7b244 [FIR2IR] Introduce staged transformation (first step)
Now FE IR -> BE IR transformation is performed in multiple stages
controller by Fir2IrConverter. Stages are
 * files & classes registration
 * supertypes & type parameters handling
 * functions & properties signature generation
 * body generation

After each step we have guarantee (with exception of local classes &
type inference combination, and external symbols) that required symbols
(class/function/property/variable/type parameter)
are already bound to real declarations and have correct parents.

This commit also fixes incorrect parents for local classes
2020-03-13 12:18:02 +03:00

30 lines
1.0 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM
// WITH_REFLECT
// WITH_HELPERS
import helpers.*
fun box(): String {
fun foo(): Any {
return {}
}
val javaClass = foo().javaClass
// The enclosing method is a local function, which are in a separate class (implementing FunctionN) for non-IR, and are static methods
// in the enclosing class for IR.
val actualEnclosingMethod = javaClass.getEnclosingMethod()!!.getName()
val expectedEnclosingMethod = if (isIR()) "box\$foo" else "invoke"
if (actualEnclosingMethod != expectedEnclosingMethod) return "method: $actualEnclosingMethod"
val actualEnclosingClass = javaClass.getEnclosingClass()!!.getName()
val expectedEnclosingClass = if (isIR()) "LambdaInLocalFunctionKt" else "LambdaInLocalFunctionKt\$box\$1"
if (actualEnclosingClass != expectedEnclosingClass) return "enclosing class: $actualEnclosingClass"
val declaringClass = javaClass.getDeclaringClass()
if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass"
return "OK"
}