protected void doEvaluate(@NotNull XFullValueEvaluationCallback callback, boolean doTrunc) {
    String expression = myExpression.trim();
    if (expression.isEmpty()) {
      callback.evaluated("");
      return;
    }

    ApplicationManager.getApplication().executeOnPooledThread(() -> {
      try {
        final PyDebugValue value = myDebugProcess.evaluate(expression, false, doTrunc);
        if (value.getValue() == null) {
          throw new PyDebuggerException("Failed to Load Value");
        }
        callback.evaluated(value.getValue());
        if (!isCopyValueCallback(callback)) {
          ApplicationManager.getApplication().invokeLater(() -> showCustomPopup(myDebugProcess, value));
        }
      }
      catch (PyDebuggerException e) {
        callback.errorOccurred(e.getTracebackError());
      }
    });
  }
protected void doEvaluate(@NotNull XFullValueEvaluationCallback callback, boolean doTrunc)