Exemplo n.º 1
0
        /// <summary>
        /// Generates the code for declarations (fields, methods, property) with CLR protection level <c>public</c>.
        /// </summary>
        protected virtual void GenerateCodePublicDeclarations()
        {
            foreach (MemberFieldDefinition field in _classDefinition.PublicFields)
            {
                if (!field.IsIgnored)
                {
                    //if (CheckTypeMemberForGetProperty(field) == false)
                    //    AddMethodsForField(field);
                    //else
                    GenerateCodePropertyField(field);

                    _codeBuilder.AppendEmptyLine();
                }
            }

            foreach (MemberPropertyDefinition p in _classDefinition.GetProperties())
            {
                if (IsPropertyAllowed(p) &&
                    (p.ProtectionLevel == ProtectionLevel.Public ||
                     (AllowSubclassing && (p.IsStatic || !p.IsVirtual)) ||
                     (AllowProtectedMembers && p.ProtectionLevel == ProtectionLevel.Protected)))
                {
                    GenerateCodeProperty(EnhanceProperty(p));
                    _codeBuilder.Append("\n");
                }
            }

            foreach (MemberMethodDefinition f in _classDefinition.PublicMethods)
            {
                if (f.IsOperatorOverload)
                {
                    if (f.NativeName.EndsWith("=="))
                    {
                        if (!f.IsIgnored)
                        {
                            GenerateCodePredefinedMethods(PredefinedMethods.Equals);
                        }
                        _codeBuilder.AppendEmptyLine();
                    }
                    else if (f.NativeName.EndsWith("="))
                    {
                        if (!f.IsIgnored)
                        {
                            GenerateCodePredefinedMethods(PredefinedMethods.CopyTo);
                        }
                        _codeBuilder.AppendEmptyLine();
                    }
                }
                else if (f.IsDeclarableFunction)
                {
                    GenerateCodeMethod(f);
                    _codeBuilder.Append("\n");
                }
            }

            if (_classDefinition.HasAttribute <IncludePredefinedMethodAttribute>())
            {
                GenerateCodePredefinedMethods(_classDefinition.GetAttribute <IncludePredefinedMethodAttribute>().Methods);
                _codeBuilder.AppendEmptyLine();
            }

            foreach (ClassDefinition cls in _interfaces)
            {
                if (cls == _classDefinition)
                {
                    continue;
                }

                GenerateCodeInterfaceImplementation(cls);
            }
        }