public CallMethodAction(ParseInfo parseInfo, Scope scope, FunctionExpression methodContext, bool usedAsExpression, Scope getter)
        {
            _parseInfo        = parseInfo;
            _usedAsExpression = usedAsExpression;

            // Get the invoke target.
            var resolveInvoke = new ResolveInvokeInfo();
            var target        = parseInfo.SetInvokeInfo(resolveInvoke).GetExpression(scope, methodContext.Target, getter: getter);

            // Get the invoke info.
            IInvokeInfo invokeInfo = resolveInvoke.WasResolved ? resolveInvoke.InvokeInfo : target.Type()?.InvokeInfo;

            if (invokeInfo != null)
            {
                Result = invokeInfo.Invoke(new InvokeData(parseInfo, methodContext, target, scope, getter, usedAsExpression));
            }
            // If the target is not invocable and the target is not a missing element, add error.
            else
            {
                DiscardParameters(parseInfo, getter, methodContext.Parameters);
                if (target is MissingElementAction == false)
                {
                    parseInfo.Script.Diagnostics.Error("Method name expected", methodContext.Target.Range);
                }
            }
        }