From 7e66d67b957e741c4c17143b33530b67ad260f59 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 20 May 2014 18:28:32 +0400 Subject: [PATCH] EvaluateExpression: pass invokePolicy flag to eval4j --- .../plugin/debugger/evaluate/KotlinEvaluationBuilder.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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()) {