/// <inheritdoc/> public override void VisitInvocationExpression(InvocationExpression syntax) { var methodToEval = GetMethodToEval(syntax, _context, _declaringTypeFilter); if (methodToEval == null) { throw new NotSupportedException($"Encountered syntax that is unable to be evaluated: {syntax}"); } var arguments = syntax.Arguments .Select(arg => { var visitor = new EvaluationVisitor(_context, _visitedMethods); arg.AcceptVisitor(visitor); return(visitor.Result); }) .ToArray(); Result = _context.Invoke(methodToEval, arguments); }
/// <summary> /// Attempts to visit an <see cref="InvocationExpression"/> node /// </summary> /// <param name="syntax">The node to evaluate</param> /// <returns>True if it was visited, otherwise false</returns> public bool TryVisit(InvocationExpression syntax) { var methodToEval = GetMethodToEval(syntax, _context, _declaringTypeFilter); if (methodToEval != null) { var arguments = syntax.Arguments .Select(arg => { // allow all methods var visitor = new EvaluationVisitor(_context, _visitedMethods, t => true); arg.AcceptVisitor(visitor); return(visitor.Result); }) .ToArray(); Result = _context.Invoke(methodToEval, arguments); return(true); } return(false); }