diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java b/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java index d43c7edfb2bc..e88b287354d2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java @@ -107,7 +107,7 @@ public final class AsyncStacksUtils { () -> process.invokeMethod(evaluationContext, finalMethodPair.first, finalMethodPair.second, args, ObjectReference.INVOKE_SINGLE_THREADED, true), result -> result instanceof StringReference ? ((StringReference)result).value() : null, - process.getVirtualMachineProxy()); + evaluationContext); if (value != null) { List res = new ArrayList<>(); ClassesByNameProvider classesByName = ClassesByNameProvider.createCache(virtualMachineProxy.allClasses()); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java index 5fb979b069ec..1dbe7f07b2d2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java @@ -160,7 +160,7 @@ public final class EvaluationContextImpl implements EvaluationContext { return DebuggerUtils.getInstance().processCollectibleValue(computable, value -> { keep(value); return value; - }, getDebugProcess().getVirtualMachineProxy()); + }, this); } public boolean isEvaluationPossible() { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java index db5db8c507c5..234848e0fbd6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java @@ -7,7 +7,6 @@ import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.actions.DebuggerAction; import com.intellij.debugger.engine.*; import com.intellij.debugger.engine.evaluation.*; -import com.intellij.debugger.engine.jdi.VirtualMachineProxy; import com.intellij.debugger.impl.attach.PidRemoteConnection; import com.intellij.debugger.jdi.VirtualMachineProxyImpl; import com.intellij.debugger.ui.impl.watch.DebuggerTreeNodeExpression; @@ -355,7 +354,7 @@ public final class DebuggerUtilsImpl extends DebuggerUtilsEx { public R processCollectibleValue( @NotNull ThrowableComputable valueComputable, @NotNull Function processor, - @NotNull VirtualMachineProxy proxy) throws EvaluateException { + @NotNull EvaluationContext evaluationContext) throws EvaluateException { int retries = 1; while (true) { T result = valueComputable.compute(); @@ -364,12 +363,13 @@ public final class DebuggerUtilsImpl extends DebuggerUtilsEx { } catch (ObjectCollectedException oce) { if (--retries < 0) { - if (proxy instanceof VirtualMachineProxyImpl proxyImpl) { - proxyImpl.suspend(); + if (evaluationContext.getSuspendContext() instanceof SuspendContextImpl suspendContextImpl) { + VirtualMachineProxyImpl virtualMachineProxy = suspendContextImpl.getVirtualMachineProxy(); + virtualMachineProxy.suspend(); try { return processor.apply(valueComputable.compute()); } finally { - proxyImpl.resume(); + virtualMachineProxy.resume(); } } else { diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java index a28441e19904..440e272d9b09 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java @@ -135,7 +135,7 @@ public final class BatchEvaluator { evaluationContext, myBatchEvaluatorClass, myBatchEvaluatorMethod, Collections.singletonList(argArray), MethodImpl.SKIP_ASSIGNABLE_CHECK, true), result -> result instanceof StringReference ? ((StringReference)result).value() : null, - debugProcess.getVirtualMachineProxy()); + evaluationContext); if (value != null) { byte[] bytes = value.getBytes(StandardCharsets.ISO_8859_1); try (DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes))) { diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java index dce2f0043e6b..5daf72cbc6bf 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java @@ -7,7 +7,6 @@ import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil; import com.intellij.debugger.engine.evaluation.EvaluationContext; import com.intellij.debugger.engine.evaluation.TextWithImports; -import com.intellij.debugger.engine.jdi.VirtualMachineProxy; import com.intellij.execution.ExecutionException; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; @@ -134,7 +133,7 @@ public abstract class DebuggerUtils { } return result instanceof StringReference ? ((StringReference)result).value() : result.toString(); }, - debugProcess.getVirtualMachineProxy()); + evaluationContext); } throw EvaluateExceptionUtil.createEvaluateException(JavaDebuggerBundle.message("evaluation.error.unsupported.expression.type")); } @@ -147,7 +146,7 @@ public abstract class DebuggerUtils { public abstract R processCollectibleValue( @NotNull ThrowableComputable valueComputable, @NotNull Function processor, - @NotNull VirtualMachineProxy proxy) throws EvaluateException; + @NotNull EvaluationContext evaluationContext) throws EvaluateException; public static void ensureNotInsideObjectConstructor(@NotNull ObjectReference reference, @NotNull EvaluationContext context) throws EvaluateException {