b39f6f38496cb94afa62d51224e040f563d0a8b3
[idea/community.git] / platform / script-debugger / backend / src / org / jetbrains / debugger / SuspendContextManager.java
1 package org.jetbrains.debugger;
2
3 import org.jetbrains.annotations.NotNull;
4 import org.jetbrains.annotations.Nullable;
5 import org.jetbrains.concurrency.Promise;
6
7 public interface SuspendContextManager<CALL_FRAME extends CallFrame> {
8   /**
9    * Tries to suspend VM. If successful, {@link DebugEventListener#suspended(SuspendContext)}
10    * will be called.
11    */
12   @NotNull
13   Promise<Void> suspend();
14
15   @Nullable
16   SuspendContext getContext();
17
18   @NotNull
19   SuspendContext getContextOrFail();
20
21   boolean isContextObsolete(@NotNull SuspendContext context);
22
23   void setOverlayMessage(@Nullable String message);
24
25   /**
26    * Resumes the VM execution using a "continue" request. This context becomes invalid until another context is supplied through the
27    * {@link DebugEventListener#suspended(SuspendContext)} event.
28    *  @param stepAction to perform
29    * @param stepCount steps to perform (not used if {@code stepAction == CONTINUE})
30    */
31   Promise<Void> continueVm(@NotNull StepAction stepAction, int stepCount);
32
33   boolean isRestartFrameSupported();
34
35   /**
36    * Restarts a frame (all frames above are dropped from the stack, this frame is started over).
37    * for success the boolean parameter
38    *     is true if VM has been resumed and is expected to get suspended again in a moment (with
39    *     a standard 'resumed' notification), and is false if call frames list is already updated
40    *     without VM state change (this case presently is never actually happening)
41    */
42   @NotNull
43   Promise<Boolean> restartFrame(@NotNull CALL_FRAME callFrame);
44
45   /**
46    * @return whether reset operation is supported for the particular callFrame
47    */
48   boolean canRestartFrame(@NotNull CallFrame callFrame);
49 }