in lib/src/builder.dart [1431:1484]
Reference _typeReference(analyzer.DartType type,
{bool forceNullable = false}) {
if (type is analyzer.InterfaceType) {
return TypeReference((b) {
b
..symbol = type.element.name
..isNullable = forceNullable || typeSystem.isPotentiallyNullable(type)
..url = _typeImport(type.element)
..types.addAll(type.typeArguments.map(_typeReference));
});
} else if (type is analyzer.FunctionType) {
final alias = type.alias;
if (alias == null || alias.element.isPrivate) {
// [type] does not refer to a type alias, or it refers to a private type
// alias; we must instead write out its signature.
return FunctionType((b) {
b
..isNullable =
forceNullable || typeSystem.isPotentiallyNullable(type)
..returnType = _typeReference(type.returnType)
..requiredParameters
.addAll(type.normalParameterTypes.map(_typeReference))
..optionalParameters
.addAll(type.optionalParameterTypes.map(_typeReference));
for (var parameter in type.namedParameterTypes.entries) {
b.namedParameters[parameter.key] = _typeReference(parameter.value);
}
if (type.typeFormals != null) {
b.types.addAll(type.typeFormals.map(_typeParameterReference));
}
});
}
return TypeReference((b) {
b
..symbol = alias.element.name
..url = _typeImport(alias.element)
..isNullable = forceNullable || typeSystem.isNullable(type);
for (var typeArgument in alias.typeArguments) {
b.types.add(_typeReference(typeArgument));
}
});
} else if (type is analyzer.TypeParameterType) {
return TypeReference((b) {
b
..symbol = type.element.name
..isNullable = forceNullable || typeSystem.isNullable(type);
});
} else {
return referImported(
type.getDisplayString(withNullability: false),
_typeImport(type.element),
);
}
}