resolve method
Implementation
@override
Danger<CitrusDataType, AccesserException> resolve(CitrusSymbolTable symbolTable) {
final log = Log(classLocation: runtimeType, functionLocation: 'resolve');
final length = identifiers.length;
late final CitrusDataType result;
switch (length) {
case 1:
// 必ず return
final getResult = getFinalValue(identifiers.first, symbolTable);
log.add(getResult);
if (getResult is! Success<CitrusDataType, CitrusSymbolTableException>) return Failure(AccesserExceptionA(), log);
result = getResult.wrapped;
case 2:
// 必ず return
final getResult = getFinalValue(identifiers.first, symbolTable);
log.add(getResult);
if (getResult is! Success<CitrusDataType, CitrusSymbolTableException>) return Failure(AccesserExceptionA(), log);
final citrusObject = getResult.wrapped;
if (citrusObject is! CitrusObject) return Failure(AccesserExceptionC(), log.monitor({
'first identifier': identifiers.first,
'first identifier final value type': citrusObject.runtimeType,
}));
// 必ず return
final getByUnitNameResult = citrusObject.getByUnitName(identifiers.elementAt(1));
log.add(getByUnitNameResult);
if (getByUnitNameResult is! Success<ObjectValuable, CitrusObjectException>) return Failure(AccesserExceptionD(), log);
result = getByUnitNameResult.wrapped;
case _:
return Failure(AccesserExceptionE(), log.monitor({
'identifiers length': length,
}));
}
return Success(result, log);
}