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 2223c346598..98c840e3089 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt @@ -19,10 +19,12 @@ package org.jetbrains.kotlin.idea.debugger.stepping import com.intellij.debugger.SourcePosition import com.intellij.debugger.engine.DebugProcessImpl import com.intellij.debugger.engine.SuspendContextImpl +import com.intellij.debugger.impl.DebuggerContextImpl import com.intellij.debugger.impl.JvmSteppingCommandProvider import com.intellij.psi.PsiElement import com.intellij.xdebugger.impl.XSourcePositionImpl import com.sun.jdi.Location +import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade @@ -49,7 +51,19 @@ public class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() { if (suspendContext == null || suspendContext.isResumed) return null val sourcePosition = suspendContext.debugProcess.debuggerContext.sourcePosition + return getStepOverCommand(suspendContext, ignoreBreakpoints, sourcePosition) + } + @TestOnly + fun getStepOverCommand( + suspendContext: SuspendContextImpl, + ignoreBreakpoints: Boolean, + debuggerContext: DebuggerContextImpl + ): DebugProcessImpl.ResumeCommand? { + return getStepOverCommand(suspendContext, ignoreBreakpoints, debuggerContext.sourcePosition) + } + + fun getStepOverCommand(suspendContext: SuspendContextImpl, ignoreBreakpoints: Boolean, sourcePosition: SourcePosition): DebugProcessImpl.ResumeCommand? { val file = sourcePosition.file as? JetFile ?: return null if (sourcePosition.line < 0) return null @@ -160,11 +174,19 @@ public class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() { return this?.textRange?.contains(element.textRange) ?: false } + @TestOnly + fun getStepOutCommand(suspendContext: SuspendContextImpl, debugContext: DebuggerContextImpl): DebugProcessImpl.ResumeCommand? { + return getStepOutCommand(suspendContext, debugContext.sourcePosition) + } + override fun getStepOutCommand(suspendContext: SuspendContextImpl?, stepSize: Int): DebugProcessImpl.ResumeCommand? { if (suspendContext == null || suspendContext.isResumed) return null val sourcePosition = suspendContext.debugProcess.debuggerContext.sourcePosition ?: return null + return getStepOutCommand(suspendContext, sourcePosition) + } + private fun getStepOutCommand(suspendContext: SuspendContextImpl, sourcePosition: SourcePosition): DebugProcessImpl.ResumeCommand? { val file = sourcePosition.file as? JetFile ?: return null if (sourcePosition.line < 0) return null diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestBase.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestBase.kt index 4497fd6602b..bcb14b7dd0a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestBase.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinDebuggerTestBase.kt @@ -43,7 +43,6 @@ import com.intellij.xdebugger.breakpoints.XBreakpoint import com.intellij.xdebugger.breakpoints.XBreakpointProperties import com.intellij.xdebugger.breakpoints.XBreakpointType import com.intellij.xdebugger.breakpoints.XLineBreakpointType -import com.sun.jdi.request.StepRequest import org.jetbrains.kotlin.idea.debugger.breakpoints.KotlinFieldBreakpoint import org.jetbrains.kotlin.idea.debugger.breakpoints.KotlinFieldBreakpointType import org.jetbrains.kotlin.idea.debugger.stepping.* @@ -136,15 +135,15 @@ abstract class KotlinDebuggerTestBase : KotlinDebuggerTestCase() { } protected fun SuspendContextImpl.doStepOut() { - val stepOutCommand = runReadAction { KotlinSteppingCommandProvider().getStepOutCommand(this, StepRequest.STEP_LINE) } - ?: dp.createStepOutCommand(this) - dp.getManagerThread()!!.schedule(stepOutCommand) + val stepOutCommand = runReadAction { KotlinSteppingCommandProvider().getStepOutCommand(this, debuggerContext!!) } + ?: dp.createStepOutCommand(this) + dp.managerThread.schedule(stepOutCommand) } protected fun SuspendContextImpl.doStepOver() { - val stepOverCommand = runReadAction { KotlinSteppingCommandProvider().getStepOverCommand(this, false, StepRequest.STEP_LINE) } - ?: dp.createStepOverCommand(this, false) - dp.getManagerThread()!!.schedule(stepOverCommand) + val stepOverCommand = runReadAction { KotlinSteppingCommandProvider().getStepOverCommand(this, false, debuggerContext!!) } + ?: dp.createStepOverCommand(this, false) + dp.managerThread.schedule(stepOverCommand) } protected fun doStepping(path: String) {