Ejemplo n.º 1
0
 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));
     }
 }
Ejemplo n.º 2
0
        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));
        }