code: private String resolveStringValue(Object rawValue, ExtendedAttributeDefinition attrDef, EvaluationContext context, boolean ignoreWarnings) throws ConfigEvaluatorException {
          if (rawValue instanceof String) {
              return processString((String) rawValue, attrDef, context, ignoreWarnings);
          } else if (rawValue instanceof ConfigElement) {
              // Like convertConfigElementToSingleValue, handle elements with
              // attributes: <top><bool attr="ignored">true></bool></top>
              return processString(((ConfigElement) rawValue).getElementValue(), attrDef, context, ignoreWarnings);
          } else {
              throw new IllegalStateException("Attribute type mismatch. Expected String type, got " + rawValue);
          }
      }
docs: Resolve a raw value to a String, and process it so that it can be evaluated.