public static void TraceNode(this InvocationExpression invocationExpression, StringBuilder sb, int level = 0) { if (sb == null || invocationExpression == null) { return; } invocationExpression.TraceBaseInfo(sb, level); var levelSpace = new string(' ', level *NumberOfSpaces); level++; sb.Append($"|{levelSpace}|{Nl}"); sb.Append($"|{levelSpace}|- Expression:{Nl}"); invocationExpression.Expression?.TraceNode(sb, level); if (invocationExpression.Arguments != null) { sb.Append($"|{levelSpace}|{Nl}"); sb.Append($"|{levelSpace}|- Arguments count: {invocationExpression.Arguments.Count}{Nl}"); foreach (var invocationExpressionArgument in invocationExpression.Arguments) { invocationExpressionArgument.TraceNode(sb, level); } } }