private void MoveOutOfClass(MethodDeclaration methodDeclaration) { var classDeclaration = (ClassDeclaration)methodDeclaration.Parent; if (!methodDeclaration.Modifiers.Contains(MemberModifier.Static)) { var thisParameter = new VariableDeclaration( methodDeclaration.Context, "this" + NumberWheel.Next(), new ReferenceType(methodDeclaration.Context, methodDeclaration.Parent).Yield() ); methodDeclaration.AddChildBefore(methodDeclaration.Variables.FirstOrDefault() ?? (INode)methodDeclaration.Body, thisParameter); ReplaceThisWithReferencesToVariable(methodDeclaration, thisParameter); } var classDeclarationParent = classDeclaration.Parent; methodDeclaration.Remove(); classDeclarationParent.AddChildAfter(classDeclaration, methodDeclaration); }