generateForAnnotatedElement method
dynamic
generateForAnnotatedElement(
- Element element,
- ConstantReader annotation,
- BuildStep buildStep
Implement to return source code to generate for element
.
This method is invoked based on finding elements annotated with an
instance of T
. The annotation
is provided as a ConstantReader
.
Supported return values include a single String or multiple String instances within an Iterable or Stream. It is also valid to return a Future of String, Iterable, or Stream.
Implementations should return null
when no content is generated. Empty
or whitespace-only String instances are also ignored.
Implementation
@override
dynamic generateForAnnotatedElement(
Element element, ConstantReader annotation, BuildStep buildStep) {
if (element is! ClassElement) {
throw InvalidGenerationSourceError(
'Manifest annotation can only be defined on a class.');
}
if (_count > 0) {
throw InvalidGenerationSourceError(
'Manifest annotation can only be defined once.');
}
_count++;
_log.info('\n'
'******************** ${_log.name} ********************\n'
'Manifest Compiler 暂不支持增量更新\n'
'如果需要添加/删除/更新路由信息,请先执行清除命令:\n'
'flutter pub run build_runner clean\n'
'然后执行下列命令重新生成相应文件:\n'
'flutter pub run build_runner build --delete-conflicting-outputs\n'
'******************** ${_log.name} ********************');
try {
final ManifestWriter writer = ManifestWriter(element, infos);
writer.generate();
return writer.toString();
} on Exception catch (e, s) {
_log.severe(e);
_log.severe(s);
return '// $e \n\n';
}
}