compileFinish static method

Danger<FileSystemModelList<FileSystemModel>, CitrusLanguageException> compileFinish(
  1. CitrusSymbolTable symbolTable,
  2. FileSystemModelList<FileSystemModel> fileSystemModelList,
  3. String generateLocation,
  4. 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);

}