diff --git a/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs b/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs index 97d0683..d37ae1c 100644 --- a/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs +++ b/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs @@ -518,59 +518,42 @@ namespace System.Diagnostics private static ResolvedParameter GetParameter(ParameterInfo parameter) { var parameterType = parameter.ParameterType; - var prefix = GetPrefix(parameter, parameterType); - var parameterTypeString = "?"; - if (parameterType != null) + + if (parameterType == null) { - if (parameterType.IsGenericType) + return new ResolvedParameter { - var tupleNames = parameter.GetCustomAttributes().FirstOrDefault()?.TransformNames; - if (tupleNames != null) + Prefix = prefix, + Name = parameter.Name, + Type = parameterTypeString, + }; + } + + if (parameterType.IsGenericType) + { + var customAttribs = parameter.GetCustomAttributes(inherit: false); + + if ((customAttribs?.Length ?? 0) > 0) + { + var tupleNames = customAttribs + .OfType().FirstOrDefault()?.TransformNames; + + if (tupleNames?.Count > 0) { - var sb = new StringBuilder(); - sb.Append("("); - var args = parameterType.GetGenericArguments(); - for (var i = 0; i < args.Length; i++) - { - if (i > 0) - { - sb.Append(", "); - } - sb.Append(TypeNameHelper.GetTypeDisplayName(args[i], fullName: false, includeGenericParameterNames: true)); - - if (i >= tupleNames.Count) continue; - - var argName = tupleNames[i]; - if (argName != null) - { - sb.Append(" "); - sb.Append(argName); - } - } - - sb.Append(")"); - parameterTypeString = sb.ToString(); - - return new ResolvedParameter - { - Prefix = prefix, - Name = parameter.Name, - Type = parameterTypeString, - }; + return GetValueTupleParameter(tupleNames, prefix, parameter.Name, parameterType); } } - - if (parameterType.IsByRef) - { - parameterType = parameterType.GetElementType(); - } - - parameterTypeString = TypeNameHelper.GetTypeDisplayName(parameterType, fullName: false, includeGenericParameterNames: true); - } + if (parameterType.IsByRef) + { + parameterType = parameterType.GetElementType(); + } + + parameterTypeString = TypeNameHelper.GetTypeDisplayName(parameterType, fullName: false, includeGenericParameterNames: true); + return new ResolvedParameter { Prefix = prefix, @@ -579,6 +562,45 @@ namespace System.Diagnostics }; } + private static ResolvedParameter GetValueTupleParameter(IList tupleNames, string prefix, string name, Type parameterType) + { + var sb = new StringBuilder(); + sb.Append("("); + var args = parameterType.GetGenericArguments(); + for (var i = 0; i < args.Length; i++) + { + if (i > 0) + { + sb.Append(", "); + } + + sb.Append(TypeNameHelper.GetTypeDisplayName(args[i], fullName: false, includeGenericParameterNames: true)); + + if (i >= tupleNames.Count) + { + continue; + } + + var argName = tupleNames[i]; + if (argName == null) + { + continue; + } + + sb.Append(" "); + sb.Append(argName); + } + + sb.Append(")"); + + return new ResolvedParameter + { + Prefix = prefix, + Name = name, + Type = sb.ToString(), + }; + } + private static bool ShowInStackTrace(MethodBase method) { Debug.Assert(method != null);