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); }
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; }
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; }