dartObjectToString function

String? dartObjectToString(
  1. 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()!.getDisplayString(withNullability: true);
  }
  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(useNullSafetySyntax: true))
        .toString();
  }
  if (type is InterfaceType && type.element is EnumElement) {
    // 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)!.computeConstantValue();
        if (v is Enum && value is Enum) {
          var v2 = v as Enum;
          var value2 = value as Enum;

          if (value2.name == v2.name) {
            return '${type.element.displayName}.${field.name}';
          }
        } else {
          if (value == v) {
            return '${type.element.displayName}.${field.name}';
          }
        }
      }
    }
  }

  throw ArgumentError(v.toString());
}