Support multiple breakpoints at one line (especially for lambdas)
This commit is contained in:
Vendored
+82
@@ -0,0 +1,82 @@
|
||||
package multipleBreakpointsAtLine
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val a = A()
|
||||
|
||||
// EXPRESSION: it + 1
|
||||
// RESULT: Unresolved reference: it
|
||||
//Breakpoint! (-1)
|
||||
a.foo(1) { 1 }.foo(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 2
|
||||
// RESULT: 3: I
|
||||
//Breakpoint! (0)
|
||||
a.foo(1) { 1 }.foo(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 3
|
||||
// RESULT: 5: I
|
||||
//Breakpoint! (1)
|
||||
a.foo(1) { 1 }.foo(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 4
|
||||
// RESULT: Unresolved reference: it
|
||||
|
||||
// EXPRESSION: it + 5
|
||||
// RESULT: 6: I
|
||||
|
||||
// EXPRESSION: it + 6
|
||||
// RESULT: 8: I
|
||||
//Breakpoint!
|
||||
a.foo(1) { 1 }.foo(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 7
|
||||
// RESULT: Unresolved reference: it
|
||||
|
||||
// EXPRESSION: it + 8
|
||||
// RESULT: Unresolved reference: it
|
||||
//Breakpoint! (-1)
|
||||
a.bar(1) { 1 }.bar(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 9
|
||||
// RESULT: 10: I
|
||||
//Breakpoint! (0)
|
||||
a.bar(1) { 1 }.bar(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 10
|
||||
// RESULT: 12: I
|
||||
//Breakpoint! (1)
|
||||
a.bar(1) { 1 }.bar(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 11
|
||||
// RESULT: Unresolved reference: it
|
||||
|
||||
// EXPRESSION: it + 12
|
||||
// RESULT: 13: I
|
||||
|
||||
// EXPRESSION: it + 13
|
||||
// RESULT: Unresolved reference: it
|
||||
|
||||
// EXPRESSION: it + 14
|
||||
// RESULT: 16: I
|
||||
//Breakpoint!
|
||||
a.bar(1) { 1 }.bar(2) { 1 }
|
||||
|
||||
// EXPRESSION: it + 15
|
||||
// RESULT: 17: I
|
||||
//Breakpoint! (1)
|
||||
a.bar(1) { 1 }.bar(2) { 1 + 1
|
||||
1 + 1
|
||||
}
|
||||
}
|
||||
|
||||
class A {
|
||||
fun foo(i: Int, f: (i: Int) -> Int): A {
|
||||
f(i)
|
||||
return this
|
||||
}
|
||||
|
||||
inline fun bar(i: Int, f: (i: Int) -> Int): A {
|
||||
f(i)
|
||||
return this
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -3,7 +3,7 @@ package ceAnonymousObjectCapturedInClosure
|
||||
fun main(args: Array<String>) {
|
||||
val localObject = object { fun test() = 1 }
|
||||
var localObjectVar = object { fun test() = 1 }
|
||||
//Breakpoint!
|
||||
//Breakpoint! (-1)
|
||||
lambda { localObjectVar.test() }
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -5,7 +5,7 @@ fun main(args: Array<String>) {
|
||||
// EXPRESSION: it
|
||||
// RESULT: 1: I
|
||||
// STEP_INTO: 2
|
||||
//Breakpoint!
|
||||
//Breakpoint! (-1)
|
||||
a.foo { a }.foo { a }
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package severalFunLiterals
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val myClass = MyClass()
|
||||
//Breakpoint!
|
||||
//Breakpoint! (-1)
|
||||
myClass.f1 { test() }.f2 {
|
||||
test()
|
||||
}
|
||||
@@ -22,4 +22,4 @@ class MyClass {
|
||||
|
||||
fun test() {}
|
||||
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ class MyClass {
|
||||
}
|
||||
|
||||
fun inClass() {
|
||||
//Breakpoint!
|
||||
//Breakpoint! (-1)
|
||||
f1 { test() }.f2 {
|
||||
test()
|
||||
}
|
||||
@@ -25,4 +25,4 @@ class MyClass {
|
||||
|
||||
fun test() {}
|
||||
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
|
||||
+12
-8
@@ -5,20 +5,31 @@ fun main(args: Array<String>) {
|
||||
//Breakpoint!
|
||||
val myClass = MyClass()
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// smart step into f2.invoke(), one-line lambda
|
||||
myClass.f1 { test() }
|
||||
.f2 { test() }
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 2
|
||||
// smart step into map.invoke(), multiline lambda
|
||||
array.map {
|
||||
it *2
|
||||
}
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// smart step into filter.invoke()
|
||||
array.map { it * 2 }
|
||||
.filter {
|
||||
it > 2
|
||||
}
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// smart step into f2.invoke(), one-line lambda
|
||||
myClass.f1 { test() }.f2 { test() }
|
||||
}
|
||||
|
||||
class MyClass {
|
||||
@@ -35,11 +46,4 @@ class MyClass {
|
||||
}
|
||||
}
|
||||
|
||||
fun test() {}
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 2
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
fun test() {}
|
||||
Vendored
+18
-8
@@ -5,20 +5,32 @@ fun main(args: Array<String>) {
|
||||
//Breakpoint!
|
||||
val myClass = MyClass()
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// smart step into f2.invoke(), one-line lambda
|
||||
myClass.f1(fun () { test() })
|
||||
.f2(fun () { test() })
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 2
|
||||
// smart step into map.invoke(), multiline lambda
|
||||
array.map(fun (it): Int {
|
||||
return it * 2
|
||||
})
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// smart step into filter.invoke()
|
||||
array.map(fun (it): Int { return it * 2 })
|
||||
.filter(fun (it): Boolean {
|
||||
return it > 2
|
||||
})
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 2
|
||||
myClass.f3(fun () = myClass.f3 {
|
||||
println()
|
||||
})
|
||||
}
|
||||
|
||||
class MyClass {
|
||||
@@ -33,13 +45,11 @@ class MyClass {
|
||||
f1Param()
|
||||
return this
|
||||
}
|
||||
|
||||
inline fun f3(f1Param: () -> Unit): Unit {
|
||||
test()
|
||||
f1Param()
|
||||
}
|
||||
}
|
||||
|
||||
fun test() {}
|
||||
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 2
|
||||
// STEP_OVER: 1
|
||||
// SMART_STEP_INTO_BY_INDEX: 4
|
||||
fun test() {}
|
||||
Reference in New Issue
Block a user