From 06b72e608e39253a4ac0e65b720acea1072b9bd6 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 12 Oct 2016 01:08:01 +0300 Subject: [PATCH] Do an ordinal step over while stepping over inlined calls in dex (cherry picked from commit d741895) --- .../stepping/DebuggerSteppingHelper.java | 9 ++++ .../tinyApp/outs/inlineInIfFalseDex.out | 10 +++++ .../tinyApp/outs/inlineInIfTrueDex.out | 10 +++++ .../soInlineAnonymousFunctionArgumentDex.out | 14 +++++++ ...soInlineCallInLastStatementInInlineDex.out | 12 ++++++ ...nLastStatementInInlineFunctionArgument.out | 9 ++++ ...stStatementInInlineFunctionArgumentDex.out | 10 +++++ .../outs/soInlineWhileConditionDex.out | 18 ++++++++ .../stepping/stepOver/inlineInIfFalseDex.kt | 18 ++++++++ .../stepping/stepOver/inlineInIfTrueDex.kt | 17 ++++++++ .../soInlineAnonymousFunctionArgumentDex.kt | 20 +++++++++ .../soInlineCallInLastStatementInInlineDex.kt | 20 +++++++++ ...InLastStatementInInlineFunctionArgument.kt | 22 ++++++++++ ...astStatementInInlineFunctionArgumentDex.kt | 22 ++++++++++ .../stepOver/soInlineWhileConditionDex.kt | 23 ++++++++++ .../debugger/KotlinSteppingTestGenerated.java | 42 +++++++++++++++++++ 16 files changed, 276 insertions(+) create mode 100644 idea/testData/debugger/tinyApp/outs/inlineInIfFalseDex.out create mode 100644 idea/testData/debugger/tinyApp/outs/inlineInIfTrueDex.out create mode 100644 idea/testData/debugger/tinyApp/outs/soInlineAnonymousFunctionArgumentDex.out create mode 100644 idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineDex.out create mode 100644 idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineFunctionArgument.out create mode 100644 idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineFunctionArgumentDex.out create mode 100644 idea/testData/debugger/tinyApp/outs/soInlineWhileConditionDex.out create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfFalseDex.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfTrueDex.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineAnonymousFunctionArgumentDex.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt create mode 100644 idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineWhileConditionDex.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/DebuggerSteppingHelper.java b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/DebuggerSteppingHelper.java index 744bc73e35b..5e9ce58d1a4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/DebuggerSteppingHelper.java +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/DebuggerSteppingHelper.java @@ -35,6 +35,7 @@ import com.sun.jdi.request.EventRequestManager; import com.sun.jdi.request.StepRequest; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.idea.debugger.NoStrataPositionManagerHelperKt; import org.jetbrains.kotlin.psi.KtFunctionLiteral; import org.jetbrains.kotlin.psi.KtNamedFunction; @@ -50,9 +51,17 @@ public class DebuggerSteppingHelper { final KotlinSteppingCommandProvider.KotlinSourcePosition kotlinSourcePosition ) { final DebugProcessImpl debugProcess = suspendContext.getDebugProcess(); + return debugProcess.new ResumeCommand(suspendContext) { @Override public void contextAction() { + // In DEX there's no strata for trying to understand what lines were inlined and no local variables attributes are + // preserved that can be used for fine tuning. So do an ordinal 'step over' instead. + if (NoStrataPositionManagerHelperKt.isDexDebug(suspendContext.getDebugProcess())) { + debugProcess.createStepOverCommand(suspendContext, true).contextAction(); + return; + } + try { StackFrameProxyImpl frameProxy = suspendContext.getFrameProxy(); if (frameProxy != null) { diff --git a/idea/testData/debugger/tinyApp/outs/inlineInIfFalseDex.out b/idea/testData/debugger/tinyApp/outs/inlineInIfFalseDex.out new file mode 100644 index 00000000000..d5573edbe46 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/inlineInIfFalseDex.out @@ -0,0 +1,10 @@ +LineBreakpoint created at inlineInIfFalseDex.kt:6 +!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! inlineInIfFalseDex.InlineInIfFalseDexKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +inlineInIfFalseDex.kt:6 +inlineInIfFalseDex.kt:15 +inlineInIfFalseDex.kt:9 +inlineInIfFalseDex.kt:10 +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/outs/inlineInIfTrueDex.out b/idea/testData/debugger/tinyApp/outs/inlineInIfTrueDex.out new file mode 100644 index 00000000000..818f260cb55 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/inlineInIfTrueDex.out @@ -0,0 +1,10 @@ +LineBreakpoint created at inlineInIfTrueDex.kt:6 +!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! inlineInIfTrueDex.InlineInIfTrueDexKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +inlineInIfTrueDex.kt:6 +inlineInIfTrueDex.kt:14 +inlineInIfTrueDex.kt:7 +inlineInIfTrueDex.kt:9 +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/outs/soInlineAnonymousFunctionArgumentDex.out b/idea/testData/debugger/tinyApp/outs/soInlineAnonymousFunctionArgumentDex.out new file mode 100644 index 00000000000..1e79e42ce9b --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/soInlineAnonymousFunctionArgumentDex.out @@ -0,0 +1,14 @@ +LineBreakpoint created at soInlineAnonymousFunctionArgumentDex.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! soInlineAnonymousFunctionArgumentDex.SoInlineAnonymousFunctionArgumentDexKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +soInlineAnonymousFunctionArgumentDex.kt:5 +soInlineAnonymousFunctionArgumentDex.kt:7 +soInlineAnonymousFunctionArgumentDex.kt:15 +soInlineAnonymousFunctionArgumentDex.kt:8 +soInlineAnonymousFunctionArgumentDex.kt:16 +soInlineAnonymousFunctionArgumentDex.kt:15 +soInlineAnonymousFunctionArgumentDex.kt:11 +soInlineAnonymousFunctionArgumentDex.kt:16 +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/outs/soInlineCallInLastStatementInInlineDex.out b/idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineDex.out new file mode 100644 index 00000000000..2172f82ed8f --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineDex.out @@ -0,0 +1,12 @@ +LineBreakpoint created at soInlineCallInLastStatementInInlineDex.kt:10 +!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! soInlineCallInLastStatementInInlineDex.SoInlineCallInLastStatementInInlineDexKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +soInlineCallInLastStatementInInlineDex.kt:10 +soInlineCallInLastStatementInInlineDex.kt:11 +soInlineCallInLastStatementInInlineDex.kt:15 +soInlineCallInLastStatementInInlineDex.kt:11 +soInlineCallInLastStatementInInlineDex.kt:16 +soInlineCallInLastStatementInInlineDex.kt:6 +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/outs/soInlineCallInLastStatementInInlineFunctionArgument.out b/idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineFunctionArgument.out new file mode 100644 index 00000000000..255f4082d07 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineFunctionArgument.out @@ -0,0 +1,9 @@ +LineBreakpoint created at soInlineCallInLastStatementInInlineFunctionArgument.kt:7 +!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! soInlineCallInLastStatementInInlineFunctionArgument.SoInlineCallInLastStatementInInlineFunctionArgumentKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +soInlineCallInLastStatementInInlineFunctionArgument.kt:7 +soInlineCallInLastStatementInInlineFunctionArgument.kt:8 +soInlineCallInLastStatementInInlineFunctionArgument.kt:9 +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/outs/soInlineCallInLastStatementInInlineFunctionArgumentDex.out b/idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineFunctionArgumentDex.out new file mode 100644 index 00000000000..a2244b58f55 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/soInlineCallInLastStatementInInlineFunctionArgumentDex.out @@ -0,0 +1,10 @@ +LineBreakpoint created at soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:7 +!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! soInlineCallInLastStatementInInlineFunctionArgumentDex.SoInlineCallInLastStatementInInlineFunctionArgumentDexKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:7 +soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:17 +soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:18 +soInlineCallInLastStatementInInlineFunctionArgumentDex.kt:14 +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/outs/soInlineWhileConditionDex.out b/idea/testData/debugger/tinyApp/outs/soInlineWhileConditionDex.out new file mode 100644 index 00000000000..677faa4083c --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/soInlineWhileConditionDex.out @@ -0,0 +1,18 @@ +LineBreakpoint created at soInlineWhileConditionDex.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! soInlineWhileConditionDex.SoInlineWhileConditionDexKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +soInlineWhileConditionDex.kt:5 +soInlineWhileConditionDex.kt:7 +soInlineWhileConditionDex.kt:18 +soInlineWhileConditionDex.kt:7 +soInlineWhileConditionDex.kt:8 +soInlineWhileConditionDex.kt:7 +soInlineWhileConditionDex.kt:18 +soInlineWhileConditionDex.kt:7 +soInlineWhileConditionDex.kt:12 +soInlineWhileConditionDex.kt:18 +soInlineWhileConditionDex.kt:12 +soInlineWhileConditionDex.kt:15 +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/inlineInIfFalseDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfFalseDex.kt new file mode 100644 index 00000000000..4672db09ac8 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfFalseDex.kt @@ -0,0 +1,18 @@ +package inlineInIfFalseDex + +fun main(args: Array) { + val bar = "" + //Breakpoint! + if (inlineCall { true }) { + foo() + } + foo() +} + +fun foo() {} + +inline fun inlineCall(predicate: (String?) -> Boolean): Boolean { + return false +} + +// STEP_OVER: 8 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfTrueDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfTrueDex.kt new file mode 100644 index 00000000000..0b6e6cd3367 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfTrueDex.kt @@ -0,0 +1,17 @@ +package inlineInIfTrueDex + +fun main(args: Array) { + val bar = "" + //Breakpoint! + if (inlineCall { true }) { + foo() + } +} + +fun foo() {} + +inline fun inlineCall(predicate: (String?) -> Boolean): Boolean { + return true +} + +// STEP_OVER: 6 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineAnonymousFunctionArgumentDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineAnonymousFunctionArgumentDex.kt new file mode 100644 index 00000000000..db8993d4365 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineAnonymousFunctionArgumentDex.kt @@ -0,0 +1,20 @@ +package soInlineAnonymousFunctionArgumentDex + +fun main(args: Array) { + //Breakpoint! + val b = 1 + + foo( + fun (){ test(1) } + ) + + foo(fun (){ test(1) }) +} + +inline fun foo(f: () -> Unit) { + f() +} + +fun test(i: Int) = 1 + +// STEP_OVER: 10 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.kt new file mode 100644 index 00000000000..b5e76807100 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.kt @@ -0,0 +1,20 @@ +package soInlineCallInLastStatementInInlineDex + +fun main(args: Array) { + bar() + nop() +} + +inline fun bar() { + //Breakpoint! + nop() + foo { 42 } +} + +inline fun foo(f: () -> Unit) { + f() +} + +fun nop() {} + +// STEP_OVER: 8 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.kt new file mode 100644 index 00000000000..37b665158fd --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.kt @@ -0,0 +1,22 @@ +package soInlineCallInLastStatementInInlineFunctionArgument + +fun main(args: Array) { + bar { + nop() + //Breakpoint! + foo() + } +} + +inline fun bar(f: () -> Unit) { + nop() + f() +} + +inline fun foo() { + nop() +} + +fun nop() {} + +// STEP_OVER: 3 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt new file mode 100644 index 00000000000..0abd108a9ae --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt @@ -0,0 +1,22 @@ +package soInlineCallInLastStatementInInlineFunctionArgumentDex + +fun main(args: Array) { + bar { + nop() + //Breakpoint! + foo() + } +} + +inline fun bar(f: () -> Unit) { + nop() + f() +} + +inline fun foo() { + nop() +} + +fun nop() {} + +// STEP_OVER: 5 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineWhileConditionDex.kt b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineWhileConditionDex.kt new file mode 100644 index 00000000000..a97cbfc2dda --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineWhileConditionDex.kt @@ -0,0 +1,23 @@ +package soInlineWhileConditionDex + +fun main(args: Array) { + //Breakpoint! + var i = 1 + // inline in while condition (true) + while (id { i < 2 }) { + i++ + } + + // inline in while condition (false) + while (id { false }) { + bar() + } +} + +inline fun id(f: () -> Boolean): Boolean { + return f() +} + +fun bar() {} + +// STEP_OVER: 12 \ 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 90ee01c8287..f9c485df8e2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -421,12 +421,24 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doStepOverTest(fileName); } + @TestMetadata("inlineInIfFalseDex.kt") + public void testInlineInIfFalseDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfFalseDex.kt"); + doStepOverTest(fileName); + } + @TestMetadata("inlineInIfTrue.kt") public void testInlineInIfTrue() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfTrue.kt"); doStepOverTest(fileName); } + @TestMetadata("inlineInIfTrueDex.kt") + public void testInlineInIfTrueDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInIfTrueDex.kt"); + doStepOverTest(fileName); + } + @TestMetadata("inlineInObjectDex.kt") public void testInlineInObjectDex() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/inlineInObjectDex.kt"); @@ -451,12 +463,36 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doStepOverTest(fileName); } + @TestMetadata("soInlineAnonymousFunctionArgumentDex.kt") + public void testSoInlineAnonymousFunctionArgumentDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineAnonymousFunctionArgumentDex.kt"); + doStepOverTest(fileName); + } + @TestMetadata("soInlineCallInLastStatementInInline.kt") public void testSoInlineCallInLastStatementInInline() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInline.kt"); doStepOverTest(fileName); } + @TestMetadata("soInlineCallInLastStatementInInlineDex.kt") + public void testSoInlineCallInLastStatementInInlineDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineDex.kt"); + doStepOverTest(fileName); + } + + @TestMetadata("soInlineCallInLastStatementInInlineFunctionArgument.kt") + public void testSoInlineCallInLastStatementInInlineFunctionArgument() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgument.kt"); + doStepOverTest(fileName); + } + + @TestMetadata("soInlineCallInLastStatementInInlineFunctionArgumentDex.kt") + public void testSoInlineCallInLastStatementInInlineFunctionArgumentDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineFunctionArgumentDex.kt"); + doStepOverTest(fileName); + } + @TestMetadata("soInlineCallInLastStatementInInlineInInline.kt") public void testSoInlineCallInLastStatementInInlineInInline() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineCallInLastStatementInInlineInInline.kt"); @@ -505,6 +541,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { doStepOverTest(fileName); } + @TestMetadata("soInlineWhileConditionDex.kt") + public void testSoInlineWhileConditionDex() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soInlineWhileConditionDex.kt"); + doStepOverTest(fileName); + } + @TestMetadata("soReifiedInlineIfConditionFalse.kt") public void testSoReifiedInlineIfConditionFalse() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/soReifiedInlineIfConditionFalse.kt");