@Override
        public void contextAction(@NotNull SuspendContextImpl suspendContext) {
          ThreadReferenceProxyImpl threadProxy = frameProxy.threadProxy();
          SuspendContextImpl threadSuspendContext = SuspendManagerUtil.findContextByThread(process.getSuspendManager(), threadProxy);
          JavaExecutionStack executionStack =
            new JavaExecutionStack(threadProxy, process, Objects.equals(threadSuspendContext.getEventThread(), threadProxy));
          executionStack.initTopFrame();
          boolean threadChanged = false;
          if (session instanceof XDebugSessionImpl) {
            if (!Objects.equals(((XDebugSessionImpl)session).getCurrentExecutionStack(), executionStack)) {
              threadChanged = true;
              XDebuggerActionsCollector.threadSelected.log(XDebuggerActionsCollector.PLACE_THREADS_VIEW);
            }
          }
          XStackFrame frame = ContainerUtil.getFirstItem(executionStack.createStackFrames(frameProxy));
          if (frame != null) {
            if (!threadChanged) {
              XDebuggerActionsCollector.frameSelected.log(XDebuggerActionsCollector.PLACE_THREADS_VIEW);
            }
            DebuggerUIUtil.invokeLater(() -> session.setCurrentStackFrame(executionStack, frame));
          }
        }
@Override
        public void contextAction(@NotNull SuspendContextImpl suspendContext)