protected ExplicitlyImplementedMembersCollection GetExplicitlyImplementedInterfaceMethods(TypeDefinition type, ILanguage language)
        {
            ExplicitlyImplementedMembersCollection result = new ExplicitlyImplementedMembersCollection();

            IEnumerable <IMemberDefinition> members = type.GetMembersUnordered(true);

            foreach (IMemberDefinition member in members)
            {
                if (member is MethodDefinition)
                {
                    MethodDefinition method = member as MethodDefinition;
                    ICollection <ImplementedMember> explicitlyImplementedMethods = method.GetExplicitlyImplementedMethods();
                    AddExplicitlyImplementedMembers(explicitlyImplementedMethods, result);
                }

                if (member is PropertyDefinition)
                {
                    PropertyDefinition property = member as PropertyDefinition;
                    ICollection <ImplementedMember> explicitlyImplementedProperties = property.GetExplicitlyImplementedProperties();
                    AddExplicitlyImplementedMembers(explicitlyImplementedProperties, result);
                }

                if (member is EventDefinition)
                {
                    EventDefinition @event = member as EventDefinition;
                    ICollection <ImplementedMember> explicitlyImplementedEvents = @event.GetExplicitlyImplementedEvents();
                    AddExplicitlyImplementedMembers(explicitlyImplementedEvents, result);
                }
            }

            return(result);
        }
        protected virtual TypeSpecificContext GetTypeContext(TypeDefinition type, ILanguage language, Dictionary <string, DecompiledType> decompiledTypes)
        {
            DecompiledType decompiledCurrentType;

            if (!decompiledTypes.TryGetValue(type.FullName, out decompiledCurrentType))
            {
                throw new Exception("Decompiled type not found in decompiled types cache.");
            }

            TypeSpecificContext typeContext;

            if (this.cacheService.IsTypeContextInCache(type, language, this.renameInvalidMembers))
            {
                typeContext = this.cacheService.GetTypeContextFromCache(type, language, this.renameInvalidMembers);
            }
            else
            {
                ICollection <TypeReference>            typesDependingOn    = GetTypesDependingOn(decompiledTypes, language);
                ICollection <string>                   usedNamespaces      = GetUsedNamespaces(typesDependingOn, type.Namespace);
                ICollection <string>                   visibleMembersNames = GetTypeVisibleMembersNames(type, language);
                ExplicitlyImplementedMembersCollection explicitlyImplementedInterfaceMethods = GetExplicitlyImplementedInterfaceMethods(type, language);

                typeContext = new TypeSpecificContext(
                    type,
                    decompiledCurrentType.TypeContext.MethodDefinitionToNameMap,
                    decompiledCurrentType.TypeContext.BackingFieldToNameMap,
                    usedNamespaces,
                    visibleMembersNames,
                    decompiledCurrentType.TypeContext.FieldAssignmentData,
                    GetAutoImplementedProperties(decompiledTypes),
                    GetAutoImplementedEvents(decompiledTypes),
                    explicitlyImplementedInterfaceMethods,
                    this.ExceptionsWhileDecompiling
                    );

                this.cacheService.AddTypeContextToCache(type, language, this.renameInvalidMembers, typeContext);
            }

            return(typeContext);
        }
示例#3
0
        private TypeSpecificContext CreateTypeContext(TypeDefinition type, ILanguage language, Dictionary <string, DecompiledType> decompiledTypes, DecompiledType decompiledCurrentType)
        {
            ICollection <TypeReference>            typesDependingOn    = GetTypesDependingOn(decompiledTypes, language);
            ICollection <string>                   usedNamespaces      = GetUsedNamespaces(typesDependingOn, type.Namespace);
            ICollection <string>                   visibleMembersNames = GetTypeVisibleMembersNames(type, language, decompiledTypes);
            ExplicitlyImplementedMembersCollection explicitlyImplementedInterfaceMethods = GetExplicitlyImplementedInterfaceMethods(type, language);

            return(new TypeSpecificContext(
                       type,
                       decompiledCurrentType.TypeContext.MethodDefinitionToNameMap,
                       decompiledCurrentType.TypeContext.BackingFieldToNameMap,
                       usedNamespaces,
                       visibleMembersNames,
                       decompiledCurrentType.TypeContext.AssignmentData,
                       GetAutoImplementedProperties(decompiledTypes),
                       GetAutoImplementedEvents(decompiledTypes),
                       explicitlyImplementedInterfaceMethods,
                       this.ExceptionsWhileDecompiling,
                       decompiledCurrentType.TypeContext.GeneratedFilterMethods,
                       decompiledCurrentType.TypeContext.GeneratedMethodDefinitionToNameMap
                       ));
        }
 private void AddExplicitlyImplementedMembers(ICollection <ImplementedMember> explicitlyImplementedMembers, ExplicitlyImplementedMembersCollection collection)
 {
     foreach (ImplementedMember explicitlyImplementedMember in explicitlyImplementedMembers)
     {
         if (!collection.Contains(explicitlyImplementedMember.DeclaringType, explicitlyImplementedMember.Member.FullName))
         {
             collection.Add(explicitlyImplementedMember.DeclaringType, explicitlyImplementedMember.Member.FullName);
         }
     }
 }
 private void AddExplicitlyImplementedMembers(ICollection<ImplementedMember> explicitlyImplementedMembers, ExplicitlyImplementedMembersCollection collection)
 {
     foreach (ImplementedMember explicitlyImplementedMember in explicitlyImplementedMembers)
     {
         if (!collection.Contains(explicitlyImplementedMember.DeclaringType, explicitlyImplementedMember.Member.FullName))
         {
             collection.Add(explicitlyImplementedMember.DeclaringType, explicitlyImplementedMember.Member.FullName);
         }
     }
 }
        protected ExplicitlyImplementedMembersCollection GetExplicitlyImplementedInterfaceMethods(TypeDefinition type, ILanguage language)
        {
            ExplicitlyImplementedMembersCollection result = new ExplicitlyImplementedMembersCollection();

            IEnumerable<IMemberDefinition> members = type.GetMembersUnordered(true);
            foreach (IMemberDefinition member in members)
            {
                if (member is MethodDefinition)
                {
                    MethodDefinition method = member as MethodDefinition;
                    ICollection<ImplementedMember> explicitlyImplementedMethods = method.GetExplicitlyImplementedMethods();
                    AddExplicitlyImplementedMembers(explicitlyImplementedMethods, result);
                }

                if (member is PropertyDefinition)
                {
                    PropertyDefinition property = member as PropertyDefinition;
                    ICollection<ImplementedMember> explicitlyImplementedProperties = property.GetExplicitlyImplementedProperties();
                    AddExplicitlyImplementedMembers(explicitlyImplementedProperties, result);
                }

                if (member is EventDefinition)
                {
                    EventDefinition @event = member as EventDefinition;
                    ICollection<ImplementedMember> explicitlyImplementedEvents = @event.GetExplicitlyImplementedEvents();
                    AddExplicitlyImplementedMembers(explicitlyImplementedEvents, result);
                }
            }

            return result;
        }
示例#7
0
 private void AddExplicitlyImplementedMembers(ICollection <ImplementedMember> explicitlyImplementedMembers, ExplicitlyImplementedMembersCollection collection)
 {
     V_0 = explicitlyImplementedMembers.GetEnumerator();
     try
     {
         while (V_0.MoveNext())
         {
             V_1 = V_0.get_Current();
             if (collection.Contains(V_1.get_DeclaringType(), V_1.get_Member().get_FullName()))
             {
                 continue;
             }
             collection.Add(V_1.get_DeclaringType(), V_1.get_Member().get_FullName());
         }
     }
     finally
     {
         if (V_0 != null)
         {
             V_0.Dispose();
         }
     }
     return;
 }