@Override
  public Value evaluate(final EvaluationContext context) throws EvaluateException {
    if (!context.getDebugProcess().isAttached()) {
      throw EvaluateExceptionUtil.createEvaluateException(JavaDebuggerBundle.message("error.vm.disconnected"));
    }
    try {
      if (context.getFrameProxy() == null) {
        throw EvaluateExceptionUtil.NULL_STACK_FRAME;
      }

      Object value = myEvaluator.evaluate((EvaluationContextImpl)context);

      if (value != null && !(value instanceof Value)) {
        throw EvaluateExceptionUtil
          .createEvaluateException(JavaDebuggerBundle.message("evaluation.error.invalid.expression", ""));
      }

      return (Value)value;
    }
    catch (ReturnEvaluator.ReturnException r) {
      return (Value)r.getReturnValue();
    }
    catch (Throwable/*IncompatibleThreadStateException*/ e) {
      LOG.debug(e);
      if (e instanceof EvaluateException) {
        throw ((EvaluateException)e);
      }
      else {
        throw EvaluateExceptionUtil.createEvaluateException(e);
      }
    }
  }
@Override
  public Value evaluate(final EvaluationContext context)