public static string GetFullMemberName( this MemberReference member, MethodNameTypes nameType = MethodNameTypes.Nothing) { if (member.DeclaringType == null) { var type = member as TypeReference; if (type != null) { return(type.FullName); } else { return(member.Name); } } else { return(GetFullMemberName(member.DeclaringType, member, nameType)); } }
public static string GetFullMemberName( this TypeReference type, MemberReference member, MethodNameTypes nameType = MethodNameTypes.Nothing) { var declaringTypes = type .Traverse(current => current.DeclaringType) .Reverse() .ToArray(); var namespaceName = declaringTypes.First().Namespace; var method = member as MethodReference; if (method != null) { switch (nameType) { case MethodNameTypes.Full: return(string.Format( "{0}.{1}.{2}({3})", namespaceName, string.Join(".", declaringTypes.Select(dt => dt.Name)), method.Name, string.Join( ", ", method.Parameters.Select(parameter => string.Format( "{0} {1}", parameter.ParameterType.GetFullMemberName(), parameter.Name))))); case MethodNameTypes.Types: return(string.Format( "{0}.{1}.{2}({3})", namespaceName, string.Join(".", declaringTypes.Select(dt => dt.Name)), method.Name, string.Join( ", ", method.Parameters.Select(parameter => parameter.ParameterType.GetFullMemberName())))); case MethodNameTypes.Index: var index = method.GetMethodOverloadIndex(); if (index >= 1) { // Atmark will replace to underscore by ManglingSymbolName() return(string.Format( "{0}.{1}.{2}@{3}", namespaceName, string.Join(".", declaringTypes.Select(dt => dt.Name)), method.Name, index)); } break; } } return(string.Format( "{0}.{1}.{2}", namespaceName, string.Join(".", declaringTypes.Select(dt => dt.Name)), member.Name)); }