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); } }
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 }))); } }
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)); }
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); }