resolve method
Success<String, CitrusSemanticException>
resolve(
- CitrusSymbolTable symbolTable,
- String generateLocation,
- Iterable<
String> fragments
override
Implementation
@override
Success<String, CitrusSemanticException> resolve(CitrusSymbolTable symbolTable, String generateLocation, Iterable<String> fragments) {
final log = Log(classLocation: runtimeType, functionLocation: 'resolve');
final arraySymbolAccesserResolveResult = arrayAccesser.resolve(symbolTable);
log.add(arraySymbolAccesserResolveResult);
if (arraySymbolAccesserResolveResult is! Success<CitrusSymbolValue, AccesserException>) return Success(source, log);
final bindCitrusArray = arraySymbolAccesserResolveResult.wrapped;
if (bindCitrusArray is! CitrusArray) return Success(source, log.monitor({
'type': bindCitrusArray.runtimeType,
}));
// array text, array object, object の array text の 3パターンがある
final addTemporarySymbolResult = symbolTable.addTemporarySymbol(temporaryAccesser.identifier, bindCitrusArray);
log.add(addTemporarySymbolResult);
if (addTemporarySymbolResult is! Success<CitrusSymbolTable, CitrusSymbolTableException>) return Success(source, log);
final joinAccesserResolveResult = joinAccesser.resolve(symbolTable);
log.add(joinAccesserResolveResult);
if (joinAccesserResolveResult is! Success<CitrusSymbolValue, AccesserException>) return Success(source, log);
final join = joinAccesserResolveResult.wrapped;
if (join is! EndValue) return Success(source, log.monitor({
'type': join.runtimeType,
}));
final limit = bindCitrusArray.value.length;
var count = 1;
final List<String> list = [];
CitrusSymbolTable newSymbolTable = addTemporarySymbolResult.wrapped;
while (true) {
if (count > limit) {
final result = list.join(join.value.toString());
return Success(result, log);
}
final resolveResult = finishCitrusSemanticList.resolve(newSymbolTable, generateLocation, fragments);
log.add(resolveResult);
list.add(resolveResult.wrapped);
// laps を進める.
final incrementLapsResult = newSymbolTable.incrementLaps(temporaryAccesser.identifier);
log.add(incrementLapsResult);
if (incrementLapsResult is! Success<CitrusSymbolTable, CitrusSymbolTableException>) return Success(source, log);
newSymbolTable = incrementLapsResult.wrapped;
count = count + 1;
}
}