writeHypenState function
dynamic
writeHypenState(
- String path,
- ResolvedLibraryResult libResolved
)
Implementation
writeHypenState(String path, final ResolvedLibraryResult libResolved) async {
try {
final libname = p.basename(path);
final libElement = libResolved.element;
final classes = libElement.topLevelElements
.whereType<ClassElement>()
.where((e) => hypenData.isAssignableFrom(e))
.where((e) => !hypenIgnoreGeneration.hasAnnotationOf(e))
.toList();
final enums = libElement.topLevelElements
.whereType<EnumElement>()
.where((e) => enumAnnotated.hasAnnotationOf(e))
.where((e) => !hypenIgnoreGeneration.hasAnnotationOf(e))
.toList();
if (classes.isNotEmpty || enums.isNotEmpty) {
final partname = '${p.withoutExtension(libname)}.hypen.dart';
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 reactiveData = classes.map(generateHypenStateCode).join('\n');
final reactiveEnum = enums.map(generateEnumInfo).join('\n');
final generatedFileName = '${p.withoutExtension(path)}.hypen.dart';
final file = File(generatedFileName);
if (reactiveData.isEmpty && reactiveEnum.isEmpty) {
if (await file.exists()) {
await file.delete();
}
return;
}
final formatter = DartFormatter();
file.writeAsString(
formatter.format('''
// ignore_for_file: type=lint, unused_element, unnecessary_import, unused_import
// AUTO GENERATED BY hypen
// Do not modify this file.
part of '$libname';
$reactiveData
$reactiveEnum
'''),
);
} catch (e) {
print(e);
}
}