generate method
Generates Dart code for an input Dart library.
May create additional outputs through the buildStep
, but the 'primary'
output is Dart code returned through the Future. If there is nothing to
generate for this library may return null, or a Future that resolves to
null or the empty string.
Implementation
@override
FutureOr<String?> generate(LibraryReader library, BuildStep buildStep) async {
const instancesAnnotation = TypeChecker.typeNamed(Instance);
final instances = library.annotatedWith(instancesAnnotation);
final instancesJsonModels = <InstanceJsonModel>[];
for (final element in instances) {
final name = ClassUtility.getClassName(element.element);
final inputType =
element.annotation.peek('inputType')?.typeValue.getDisplayString();
final asyncValue = element.annotation.peek('isAsync')?.boolValue ?? false;
final partValue = element.annotation.peek('part')?.boolValue ?? false;
final awaitInitialization =
element.annotation.peek('awaitInitialization')?.boolValue ?? false;
final order = element.annotation
.peek(
'initializationOrder',
)
?.intValue;
final singleton =
element.annotation.peek('singleton')?.boolValue ?? false;
final lazy = element.annotation.peek('isLazy')?.boolValue ?? false;
instancesJsonModels.add(InstanceJsonModel(
name: name,
singleton: singleton,
isLazy: lazy,
inputType: inputType ?? '',
awaitInitialization: awaitInitialization,
initializationOrder: order,
isAsync: asyncValue,
part: partValue,
));
}
if (instancesJsonModels.isNotEmpty) {
return jsonEncode(instancesJsonModels);
}
return null;
}