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()