/**
  * Evaluate the given value as an expression, if necessary.
  *
  * @param value the candidate value (may be an expression)
  * @return the resolved value
  */
 protected Object evaluate(TypedStringValue value) {
   Object result = doEvaluate(value.getValue());
   if (!ObjectUtils.nullSafeEquals(result, value.getValue())) {
     value.setDynamic();
   }
   return result;
 }