public string GenerateSyntax(TypeWrapper type)
        {
            var syntax = new SyntaxWriter(this._version);

            syntax.WriteAttributes(type);

            if (type.IsPublic)
            {
                syntax.WriteToken("public");
            }

            if (type.IsEnum)
            {
                syntax.WriteToken("enum");
                syntax.WriteTypeName(type);
            }
            else
            {
                if (type.IsSealed)
                {
                    syntax.WriteToken("sealed");
                }
                if (type.IsAbstract)
                {
                    syntax.WriteToken("abstract");
                }
                if (type.IsStatic)
                {
                    syntax.WriteToken("static");
                }

                if (type.IsClass)
                {
                    syntax.WriteToken("class");
                }
                else if (type.IsInterface)
                {
                    syntax.WriteToken("interface");
                }
                else if (type.IsValueType)
                {
                    syntax.WriteToken("struct");
                }

                syntax.WriteTypeName(type);

                var baseType = type.BaseType;
                if (baseType != null &&
                    !string.Equals(baseType.FullName, _objectTypeName, StringComparison.OrdinalIgnoreCase))
                {
                    syntax.WriteRaw(" :");
                    syntax.WriteTypeName(baseType);
                }

                var interfaces = type.GetInterfaces();
                if (interfaces.Count > 0)
                {
                    syntax.WriteNewLineWithTab();

                    syntax.BeginCommaDelimitedList();
                    foreach (var face in interfaces.OrderBy(x => x.Name))
                    {
                        syntax.WriteTypeName(face);
                    }
                    syntax.EndCommaDelimitedList();
                }
            }

            return(syntax.CurrentSyntax);
        }