mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-323195 "Object has been collected" error during the evaluation - do not use DebugProcess.getVirtualMachineProxy
(cherry picked from commit ddb54d977ab83e4dd2edb144f47353b3aff121e3) IJ-CR-146826 GitOrigin-RevId: d8a12f7f0bf068c6b1665afca0b738d05de9fb71
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5f52e47ac9
commit
d0863ae04b
@@ -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<StackFrameItem> res = new ArrayList<>();
|
||||
ClassesByNameProvider classesByName = ClassesByNameProvider.createCache(virtualMachineProxy.allClasses());
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
@@ -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, T extends Value> R processCollectibleValue(
|
||||
@NotNull ThrowableComputable<? extends T, ? extends EvaluateException> valueComputable,
|
||||
@NotNull Function<? super T, ? extends R> 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 {
|
||||
|
||||
@@ -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))) {
|
||||
|
||||
@@ -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, T extends Value> R processCollectibleValue(
|
||||
@NotNull ThrowableComputable<? extends T, ? extends EvaluateException> valueComputable,
|
||||
@NotNull Function<? super T, ? extends R> processor,
|
||||
@NotNull VirtualMachineProxy proxy) throws EvaluateException;
|
||||
@NotNull EvaluationContext evaluationContext) throws EvaluateException;
|
||||
|
||||
public static void ensureNotInsideObjectConstructor(@NotNull ObjectReference reference, @NotNull EvaluationContext context)
|
||||
throws EvaluateException {
|
||||
|
||||
Reference in New Issue
Block a user