Example #1
0
        private static string ConstructUniqueName(
            MethodReference method, bool onlyMemberName, bool containsArgument, MemberElementFormats memberFormat)
        {
            var methodName = GetMemberName(method, onlyMemberName, memberFormat);

            string firstElement;

            if (method is GenericInstanceMethod genericInstanceMethod)
            {
                // BarMethod<int,T,long>
                firstElement = methodName + memberFormat.PrefixForGeneric +
                               string.Join(memberFormat.MemberItemSeparator, genericInstanceMethod.GenericArguments.
                                           Select(a => ConstructUniqueName(a, false, memberFormat))) +
                               memberFormat.PostfixForGeneric;
            }
            else if (method.HasGenericParameters)
            {
                // BarMethod<T,U,V>      ; GenericDefinition
                firstElement = methodName + memberFormat.PrefixForGeneric +
                               string.Join(memberFormat.MemberItemSeparator, method.GenericParameters.
                                           Select(p => ConstructUniqueName(p, false, memberFormat))) +
                               memberFormat.PostfixForGeneric;
            }
            else
            {
                // BarMethod
                firstElement = methodName;
            }

            var parameters = method.Parameters.
                             Select(p => ConstructUniqueName(p.ParameterType, false, memberFormat)).
                             ToArray();

            if (memberFormat.IsMakeEmptyArgument || (parameters.Length >= 1))
            {
                // BarMethod(float,byte,bool)
                return(firstElement + memberFormat.PrefixForArgument +
                       string.Join(memberFormat.MemberItemSeparator, parameters) +
                       memberFormat.PostfixForArgument);
            }
            else
            {
                // BarMethod
                return(firstElement);
            }
        }
Example #2
0
        private static string GetMemberName(
            MemberReference member, bool onlyMemberName, MemberElementFormats memberFormat)
        {
            var memberName = memberFormat.IsMangledName ?
                             Utilities.GetMangledName(TrimGenericIdentifier(member.Name)) :
                             TrimGenericIdentifier(member.Name);

            if (onlyMemberName)
            {
                // namespace    typename   result
                // Foo.Bar.Baz  Bebe       Bebe
                // Foo.Bar.Baz  Bebe+Momo  Momo
                return(memberName);
            }
            else
            {
                // namespace    typename   result
                // Foo.Bar.Baz  Bebe       Foo.Bar.Baz.Bebe
                // Foo.Bar.Baz  Bebe+Momo  Foo.Bar.Baz.Bebe.Momo

                var declaringTypes = member.DeclaringType.
                                     Traverse(current => current.DeclaringType).
                                     Reverse().
                                     ToArray();
                var namespaceName = declaringTypes.FirstOrDefault()?.Namespace ??
                                    (member as TypeReference)?.Namespace;
                if (memberFormat.IsMangledName && (namespaceName != null))
                {
                    namespaceName = Utilities.GetMangledName(namespaceName);
                }

                return(string.Join(
                           memberFormat.NameSeparator,
                           ((namespaceName != null) ? new[] { namespaceName } : new string[0]).
                           Concat(declaringTypes.Select(type => ConstructUniqueName(type, true, memberFormat))). // Made inner types.
                           Concat(new[] { memberName })));
            }
        }
Example #3
0
        private static string ConstructUniqueName(
            MemberReference member, bool onlyMemberName, bool containsArgumentIfMemberIsMethod, MemberElementFormats memberFormat)
        {
            if (member is TypeReference type)
            {
                return(ConstructUniqueName(type, onlyMemberName, memberFormat));
            }

            if (member is MethodReference method)
            {
                return(ConstructUniqueName(method, onlyMemberName, containsArgumentIfMemberIsMethod, memberFormat));
            }

            return(GetMemberName(member, onlyMemberName, memberFormat));
        }
Example #4
0
        private static string ConstructUniqueName(
            TypeReference type, bool onlyMemberName, MemberElementFormats memberFormat)
        {
            if (type is GenericParameter parameter)
            {
                // T
                return(parameter.Name);
            }

            if (type.IsArray)
            {
                // System.Array<int>
                return("System" + memberFormat.NameSeparator + "Array" +
                       memberFormat.PrefixForGeneric + ConstructUniqueName(type.GetElementType(), onlyMemberName, memberFormat) + memberFormat.PostfixForGeneric);
            }

            if (memberFormat.IsMangledName)
            {
                if (type.IsByReference)
                {
                    return(ConstructUniqueName(type.GetElementType(), onlyMemberName, memberFormat) + "_REF");
                }
                if (type.IsPointer)
                {
                    return(ConstructUniqueName(type.GetElementType(), onlyMemberName, memberFormat) + "_PTR");
                }
            }
            else
            {
                if (type.IsByReference)
                {
                    return(ConstructUniqueName(type.GetElementType(), onlyMemberName, memberFormat) + "&");
                }
                if (type.IsPointer)
                {
                    return(ConstructUniqueName(type.GetElementType(), onlyMemberName, memberFormat) + "*");
                }
            }

            var typeName = GetMemberName(type, onlyMemberName, memberFormat);

            if (type is GenericInstanceType genericInstanceType)
            {
                // FooType<int,T,long>
                return(typeName + memberFormat.PrefixForGeneric +
                       string.Join(memberFormat.MemberItemSeparator, genericInstanceType.GenericArguments.
                                   Select(a => ConstructUniqueName(a, false, memberFormat))) +
                       memberFormat.PostfixForGeneric);
            }

            if (type.HasGenericParameters)
            {
                // FooType<T,U,V>      ; GenericDefinition
                return(typeName + memberFormat.PrefixForGeneric +
                       string.Join(memberFormat.MemberItemSeparator, type.GenericParameters.
                                   Select(p => ConstructUniqueName(p, false, memberFormat))) +
                       memberFormat.PostfixForGeneric);
            }

            // FooType
            return(typeName);
        }