diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt index 062b4e59d0e..a124faed692 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt @@ -67,6 +67,9 @@ import org.jetbrains.jet.plugin.refactoring.extractFunction.AnalysisResult import org.jetbrains.jet.plugin.refactoring.extractFunction.AnalysisResult.ErrorMessage import org.jetbrains.jet.lang.diagnostics.Severity import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages +import com.sun.jdi.request.EventRequest +import com.sun.jdi.ObjectReference +import com.intellij.debugger.engine.SuspendContext object KotlinEvaluationBuilder: EvaluatorBuilder { override fun build(codeFragment: PsiElement, position: SourcePosition?): ExpressionEvaluator { @@ -116,7 +119,7 @@ class KotlinEvaluator(val codeFragment: JetCodeFragment, makeInitialFrame(this, context.getArgumentsByNames(extractedFunction.getParameterNamesForDebugger())), JDIEval(virtualMachine, context.getClassLoader()!!, - context.getSuspendContext().getThread()?.getThreadReference()!!) + context.getSuspendContext().getThread()?.getThreadReference()!!, context.getSuspendContext().getInvokePolicy()) ) resultValue = when (value) { @@ -152,6 +155,10 @@ class KotlinEvaluator(val codeFragment: JetCodeFragment, return null } + private fun SuspendContext.getInvokePolicy(): Int { + return if (getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD) ObjectReference.INVOKE_SINGLE_THREADED else 0 + } + private fun JetNamedFunction.getParameterNamesForDebugger(): List { val result = arrayListOf() for (param in getValueParameters()) {