From 3b5e5731eae3b04de80c4f1714106ccacdfecc06 Mon Sep 17 00:00:00 2001 From: Simon Lindgren Date: Sun, 9 Sep 2012 01:17:47 +0200 Subject: [PATCH] [CodeIssues] Don't warn for unused parameters on overrides and interface implementations. --- .../ParameterNotUsedIssue.cs | 20 +++++++++++++ .../CodeIssues/ParameterNotUsedIssueTests.cs | 30 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/ParameterNotUsedIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/ParameterNotUsedIssue.cs index 1a07c73eac0..d8b24b8b56d 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/ParameterNotUsedIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/ParameterNotUsedIssue.cs @@ -25,6 +25,8 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Semantics; +using System.Linq; +using ICSharpCode.NRefactory.TypeSystem; namespace ICSharpCode.NRefactory.CSharp.Refactoring { @@ -51,6 +53,24 @@ public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit) this.unit = unit; } + public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration) + { + // Only some methods are candidates for the warning + + if (methodDeclaration.Body.IsNull) + return; + var methodResolveResult = ctx.Resolve(methodDeclaration) as MemberResolveResult; + if (methodResolveResult == null) + return; + var member = methodResolveResult.Member; + if (member.IsOverride) + return; + if (member.ImplementedInterfaceMembers.Any ()) + return; + + base.VisitMethodDeclaration(methodDeclaration); + } + public override void VisitParameterDeclaration (ParameterDeclaration parameterDeclaration) { base.VisitParameterDeclaration (parameterDeclaration); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterNotUsedIssueTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterNotUsedIssueTests.cs index 81da14b795f..e939c3cfa06 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterNotUsedIssueTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterNotUsedIssueTests.cs @@ -43,6 +43,36 @@ void TestMethod (int i) }"; Test (input, 1); } + + [Test] + public void TestInterfaceImplementation () + { + var input = @" +interface ITestClass { + void TestMethod (int i); +} +class TestClass : ITestClass { + public void TestMethod (int i) + { + } +}"; + Test (input, 0); + } + + [Test] + public void TestAbstractMethodImplementation () + { + var input = @" +abstract class TestBase { + public abstract void TestMethod (int i); +} +class TestClass : TestBase { + public override void TestMethod (int i) + { + } +}"; + Test (input, 0); + } [Test] public void TestUsedParameter ()