@Override
  public final void contextAction(@NotNull SuspendContextImpl suspendContext) {
    SuspendManager suspendManager = suspendContext.getDebugProcess().getSuspendManager();
    ThreadReferenceProxyImpl thread = getThread();
    boolean isSuspended;
    if (thread == null) {
      isSuspended = suspendContext.getSuspendPolicy() == EventRequest.SUSPEND_ALL;
    }
    else {
      try {
        isSuspended = suspendManager.isSuspended(thread);
      }
      catch (ObjectCollectedException ignored) {
        notifyCancelled();
        return;
      }
    }
    if (isSuspended) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Context thread " + suspendContext.getThread());
        LOG.debug("Debug thread " + thread);
      }
      threadAction(suspendContext);
    }
    else {
      // no suspend context currently available
      SuspendContextImpl suspendContextForThread = myCustomThread != null ? suspendContext :
                                                   SuspendManagerUtil.findContextByThread(suspendManager, thread);
      if (suspendContextForThread != null && (thread == null || thread.status() != ThreadReference.THREAD_STATUS_ZOMBIE)) {
        suspendContextForThread.postponeCommand(this);
      }
      else {
        notifyCancelled();
      }
    }
  }
@Override
  public final void contextAction(@NotNull SuspendContextImpl suspendContext)