public static ICollection <ImplementedMember> GetExplicitlyImplementedEvents(this EventDefinition self)
 {
     V_0 = new List <ImplementedMember>();
     if (!self.IsExplicitImplementation())
     {
         return(V_0);
     }
     if (self.get_AddMethod() != null)
     {
         V_1 = self.get_AddMethod().GetExplicitlyImplementedMethods().GetEnumerator();
         try
         {
             while (V_1.MoveNext())
             {
                 V_2 = V_1.get_Current();
                 V_3 = EventDefinitionExtensions.GetMethodDeclaringEvent(V_2.get_Member() as MethodReference);
                 if (V_3 == null)
                 {
                     continue;
                 }
                 V_0.Add(new ImplementedMember(V_2.get_DeclaringType(), V_3));
             }
         }
         finally
         {
             if (V_1 != null)
             {
                 V_1.Dispose();
             }
         }
         return(V_0);
     }
     if (self.get_RemoveMethod() == null)
     {
         return(V_0);
     }
     V_1 = self.get_RemoveMethod().GetExplicitlyImplementedMethods().GetEnumerator();
     try
     {
         while (V_1.MoveNext())
         {
             V_4 = V_1.get_Current();
             V_5 = EventDefinitionExtensions.GetMethodDeclaringEvent(V_4.get_Member() as MethodReference);
             if (V_5 == null)
             {
                 continue;
             }
             V_0.Add(new ImplementedMember(V_4.get_DeclaringType(), V_5));
         }
     }
     finally
     {
         if (V_1 != null)
         {
             V_1.Dispose();
         }
     }
     return(V_0);
 }
        public static ICollection <ImplementedMember> GetExplicitlyImplementedEvents(this EventDefinition self)
        {
            List <ImplementedMember> result = new List <ImplementedMember>();

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

            if (self.AddMethod != null)
            {
                ICollection <ImplementedMember> explicitlyImplementedAddMethods = self.AddMethod.GetExplicitlyImplementedMethods();
                foreach (ImplementedMember explicitlyImplementedAddMethod in explicitlyImplementedAddMethods)
                {
                    EventDefinition explicitlyImplementedEvent = GetMethodDeclaringEvent(explicitlyImplementedAddMethod.Member as MethodReference);
                    if (explicitlyImplementedEvent != null)
                    {
                        result.Add(new ImplementedMember(explicitlyImplementedAddMethod.DeclaringType, explicitlyImplementedEvent));
                    }
                }

                return(result);
            }

            if (self.RemoveMethod != null)
            {
                ICollection <ImplementedMember> explicitlyImplementedRemoveMethods = self.RemoveMethod.GetExplicitlyImplementedMethods();
                foreach (ImplementedMember explicitlyImplementedRemoveMethod in explicitlyImplementedRemoveMethods)
                {
                    EventDefinition explicitlyImplementedEvent = GetMethodDeclaringEvent(explicitlyImplementedRemoveMethod.Member as MethodReference);
                    if (explicitlyImplementedEvent != null)
                    {
                        result.Add(new ImplementedMember(explicitlyImplementedRemoveMethod.DeclaringType, explicitlyImplementedEvent));
                    }
                }

                return(result);
            }

            return(result);
        }
        public static bool IsExplicitImplementationOf(this EventDefinition self, TypeDefinition @interface)
        {
            if (@interface == null)
            {
                throw new ArgumentNullException("@interface can not be null.");
            }

            if ([email protected])
            {
                throw new ArgumentOutOfRangeException("The @interface argument is not an interface definition.");
            }

            if (!self.IsExplicitImplementation())
            {
                return(false);
            }

            if (self.DeclaringType.FullName == @interface.FullName)
            {
                return(true);
            }

            if (self.AddMethod != null)
            {
                if (!self.AddMethod.IsExplicitImplementationOf(@interface))
                {
                    return(false);
                }
            }

            if (self.RemoveMethod != null)
            {
                if (!self.RemoveMethod.IsExplicitImplementationOf(@interface))
                {
                    return(false);
                }
            }

            return(true);
        }
        public static string GetFullMemberName(this IMemberDefinition self, ILanguage language)
        {
            if (self is TypeDefinition || self is FieldDefinition)
            {
                return(GenericHelper.ReplaceInvalidCharactersName(language, self.Name));
            }
            if (self is EventDefinition)
            {
                EventDefinition @event = self as EventDefinition;

                if (@event.IsExplicitImplementation())
                {
                    string[] nameParts = @event.Name.Split(new char[] { '.' });

                    var sb = new StringBuilder(nameParts.Length * 2);

                    for (int i = 0; i < nameParts.Length; i++)
                    {
                        string namePart = nameParts[i];

                        sb.Append(GenericHelper.ReplaceInvalidCharactersName(language, namePart));

                        if (i < nameParts.Length - 1)
                        {
                            sb.Append(".");
                        }
                    }
                    return(sb.ToString());
                }
                return(GenericHelper.ReplaceInvalidCharactersName(language, self.Name));
            }
            else if (self is MethodDefinition)
            {
                return((self as MethodDefinition).GetFriendlyFullMethodReferenceName(language, self.Name, false));
            }
            else if (self is PropertyDefinition)
            {
                PropertyDefinition propertyDefinition = self as PropertyDefinition;

                if (propertyDefinition.IsExplicitImplementation())
                {
                    string[] nameParts = propertyDefinition.Name.Split(new char[] { '.' });

                    var sb = new StringBuilder(nameParts.Length * 2);

                    for (int i = 0; i < nameParts.Length; i++)
                    {
                        string namePart = nameParts[i];

                        sb.Append(GenericHelper.ReplaceInvalidCharactersName(language, namePart));

                        if (i < nameParts.Length - 1)
                        {
                            sb.Append(".");
                        }
                    }
                    sb.Append("()");
                    return(sb.ToString());
                }
                else
                {
                    return((self as PropertyDefinition).GetFriendlyFullPropertyDefinitionName(language, self.Name));
                }
            }
            throw new Exception("Invalid member definition type.");
        }