private String calcExpression(EvaluationContext evaluationContext,
                                  ValueDescriptor descriptor,
                                  MyCachedEvaluator evaluator,
                                  DescriptorLabelListener listener,
                                  Key<ValueDescriptorImpl> key) throws EvaluateException {
      Value eval = doEval(evaluationContext, descriptor.getValue(), evaluator);
      if (eval != null) {
        WatchItemDescriptor evalDescriptor = new WatchItemDescriptor(
          evaluationContext.getProject(), evaluator.getReferenceExpression(), eval, (EvaluationContextImpl)evaluationContext) {
          @Override
          public void updateRepresentation(EvaluationContextImpl context, DescriptorLabelListener labelListener) {
            updateRepresentationNoNotify(context, labelListener);
          }
        };
        evalDescriptor.updateRepresentation((EvaluationContextImpl)evaluationContext, listener);
        descriptor.putUserData(key, evalDescriptor);
        return evalDescriptor.getValueLabel();
      }
      descriptor.putUserData(key, null);
      return "null";
    }
private String calcExpression(EvaluationContext evaluationContext,
                                  ValueDescriptor descriptor,
                                  MyCachedEvaluator evaluator,
                                  DescriptorLabelListener listener,
                                  Key<ValueDescriptorImpl> key)