dartObjectToString function

String dartObjectToString (DartObject v)

Implementation

String dartObjectToString(DartObject v) {
  var type = v.type;
  if (v.isNull) return 'null';
  if (v.toBoolValue() != null) return v.toBoolValue().toString();
  if (v.toIntValue() != null) return v.toIntValue().toString();
  if (v.toDoubleValue() != null) return v.toDoubleValue().toString();
  if (v.toSymbolValue() != null) return '#' + v.toSymbolValue();
  if (v.toTypeValue() != null) return v.toTypeValue().name;
  if (v.toListValue() != null)
    return 'const [' + v.toListValue().map(dartObjectToString).join(', ') + ']';
  if (v.toMapValue() != null) {
    return 'const {' +
        v.toMapValue().entries.map((entry) {
          var k = dartObjectToString(entry.key);
          var v = dartObjectToString(entry.value);
          return '$k: $v';
        }).join(', ') +
        '}';
  }
  if (v.toStringValue() != null) {
    return literalString(v.toStringValue()).accept(DartEmitter()).toString();
  }
  if (type is InterfaceType && type.element.isEnum) {
    // Find the index of the enum, then find the member.
    for (var field in type.element.fields) {
      if (field.isEnumConstant && field.isStatic) {
        var value = type.element.getField(field.name).constantValue;
        if (value == v) {
          return '${type.name}.${field.name}';
        }
      }
    }
  }

  throw ArgumentError(v.toString());
}