Skip resolving ValueTuple names when no CustomAttributes

This commit is contained in:
Ben Adams 2017-11-14 02:27:02 +00:00
parent 90487aa452
commit bc7a59b99b

View File

@ -518,41 +518,11 @@ namespace System.Diagnostics
private static ResolvedParameter GetParameter(ParameterInfo parameter) private static ResolvedParameter GetParameter(ParameterInfo parameter)
{ {
var parameterType = parameter.ParameterType; var parameterType = parameter.ParameterType;
var prefix = GetPrefix(parameter, parameterType); var prefix = GetPrefix(parameter, parameterType);
var parameterTypeString = "?"; var parameterTypeString = "?";
if (parameterType != null)
{
if (parameterType.IsGenericType && parameter.CustomAttributes.Any())
{
var tupleNames = parameter.GetCustomAttributes<TupleElementNamesAttribute>().FirstOrDefault()?.TransformNames;
if (tupleNames != null)
{
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; if (parameterType == null)
var argName = tupleNames[i];
if (argName != null)
{ {
sb.Append(" ");
sb.Append(argName);
}
}
sb.Append(")");
parameterTypeString = sb.ToString();
return new ResolvedParameter return new ResolvedParameter
{ {
Prefix = prefix, Prefix = prefix,
@ -560,6 +530,21 @@ namespace System.Diagnostics
Type = parameterTypeString, Type = parameterTypeString,
}; };
} }
if (parameterType.IsGenericType)
{
var customAttribs = parameter.GetCustomAttributes(inherit: false);
if ((customAttribs?.Length ?? 0) > 0)
{
var tupleNames = customAttribs
.OfType<TupleElementNamesAttribute>().FirstOrDefault()?.TransformNames;
if (tupleNames?.Count > 0)
{
return GetValueTupleParameter(tupleNames, prefix, parameter.Name, parameterType);
}
}
} }
if (parameterType.IsByRef) if (parameterType.IsByRef)
@ -569,8 +554,6 @@ namespace System.Diagnostics
parameterTypeString = TypeNameHelper.GetTypeDisplayName(parameterType, fullName: false, includeGenericParameterNames: true); parameterTypeString = TypeNameHelper.GetTypeDisplayName(parameterType, fullName: false, includeGenericParameterNames: true);
}
return new ResolvedParameter return new ResolvedParameter
{ {
Prefix = prefix, Prefix = prefix,
@ -579,6 +562,45 @@ namespace System.Diagnostics
}; };
} }
private static ResolvedParameter GetValueTupleParameter(IList<string> 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) private static bool ShowInStackTrace(MethodBase method)
{ {
Debug.Assert(method != null); Debug.Assert(method != null);