private static IValueExpression ParseMethodCall(string expression)
{
MethodCallExpression methodCall = null;
int openParenIndex = expression.IndexOf("(", StringComparison.Ordinal);
string memberExpression = expression.Substring(0, openParenIndex);
string[] pathParts = ParseParts(memberExpression);
if ((pathParts != null) && (pathParts.Length >= 2)) {
methodCall = new MethodCallExpression(pathParts);
}
else {
return null;
}
int paramsLength = expression.Length - openParenIndex - 2;
if (paramsLength != 0) {
string paramExpression = expression.Substring(openParenIndex + 1, paramsLength);
string[] paramExprList = paramExpression.Split(',');
for (int i = 0; i < paramExprList.Length; i++) {
IValueExpression expr = ParseExpression(paramExprList[i].Trim(), /* allowMethod */ false);
if (expr != null) {
methodCall.AddParameter(expr);
}
else {
return null;
}
}
}
return methodCall;
}