From 4f76207a27d5353a90d6d261996cc4b788e03c7a Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 29 Jan 2016 12:37:52 +0300 Subject: [PATCH] Fix breakpoints in inline function with generic crossinline argument #KT-10673 Fixed --- .../idea/debugger/KotlinPositionManager.kt | 2 +- .../tinyApp/outs/crossinlineLiteral.out | 112 +++++++++--------- .../src/stepping/custom/crossinlineLiteral.kt | 20 +++- 3 files changed, 78 insertions(+), 56 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt index 1b7964fbcaa..26554531c37 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt @@ -559,7 +559,7 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq val call = (it.element as? KtExpression)?.let { KtPsiUtil.getParentCallIfPresent(it) } if (call != null) { 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) { val argumentExpression = getArgumentExpression(argument.arguments.first()) if (argumentExpression is KtFunction) { diff --git a/idea/testData/debugger/tinyApp/outs/crossinlineLiteral.out b/idea/testData/debugger/tinyApp/outs/crossinlineLiteral.out index a542ae7d73b..13e678bf960 100644 --- a/idea/testData/debugger/tinyApp/outs/crossinlineLiteral.out +++ b/idea/testData/debugger/tinyApp/outs/crossinlineLiteral.out @@ -1,59 +1,63 @@ -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:37 -LineBreakpoint created at crossinlineLiteral.kt:42 -LineBreakpoint created at crossinlineLiteral.kt:45 -LineBreakpoint created at crossinlineLiteral.kt:50 -LineBreakpoint created at crossinlineLiteral.kt:58 -LineBreakpoint created at crossinlineLiteral.kt:66 -LineBreakpoint created at crossinlineLiteral.kt:74 -LineBreakpoint created at crossinlineLiteral.kt:80 -LineBreakpoint created at crossinlineLiteral.kt:89 -LineBreakpoint created at crossinlineLiteral.kt:97 -LineBreakpoint created at crossinlineLiteral.kt:102 -LineBreakpoint created at crossinlineLiteral.kt:108 -LineBreakpoint created at crossinlineLiteral.kt:120 -LineBreakpoint created at crossinlineLiteral.kt:127 -LineBreakpoint created at crossinlineLiteral.kt:137 +LineBreakpoint created at crossinlineLiteral.kt:13 +LineBreakpoint created at crossinlineLiteral.kt:18 +LineBreakpoint created at crossinlineLiteral.kt:23 +LineBreakpoint created at crossinlineLiteral.kt:28 +LineBreakpoint created at crossinlineLiteral.kt:33 +LineBreakpoint created at crossinlineLiteral.kt:38 +LineBreakpoint created at crossinlineLiteral.kt:43 +LineBreakpoint created at crossinlineLiteral.kt:46 +LineBreakpoint created at crossinlineLiteral.kt:51 +LineBreakpoint created at crossinlineLiteral.kt:59 +LineBreakpoint created at crossinlineLiteral.kt:67 +LineBreakpoint created at crossinlineLiteral.kt:75 +LineBreakpoint created at crossinlineLiteral.kt:81 +LineBreakpoint created at crossinlineLiteral.kt:90 +LineBreakpoint created at crossinlineLiteral.kt:98 +LineBreakpoint created at crossinlineLiteral.kt:103 +LineBreakpoint created at crossinlineLiteral.kt:109 +LineBreakpoint created at crossinlineLiteral.kt:121 +LineBreakpoint created at crossinlineLiteral.kt:128 +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 Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' -crossinlineLiteral.kt:74 -crossinlineLiteral.kt:12 -crossinlineLiteral.kt:74 -crossinlineLiteral.kt:17 -crossinlineLiteral.kt:80 -crossinlineLiteral.kt:22 -crossinlineLiteral.kt:80 -crossinlineLiteral.kt:27 -crossinlineLiteral.kt:89 -crossinlineLiteral.kt:32 -crossinlineLiteral.kt:97 -crossinlineLiteral.kt:37 -crossinlineLiteral.kt:102 -crossinlineLiteral.kt:37 -crossinlineLiteral.kt:108 -crossinlineLiteral.kt:37 -crossinlineLiteral.kt:120 -crossinlineLiteral.kt:42 -crossinlineLiteral.kt:127 -crossinlineLiteral.kt:45 -crossinlineLiteral.kt:137 -crossinlineLiteral.kt:50 -crossinlineLiteral.kt:97 -crossinlineLiteral.kt:58 -crossinlineLiteral.kt:102 -crossinlineLiteral.kt:58 -crossinlineLiteral.kt:108 -crossinlineLiteral.kt:58 -crossinlineLiteral.kt:97 -crossinlineLiteral.kt:66 -crossinlineLiteral.kt:102 -crossinlineLiteral.kt:66 -crossinlineLiteral.kt:108 -crossinlineLiteral.kt:66 +crossinlineLiteral.kt:75 +crossinlineLiteral.kt:13 +crossinlineLiteral.kt:75 +crossinlineLiteral.kt:18 +crossinlineLiteral.kt:81 +crossinlineLiteral.kt:23 +crossinlineLiteral.kt:81 +crossinlineLiteral.kt:28 +crossinlineLiteral.kt:90 +crossinlineLiteral.kt:33 +crossinlineLiteral.kt:98 +crossinlineLiteral.kt:38 +crossinlineLiteral.kt:103 +crossinlineLiteral.kt:38 +crossinlineLiteral.kt:109 +crossinlineLiteral.kt:38 +crossinlineLiteral.kt:121 +crossinlineLiteral.kt:43 +crossinlineLiteral.kt:128 +crossinlineLiteral.kt:46 +crossinlineLiteral.kt:138 +crossinlineLiteral.kt:51 +crossinlineLiteral.kt:98 +crossinlineLiteral.kt:59 +crossinlineLiteral.kt:103 +crossinlineLiteral.kt:59 +crossinlineLiteral.kt:109 +crossinlineLiteral.kt:59 +crossinlineLiteral.kt:98 +crossinlineLiteral.kt:67 +crossinlineLiteral.kt:103 +crossinlineLiteral.kt:67 +crossinlineLiteral.kt:109 +crossinlineLiteral.kt:67 +crossinlineLiteral.kt:154 +crossinlineLiteral.kt:157 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/crossinlineLiteral.kt b/idea/testData/debugger/tinyApp/src/stepping/custom/crossinlineLiteral.kt index faf0ed539a4..2956290df09 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/custom/crossinlineLiteral.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/crossinlineLiteral.kt @@ -4,6 +4,7 @@ fun main(args: Array) { callFromTopLevel() A().callFromClass() A.callFromCompanion() + genericCall() } fun callFromTopLevel() { @@ -140,4 +141,21 @@ inline fun lambdaInInlinedLambdaCall(crossinline f: (Int) -> Unit) { } } -// RESUME: 35 \ No newline at end of file +fun genericCall() { + tick(0) { } +} + +fun back(f: () -> T) { + f() +} + +inline fun tick(p: Int, crossinline f: (Int) -> V) { + //Breakpoint! + f(p) + back { + //Breakpoint! + f(p) + } +} + +// RESUME: 37 \ No newline at end of file