diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToStaticMemberViaDerivedTypeIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToStaticMemberViaDerivedTypeIssue.cs index a436b3a59c..42dcc6540c 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToStaticMemberViaDerivedTypeIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToStaticMemberViaDerivedTypeIssue.cs @@ -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; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CallToStaticMemberViaDerivedTypeTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CallToStaticMemberViaDerivedTypeTests.cs index d9bd8b1c84..0588fc2835 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CallToStaticMemberViaDerivedTypeTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CallToStaticMemberViaDerivedTypeTests.cs @@ -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); } + } }