TypeDefinition.fromDartType constructor

TypeDefinition.fromDartType(
  1. DartType type, {
  2. String? recordFieldName,
})

Creates an TypeDefinition from a given DartType. throws FromDartTypeClassNameException if the class name could not be determined.

Implementation

factory TypeDefinition.fromDartType(
  DartType type, {
  String? recordFieldName,
}) {
  var nullable = type.nullabilitySuffix == NullabilitySuffix.question;
  var url = type.element?.librarySource?.uri.toString();

  if (type is RecordType) {
    var positionalField = type.positionalFields
        .map((f) => TypeDefinition.fromDartType(f.type))
        .toList();
    var namedFields = type.namedFields
        .map((f) =>
            TypeDefinition.fromDartType(f.type, recordFieldName: f.name))
        .toList();

    return TypeDefinition(
      className: recordTypeClassName,
      nullable: nullable,
      dartType: type,
      generics: [...positionalField, ...namedFields],
      url: url,
      recordFieldName: recordFieldName,
    );
  }

  var generics = (type is ParameterizedType)
      ? type.typeArguments.map((e) => TypeDefinition.fromDartType(e)).toList()
      : <TypeDefinition>[];

  var className = type is! VoidType ? type.element?.displayName : 'void';

  if (className == null) {
    throw FromDartTypeClassNameException(type);
  }

  return TypeDefinition(
    className: className,
    nullable: nullable,
    dartType: type,
    generics: generics,
    url: url,
    recordFieldName: recordFieldName,
  );
}