public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
{
var psobj = PSObject.WrapOrNull(EvaluateAst(methodCallAst.Expression, false));
if (psobj == null)
{
throw new PSInvalidOperationException("Cannot invoke a method of a NULL expression");
}
var memberNameObj = EvaluateAst(methodCallAst.Member, false);
var method = PSObject.GetMemberInfoSafe(psobj, memberNameObj, methodCallAst.Static) as PSMethodInfo;
if (method == null)
{
var msg = String.Format("The object has no method called '{0}'", memberNameObj.ToString());
throw new PSArgumentException(msg);
}
var arguments = methodCallAst.Arguments.Select(EvaluateAst).Select(o => o is PSObject ? ((PSObject)o).BaseObject : o);
var result = method.Invoke(arguments.ToArray());
if (result != null)
{
_pipelineCommandRuntime.WriteObject(PSObject.AsPSObject(result));
}
return AstVisitAction.SkipChildren;
}