Browse Source

[CodeIssues] IncorrectCallTogetHashCodeIssue: Only look at calls to members of 'base' or 'this'.

newNRvisualizers
Simon Lindgren 14 years ago
parent
commit
a9e0bd901d
  1. 3
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs
  2. 23
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/IncorrectCallToGetHashCodeTests.cs

3
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs

@ -65,7 +65,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -65,7 +65,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
base.VisitInvocationExpression(invocationExpression);
var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult;
if (resolveResult == null || !resolveResult.Member.DeclaringTypeDefinition.IsKnownType(KnownTypeCode.Object)) {
if (resolveResult == null || !(resolveResult.TargetResult is ThisResolveResult) ||
!resolveResult.Member.DeclaringTypeDefinition.IsKnownType(KnownTypeCode.Object)) {
return;
}
AddIssue(invocationExpression, ctx.TranslateString("Call resolves to Object.GetHashCode, which is reference based"));

23
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/IncorrectCallToGetHashCodeTests.cs

@ -48,7 +48,7 @@ class Foo @@ -48,7 +48,7 @@ class Foo
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
}
[Test]
public void NonObjectBase()
{
@ -67,6 +67,27 @@ class Bar : Foo @@ -67,6 +67,27 @@ class Bar : Foo
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
}
[Test]
public void IgnoresCallsToOtherObjects()
{
var input = @"
interface IFoo
{
}
class Bar : IFoo
{
IFoo foo;
public override int GetHashCode()
{
return foo.GetHashCode();
}
}";
TestRefactoringContext context;
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
[Test]
public void DoesNotCheckOutsideOverriddenGetHashCode()

Loading…
Cancel
Save