From 2fc7cb01672a857c93c61655ae543fbb0b530604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Fri, 15 Feb 2013 12:04:59 +0100 Subject: [PATCH] Fixed create method action bug. --- .../Formatter/AstFormattingVisitor.cs | 2 +- .../CreateMethodDeclarationAction.cs | 4 +++- .../CreateMethodDeclarationTests.cs | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs b/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs index dade19d948..347e40ada4 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs @@ -928,7 +928,7 @@ namespace ICSharpCode.NRefactory.CSharp } } } else { - foreach (var arg in parameters) { + foreach (var arg in parameters.Skip (1)) { if (arg.PrevSibling != null) { if (methodCallArgumentWrapping == Wrapping.DoNotWrap) { ForceSpacesBeforeRemoveNewLines(arg, spaceAfterMethodCallParameterComma && arg.PrevSibling.Role == Roles.Comma); diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs index b2ff6396c0..58bee9ccad 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/CreateMethodDeclarationAction.cs @@ -240,7 +240,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring nameCounter [name]++; name += nameCounter [name].ToString(); } - var type = resolveResult.Type.Kind == TypeKind.Unknown ? new PrimitiveType("object") : context.CreateShortType(resolveResult.Type); + var type = resolveResult.Type.Kind == TypeKind.Unknown || resolveResult.Type.Kind == TypeKind.Null ? new PrimitiveType("object") : context.CreateShortType(resolveResult.Type); yield return new ParameterDeclaration(type, name) { ParameterModifier = direction}; } @@ -278,6 +278,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring public static string CreateBaseName(AstNode node, IType type) { string name = null; + if (node is NullReferenceExpression) + return "o"; if (node is DirectionExpression) node = ((DirectionExpression)node).Expression; if (node is IdentifierExpression) { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/CreateMethodDeclarationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/CreateMethodDeclarationTests.cs index d05d3f70a1..2b9bdaf759 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/CreateMethodDeclarationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/CreateMethodDeclarationTests.cs @@ -714,6 +714,29 @@ class Foo "); } + [Test] + public void TestPassNullArgument () + { + Test (@"class TestClass +{ + void TestMethod () + { + $NonExistantMethod (null); + } +}", @"class TestClass +{ + void NonExistantMethod (object o) + { + throw new System.NotImplementedException (); + } + void TestMethod () + { + NonExistantMethod (null); + } +}"); + } + + } }