コード例 #1
0
        private static bool ChkPropertyVisible(PropertyDefinition property)
        {
            MethodDefinition method;
            bool             get_visible = false;
            bool             set_visible = false;

            if ((method = property.GetMethod) != null &&
                (DocUtils.IsExplicitlyImplemented(method) ||
                 (!method.IsPrivate && !method.IsAssembly && !method.IsFamilyAndAssembly)))
            {
                get_visible = true;
            }

            if ((method = property.SetMethod) != null &&
                (DocUtils.IsExplicitlyImplemented(method) ||
                 (!method.IsPrivate && !method.IsAssembly && !method.IsFamilyAndAssembly)))
            {
                set_visible = true;
            }

            if ((set_visible == false) && (get_visible == false))
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
コード例 #2
0
        protected override string GetPropertyDeclaration(PropertyDefinition property)
        {
            MethodDefinition gm = null, sm = null;

            string get_visible = null;

            if ((gm = property.GetMethod) != null &&
                (DocUtils.IsExplicitlyImplemented(gm) ||
                 (!gm.IsPrivate && !gm.IsAssembly && !gm.IsFamilyAndAssembly)))
            {
                get_visible = AppendVisibility(new StringBuilder(), gm).ToString();
            }
            string set_visible = null;

            if ((sm = property.SetMethod) != null &&
                (DocUtils.IsExplicitlyImplemented(sm) ||
                 (!sm.IsPrivate && !sm.IsAssembly && !sm.IsFamilyAndAssembly)))
            {
                set_visible = AppendVisibility(new StringBuilder(), sm).ToString();
            }

            if ((set_visible == null) && (get_visible == null))
            {
                return(null);
            }

            StringBuilder buf = new StringBuilder()
                                .Append(".property ");

            if (!(gm ?? sm).IsStatic)
            {
                buf.Append("instance ");
            }
            _AppendTypeName(buf, property.PropertyType, AttributeParserContext.Create(property));
            buf.Append(' ').Append(property.Name);
            if (!property.HasParameters || property.Parameters.Count == 0)
            {
                return(buf.ToString());
            }

            buf.Append('(');
            bool first = true;

            foreach (ParameterDefinition p in property.Parameters)
            {
                if (!first)
                {
                    buf.Append(", ");
                }
                first = false;
                _AppendTypeName(buf, p.ParameterType, AttributeParserContext.Create(p));
            }
            buf.Append(')');

            return(buf.ToString());
        }
コード例 #3
0
 protected override StringBuilder AppendMethodName(StringBuilder buf, MethodDefinition method)
 {
     if (DocUtils.IsExplicitlyImplemented(method))
     {
         TypeReference   iface;
         MethodReference ifaceMethod;
         DocUtils.GetInfoForExplicitlyImplementedMethod(method, out iface, out ifaceMethod);
         return(buf.Append(new CSharpMemberFormatter(this.TypeMap).GetName(iface))
                .Append('.')
                .Append(ifaceMethod.Name));
     }
     return(base.AppendMethodName(buf, method));
 }
コード例 #4
0
        protected override string GetPropertyDeclaration(PropertyDefinition property)
        {
            MethodDefinition method;

            string get_visible = null;

            if ((method = property.GetMethod) != null &&
                (DocUtils.IsExplicitlyImplemented(method) ||
                 (!method.IsPrivate && !method.IsAssembly && !method.IsFamilyAndAssembly)))
            {
                get_visible = AppendVisibility(new StringBuilder(), method).ToString();
            }
            string set_visible = null;

            if ((method = property.SetMethod) != null &&
                (DocUtils.IsExplicitlyImplemented(method) ||
                 (!method.IsPrivate && !method.IsAssembly && !method.IsFamilyAndAssembly)))
            {
                set_visible = AppendVisibility(new StringBuilder(), method).ToString();
            }

            if ((set_visible == null) && (get_visible == null))
            {
                return(null);
            }

            string        visibility;
            StringBuilder buf = new StringBuilder();

            if (get_visible != null && (set_visible == null || (set_visible != null && get_visible == set_visible)))
            {
                buf.Append(visibility = get_visible);
            }
            else if (set_visible != null && get_visible == null)
            {
                buf.Append(visibility = set_visible);
            }
            else
            {
                buf.Append(visibility = "public");
            }

            // Pick an accessor to use for static/virtual/override/etc. checks.
            method = property.SetMethod;
            if (method == null)
            {
                method = property.GetMethod;
            }

            string modifiers = String.Empty;

            if (method.IsStatic)
            {
                modifiers += " static";
            }
            if (method.IsVirtual && !method.IsAbstract)
            {
                if ((method.Attributes & MethodAttributes.NewSlot) != 0)
                {
                    modifiers += " virtual";
                }
                else
                {
                    modifiers += " override";
                }
            }
            TypeDefinition declDef = (TypeDefinition)method.DeclaringType;

            if (method.IsAbstract && !declDef.IsInterface)
            {
                modifiers += " abstract";
            }
            if (method.IsFinal)
            {
                modifiers += " sealed";
            }
            if (modifiers == " virtual sealed")
            {
                modifiers = "";
            }
            buf.Append(modifiers).Append(' ');

            if (property.PropertyType.IsByReference)
            {
                buf.Append("ref ");
            }

            buf.Append(GetTypeName(property.PropertyType, new DynamicParserContext(property))).Append(' ');

            IEnumerable <MemberReference> defs = property.DeclaringType.GetDefaultMembers();
            string name = property.Name;

            foreach (MemberReference mi in defs)
            {
                if (mi == property)
                {
                    name = "this";
                    break;
                }
            }
            buf.Append(name == "this" ? name : DocUtils.GetPropertyName(property, NestedTypeSeparator));

            if (property.Parameters.Count != 0)
            {
                AppendParameters(buf, method, property.Parameters, '[', ']');
            }

            buf.Append(" {");
            if (get_visible != null)
            {
                if (get_visible != visibility)
                {
                    buf.Append(' ').Append(get_visible);
                }
                buf.Append(" get;");
            }
            if (set_visible != null)
            {
                if (set_visible != visibility)
                {
                    buf.Append(' ').Append(set_visible);
                }
                buf.Append(" set;");
            }
            buf.Append(" }");

            return(buf[0] != ' ' ? buf.ToString() : buf.ToString(1, buf.Length - 1));
        }
コード例 #5
0
        protected override StringBuilder AppendMethodName(StringBuilder buf, MethodDefinition method)
        {
            if (DocUtils.IsExplicitlyImplemented(method))
            {
                TypeReference   iface;
                MethodReference ifaceMethod;
                DocUtils.GetInfoForExplicitlyImplementedMethod(method, out iface, out ifaceMethod);
                return(buf.Append(new CSharpMemberFormatter(this.TypeMap).GetName(iface))
                       .Append('.')
                       .Append(ifaceMethod.Name));
            }

            if (method.Name.StartsWith("op_", StringComparison.Ordinal))
            {
                // this is an operator
                switch (method.Name)
                {
                case "op_Implicit":
                case "op_Explicit":
                    buf.Length--;     // remove the last space, which assumes a member name is coming
                    return(buf);

                case "op_Addition":
                case "op_UnaryPlus":
                    return(buf.Append("operator +"));

                case "op_Subtraction":
                case "op_UnaryNegation":
                    return(buf.Append("operator -"));

                case "op_Division":
                    return(buf.Append("operator /"));

                case "op_Multiply":
                    return(buf.Append("operator *"));

                case "op_Modulus":
                    return(buf.Append("operator %"));

                case "op_BitwiseAnd":
                    return(buf.Append("operator &"));

                case "op_BitwiseOr":
                    return(buf.Append("operator |"));

                case "op_ExclusiveOr":
                    return(buf.Append("operator ^"));

                case "op_LeftShift":
                    return(buf.Append("operator <<"));

                case "op_RightShift":
                    return(buf.Append("operator >>"));

                case "op_LogicalNot":
                    return(buf.Append("operator !"));

                case "op_OnesComplement":
                    return(buf.Append("operator ~"));

                case "op_Decrement":
                    return(buf.Append("operator --"));

                case "op_Increment":
                    return(buf.Append("operator ++"));

                case "op_True":
                    return(buf.Append("operator true"));

                case "op_False":
                    return(buf.Append("operator false"));

                case "op_Equality":
                    return(buf.Append("operator =="));

                case "op_Inequality":
                    return(buf.Append("operator !="));

                case "op_LessThan":
                    return(buf.Append("operator <"));

                case "op_LessThanOrEqual":
                    return(buf.Append("operator <="));

                case "op_GreaterThan":
                    return(buf.Append("operator >"));

                case "op_GreaterThanOrEqual":
                    return(buf.Append("operator >="));

                default:
                    return(base.AppendMethodName(buf, method));
                }
            }
            else
            {
                return(base.AppendMethodName(buf, method));
            }
        }
コード例 #6
0
        protected override string GetMethodDeclaration(MethodDefinition method)
        {
            if (method.IsPrivate && !DocUtils.IsExplicitlyImplemented(method))
            {
                return(null);
            }

            var buf = new StringBuilder();

            buf.Append(".method ");
            AppendVisibility(buf, method);
            if (method.IsStatic)
            {
                buf.Append("static ");
            }
            if (method.IsHideBySig)
            {
                buf.Append("hidebysig ");
            }
            if (method.IsPInvokeImpl && method.PInvokeInfo != null)
            {
                var info = method.PInvokeInfo;

                buf.Append("pinvokeimpl (\"")
                .Append(info.Module.Name)
                .Append("\" as \"")
                .Append(info.EntryPoint)
                .Append("\"");

                if (info.IsCharSetAuto)
                {
                    buf.Append(" auto");
                }
                if (info.IsCharSetUnicode)
                {
                    buf.Append(" unicode");
                }
                if (info.IsCharSetAnsi)
                {
                    buf.Append(" ansi");
                }
                if (info.IsCallConvCdecl)
                {
                    buf.Append(" cdecl");
                }
                if (info.IsCallConvStdCall)
                {
                    buf.Append(" stdcall");
                }
                if (info.IsCallConvWinapi)
                {
                    buf.Append(" winapi");
                }
                if (info.IsCallConvThiscall)
                {
                    buf.Append(" thiscall");
                }
                if (info.SupportsLastError)
                {
                    buf.Append(" lasterr");
                }
                buf.Append(")");
            }
            if (method.IsSpecialName)
            {
                buf.Append("specialname ");
            }
            if (method.IsRuntimeSpecialName)
            {
                buf.Append("rtspecialname ");
            }
            if (method.IsNewSlot)
            {
                buf.Append("newslot ");
            }
            if (method.IsVirtual)
            {
                buf.Append("virtual ");
            }
            if (!method.IsStatic)
            {
                buf.Append("instance ");
            }
            _AppendTypeName(buf, method.ReturnType, AttributeParserContext.Create(method.MethodReturnType));
            buf.Append(' ')
            .Append(method.Name);
            if (method.IsGenericMethod())
            {
                var state = MemberFormatterState;
                MemberFormatterState = MemberFormatterState.WithinGenericTypeParameters;
                IList <GenericParameter> args = method.GenericParameters;
                if (args.Count > 0)
                {
                    buf.Append("<");
                    _AppendTypeName(buf, args[0], null);
                    for (int i = 1; i < args.Count; ++i)
                    {
                        _AppendTypeName(buf.Append(", "), args[i], null);
                    }
                    buf.Append(">");
                }
                MemberFormatterState = state;
            }

            buf.Append('(');
            bool first = true;

            for (int i = 0; i < method.Parameters.Count; ++i)
            {
                var param = method.Parameters[i];
                if (!first)
                {
                    buf.Append(", ");
                }
                first = false;

                if (param.IsOut)
                {
                    buf.Append("[out] ");
                }
                else if (param.IsIn)
                {
                    buf.Append("[in]");
                }

                _AppendTypeName(buf, param.ParameterType, AttributeParserContext.Create(param));
                if (param.ParameterType.IsByReference)
                {
                    buf.Append("&");
                }
                buf.Append(' ');
                buf.Append(param.Name);
            }
            buf.Append(')');
            if (method.IsIL)
            {
                buf.Append(" cil");
            }
            if (method.IsRuntime)
            {
                buf.Append(" runtime");
            }
            if (method.IsManaged)
            {
                buf.Append(" managed");
            }

            return(buf.ToString());
        }