Debugger: get correct context for breakpoints inside lambdas

This commit is contained in:
Natalia Ukhorskaya
2014-09-11 14:15:27 +04:00
parent a1e586cf7c
commit 50dcef254d
19 changed files with 351 additions and 38 deletions
@@ -0,0 +1,12 @@
package callableBug
fun main(args: Array<String>) {
val callable = 1
array(1, 2).map {
it + 1
//Breakpoint!
}.forEach { it + 2 }
}
// EXPRESSION: callable
// RESULT: 1: I
@@ -0,0 +1,11 @@
package inlineLambda
fun main(args: Array<String>) {
val a = array(1)
// EXPRESSION: it
// RESULT: Unresolved reference: it
// STEP_INTO: 1
//Breakpoint!
a.map { it * 1 }
}
@@ -0,0 +1,18 @@
package lambdaOnSecondLine
fun main(args: Array<String>) {
val a = A()
// EXPRESSION: it
// RESULT: 1: I
// STEP_INTO: 2
a.foo { a }
//Breakpoint!
.foo { a }
}
class A {
fun foo(f: (Int) -> A): A {
return f(1)
}
}
@@ -0,0 +1,16 @@
package oneLineLambda
fun main(args: Array<String>) {
val a = A()
// EXPRESSION: it
// RESULT: 1: I
// STEP_INTO: 2
//Breakpoint!
a.foo { a }
}
class A {
fun foo(f: (Int) -> A): A {
return f(1)
}
}
@@ -0,0 +1,16 @@
package twoLambdasOnOneLineFirst
fun main(args: Array<String>) {
val a = A()
// EXPRESSION: it
// RESULT: 1: I
// STEP_INTO: 2
//Breakpoint!
a.foo { a }.foo { a }
}
class A {
fun foo(f: (Int) -> A): A {
return f(1)
}
}
@@ -0,0 +1,18 @@
package twoLambdasOnOneLineSecond
fun main(args: Array<String>) {
val a = A()
// EXPRESSION: it
// RESULT: 2: I
// STEP_INTO: 4
//Breakpoint!
a.foo { counter++; a }.foo { a }
}
var counter = 1
class A {
fun foo(f: (Int) -> A): A {
return f(counter)
}
}