Debugger: Fix breakpoints and stepping for inline-only function lambda arguments (#KT-23064)

This commit is contained in:
Yan Zhulanow
2018-03-06 00:46:29 +03:00
parent ae37cc30a1
commit eec9c6bffa
16 changed files with 238 additions and 49 deletions
@@ -0,0 +1,49 @@
package inlineOnlyLambdas
class Test
fun test() {}
fun main(args: Array<String>) {
val data = Test()
//Breakpoint! (lambdaOrdinal = 1)
data.onelinerApply { test() }
//Breakpoint! (lambdaOrdinal = 1)
data.multiLineApply { test() }
//Breakpoint! (lambdaOrdinal = 1)
data.onelinerApply2 { test() }
//Breakpoint! (lambdaOrdinal = 1)
data.multiLineApply2 { test() }
//Breakpoint!
data.withoutLambdaParams()
}
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly
inline fun <T> T.withoutLambdaParams(): T {
return this
}
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly
inline fun <T> T.onelinerApply(block: T.() -> Unit): T { block(); return this }
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly
inline fun <T> T.multiLineApply(block: T.() -> Unit): T {
block();
return this
}
inline fun <T> T.onelinerApply2(block: T.() -> Unit): T { block(); return this }
inline fun <T> T.multiLineApply2(block: T.() -> Unit): T {
block();
return this
}
// RESUME: 5
@@ -0,0 +1,15 @@
LineBreakpoint created at inlineOnlyLambdas.kt:10 lambdaOrdinal = 1
LineBreakpoint created at inlineOnlyLambdas.kt:13 lambdaOrdinal = 1
LineBreakpoint created at inlineOnlyLambdas.kt:16 lambdaOrdinal = 1
LineBreakpoint created at inlineOnlyLambdas.kt:19 lambdaOrdinal = 1
LineBreakpoint created at inlineOnlyLambdas.kt:22
Run Java
Connected to the target VM
inlineOnlyLambdas.kt:10
inlineOnlyLambdas.kt:13
inlineOnlyLambdas.kt:16
inlineOnlyLambdas.kt:19
inlineOnlyLambdas.kt:22
Disconnected from the target VM
Process finished with exit code 0
@@ -0,0 +1,38 @@
package inlineOnlyLambdasStepping
class Test
fun test() {}
fun main(args: Array<String>) {
val data = Test()
// STEP_OVER: 2
//Breakpoint! (lambdaOrdinal = 1)
data.onelinerApply { test() }
data.multiLineApply { test() }
// STEP_OVER: 3
//Breakpoint! (lambdaOrdinal = 1)
data.onelinerApply2 { test() }
data.multiLineApply2 { test() }
}
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly
inline fun <T> T.onelinerApply(block: T.() -> Unit): T { block(); return this }
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.internal.InlineOnly
inline fun <T> T.multiLineApply(block: T.() -> Unit): T {
block();
return this
}
inline fun <T> T.onelinerApply2(block: T.() -> Unit): T { block(); return this }
inline fun <T> T.multiLineApply2(block: T.() -> Unit): T {
block();
return this
}
@@ -0,0 +1,13 @@
LineBreakpoint created at inlineOnlyLambdasStepping.kt:11 lambdaOrdinal = 1
LineBreakpoint created at inlineOnlyLambdasStepping.kt:17 lambdaOrdinal = 1
Run Java
Connected to the target VM
inlineOnlyLambdasStepping.kt:11
inlineOnlyLambdasStepping.kt:13
inlineOnlyLambdasStepping.kt:17
inlineOnlyLambdasStepping.kt:17
inlineOnlyLambdasStepping.kt:19
inlineOnlyLambdasStepping.kt:20
Disconnected from the target VM
Process finished with exit code 0
@@ -27,5 +27,5 @@ inline fun forEach(s: () -> Unit) {
}
}
// STEP_INTO: 9
// STEP_INTO: 15
// TRACING_FILTERS_ENABLED: false
@@ -3,14 +3,20 @@ Run Java
Connected to the target VM
inlineOnly.kt:5
inlineOnly.kt:7
inlineOnly.kt:13
inlineOnly.kt:14
inlineOnly.kt:25
inlineOnly.kt:26
inlineOnly.kt:7
inlineOnly.kt:13
inlineOnly.kt:14
inlineOnly.kt:7
inlineOnly.kt:9
PrintStream.!EXT!
inlineOnly.kt:25
inlineOnly.kt:26
inlineOnly.kt:7
inlineOnly.kt:13
inlineOnly.kt:14
inlineOnly.kt:7
inlineOnly.kt:25
inlineOnly.kt:28
Disconnected from the target VM
Process finished with exit code 0