extractFromSources function
DartProject
extractFromSources(
- Map<
String, String> sources, { - FieldRename globalRename = FieldRename.none,
Extracts models from in-memory sources keyed by relative path.
Implementation
DartProject extractFromSources(
Map<String, String> sources, {
FieldRename globalRename = FieldRename.none,
}) {
final units = <String, (CompilationUnit, LineInfo)>{};
for (final e in sources.entries) {
final result = parseString(
content: e.value,
path: e.key,
throwIfDiagnostics: false,
);
units[e.key] = (result.unit, result.lineInfo);
}
// Pass 1: enums and the names of every class with a fromJson.
final enums = <String, DartEnum>{};
final modelNames = <String>{};
for (final e in units.entries) {
final (unit, lines) = e.value;
for (final decl in unit.declarations) {
if (decl is EnumDeclaration) {
final en = _extractEnum(decl, e.key, lines);
enums[en.name] = en;
} else if (decl is ClassDeclaration && _isJsonClass(decl)) {
modelNames.add(decl.namePart.typeName.lexeme);
}
}
}
// Pass 2: models.
final models = <String, DartModel>{};
for (final e in units.entries) {
final (unit, lines) = e.value;
for (final decl in unit.declarations) {
if (decl is! ClassDeclaration || !_isJsonClass(decl)) continue;
final model = _extractModel(
decl,
file: e.key,
lines: lines,
globalRename: globalRename,
modelNames: modelNames,
enums: enums,
);
if (model != null) models[model.name] = model;
}
}
return DartProject(models: models, enums: enums);
}