writeHypenState function
dynamic
writeHypenState(
- String path,
- ResolvedLibraryResult libResolved
)
Implementation
writeHypenState(String path, final ResolvedLibraryResult libResolved) async {
try {
final libElement = libResolved.element;
final observables = libElement.topLevelElements
.whereType<ClassElement>()
.where((e) => observableAnnotation.hasAnnotationOf(e))
.toList();
final enumObservables = libElement.topLevelElements
.whereType<EnumElement>()
.where((e) => observableAnnotation.hasAnnotationOf(e))
.toList();
final generatedFileName = toGeneratedFileName(path);
final file = File(generatedFileName);
if (observables.isEmpty && enumObservables.isEmpty) {
if (await file.exists()) {
await file.delete();
}
return;
} else {
final partname = p.basename(toGeneratedFileName(path));
final part = libElement.parts.where((part) {
final uri = part.uri;
return (uri as dynamic).relativeUriString.contains(partname);
}).firstOrNull;
if (part == null) {
print('[${p.relative(path)}] You must include `part \'$partname\';`');
return;
}
}
final observableCode = observables.map(generateObservableClass).join('\n');
final enumObservableCode =
enumObservables.map(generateObservableEnum).join('\n');
final libname = p.basename(path);
file.writeAsString(
DartFormatter().format('''
// ignore_for_file: type=lint, unused_element, unnecessary_import, unused_import
// AUTO GENERATED BY hypen
// Do not modify this file.
part of '$libname';
$observableCode
$enumObservableCode
'''),
);
} catch (e) {
alert(
'Failed to generate a observable code for $path.'
' Please contact the maintainers.',
);
alert('Attaching the code and the error message helps resolve the issue.');
alert('$e');
}
}