private void VisitBaseTypeDeclaration(BaseTypeDeclarationSyntax node)
        {
            if (node == null)
                throw new ArgumentNullException("node");

            node.Validate();

            WriteLeadingTrivia(node);

            var typeDeclaration = node as TypeDeclarationSyntax;

            _writer.WriteIndent();

            WriteAttributes(
                node,
                _writer.Configuration.LineBreaksAndWrapping.Other.PlaceTypeAttributeOnSingleLine
            );

            WriteTypeModifiers(GetGlobalMemberModifiers(node, node.Modifiers));

            switch (node.SyntaxKind)
            {
                case SyntaxKind.ClassDeclaration: _writer.WriteKeyword(PrinterKeyword.Class); break;
                case SyntaxKind.StructDeclaration: _writer.WriteKeyword(PrinterKeyword.Struct); break;
                case SyntaxKind.InterfaceDeclaration: _writer.WriteKeyword(PrinterKeyword.Interface); break;
                case SyntaxKind.EnumDeclaration: _writer.WriteKeyword(PrinterKeyword.Enum); break;
            }

            _writer.WriteSpace();
            _writer.WriteIdentifier(node.Identifier);

            if (typeDeclaration != null && typeDeclaration.TypeParameterList != null)
                typeDeclaration.TypeParameterList.Accept(this);

            if (node.BaseList != null)
                node.BaseList.Accept(this);

            if (typeDeclaration != null && typeDeclaration.ConstraintClauses.Count > 0)
                WriteConstraintClauses(typeDeclaration.ConstraintClauses);
        }