コード例 #1
0
        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);
        }