public override object VisitAmountSignedConvertible(CurrencyComputerParser.AmountSignedConvertibleContext context) { var amountSigned = (AmountSigned)VisitAmountSigned(context.amountSigned()); var conversionStr = (string)VisitConversion(context.conversion()); var convertTo = _conversionToCurrencyConventions[conversionStr]; return(ConvertTo(amountSigned, convertTo)); }
public override object VisitAmountSignedConvertible(CurrencyComputerParser.AmountSignedConvertibleContext context) { var amountSigned = (AmountSigned)VisitAmountSigned(context.amountSigned()); // Контроль типов: нельзя конвертировать валюту в саму себя if (amountSigned.Amount.Currency == _targetCurrency) { throw new SyntaxException($"Can't convert {context.GetText()}, because {amountSigned.Amount.Currency} is destination currency."); } var conversionStr = (string)VisitConversion(context.conversion()); var convertTo = _conversionToCurrencyConventions[conversionStr]; var converted = ConvertTo(amountSigned, convertTo); if (converted != amountSigned) { _logger?.LogDebug("{OperationNumber}:Converted from {Source} to {Dest}.", _operationsLogger++, amountSigned, converted); } return(converted); }
/// <summary> /// Visit a parse tree produced by <see cref="CurrencyComputerParser.amountSignedConvertible"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitAmountSignedConvertible([NotNull] CurrencyComputerParser.AmountSignedConvertibleContext context) { return(VisitChildren(context)); }