public static ClassDeclarationSyntax GenerateCommandRegistrarClass(XDocument vsctDocument)
        {
            MethodDeclarationSyntax registerCommandMethod  = MethodGenerator.GenerateRegisterCommandMethod();
            MethodDeclarationSyntax registerCommandsMethod = MethodGenerator.GenerateRegisterCommandsMethod(vsctDocument);

            return(SyntaxFactory.ClassDeclaration("CommandRegistrar").WithModifiers(Modifiers.InternalStaticPartial).WithMembers(SyntaxFactory.List <MemberDeclarationSyntax>(new MemberDeclarationSyntax[2]
            {
                registerCommandsMethod,
                registerCommandMethod
            })));
        }
        public static ClassDeclarationSyntax GenerateAbstractCommandFacadeClass(XDocument vsctDocument)
        {
            SyntaxList <MemberDeclarationSyntax> syntaxList = SyntaxFactory.List <MemberDeclarationSyntax>();

            syntaxList = @syntaxList.Add(ClassGenerator.GenerateProtectedConstructor("AbstractCommandFacade"));
            XElement xelement = vsctDocument.Root.Element(XNames.Commands).Element(XNames.Buttons);

            if (xelement != null && xelement.HasElements)
            {
                foreach (XElement element in xelement.Elements(XNames.Button))
                {
                    string id           = element.Attribute("id").Value;
                    string commandName1 = NameMaker.MakeExecuteCommandMethodName(id);
                    string commandName2 = NameMaker.MakeBeforeQueryStatusMethodName(id);
                    syntaxList = @syntaxList.Add(MethodGenerator.GenerateFacadeCommandMethod(commandName1));
                    syntaxList = @syntaxList.Add(MethodGenerator.GenerateFacadeCommandMethod(commandName2));
                }
            }
            return(SyntaxFactory.ClassDeclaration("AbstractCommandFacade")
                   .WithModifiers(Modifiers.InternalAbstractPartial)
                   .WithMembers(syntaxList)
                   .NormalizeWhitespace());
        }