Browse Source

Added support for specialized members to InheritanceHelper.GetBaseMember().

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
b3acaaf40e
  1. 17
      ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs

17
ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs

@ -19,6 +19,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
namespace ICSharpCode.NRefactory.TypeSystem namespace ICSharpCode.NRefactory.TypeSystem
{ {
@ -50,13 +51,15 @@ namespace ICSharpCode.NRefactory.TypeSystem
if (member == null) if (member == null)
throw new ArgumentNullException("member"); throw new ArgumentNullException("member");
member = member.MemberDefinition;
if (member.IsExplicitInterfaceImplementation && member.ImplementedInterfaceMembers.Count == 1) { if (member.IsExplicitInterfaceImplementation && member.ImplementedInterfaceMembers.Count == 1) {
// C#-style explicit interface implementation // C#-style explicit interface implementation
yield return member.ImplementedInterfaceMembers[0]; member = member.ImplementedInterfaceMembers[0];
member = member.ImplementedInterfaceMembers[0].MemberDefinition; yield return member;
} }
SpecializedMember specializedMember = member as SpecializedMember;
member = member.MemberDefinition;
IEnumerable<IType> allBaseTypes; IEnumerable<IType> allBaseTypes;
if (includeImplementedInterfaces) { if (includeImplementedInterfaces) {
allBaseTypes = member.DeclaringTypeDefinition.GetAllBaseTypes(); allBaseTypes = member.DeclaringTypeDefinition.GetAllBaseTypes();
@ -68,8 +71,12 @@ namespace ICSharpCode.NRefactory.TypeSystem
continue; continue;
foreach (IMember baseMember in baseType.GetMembers(m => m.Name == member.Name, GetMemberOptions.IgnoreInheritedMembers)) { foreach (IMember baseMember in baseType.GetMembers(m => m.Name == member.Name, GetMemberOptions.IgnoreInheritedMembers)) {
if (SignatureComparer.Ordinal.Equals(member, baseMember)) if (SignatureComparer.Ordinal.Equals(member, baseMember)) {
yield return baseMember; if (specializedMember != null)
yield return SpecializedMember.Create(baseMember, specializedMember.Substitution);
else
yield return baseMember;
}
} }
} }
} }

Loading…
Cancel
Save