Skip to content

Commit

Permalink
Remove the upcast in InheritanceHelper.GetBaseMembers()
Browse files Browse the repository at this point in the history
  • Loading branch information
dgrunwald committed Dec 12, 2013
1 parent 137027c commit 72e152d
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 6 deletions.
2 changes: 2 additions & 0 deletions ICSharpCode.NRefactory.CSharp/Resolver/CSharpOperators.cs
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ TypeParameterSubstitution IMember.Substitution {

IMember IMember.Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))
return this;
throw new NotSupportedException();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ public IMethod InvokeAccessor {

public override IMember Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))
return this;
return new SpecializedEvent(this, substitution);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ public object ConstantValue {

public override IMember Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))
return this;
return new SpecializedField(this, substitution);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,11 +248,15 @@ public override IMemberReference ToMemberReference()

public override IMember Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))
return this;
return new SpecializedMethod(this, substitution);
}

IMethod IMethod.Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))
return this;
return new SpecializedMethod(this, substitution);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public override IMemberReference ToMemberReference()

public override IMember Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))
return this;
return new SpecializedProperty(this, substitution);
}
}
Expand Down
9 changes: 3 additions & 6 deletions ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ public static IEnumerable<IMember> GetBaseMembers(IMember member, bool includeIm
yield return member;
}

// TODO: can we get rid of this upcast?
SpecializedMember specializedMember = member as SpecializedMember;
// Remove generic specialization
var substitution = member.Substitution;
member = member.MemberDefinition;

IEnumerable<IType> allBaseTypes;
Expand All @@ -79,10 +79,7 @@ public static IEnumerable<IMember> GetBaseMembers(IMember member, bool includeIm
}
foreach (IMember baseMember in baseMembers) {
if (SignatureComparer.Ordinal.Equals(member, baseMember)) {
if (specializedMember != null)
yield return baseMember.Specialize(specializedMember.Substitution);
else
yield return baseMember;
yield return baseMember.Specialize(substitution);
}
}
}
Expand Down

0 comments on commit 72e152d

Please sign in to comment.