Browse Source

(Rather ugly) fix for indexer accessor's ImplementedInterfaceMembers.

newNRvisualizers
erikkallen 14 years ago
parent
commit
fd39748fcf
  1. 60
      ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs

60
ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs

@ -73,36 +73,38 @@ namespace ICSharpCode.NRefactory.TypeSystem
if (member is IMethod && ((IMethod)member).IsAccessor) { if (member is IMethod && ((IMethod)member).IsAccessor) {
var accessorOwner = ((IMethod)member).AccessorOwner; var accessorOwner = ((IMethod)member).AccessorOwner;
foreach (IMember baseOwner in baseType.GetMembers(m => m.Name == accessorOwner.Name, GetMemberOptions.IgnoreInheritedMembers)) { foreach (IMember baseOwner in baseType.GetMembers(m => m.Name == accessorOwner.Name, GetMemberOptions.IgnoreInheritedMembers)) {
if (accessorOwner is IProperty && baseOwner is IProperty) { if (SignatureComparer.Ordinal.Equals(accessorOwner, baseOwner)) {
var accessorProperty = (IProperty)accessorOwner; if (accessorOwner is IProperty && baseOwner is IProperty) {
var baseProperty = (IProperty)baseOwner; var accessorProperty = (IProperty)accessorOwner;
if (member == accessorProperty.Getter && baseProperty.CanGet) { var baseProperty = (IProperty)baseOwner;
if (specializedMember != null) if (member == accessorProperty.Getter && baseProperty.CanGet) {
yield return SpecializedMember.Create(baseProperty.Getter, specializedMember.Substitution); if (specializedMember != null)
else yield return SpecializedMember.Create(baseProperty.Getter, specializedMember.Substitution);
yield return baseProperty.Getter; else
yield return baseProperty.Getter;
}
if (member == accessorProperty.Setter && baseProperty.CanSet) {
if (specializedMember != null)
yield return SpecializedMember.Create(baseProperty.Setter, specializedMember.Substitution);
else
yield return baseProperty.Setter;
}
} }
if (member == accessorProperty.Setter && baseProperty.CanSet) { else if (accessorOwner is IEvent && baseOwner is IEvent) {
if (specializedMember != null) var accessorEvent = (IEvent)accessorOwner;
yield return SpecializedMember.Create(baseProperty.Setter, specializedMember.Substitution); var baseEvent = (IEvent)baseOwner;
else if (member == accessorEvent.AddAccessor && baseEvent.CanAdd) {
yield return baseProperty.Setter; if (specializedMember != null)
} yield return SpecializedMember.Create(baseEvent.AddAccessor, specializedMember.Substitution);
} else
else if (accessorOwner is IEvent && baseOwner is IEvent) { yield return baseEvent.AddAccessor;
var accessorEvent = (IEvent)accessorOwner; }
var baseEvent = (IEvent)baseOwner; if (member == accessorEvent.RemoveAccessor && baseEvent.CanRemove) {
if (member == accessorEvent.AddAccessor && baseEvent.CanAdd) { if (specializedMember != null)
if (specializedMember != null) yield return SpecializedMember.Create(baseEvent.RemoveAccessor, specializedMember.Substitution);
yield return SpecializedMember.Create(baseEvent.AddAccessor, specializedMember.Substitution); else
else yield return baseEvent.RemoveAccessor;
yield return baseEvent.AddAccessor; }
}
if (member == accessorEvent.RemoveAccessor && baseEvent.CanRemove) {
if (specializedMember != null)
yield return SpecializedMember.Create(baseEvent.RemoveAccessor, specializedMember.Substitution);
else
yield return baseEvent.RemoveAccessor;
} }
} }
} }

Loading…
Cancel
Save