TypeDefinition.fromDartType constructor
TypeDefinition.fromDartType(
- DartType type, {
- 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,
);
}