public void CountArgumentsInMemberInfo() { Assert.Equal(0, NRefactoryExtensions.GetArgumentCount("Method: void Console.WriteLine()")); Assert.Equal(1, NRefactoryExtensions.GetArgumentCount("Method: void Console.WriteLine(bool value)")); Assert.Equal(2, NRefactoryExtensions.GetArgumentCount("Method: void Console.WriteLine(bool value, object arg0)")); Assert.Equal(2, NRefactoryExtensions.GetArgumentCount("Method: void Class.Method(string text, Dictionary<int, string> map)")); Assert.Equal(3, NRefactoryExtensions.GetArgumentCount("Method: void Class.Method(string text, Dictionary<int, string> map, int count)")); }
public override object VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, object data) { ExpressionStatement stmt = constructorDeclaration.Body.Statements.FirstOrDefault() as ExpressionStatement; if (stmt == null) { return(null); } InvocationExpression invocation = stmt.Expression as InvocationExpression; if (invocation == null) { return(null); } MemberReferenceExpression mre = invocation.Target as MemberReferenceExpression; if (mre != null && mre.MemberName == ".ctor") { ConstructorInitializer ci = new ConstructorInitializer(); if (mre.Target is ThisReferenceExpression) { ci.ConstructorInitializerType = ConstructorInitializerType.This; } else if (mre.Target is BaseReferenceExpression) { ci.ConstructorInitializerType = ConstructorInitializerType.Base; } else { return(null); } // Move arguments from invocation to initializer: invocation.Arguments.MoveTo(ci.Arguments); var ilRanges = stmt.GetAllRecursiveILRanges(); // Add the initializer: (unless it is the default 'base()') if (!(ci.ConstructorInitializerType == ConstructorInitializerType.Base && ci.Arguments.Count == 0)) { constructorDeclaration.Initializer = ci.WithAnnotation(invocation.Annotation <IMethod>()); ci.AddAnnotation(ilRanges); } else { constructorDeclaration.Body.HiddenStart = NRefactoryExtensions.CreateHidden(ilRanges, constructorDeclaration.Body.HiddenStart); } // Remove the statement: stmt.Remove(); } return(null); }