resolve method

  1. @override
Danger<CitrusSymbolTable, DefineException> resolve(
  1. CitrusSymbolTable symbolTable,
  2. String generateLocation,
  3. Iterable<String> fragments
)
override

Implementation

@override
Danger<CitrusSymbolTable, DefineException> resolve(CitrusSymbolTable symbolTable, String generateLocation, Iterable<String> fragments) {

    final log = Log(classLocation: runtimeType, functionLocation: 'resolve');

    late final Danger<CitrusSymbolTable, CitrusSymbolTableException> result;

    switch (defineKeyword) {
    case DefineText():

        result = symbolTable.addTextSymbol(symbolName, symbolValue);

    case DefineObject():

        final chainResult = Chain.fromSource(symbolValue);
        log.add(chainResult);
        if (chainResult is! Success<Chain, ChainSyntaxException>) return Failure(DefineExceptionB(), log);
        final chain = chainResult.wrapped;

        final objectDefinitionName = chain.head.nameArgument.name;

        final objectDefinitionResult = symbolTable.objectDefinitionRoster.getByPrimaryKey(objectDefinitionName);
        log.add(objectDefinitionResult);
        if (objectDefinitionResult is! Success<ObjectDefinition, RosterPatternExceptionB>) return Failure(DefineExceptionF(), log);

        final citrusObjectResult = CitrusObject.fromChainAndObjectDefinition(chain, objectDefinitionResult.wrapped);
        log.add(citrusObjectResult);
        if (citrusObjectResult is! Success<CitrusObject, ChainException>) return Failure(DefineExceptionB(), log);

        result = symbolTable.addObjectSymbol(symbolName, citrusObjectResult.wrapped);

    }

    log.add(result);
    if (result is! Success<CitrusSymbolTable, CitrusSymbolTableException>) return Failure(DefineExceptionA(), log);

    return Success(result.wrapped, log);

}