protected override string GetPropertyDeclaration(PropertyDefinition property)
 {
     if (DocUtils.IsExplicitlyImplemented(property))
     {
         return(DocUtils.GetPropertyName(property, NestedTypeSeparator));
     }
     return($"{GetName(property.DeclaringType)}.{property.Name}");
 }
Exemplo n.º 2
0
        protected override string GetPropertyDeclaration(PropertyDefinition property)
        {
            string getVisible = null;

            if (DocUtils.IsAvailablePropertyMethod(property.GetMethod))
            {
                getVisible = AppendVisibility(new StringBuilder(), property.GetMethod).ToString();
            }
            string setVisible = null;

            if (DocUtils.IsAvailablePropertyMethod(property.SetMethod))
            {
                setVisible = AppendVisibility(new StringBuilder(), property.SetMethod).ToString();
            }

            if (setVisible == null && getVisible == null)
            {
                return(null);
            }

            StringBuilder buf = new StringBuilder();
            IEnumerable <MemberReference> defs = property.DeclaringType.GetDefaultMembers();
            bool indexer = false;

            foreach (MemberReference mi in defs)
            {
                if (mi == property)
                {
                    indexer = true;
                    break;
                }
            }
            if (indexer)
            {
                buf.Append("Default ");
            }
            if (getVisible != null && (setVisible == null || (setVisible != null && getVisible == setVisible)))
            {
                buf.Append(getVisible);
            }
            else if (setVisible != null && getVisible == null)
            {
                buf.Append(setVisible);
            }
            else
            {
                buf.Append("Public");
            }

            // Pick an accessor to use for static/virtual/override/etc. checks.
            var method = property.SetMethod;

            if (method == null)
            {
                method = property.GetMethod;
            }

            string modifiers = String.Empty;

            if (method.IsStatic && !IsModule(method.DeclaringType))
            {
                modifiers += " Shared";
            }
            if (method.IsVirtual && !method.IsAbstract)
            {
                if ((method.Attributes & MethodAttributes.NewSlot) != 0)
                {
                    modifiers += " Overridable";
                }
                else
                {
                    modifiers += " Overrides";
                }
            }
            TypeDefinition declDef = (TypeDefinition)method.DeclaringType;

            if (method.IsAbstract && !declDef.IsInterface)
            {
                modifiers += " MustOverride";
            }
            if (method.IsFinal)
            {
                modifiers += " NotOverridable";
            }
            if (modifiers == " MustOverride NotOverridable")
            {
                modifiers = "";
            }
            if (modifiers == " Overridable NotOverridable")
            {
                modifiers = "";
            }
            buf.Append(modifiers).Append(' ');

            if (getVisible != null && setVisible == null)
            {
                buf.Append("ReadOnly ");
            }

            buf.Append("Property ");
            buf.Append(property.Name.Split('.').Last());

            if (property.Parameters.Count != 0)
            {
                AppendParameters(buf, method, property.Parameters, '(', ')');
            }
            buf.Append(" As ");
            buf.Append(GetTypeName(property.PropertyType, new DynamicParserContext(property)));
            if (DocUtils.IsExplicitlyImplemented(property.GetMethod))
            {
                TypeReference   iface;
                MethodReference ifaceMethod;
                DocUtils.GetInfoForExplicitlyImplementedMethod(method, out iface, out ifaceMethod);
                buf.Append(" Implements ")
                .Append(new VBMemberFormatter(this.TypeMap).GetName(iface))
                .Append('.')
                .Append(DocUtils.GetPropertyName(property, NestedTypeSeparator).Split('.').Last());
            }
            return(buf.ToString());
        }
        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(' ');

            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));
        }
Exemplo n.º 4
0
        protected override string GetPropertyDeclaration(PropertyDefinition property)
        {
            string getVisible = null;

            if (DocUtils.IsAvailablePropertyMethod(property.GetMethod))
            {
                getVisible = AppendVisibility(new StringBuilder(), property.GetMethod)?.ToString();
            }
            string setVisible = null;

            if (DocUtils.IsAvailablePropertyMethod(property.SetMethod))
            {
                setVisible = AppendVisibility(new StringBuilder(), property.SetMethod)?.ToString();
            }

            if (setVisible == null && getVisible == null)
            {
                return(null);
            }

            bool          isField = GetFSharpFlags(property.CustomAttributes).Any(i => i == SourceConstructFlags.Field);
            StringBuilder buf     = new StringBuilder();

            if (IsRecord(property.DeclaringType))
            {
                AppendRecordParameter(buf, property);
                return(buf.ToString());
            }

            if (IsModule(property.DeclaringType))
            {
                buf.Append($"{GetName(property.DeclaringType)}.");
            }
            else
            {
                if (isField)
                {
                    buf.Append("val ");
                }
                else
                {
                    buf.Append("member this.");
                }
            }

            buf.Append(DocUtils.GetPropertyName(property, NestedTypeSeparator));
            if (property.Parameters.Count != 0)
            {
                buf.Append("(");
                AppendParameters(buf, property.GetMethod ?? property.SetMethod, property.Parameters);
                buf.Append(")");
            }
            buf.Append(" : ");
            buf.Append(GetTypeName(property.PropertyType));

            if (getVisible != null && setVisible != null)
            {
                buf.Append(" with get, set");
            }
            return(buf.ToString());
        }