From 9c634c73fc3de97c73641e24419c1546c067098e Mon Sep 17 00:00:00 2001 From: Simon Lindgren Date: Fri, 24 Aug 2012 15:08:12 +0200 Subject: [PATCH] [CodeIssues] VariableDeclaredInWideScope: Handle moves into SwitchSections. --- .../VariableDeclaredInWideScopeIssue.cs | 9 ++-- .../VariableDeclaredInWideScopeTests.cs | 43 +++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableDeclaredInWideScopeIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableDeclaredInWideScopeIssue.cs index 02e3ac9ef7..224c41eb5c 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableDeclaredInWideScopeIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableDeclaredInWideScopeIssue.cs @@ -266,7 +266,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring IEnumerable GetActions(Statement oldStatement, Statement followingStatement) { yield return new CodeAction(context.TranslateString("Move to nested scope"), script => { - if (!(followingStatement.Parent is BlockStatement)) { + var parent = followingStatement.Parent; + if (parent is SwitchSection || parent is BlockStatement) { + script.InsertBefore(followingStatement, oldStatement.Clone()); + } else { var newBlockStatement = new BlockStatement { Statements = { oldStatement.Clone(), @@ -274,9 +277,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } }; script.Replace(followingStatement, newBlockStatement); - script.FormatText(followingStatement.Parent); - } else { - script.InsertBefore(followingStatement, oldStatement.Clone()); + script.FormatText(parent); } script.Remove(oldStatement); }); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/VariableDeclaredInWideScopeTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/VariableDeclaredInWideScopeTests.cs index 938988f98d..9f9a4a852c 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/VariableDeclaredInWideScopeTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/VariableDeclaredInWideScopeTests.cs @@ -553,6 +553,49 @@ class A SetValue (k); } } +}"); + } + + [Test] + public void CaseTarget () + { + var input = @" +using System; +class A +{ + int GetValue () { return 0; } + int SetValue (int i) { } + + void F (int i) + { + int j = GetValue (); + switch (i) { + case 2: + SetValue (j + 1); + break; + } + } +}"; + TestRefactoringContext context; + var issues = GetIssues(new VariableDeclaredInWideScopeIssue(), input, out context); + Assert.AreEqual(1, issues.Count); + + CheckFix(context, issues[0], @" +using System; +class A +{ + int GetValue () { return 0; } + int SetValue (int i) { } + + void F (int i) + { + switch (i) { + case 2: + int j = GetValue (); + SetValue (j + 1); + break; + } + } }"); } }