Beispiel #1
0
        protected override string GetTypeDeclaration(TypeDefinition type)
        {
            string visibility = GetTypeVisibility(type.Attributes);

            if (visibility == null)
            {
                return(null);
            }

            StringBuilder buf = new StringBuilder();

            buf.Append(visibility);
            buf.Append(" ");

            MemberFormatter full = new VBMemberFormatter(this.TypeMap);

            if (DocUtils.IsDelegate(type))
            {
                buf.Append("Delegate ");
                MethodDefinition invoke     = type.GetMethod("Invoke");
                bool             isFunction = invoke.ReturnType.FullName != "System.Void";
                if (isFunction)
                {
                    buf.Append("Function ");
                }
                else
                {
                    buf.Append("Sub ");
                }
                buf.Append(GetName(type));
                AppendParameters(buf, invoke, invoke.Parameters);
                if (isFunction)
                {
                    buf.Append(" As ");
                    buf.Append(full.GetName(invoke.ReturnType, new DynamicParserContext(invoke.MethodReturnType))).Append(" ");
                }

                return(buf.ToString());
            }

            if (type.IsAbstract && !type.IsInterface && !IsModule(type))
            {
                buf.Append("MustInherit ");
            }
            if (type.IsSealed && !DocUtils.IsDelegate(type) && !type.IsValueType && !IsModule(type))
            {
                buf.Append("NotInheritable ");
            }
            buf.Replace(" MustInherit NotInheritable", "");

            buf.Append(GetTypeKind(type));
            buf.Append(" ");
            buf.Append(GetVBType(type.FullName) == null
                    ? GetName(type)
                    : type.Name);

            if (!type.IsEnum)
            {
                TypeReference basetype = type.BaseType;
                if (basetype != null && basetype.FullName == "System.Object" || type.IsValueType)
                {
                    basetype = null;
                }

                if (basetype != null)
                {
                    buf.Append(GetLineEnding()).Append("Inherits ");
                    buf.Append(full.GetName(basetype));
                }

                List <string> interfaceNames = DocUtils.GetUserImplementedInterfaces(type)
                                               .Select(iface => full.GetName(iface))
                                               .OrderBy(s => s)
                                               .ToList();
                if (interfaceNames.Count > 0)
                {
                    buf.Append(GetLineEnding()).Append("Implements ");
                    buf.Append(string.Join(", ", interfaceNames));
                }
            }

            return(buf.ToString());
        }
        protected override string GetTypeDeclaration(TypeDefinition type)
        {
            string visibility = GetTypeVisibility(type.Attributes);

            if (visibility == null)
            {
                return(null);
            }

            StringBuilder buf = new StringBuilder();

            buf.Append(visibility);
            buf.Append(" ");

            MemberFormatter full = new CSharpFullMemberFormatter();

            if (DocUtils.IsDelegate(type))
            {
                buf.Append("delegate ");
                MethodDefinition invoke = type.GetMethod("Invoke");
                buf.Append(full.GetName(invoke.ReturnType, new DynamicParserContext(invoke.MethodReturnType))).Append(" ");
                buf.Append(GetName(type));
                AppendParameters(buf, invoke, invoke.Parameters);
                AppendGenericTypeConstraints(buf, type);
                buf.Append(";");

                return(buf.ToString());
            }

            if (type.IsAbstract && !type.IsInterface)
            {
                buf.Append("abstract ");
            }
            if (type.IsSealed && !DocUtils.IsDelegate(type) && !type.IsValueType)
            {
                buf.Append("sealed ");
            }
            buf.Replace("abstract sealed", "static");

            buf.Append(GetTypeKind(type));
            buf.Append(" ");
            buf.Append(GetCSharpType(type.FullName) == null
                    ? GetName(type)
                    : type.Name);

            if (!type.IsEnum)
            {
                TypeReference basetype = type.BaseType;
                if (basetype != null && basetype.FullName == "System.Object" || type.IsValueType)   // FIXME
                {
                    basetype = null;
                }

                List <string> interface_names = DocUtils.GetUserImplementedInterfaces(type)
                                                .Select(iface => full.GetName(iface))
                                                .OrderBy(s => s)
                                                .ToList();

                if (basetype != null || interface_names.Count > 0)
                {
                    buf.Append(" : ");
                }

                if (basetype != null)
                {
                    buf.Append(full.GetName(basetype));
                    if (interface_names.Count > 0)
                    {
                        buf.Append(", ");
                    }
                }

                for (int i = 0; i < interface_names.Count; i++)
                {
                    if (i != 0)
                    {
                        buf.Append(", ");
                    }
                    buf.Append(interface_names[i]);
                }
                AppendGenericTypeConstraints(buf, type);
            }

            return(buf.ToString());
        }