build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
_buildStep = buildStep;
Map<AssetId, String> testFiles = {};
//Repositories
_dartServerRepository = DartServerRepository();
await _dartServerRepository.initialize();
_pathRepository = PathRepository();
_generationRepository = GenerationRepository();
///Executors
_fixerExecutor = FixerExecutor(_dartServerRepository
.server); //TODO: Create methods and don't pass server directly
_astElementExecutor = AstElementExecutor();
_unitTestExecutor = UnitTestExecutor(_generationRepository);
await for (final input in buildStep.findAssets(_testFiles)) {
final testContent = await buildStep.readAsString(input);
testFiles[input] = testContent;
}
final List<Future<Map<String, dynamic>>> saveFutures = [];
await for (final input in buildStep.findAssets(_codeFiles)) {
try {
final inputLibrary =
await buildStep.resolver.libraryFor(input, allowSyntaxErrors: true);
for (final topLevelElement in inputLibrary.topLevelElements) {
final checker = TypeChecker.fromRuntime(Welltested);
final annotationElement = checker.firstAnnotationOf(
topLevelElement,
throwOnUnresolved: true,
);
if (annotationElement != null) {
if (!(topLevelElement is ClassElement)) return;
try {
saveFutures.addAll(await saveTests(
topLevelElement, input, ConstantReader(annotationElement)));
} catch (e) {
log.severe(
"Error saving tests for ${topLevelElement.name} in ${input.path}");
}
}
}
} catch (e) {}
}
await Future.wait(saveFutures);
_dartServerRepository.server.dispose();
///TODO: can save some metadata here
return buildStep.writeAsString(_allFileOutput(buildStep), '//Placeholder');
}