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 80d8b1bb78c..2c7f35028cd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt @@ -169,6 +169,12 @@ public class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() { } } + val whileParent = getParentOfType(false) + if (whileParent != null) { + // last statement in while + return (whileParent.body as? KtBlockExpression)?.statements?.lastOrNull()?.getLineNumber() == elementAt.getLineNumber() + } + return false } diff --git a/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out b/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out new file mode 100644 index 00000000000..db677b355a7 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/stepOverWhileWithInline.out @@ -0,0 +1,24 @@ +LineBreakpoint created at stepOverWhileWithInline.kt:5 +!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! stepOverWhileWithInline.StepOverWhileWithInlineKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +stepOverWhileWithInline.kt:5 +stepOverWhileWithInline.kt:7 +stepOverWhileWithInline.kt:8 +stepOverWhileWithInline.kt:9 +stepOverWhileWithInline.kt:30 +stepOverWhileWithInline.kt:9 +stepOverWhileWithInline.kt:7 +stepOverWhileWithInline.kt:13 +stepOverWhileWithInline.kt:14 +stepOverWhileWithInline.kt:15 +stepOverWhileWithInline.kt:13 +stepOverWhileWithInline.kt:19 +stepOverWhileWithInline.kt:20 +stepOverWhileWithInline.kt:21 +stepOverWhileWithInline.kt:24 +stepOverWhileWithInline.kt:25 +stepOverWhileWithInline.kt:26 +stepOverWhileWithInline.kt:27 +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 new file mode 100644 index 00000000000..a708b908cfa --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhileWithInline.kt @@ -0,0 +1,36 @@ +package stepOverWhileWithInline + +fun main(args: Array) { + //Breakpoint! + var prop = 0 + // inline on last line of while + while(prop < 1) { + prop++ + foo { test(1) } + } + + // inline call inside while + while(prop < 2) { + foo { test(1) } + prop++ + } + + do { + prop++ + foo { test(1) } + } while(prop < 3) + + do { + foo { test(1) } + prop++ + } while(prop < 4) +} + +inline fun foo(f: () -> Int): Int { + val a = 1 + return f() +} + +fun test(i: Int) = i + +// STEP_OVER: 41 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java index 9df446e1e18..76def806e21 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -396,6 +396,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhenWithInline.kt"); doStepOverTest(fileName); } + + @TestMetadata("stepOverWhileWithInline.kt") + public void testStepOverWhileWithInline() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverWhileWithInline.kt"); + doStepOverTest(fileName); + } } @TestMetadata("idea/testData/debugger/tinyApp/src/stepping/filters")