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
base.VisitInvocationExpression(invocationExpression); base.VisitInvocationExpression(invocationExpression);
var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult; 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; return;
} }
AddIssue(invocationExpression, ctx.TranslateString("Call resolves to Object.GetHashCode, which is reference based")); 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
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context); var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(1, issues.Count); Assert.AreEqual(1, issues.Count);
} }
[Test] [Test]
public void NonObjectBase() public void NonObjectBase()
{ {
@ -67,6 +67,27 @@ class Bar : Foo
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context); var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(1, issues.Count); 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] [Test]
public void DoesNotCheckOutsideOverriddenGetHashCode() public void DoesNotCheckOutsideOverriddenGetHashCode()

Loading…
Cancel
Save