resolve method

  1. @override
Danger<CitrusSymbolValue, AccesserException> resolve(
  1. CitrusSymbolTable symbolTable
)
override

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);

}