Support breakpoints for inline function with cross inline argument

This commit is contained in:
Natalia Ukhorskaya
2015-12-26 00:15:39 +03:00
parent c351293394
commit 36d154babf
4 changed files with 280 additions and 15 deletions
@@ -0,0 +1,39 @@
LineBreakpoint created at crossinlineLiteral.kt:12
LineBreakpoint created at crossinlineLiteral.kt:17
LineBreakpoint created at crossinlineLiteral.kt:22
LineBreakpoint created at crossinlineLiteral.kt:27
LineBreakpoint created at crossinlineLiteral.kt:32
LineBreakpoint created at crossinlineLiteral.kt:35
LineBreakpoint created at crossinlineLiteral.kt:40
LineBreakpoint created at crossinlineLiteral.kt:48
LineBreakpoint created at crossinlineLiteral.kt:56
LineBreakpoint created at crossinlineLiteral.kt:64
LineBreakpoint created at crossinlineLiteral.kt:70
LineBreakpoint created at crossinlineLiteral.kt:79
LineBreakpoint created at crossinlineLiteral.kt:87
LineBreakpoint created at crossinlineLiteral.kt:97
LineBreakpoint created at crossinlineLiteral.kt:104
LineBreakpoint created at crossinlineLiteral.kt:114
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! crossinlineLiteral.CrossinlineLiteralKt
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
crossinlineLiteral.kt:64
crossinlineLiteral.kt:12
crossinlineLiteral.kt:70
crossinlineLiteral.kt:17
crossinlineLiteral.kt:79
crossinlineLiteral.kt:22
crossinlineLiteral.kt:87
crossinlineLiteral.kt:27
crossinlineLiteral.kt:97
crossinlineLiteral.kt:32
crossinlineLiteral.kt:104
crossinlineLiteral.kt:35
crossinlineLiteral.kt:114
crossinlineLiteral.kt:40
crossinlineLiteral.kt:87
crossinlineLiteral.kt:48
crossinlineLiteral.kt:87
crossinlineLiteral.kt:56
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
Process finished with exit code 0
@@ -0,0 +1,120 @@
package crossinlineLiteral
fun main(args: Array<String>) {
callFromTopLevel()
A().callFromClass()
A.callFromCompanion()
}
fun callFromTopLevel() {
simpleCall {
//Breakpoint!
val a = 1
}
lambdaCall {
//Breakpoint!
val a = 1
}
inlinedLambdaCall {
//Breakpoint!
val a = 1
}
objectCall {
//Breakpoint!
val a = 1
}
multipleCrossInline({
//Breakpoint!
val a = 1
}, {
//Breakpoint!
val a = 1
})
lambdaInInlinedLambdaCall {
//Breakpoint!
val a = 1
}
}
class A {
fun callFromClass() {
objectCall {
//Breakpoint!
val a = 1
}
}
companion object {
fun callFromCompanion() {
objectCall {
//Breakpoint!
val a = 1
}
}
}
}
inline fun simpleCall(crossinline f: (Int) -> Unit) {
//Breakpoint!
f(1)
}
inline fun lambdaCall(crossinline f: (Int) -> Unit) {
val a = {
//Breakpoint!
f(1)
}
a.invoke()
}
inline fun inlinedLambdaCall(crossinline f: (Int) -> Unit) {
run {
//Breakpoint!
f(1)
}
}
inline fun objectCall(crossinline f: (Int) -> Unit) {
val a = object {
fun objFun() {
//Breakpoint!
f(1)
}
}
a.objFun()
}
inline fun multipleCrossInline(crossinline f1: (Int) -> Unit, crossinline f2: (Int) -> Unit) {
val a1 = {
//Breakpoint!
f1(1)
}
a1.invoke()
val a2 = {
//Breakpoint!
f2(1)
}
a2.invoke()
}
inline fun lambdaInInlinedLambdaCall(crossinline f: (Int) -> Unit) {
run {
{
//Breakpoint!
f(1)
}()
}
}
// RESUME: 17