From fa331cbdb89b8b851cb4cbeaf0502e649526a3c8 Mon Sep 17 00:00:00 2001 From: stakx Date: Fri, 3 Nov 2017 20:43:11 +0100 Subject: [PATCH] Reduce lambda usage --- Source/ExpressionExtensions.cs | 12 ++----- Source/ExpressionStringBuilder.cs | 52 ++++++++++++++++++------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Source/ExpressionExtensions.cs b/Source/ExpressionExtensions.cs index 65f6ad17f..d34ad5d6b 100644 --- a/Source/ExpressionExtensions.cs +++ b/Source/ExpressionExtensions.cs @@ -218,17 +218,9 @@ private static bool ReturnsMatch(MethodCallExpression expression) /// TODO: remove this code when https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=331583 /// is fixed. /// - public static string ToStringFixed(this Expression expression) + public static string ToStringFixed(this Expression expression, bool useFullTypeName = false) { - return ExpressionStringBuilder.GetString(expression); - } - - internal static string ToStringFixed(this Expression expression, bool useFullTypeName) - { - if (useFullTypeName) - return ExpressionStringBuilder.GetString(expression, type => type.FullName); - else - return ExpressionStringBuilder.GetString(expression, type => type.Name); + return ExpressionStringBuilder.GetString(expression, useFullTypeName); } /// diff --git a/Source/ExpressionStringBuilder.cs b/Source/ExpressionStringBuilder.cs index 1a68a2a24..dae463ea9 100644 --- a/Source/ExpressionStringBuilder.cs +++ b/Source/ExpressionStringBuilder.cs @@ -21,23 +21,18 @@ internal class ExpressionStringBuilder { private readonly Expression expression; private StringBuilder builder; - private Func getTypeName; + private bool useFullName; - internal static string GetString(Expression expression) + internal static string GetString(Expression expression, bool useFullName = false) { - return GetString(expression, type => type.Name); - } - - internal static string GetString(Expression expression, Func getTypeName) - { - var builder = new ExpressionStringBuilder(getTypeName, expression); + var builder = new ExpressionStringBuilder(expression, useFullName); return builder.ToString(); } - public ExpressionStringBuilder(Func getTypeName, Expression expression) + public ExpressionStringBuilder(Expression expression, bool useFullName) { - this.getTypeName = getTypeName; this.expression = expression; + this.useFullName = useFullName; } public override string ToString() @@ -165,7 +160,7 @@ private void ToStringUnary(UnaryExpression u) { case ExpressionType.Convert: case ExpressionType.ConvertChecked: - builder.Append('(').Append(this.getTypeName(u.Type)).Append(')'); + builder.Append('(').Append(this.useFullName ? u.Type.FullName : u.Type.Name).Append(')'); ToString(u.Operand); return; @@ -194,7 +189,7 @@ private void ToStringUnary(UnaryExpression u) builder.Append('('); ToString(u.Operand); builder.Append(" as "); - builder.AppendDisplayName(u.Type, this.getTypeName); + builder.AppendDisplayName(u.Type, this.useFullName); builder.Append(')'); return; } @@ -292,7 +287,7 @@ private void ToStringConstant(ConstantExpression c) } else if (c.Type.GetTypeInfo().IsEnum) { - builder.AppendDisplayName(c.Type, this.getTypeName).Append('.').Append(value); + builder.AppendDisplayName(c.Type, this.useFullName).Append('.').Append(value); } else { @@ -333,7 +328,7 @@ private void ToStringMemberAccess(MemberExpression m) } else { - builder.AppendDisplayName(m.Member.DeclaringType, this.getTypeName); + builder.AppendDisplayName(m.Member.DeclaringType, this.useFullName); } builder.Append('.'); builder.Append(m.Member.Name); @@ -361,7 +356,8 @@ private void ToStringMethodCall(MethodCallExpression node) } else // Method is static { - this.builder.Append(this.getTypeName(node.Method.DeclaringType)); + var nodeMethodDeclaringType = node.Method.DeclaringType; + this.builder.Append(this.useFullName ? nodeMethodDeclaringType.FullName : nodeMethodDeclaringType.Name); } if (node.Method.IsPropertyIndexerGetter()) @@ -397,8 +393,20 @@ private void ToStringMethodCall(MethodCallExpression node) this.builder .Append('.') .Append(node.Method.Name) - .Append('<') - .Append(string.Join(",", node.Method.GetGenericArguments().Select(s => this.getTypeName(s)).ToArray())) + .Append('<'); + + var nodeMethodGenericArguments = node.Method.GetGenericArguments(); + for (int i = 0, n = nodeMethodGenericArguments.Length; i < n; ++i) + { + if (i > 0) + { + this.builder.Append(", "); + } + var name = + this.builder.Append(this.useFullName ? nodeMethodGenericArguments[i].FullName : nodeMethodGenericArguments[i].Name); + } + + this.builder .Append(">("); AsCommaSeparatedValues(node.Arguments.Skip(paramFrom), ToString); this.builder.Append(')'); @@ -486,7 +494,7 @@ private void ToStringNew(NewExpression nex) { Type type = (nex.Constructor == null) ? nex.Type : nex.Constructor.DeclaringType; builder.Append("new "); - builder.AppendDisplayName(type, this.getTypeName); + builder.AppendDisplayName(type, this.useFullName); builder.Append('('); AsCommaSeparatedValues(nex.Arguments, ToString); builder.Append(')'); @@ -531,7 +539,7 @@ private void ToStringNewArray(NewArrayExpression na) return; case ExpressionType.NewArrayBounds: builder.Append("new "); - builder.AppendDisplayName(na.Type.GetElementType(), this.getTypeName); + builder.AppendDisplayName(na.Type.GetElementType(), this.useFullName); builder.Append('['); AsCommaSeparatedValues(na.Expressions, ToString); builder.Append(']'); @@ -632,11 +640,11 @@ internal static string ToStringOperator(ExpressionType nodeType) internal static class StringBuilderExtensions { - public static StringBuilder AppendDisplayName(this StringBuilder builder, Type source, Func getName) + public static StringBuilder AppendDisplayName(this StringBuilder builder, Type source, bool useFullName) { Debug.Assert(source != null); - var name = getName(source); + var name = useFullName ? source.FullName : source.Name; var backtickIndex = name.IndexOf('`'); if (backtickIndex >= 0) { @@ -657,7 +665,7 @@ public static StringBuilder AppendDisplayName(this StringBuilder builder, Type s { builder.Append(", "); } - builder.Append(getName(genericArguments[i])); + builder.Append(useFullName ? genericArguments[i].FullName : genericArguments[i].Name); } builder.Append('>'); }