relationshipFields function
Iterable<VariableElement>
relationshipFields(
- ClassElement elem
)
Implementation
Iterable<VariableElement> relationshipFields(ClassElement elem) {
Map<String, VariableElement> map;
map = {
for (final field in elem.fields)
if (field.type.element is ClassElement &&
(field.type.element as ClassElement).supertype != null &&
relationshipTypeChecker.isSuperOf(field.type.element!))
field.name: field,
};
// if no relationships were found, we might be in presence
// of a Freezed object, so check factory constructors
if (map.isEmpty) {
map = {
for (final constructor in elem.constructors)
if (constructor.isFactory)
for (final param in constructor.parameters)
if (param.type.element != null &&
relationshipTypeChecker.isSuperOf(param.type.element!))
param.name: param,
};
}
final out = map.values.toList();
// if parent mixes DataModel in, also include its relationships
if (elem.supertype != null &&
dataModelTypeChecker.isAssignableFrom(elem.supertype!.element)) {
out.addAll(relationshipFields(elem.supertype!.element));
}
return out;
}