generateForAnnotatedElement method
FutureOr<String>
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
FutureOr<String> generateForAnnotatedElement(Element element, ConstantReader annotation, BuildStep buildStep) async {
final singleton = annotation.read('singleton').boolValue;
final lazy = annotation.read('lazy').boolValue;
final _buffer = StringBuffer();
_write(Object o) => _buffer.write(o);
final visitor = ModelVisitor();
List<Element> listElements = element.library!.topLevelElements.toList();
for (var i = listElements.length - 1; i >= 0; i--) {
var item = listElements[i];
item.visitChildren(visitor);
if (visitor.isAnnotation) {
break;
}
if (i == 0) {
element.visitChildren(visitor);
break;
}
}
_write("final \$${element.displayName} = BindInject((i) => ${element.displayName}(${visitor.params.join(', ')}), isSingleton: $singleton, isLazy: $lazy,);");
return _buffer.toString();
}