resolve method
Danger<CitrusSymbolTable, DefineException>
resolve(
- CitrusSymbolTable symbolTable,
- String generateLocation,
- 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);
}