public static string GetIdValue(MethodReference methodDefinition) { var spaceIndex = methodDefinition.FullName.IndexOf(" ", StringComparison.Ordinal); var signature = methodDefinition.FullName.Substring(spaceIndex + 1); var genericTypeMarkerIndex = signature.IndexOf("`", StringComparison.Ordinal); if (genericTypeMarkerIndex > -1) // is a method of a generic type and needs special logic { var twoDotsIndex = signature.IndexOf("::", StringComparison.Ordinal); if (twoDotsIndex < genericTypeMarkerIndex) { return(signature); } // extra generic types of method name if (signature.IndexOf("!") > -1) { try { var genericTypes = TypeService.GetGenericTypeParametersFromMethodName(methodDefinition.FullName); signature = TypeService.ReplaceGenericPlaceholders(signature, genericTypes); var fullNameWithGenTypes = signature.Substring(0, genericTypeMarkerIndex + 2) + signature.Substring(twoDotsIndex); return(fullNameWithGenTypes); } catch (Exception ex) { } } var fullName = signature.Substring(0, genericTypeMarkerIndex + 2) + signature.Substring(twoDotsIndex); return(fullName); } else if (methodDefinition.CallingConvention == MethodCallingConvention.Generic) // generic method { var genericTypes = TypeService.GetGenericMethodParameters(methodDefinition.FullName); var elementMethod = methodDefinition.GetElementMethod().FullName; elementMethod = TypeService.ReplaceGenericPlaceholders(elementMethod, genericTypes); spaceIndex = elementMethod.IndexOf(" ", StringComparison.Ordinal); signature = elementMethod.Substring(spaceIndex + 1); } return(signature); }