示例#1
0
        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);
        }
示例#2
0
        private static string GetGenericMethodKey(string signature, int genericMarkerIndex)
        {
            var twoDotsIndex = signature.IndexOf("::", StringComparison.Ordinal);

            if (twoDotsIndex < genericMarkerIndex)
            {
                return(signature);
            }

            // extra generic types of method name
            if (signature.IndexOf("!") > -1)
            {
                try
                {
                    var genericTypes = TypeService.GetGenericTypeParametersFromMethodName(signature);

                    for (int i = 0; i < 4; i++)
                    {
                        var genParamPlaceholder = "!" + i;
                        if (signature.IndexOf(genParamPlaceholder) > -1)
                        {
                            signature = signature.Replace(genParamPlaceholder, genericTypes[i]);
                        }
                        else
                        {
                            break;
                        }
                    }

                    var fullNameWithGenTypes = signature.Substring(0, genericMarkerIndex + 2) + signature.Substring(twoDotsIndex);
                    return(fullNameWithGenTypes);
                }
                catch (Exception ex)
                {
                }
            }

            var fullName = signature.Substring(0, genericMarkerIndex + 2) + signature.Substring(twoDotsIndex);

            return(fullName);
        }