Fix breakpoints in inline function with generic crossinline argument

#KT-10673 Fixed
This commit is contained in:
Natalia Ukhorskaya
2016-01-29 12:37:52 +03:00
parent b19d32e4f2
commit 4f76207a27
3 changed files with 78 additions and 56 deletions
@@ -559,7 +559,7 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq
val call = (it.element as? KtExpression)?.let { KtPsiUtil.getParentCallIfPresent(it) } val call = (it.element as? KtExpression)?.let { KtPsiUtil.getParentCallIfPresent(it) }
if (call != null) { if (call != null) {
val resolvedCall = call.getResolvedCall(context) val resolvedCall = call.getResolvedCall(context)
val argument = resolvedCall?.valueArguments?.get(parameter) val argument = resolvedCall?.valueArguments?.entries?.firstOrNull { it.key.original == parameter }?.value
if (argument != null) { if (argument != null) {
val argumentExpression = getArgumentExpression(argument.arguments.first()) val argumentExpression = getArgumentExpression(argument.arguments.first())
if (argumentExpression is KtFunction) { if (argumentExpression is KtFunction) {
+58 -54
View File
@@ -1,59 +1,63 @@
LineBreakpoint created at crossinlineLiteral.kt:12 LineBreakpoint created at crossinlineLiteral.kt:13
LineBreakpoint created at crossinlineLiteral.kt:17 LineBreakpoint created at crossinlineLiteral.kt:18
LineBreakpoint created at crossinlineLiteral.kt:22 LineBreakpoint created at crossinlineLiteral.kt:23
LineBreakpoint created at crossinlineLiteral.kt:27 LineBreakpoint created at crossinlineLiteral.kt:28
LineBreakpoint created at crossinlineLiteral.kt:32 LineBreakpoint created at crossinlineLiteral.kt:33
LineBreakpoint created at crossinlineLiteral.kt:37 LineBreakpoint created at crossinlineLiteral.kt:38
LineBreakpoint created at crossinlineLiteral.kt:42 LineBreakpoint created at crossinlineLiteral.kt:43
LineBreakpoint created at crossinlineLiteral.kt:45 LineBreakpoint created at crossinlineLiteral.kt:46
LineBreakpoint created at crossinlineLiteral.kt:50 LineBreakpoint created at crossinlineLiteral.kt:51
LineBreakpoint created at crossinlineLiteral.kt:58 LineBreakpoint created at crossinlineLiteral.kt:59
LineBreakpoint created at crossinlineLiteral.kt:66 LineBreakpoint created at crossinlineLiteral.kt:67
LineBreakpoint created at crossinlineLiteral.kt:74 LineBreakpoint created at crossinlineLiteral.kt:75
LineBreakpoint created at crossinlineLiteral.kt:80 LineBreakpoint created at crossinlineLiteral.kt:81
LineBreakpoint created at crossinlineLiteral.kt:89 LineBreakpoint created at crossinlineLiteral.kt:90
LineBreakpoint created at crossinlineLiteral.kt:97 LineBreakpoint created at crossinlineLiteral.kt:98
LineBreakpoint created at crossinlineLiteral.kt:102 LineBreakpoint created at crossinlineLiteral.kt:103
LineBreakpoint created at crossinlineLiteral.kt:108 LineBreakpoint created at crossinlineLiteral.kt:109
LineBreakpoint created at crossinlineLiteral.kt:120 LineBreakpoint created at crossinlineLiteral.kt:121
LineBreakpoint created at crossinlineLiteral.kt:127 LineBreakpoint created at crossinlineLiteral.kt:128
LineBreakpoint created at crossinlineLiteral.kt:137 LineBreakpoint created at crossinlineLiteral.kt:138
LineBreakpoint created at crossinlineLiteral.kt:154
LineBreakpoint created at crossinlineLiteral.kt:157
!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 !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' Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
crossinlineLiteral.kt:74 crossinlineLiteral.kt:75
crossinlineLiteral.kt:12 crossinlineLiteral.kt:13
crossinlineLiteral.kt:74 crossinlineLiteral.kt:75
crossinlineLiteral.kt:17 crossinlineLiteral.kt:18
crossinlineLiteral.kt:80 crossinlineLiteral.kt:81
crossinlineLiteral.kt:22 crossinlineLiteral.kt:23
crossinlineLiteral.kt:80 crossinlineLiteral.kt:81
crossinlineLiteral.kt:27 crossinlineLiteral.kt:28
crossinlineLiteral.kt:89 crossinlineLiteral.kt:90
crossinlineLiteral.kt:32 crossinlineLiteral.kt:33
crossinlineLiteral.kt:97 crossinlineLiteral.kt:98
crossinlineLiteral.kt:37 crossinlineLiteral.kt:38
crossinlineLiteral.kt:102 crossinlineLiteral.kt:103
crossinlineLiteral.kt:37 crossinlineLiteral.kt:38
crossinlineLiteral.kt:108 crossinlineLiteral.kt:109
crossinlineLiteral.kt:37 crossinlineLiteral.kt:38
crossinlineLiteral.kt:120 crossinlineLiteral.kt:121
crossinlineLiteral.kt:42 crossinlineLiteral.kt:43
crossinlineLiteral.kt:127 crossinlineLiteral.kt:128
crossinlineLiteral.kt:45 crossinlineLiteral.kt:46
crossinlineLiteral.kt:137 crossinlineLiteral.kt:138
crossinlineLiteral.kt:50 crossinlineLiteral.kt:51
crossinlineLiteral.kt:97 crossinlineLiteral.kt:98
crossinlineLiteral.kt:58 crossinlineLiteral.kt:59
crossinlineLiteral.kt:102 crossinlineLiteral.kt:103
crossinlineLiteral.kt:58 crossinlineLiteral.kt:59
crossinlineLiteral.kt:108 crossinlineLiteral.kt:109
crossinlineLiteral.kt:58 crossinlineLiteral.kt:59
crossinlineLiteral.kt:97 crossinlineLiteral.kt:98
crossinlineLiteral.kt:66 crossinlineLiteral.kt:67
crossinlineLiteral.kt:102 crossinlineLiteral.kt:103
crossinlineLiteral.kt:66 crossinlineLiteral.kt:67
crossinlineLiteral.kt:108 crossinlineLiteral.kt:109
crossinlineLiteral.kt:66 crossinlineLiteral.kt:67
crossinlineLiteral.kt:154
crossinlineLiteral.kt:157
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
Process finished with exit code 0 Process finished with exit code 0
@@ -4,6 +4,7 @@ fun main(args: Array<String>) {
callFromTopLevel() callFromTopLevel()
A().callFromClass() A().callFromClass()
A.callFromCompanion() A.callFromCompanion()
genericCall()
} }
fun callFromTopLevel() { fun callFromTopLevel() {
@@ -140,4 +141,21 @@ inline fun lambdaInInlinedLambdaCall(crossinline f: (Int) -> Unit) {
} }
} }
// RESUME: 35 fun genericCall() {
tick(0) { }
}
fun <T> back(f: () -> T) {
f()
}
inline fun <V> tick(p: Int, crossinline f: (Int) -> V) {
//Breakpoint!
f(p)
back {
//Breakpoint!
f(p)
}
}
// RESUME: 37