diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/LocalVariableNotUsedIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/LocalVariableNotUsedIssue.cs index f43453f06c..76f6912663 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/LocalVariableNotUsedIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/LocalVariableNotUsedIssue.cs @@ -79,6 +79,18 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } }); } + + public override void VisitForeachStatement (ForeachStatement foreachStatement) + { + var resolveResult = ctx.Resolve (foreachStatement.VariableNameToken) as LocalResolveResult; + if (resolveResult == null) + return; + + if (FindUsage (ctx, unit, resolveResult.Variable, foreachStatement.VariableNameToken)) + return; + + AddIssue (foreachStatement.VariableNameToken, ctx.TranslateString ("Local variable is never used")); + } } } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/LocalVariableNotUsedIssueTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/LocalVariableNotUsedIssueTests.cs index 40a8a3baf4..cf3f5ce594 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/LocalVariableNotUsedIssueTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/LocalVariableNotUsedIssueTests.cs @@ -91,5 +91,38 @@ class TestClass { Test (input2, 0); } + [Test] + public void TestUnusedForeachVariable () + { + var input = @" +class TestClass { + void TestMethod () + { + var array = new int[10]; + foreach (var i in array) { + } + } +}"; + Test (input, 1); + + } + + [Test] + public void TestUsedForeachVariable () + { + var input = @" +class TestClass { + void TestMethod () + { + var array = new int[10]; + int j = 0; + foreach (var i in array) { + j += i; + } + } +}"; + Test (input, 0); + } + } }