protected void buildVariablesThreadAction(DebuggerContextImpl debuggerContext, XValueChildrenList children, XCompositeNode node) {
    try {
      final EvaluationContextImpl evaluationContext = debuggerContext.createEvaluationContext();
      if (evaluationContext == null) {
        return;
      }

      // the message is disabled, see IDEA-281129
      //if (!debuggerContext.isEvaluationPossible()) {
      //  node.setErrorMessage(MessageDescriptor.EVALUATION_NOT_POSSIBLE.getLabel());
      //}

      // this node
      XNamedValue thisNode = createThisNode(evaluationContext);
      if (thisNode != null) {
        children.add(thisNode);
      }

      // static group
      addStaticGroup(evaluationContext, node);

      // last method return value if any
      createReturnValueNodes(evaluationContext).forEach(children::add);

      // context exceptions
      createExceptionNodes(evaluationContext).forEach(children::add);

      try {
        buildVariables(debuggerContext, evaluationContext, myDebugProcess, children, myDescriptor.getThisObject(),
                       myDescriptor.getLocation());
      }
      catch (EvaluateException e) {
        node.setErrorMessage(e.getMessage());
      }
    }
    catch (InvalidStackFrameException e) {
      LOG.info(e);
    }
    catch (InternalException e) {
      if (e.errorCode() == JvmtiError.INVALID_SLOT) {
        node.setErrorMessage(JavaDebuggerBundle.message("error.corrupt.debug.info", e.getMessage()));
      }
      else {
        throw e;
      }
    }
  }
protected void buildVariablesThreadAction(DebuggerContextImpl debuggerContext, XValueChildrenList children, XCompositeNode node)