typeRefer function
Implementation
Reference typeRefer(ImportableType type,
[Uri? targetFile, bool withNullabilitySuffix = true]) {
final import = targetFile == null
? ImportableTypeResolver.resolveAssetImport(type.import)
: ImportableTypeResolver.relative(type.import, targetFile);
if (type.isRecordType) {
return RecordType(
(b) => b
..url = import
..isNullable = type.isNullable
..positionalFieldTypes.addAll(
type.typeArguments.where((e) => !e.isNamedRecordField).map(typeRefer),
)
..namedFieldTypes.addAll({
for (final entry in [
...type.typeArguments.where((e) => e.isNamedRecordField)
])
entry.nameInRecord!: typeRefer(entry)
}),
);
}
return TypeReference((reference) {
reference
..symbol = type.name
..url = import
..isNullable = withNullabilitySuffix && type.isNullable;
if (type.typeArguments.isNotEmpty) {
reference.types.addAll(
type.typeArguments.map((e) => typeRefer(e, targetFile)),
);
}
});
}