diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt index 1a2680579d7..825fa836d00 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.idea.debugger import com.intellij.debugger.engine.DebugProcessImpl +import com.intellij.debugger.engine.events.DebuggerCommandImpl +import com.intellij.debugger.impl.DebuggerContextImpl import com.intellij.debugger.jdi.LocalVariableProxyImpl import com.sun.jdi.* import com.sun.tools.jdi.LocalVariableImpl @@ -52,6 +54,16 @@ fun isInsideInlineArgument(inlineArgument: KtFunction, location: Location, debug } != null } +fun DebugProcessImpl.invokeInManagerThread(f: (DebuggerContextImpl) -> T?): T? { + var result: T? = null + managerThread.invokeAndWait(object : DebuggerCommandImpl() { + override fun action() { + result = runReadAction { f(debuggerContext) } + } + }) + return result +} + private fun lambdaOrdinalByArgument(elementAt: KtFunction, context: BindingContext): Int { val type = CodegenBinding.asmTypeForAnonymousClass(context, elementAt) return type.className.substringAfterLast("$").toInt() diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractKotlinEvaluateExpressionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractKotlinEvaluateExpressionTest.kt index 2b3a5f2a7e1..dba5591b0f3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractKotlinEvaluateExpressionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractKotlinEvaluateExpressionTest.kt @@ -23,8 +23,6 @@ import com.intellij.debugger.engine.evaluation.EvaluateException import com.intellij.debugger.engine.evaluation.TextWithImports import com.intellij.debugger.engine.evaluation.TextWithImportsImpl import com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilderImpl -import com.intellij.debugger.engine.events.DebuggerCommandImpl -import com.intellij.debugger.impl.DebuggerContextImpl import com.intellij.debugger.settings.NodeRendererSettings import com.intellij.debugger.ui.impl.watch.* import com.intellij.debugger.ui.tree.* @@ -55,6 +53,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerTestBase import org.jetbrains.kotlin.idea.debugger.KotlinFrameExtraVariablesProvider import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractKotlinEvaluateExpressionTest.PrinterConfig.DescriptorViewOptions +import org.jetbrains.kotlin.idea.debugger.invokeInManagerThread import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.test.InTextDirectivesUtils.* import org.junit.Assert @@ -316,14 +315,14 @@ abstract class AbstractKotlinEvaluateExpressionTest : KotlinDebuggerTestBase() { append(getPrefix(descriptor)) append(label) if (config.shouldRenderSourcesPosition() && hasSourcePosition(descriptor)) { - val sp = invokeInManagerThread { + val sp = debugProcess.invokeInManagerThread { SourcePositionProvider.getSourcePosition(descriptor, myProject, debuggerContext) } append(" (sp = ${render(sp)})") } if (config.shouldRenderExpression() && descriptor is ValueDescriptorImpl) { - val expression = invokeInManagerThread { + val expression = debugProcess.invokeInManagerThread { descriptor.getTreeEvaluation((node as XValueNodeImpl).valueContainer as JavaValue, it) as? PsiExpression } @@ -338,7 +337,7 @@ abstract class AbstractKotlinEvaluateExpressionTest : KotlinDebuggerTestBase() { val codeFragmentText = codeFragment.text if (config.shouldComputeResultOfCreateExpression()) { - invokeInManagerThread { + debugProcess.invokeInManagerThread { it.suspendContext?.evaluate( TextWithImportsImpl(text.kind, codeFragmentText, codeFragment.importsToString(), text.fileType), null) @@ -356,16 +355,6 @@ abstract class AbstractKotlinEvaluateExpressionTest : KotlinDebuggerTestBase() { return false } - private fun invokeInManagerThread(f: (DebuggerContextImpl) -> T?): T? { - var result: T? = null - debuggerContext.debugProcess!!.managerThread.invokeAndWait(object : DebuggerCommandImpl() { - override fun action() { - result = runReadAction { f(debuggerContext) } - } - }) - return result - } - private fun getPrefix(descriptor: NodeDescriptorImpl): String { val prefix = when (descriptor) { is StackFrameDescriptor -> "frame"