Browse Source

[CodeIssues] CallToStaticMemberViaDerivedTypeIssue: Ignore member methods of the current class.

newNRvisualizers
Simon Lindgren 13 years ago
parent
commit
1a7d2e1379
  1. 7
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToStaticMemberViaDerivedTypeIssue.cs
  2. 22
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CallToStaticMemberViaDerivedTypeTests.cs

7
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToStaticMemberViaDerivedTypeIssue.cs

@ -53,6 +53,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -53,6 +53,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public override void VisitInvocationExpression(InvocationExpression invocationExpression)
{
base.VisitInvocationExpression(invocationExpression);
if (invocationExpression.Target is IdentifierExpression)
// Call within current class scope without 'this' or 'base'
return;
var expression = invocationExpression.Target as MemberReferenceExpression;
if (expression == null || expression.Target is ThisReferenceExpression)
// Call within current class scope using 'this' or 'base'
return;
var invocationResolveResult = context.Resolve(invocationExpression) as InvocationResolveResult;
if (invocationResolveResult == null)
return;

22
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CallToStaticMemberViaDerivedTypeTests.cs

@ -200,6 +200,28 @@ class C @@ -200,6 +200,28 @@ class C
var issues = GetIssues(new CallToStaticMemberViaDerivedTypeIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
[Test]
public void IgnoresOwnMemberFunctions()
{
var input = @"
class A
{
protected static void F() { }
}
class B : A
{
void Main()
{
F();
this.F();
base.F();
}
}";
TestRefactoringContext context;
var issues = GetIssues(new CallToStaticMemberViaDerivedTypeIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
}
}

Loading…
Cancel
Save