compileFinish static method
Danger<FileSystemModelList<FileSystemModel> , CitrusLanguageException>
compileFinish(
- CitrusSymbolTable symbolTable,
- FileSystemModelList<
FileSystemModel> fileSystemModelList, - String generateLocation,
- ObjectDefinitionRoster objectDefinitionRoster,
Implementation
static Danger<FileSystemModelList<FileSystemModel>, CitrusLanguageException> compileFinish(CitrusSymbolTable symbolTable, FileSystemModelList fileSystemModelList, String generateLocation, ObjectDefinitionRoster objectDefinitionRoster) {
final log = Log(classLocation: CitrusLanguage, functionLocation: 'compileFinish');
final changeExhaustiveResult = fileSystemModelList.changeExhaustive<CitrusLanguageException>((old, fragments) {
switch (old) {
case FileModel():
final nameRootSyntaxResult = RootCitrusSyntax.fromFinishSource(old.name);
log.add(nameRootSyntaxResult);
final nameFinishResult = Finish.fromRootCitrusSyntax(nameRootSyntaxResult.wrapped);
log.add(nameFinishResult);
final nameResolveResult = nameFinishResult.wrapped.resolve(symbolTable, generateLocation, fragments, objectDefinitionRoster);
log.add(nameResolveResult);
final decodeResult = old.decode();
log.add(decodeResult);
if (decodeResult is! Success<String, FormatException>) return Failure(CitrusLanguageExceptionD(), log);
final contentRootSyntaxResult = RootCitrusSyntax.fromFinishSource(decodeResult.wrapped);
log.add(contentRootSyntaxResult);
final contentFinishResult = Finish.fromRootCitrusSyntax(contentRootSyntaxResult.wrapped);
log.add(contentFinishResult);
final contentResolveResult = contentFinishResult.wrapped.resolve(symbolTable, generateLocation, fragments, objectDefinitionRoster);
log.add(contentResolveResult);
final result = FileModel.fromString(nameResolveResult.wrapped, contentResolveResult.wrapped);
return Success(result, log);
case FolderModel():
final nameRootSyntaxResult = RootCitrusSyntax.fromFinishSource(old.name);
log.add(nameRootSyntaxResult);
final nameFinishResult = Finish.fromRootCitrusSyntax(nameRootSyntaxResult.wrapped);
log.add(nameFinishResult);
final nameResolveResult = nameFinishResult.wrapped.resolve(symbolTable, generateLocation, fragments, objectDefinitionRoster);
log.add(nameResolveResult);
final result = FolderModel(nameResolveResult.wrapped, old.content);
return Success(result, log);
case _:
// yaml file からの FileSystemModel の生成なので FileModel or FolderModel しか生成しない.
Result.panic(CitrusLanguageErrorA(), log);
}
});
log.add(changeExhaustiveResult);
if (changeExhaustiveResult is! Success<FileSystemModelList<FileSystemModel>, CitrusLanguageException>) return Failure(changeExhaustiveResult.asException, log);
return Success(changeExhaustiveResult.wrapped, log);
}