From ce739a62bf55d73737b3cfba6877284bc5ff2e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Wed, 30 Jan 2013 08:41:46 +0100 Subject: [PATCH] Fixed bug in declare local action. --- .../CreateMethodDeclarationAction.cs | 13 ++++++-- .../CodeActions/DeclareLocalVariableTests.cs | 33 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs index 57e8c28348..b2ff6396c0 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs @@ -291,14 +291,21 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } else { return char.ToLower(type.Name [0]).ToString(); } + } else if (node is ArrayCreateExpression) { + name = "arr"; } else { if (type.Kind == TypeKind.Unknown) return "par"; name = GuessNameFromType(type); } - - name = char.ToLower(name [0]) + name.Substring(1); - return name; + var sb = new StringBuilder (); + sb.Append (char.ToLower(name [0])); + for (int i = 1; i < name.Length; i++) { + var ch = name[i]; + if (char.IsLetterOrDigit (ch) || ch == '_') + sb.Append (ch); + } + return sb.ToString (); } static string GuessNameFromType(IType returnType) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs index f1132ff2f4..ac09dfc9ab 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/DeclareLocalVariableTests.cs @@ -265,5 +265,38 @@ namespace ICSharpCode.NRefactory.CSharp.CodeActions ", 1); } + + /// + /// Bug 9873 - Declare local creates invalid code for implicitly typed array + /// + [Test()] + public void TestBug9873 () + { + TestRefactoringContext.UseExplict = true; + Test (@"class TestClass +{ + void DoStuff() + { + foreach (var i in <-new[] { 1, 2, 3 }->) { + Console.WriteLine (i); + } + } +}", + @"class TestClass +{ + void DoStuff() + { + int[] arr = new[] { + 1, + 2, + 3 + }; + foreach (var i in arr) { + Console.WriteLine (i); + } + } +}"); + } + } }