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
generateForAnnotatedElement(Element element, ConstantReader annotation, BuildStep buildStep) async {
if (element is! ClassElement) {
return "";
}
buildStep.inputLibrary.then((LibraryElement value) {});
ClassElement classElement = element;
var entityAnnotation = _getEntityAnnotation(classElement.metadata);
if (entityAnnotation == null) {
return "";
}
var className = classElement.displayName;
Map<String, dynamic> propertyMap = HashMap<String, dynamic>();
var buffer = StringBuffer();
buffer.writeln("import 'dart:collection';\n");
var source = classElement.source;
buffer.writeln("import '${source.shortName}';\n");
buffer.writeln("class ${className}Schema {");
buffer.writeln(" ${className}Schema._();\n");
_genFieldsDefine(buffer, classElement.fields);
_genMap(buffer, classElement.fields, className);
_getSchema(buffer, annotation, propertyMap);
buffer.writeln();
_genDefineFields(buffer, classElement.fields, propertyMap);
buffer.writeln();
_genSchema(buffer, propertyMap);
buffer.writeln("}");
return buffer.toString();
}