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