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
return; return;
} }
var memberExpression = invocationExpression.Target as MemberReferenceExpression; var memberExpression = invocationExpression.Target as MemberReferenceExpression;
if (memberExpression == null || !(memberExpression.Target is BaseReferenceExpression)) { if (memberExpression == null || memberExpression.MemberName != "Equals" || !(memberExpression.Target is BaseReferenceExpression)) {
return; return;
} }
var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult; var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult;

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

@ -65,7 +65,7 @@ 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.TargetResult is ThisResolveResult) || if (resolveResult == null || !(resolveResult.TargetResult is ThisResolveResult) || resolveResult.Member.Name != "GetHashCode" ||
!resolveResult.Member.DeclaringTypeDefinition.IsKnownType(KnownTypeCode.Object)) { !resolveResult.Member.DeclaringTypeDefinition.IsKnownType(KnownTypeCode.Object)) {
return; return;
} }

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

@ -88,7 +88,7 @@ class Bar : IFoo
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context); var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);
Assert.AreEqual(0, issues.Count); Assert.AreEqual(0, issues.Count);
} }
[Test] [Test]
public void DoesNotCheckOutsideOverriddenGetHashCode() public void DoesNotCheckOutsideOverriddenGetHashCode()
{ {
@ -99,6 +99,23 @@ class Foo
{ {
return base.GetHashCode(); 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; TestRefactoringContext context;
var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context); var issues = GetIssues(new IncorrectCallToObjectGetHashCodeIssue(), input, out context);

Loading…
Cancel
Save