Exemplo n.º 1
0
        public static ICollection <ImplementedMember> GetExplicitlyImplementedMethods(this MethodDefinition method)
        {
            HashSet <ImplementedMember> result = new HashSet <ImplementedMember>();

            if (!method.IsExplicitImplementation())
            {
                return(result);
            }

            TypeDefinition declaringType = method.DeclaringType;

            foreach (TypeReference interfaceRef in declaringType.Interfaces)
            {
                TypeDefinition interfaceDef = interfaceRef.Resolve();
                if (interfaceDef != null)
                {
                    MethodReference explicitlyImplementedMethod = method.GetExplicitlyImplementedMethodFromInterface(interfaceDef);

                    if (explicitlyImplementedMethod != null)
                    {
                        ImplementedMember explicitlyImplementedMember = new ImplementedMember(interfaceRef, explicitlyImplementedMethod);

                        if (!result.Contains(explicitlyImplementedMember))
                        {
                            result.Add(explicitlyImplementedMember);
                        }
                    }
                }
            }

            return(result.ToList());
        }
Exemplo n.º 2
0
        public static ICollection <ImplementedMember> GetImplementedMethods(this MethodDefinition method)
        {
            HashSet <ImplementedMember> result = new HashSet <ImplementedMember>();

            TypeDefinition declaringType = method.DeclaringType;

            foreach (TypeReference interfaceRef in declaringType.Interfaces)
            {
                if (interfaceRef is GenericInstanceType)
                {
                    GenericInstanceType genericInstanceInterface = interfaceRef as GenericInstanceType;

                    MethodReference implementedMethod = method.GetImplementedMethodFromGenericInstanceType(genericInstanceInterface);

                    if (implementedMethod != null)
                    {
                        ImplementedMember implementedMember = new ImplementedMember(interfaceRef, implementedMethod);

                        if (!result.Contains(implementedMember))
                        {
                            result.Add(implementedMember);
                            continue;
                        }
                    }
                }

                TypeDefinition interfaceDef = interfaceRef.Resolve();
                if (interfaceDef != null)
                {
                    MethodReference implementedMethod = method.GetImplementedMethodFromInterface(interfaceDef);

                    if (implementedMethod != null)
                    {
                        ImplementedMember implementedMember = new ImplementedMember(interfaceRef, implementedMethod);

                        if (!result.Contains(implementedMember))
                        {
                            result.Add(implementedMember);
                        }
                    }
                }
            }

            return(result.ToList());
        }