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
Future<String> generate(LibraryReader library, _) async {
final output = <String>[];
if (forLibrary) {
var name = library.element.name;
if (name?.isEmpty ?? false) {
name = library.element.source.uri.pathSegments.last;
}
output.add('// Code for "$name"');
}
if (forClasses) {
for (var classElement in library.allElements.whereType<ClassElement>()) {
if (isRemoteConfig(classElement)) {
final e = classElement.allSupertypes.firstWhere(
(element) =>
element.getDisplayString(withNullability: false) ==
'$BuiltConfig',
orElse: () => null,
);
for (final a in e.accessors) {
output.add('// ' + a.displayName);
}
if (classElement.displayName.contains('GoodError')) {
throw InvalidGenerationSourceError(
"Don't use classes with the word 'Error' in the name",
todo: 'Rename ${classElement.displayName} to something else.',
element: classElement,
);
}
output.add(_RemoteConfigBuilder(classElement).generateConfig());
}
}
}
return output.join('\n');
}