resolve method
Implementation
@override
Danger<CitrusSymbolValue, AccesserException> resolve(CitrusSymbolTable symbolTable) {
final log = Log(classLocation: runtimeType, functionLocation: 'resolve');
final length = identifiers.length;
late final CitrusSymbolValue result;
switch (length) {
case 1:
// 必ず return
final getResult = symbolTable.getFinalValue(identifiers.first);
log.add(getResult);
if (getResult is! Success<CitrusSymbolValue, CitrusSymbolTableException>) return Failure(AccesserExceptionA(), log);
result = getResult.wrapped;
case 2:
// 必ず return
final getResult = symbolTable.getFinalValue(identifiers.first);
log.add(getResult);
if (getResult is! Success<CitrusSymbolValue, 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);
}