From a9e0bd901d8e125ec5aa80be04828cd2b2f201a7 Mon Sep 17 00:00:00 2001 From: Simon Lindgren Date: Tue, 14 Aug 2012 16:15:32 +0200 Subject: [PATCH] [CodeIssues] IncorrectCallTogetHashCodeIssue: Only look at calls to members of 'base' or 'this'. --- .../IncorrectCallToObjectGetHashCodeIssue.cs | 3 ++- .../IncorrectCallToGetHashCodeTests.cs | 23 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs index 8a83c9d89a..f22d87e21a 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs @@ -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")); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/IncorrectCallToGetHashCodeTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/IncorrectCallToGetHashCodeTests.cs index 95ca2c6537..13ad1da17a 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/IncorrectCallToGetHashCodeTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/IncorrectCallToGetHashCodeTests.cs @@ -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 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()