From e8f46f531572b2767b5a92fadb1bd6776abf5a40 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 15 Apr 2016 17:38:36 +0300 Subject: [PATCH] Debugger: 'Step Over' unexpectedly resume if condition of 'while' loop contains inline function call #KT-11932 Fixed --- .../stepping/KotlinSteppingCommandProvider.kt | 5 +++++ .../tinyApp/outs/stepOverWhileWithInline.out | 16 ++++++++++++++-- .../stepping/stepOver/stepOverWhileWithInline.kt | 11 +++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt index 53aa0702d8d..cc1481e2e37 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt @@ -186,6 +186,11 @@ class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() { val whileParent = getParentOfType(false) if (whileParent != null) { + // while (inlineFunCall()) {...} + if (whileParent.condition.contains(this)) { + return true + } + // last statement in while return (whileParent.body as? KtBlockExpression)?.statements?.lastOrNull()?.getLineNumber() == elementAt.getLineNumber() } diff --git a/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out b/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out index db677b355a7..092255b022e 100644 --- a/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out +++ b/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out @@ -5,7 +5,7 @@ stepOverWhileWithInline.kt:5 stepOverWhileWithInline.kt:7 stepOverWhileWithInline.kt:8 stepOverWhileWithInline.kt:9 -stepOverWhileWithInline.kt:30 +stepOverWhileWithInline.kt:41 stepOverWhileWithInline.kt:9 stepOverWhileWithInline.kt:7 stepOverWhileWithInline.kt:13 @@ -18,7 +18,19 @@ stepOverWhileWithInline.kt:21 stepOverWhileWithInline.kt:24 stepOverWhileWithInline.kt:25 stepOverWhileWithInline.kt:26 -stepOverWhileWithInline.kt:27 +stepOverWhileWithInline.kt:28 +stepOverWhileWithInline.kt:30 +stepOverWhileWithInline.kt:41 +stepOverWhileWithInline.kt:30 +stepOverWhileWithInline.kt:31 +stepOverWhileWithInline.kt:30 +stepOverWhileWithInline.kt:41 +stepOverWhileWithInline.kt:30 +stepOverWhileWithInline.kt:35 +stepOverWhileWithInline.kt:41 +stepOverWhileWithInline.kt:35 +stepOverWhileWithInline.kt:36 +stepOverWhileWithInline.kt:38 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/stepOver/stepOverWhileWithInline.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhileWithInline.kt index a708b908cfa..21b0d0e54db 100644 --- a/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhileWithInline.kt +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhileWithInline.kt @@ -24,6 +24,17 @@ fun main(args: Array) { foo { test(1) } prop++ } while(prop < 4) + + var i = 1 + // inline in while condition (true) + while(foo { test(i++) } == 1) { + prop++ + } + + // inline in while condition (false) + while(foo { test(2) } == 1) { + prop++ + } } inline fun foo(f: () -> Int): Int {