Implement new stepping for suspend functions

This commit is contained in:
Yan Zhulanow
2020-01-16 19:55:40 +09:00
parent 2044ece335
commit 69965eaa5c
21 changed files with 390 additions and 201 deletions
@@ -90,8 +90,10 @@ abstract class KotlinDescriptorTestCaseWithStepping : KotlinDescriptorTestCase()
}
private fun SuspendContextImpl.doStepOver(ignoreBreakpoints: Boolean = false) {
val stepOverCommand = runReadAction { commandProvider.getStepOverCommand(this, ignoreBreakpoints, debuggerContext) }
?: dp.createStepOverCommand(this, ignoreBreakpoints)
val stepOverCommand = runReadAction {
val sourcePosition = debuggerContext.sourcePosition
commandProvider.getStepOverCommand(this, ignoreBreakpoints, sourcePosition)
} ?: dp.createStepOverCommand(this, ignoreBreakpoints)
dp.managerThread.schedule(stepOverCommand)
}
@@ -931,6 +931,39 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest {
public void testWhenWithoutExpression() throws Exception {
runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/whenWithoutExpression.kt");
}
@TestMetadata("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/coroutines")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Coroutines extends AbstractKotlinSteppingTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doStepOverTest, this, testDataFilePath);
}
public void testAllFilesPresentInCoroutines() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/coroutines"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@TestMetadata("sequenceNested.kt")
public void testSequenceNested() throws Exception {
runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/coroutines/sequenceNested.kt");
}
@TestMetadata("sequenceNested2.kt")
public void testSequenceNested2() throws Exception {
runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/coroutines/sequenceNested2.kt");
}
@TestMetadata("sequenceSimple.kt")
public void testSequenceSimple() throws Exception {
runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/coroutines/sequenceSimple.kt");
}
@TestMetadata("sequenceTake2.kt")
public void testSequenceTake2() throws Exception {
runTest("idea/jvm-debugger/jvm-debugger-test/testData/stepping/stepOver/coroutines/sequenceTake2.kt");
}
}
}
@TestMetadata("idea/jvm-debugger/jvm-debugger-test/testData/stepping/filters")
@@ -0,0 +1,26 @@
package test
fun main() {
val seq = sequence {
//Breakpoint!
yield(
sequence {
yield(1)
yield(2)
yield(3)
}
)
yield(
sequence {
yield(4)
yield(5)
yield(6)
}
)
}
seq.map { it.toList() }.flatten().toList()
}
// STEP_OVER: 10
@@ -0,0 +1,15 @@
LineBreakpoint created at sequenceNested.kt:6
Run Java
Connected to the target VM
sequenceNested.kt:6
sequenceNested.kt:7
sequenceNested.kt:6
sequenceNested.kt:14
sequenceNested.kt:15
sequenceNested.kt:14
sequenceNested.kt:21
sequenceNested.kt:23
sequenceNested.kt:24
Disconnected from the target VM
Process finished with exit code 0
@@ -0,0 +1,26 @@
package test
fun main() {
val seq = sequence {
yield(
sequence {
//Breakpoint!
yield(1)
yield(2)
yield(3)
}
)
yield(
sequence {
yield(4)
yield(5)
yield(6)
}
)
}
seq.map { it.toList() }.flatten().toList()
}
// STEP_OVER: 10
@@ -0,0 +1,13 @@
LineBreakpoint created at sequenceNested2.kt:8
Run Java
Connected to the target VM
sequenceNested2.kt:8
sequenceNested2.kt:9
sequenceNested2.kt:10
sequenceNested2.kt:11
sequenceNested2.kt:23
sequenceNested2.kt:23
sequenceNested2.kt:24
Disconnected from the target VM
Process finished with exit code 0
@@ -0,0 +1,14 @@
package test
fun main() {
val seq = sequence {
//Breakpoint!
yield(1)
yield(2)
yield(3)
}
seq.toList()
}
// STEP_OVER: 4
@@ -0,0 +1,11 @@
LineBreakpoint created at sequenceSimple.kt:6
Run Java
Connected to the target VM
sequenceSimple.kt:6
sequenceSimple.kt:7
sequenceSimple.kt:8
sequenceSimple.kt:9
sequenceSimple.kt:11
Disconnected from the target VM
Process finished with exit code 0
@@ -0,0 +1,14 @@
package test
fun main() {
val seq = sequence {
//Breakpoint!
yield(1)
yield(2)
yield(3)
}
seq.take(2).toList()
}
// STEP_OVER: 4
@@ -0,0 +1,8 @@
LineBreakpoint created at sequenceTake2.kt:6
Run Java
Connected to the target VM
sequenceTake2.kt:6
sequenceTake2.kt:7
Disconnected from the target VM
Process finished with exit code 0