Browse Source

[CodeIssues] Check method names before concluding there is a problem.

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

2
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToObjectEqualsViaBaseIssue.cs

@ -56,7 +56,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -56,7 +56,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
return;
}
var memberExpression = invocationExpression.Target as MemberReferenceExpression;
if (memberExpression == null || !(memberExpression.Target is BaseReferenceExpression)) {
if (memberExpression == null || memberExpression.MemberName != "Equals" || !(memberExpression.Target is BaseReferenceExpression)) {
return;
}
var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult;

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

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

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

@ -88,7 +88,7 @@ class Bar : IFoo @@ -88,7 +88,7 @@ class Bar : IFoo
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
[Test]
public void DoesNotCheckOutsideOverriddenGetHashCode()
{
@ -99,6 +99,23 @@ class Foo @@ -99,6 +99,23 @@ class Foo
{
return base.GetHashCode();
}
}";
TestRefactoringContext context;
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
[Test]
public void DoesNotWarnAboutCallsToOtherMethods()
{
var input = @"
class Foo
{
public override int GetHashCode()
{
var type = GetType();
return 1;
}
}";
TestRefactoringContext context;
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);

Loading…
Cancel
Save