private bool ProcessMetaMethodInvocation(MethodInvocationExpression node)
{
var targetEntity = node.Target.Entity;
if (null == targetEntity) return false;
if (!IsOrContainMetaMethod(targetEntity)) return false;
var arguments = GetMetaMethodInvocationArguments(node);
var argumentTypes = MethodResolver.GetArgumentTypes(arguments);
var resolver = new MethodResolver(argumentTypes);
var method = resolver.ResolveMethod(EnumerateMetaMethods(targetEntity));
if (null == method) return false;
Node replacement = InvokeMetaMethod(method, arguments);
ReplaceMetaMethodInvocationSite(node, replacement);
return true;
}