Merge pull request #24 from benaadams/no-attribs

Skip resolving ValueTuple names when no CustomAttributes
This commit is contained in:
Ben Adams 2017-11-14 03:37:37 +01:00 committed by GitHub
commit 2f546030d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -518,41 +518,11 @@ 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.IsGenericType)
{
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;
var argName = tupleNames[i];
if (argName != null)
if (parameterType == null)
{
sb.Append(" ");
sb.Append(argName);
}
}
sb.Append(")");
parameterTypeString = sb.ToString();
return new ResolvedParameter
{
Prefix = prefix,
@ -560,6 +530,21 @@ namespace System.Diagnostics
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)
@ -569,8 +554,6 @@ namespace System.Diagnostics
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<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)
{
Debug.Assert(method != null);