private CodeTypeDeclaration GenerateConstantTwoOptions(BooleanAttributeMetadata booleanAttribute)
        {
            CodeTypeDeclaration booleanOptionSet = new CodeTypeDeclaration(booleanAttribute.SchemaName)
            {
                IsClass    = true,
                Attributes = MemberAttributes.Static | MemberAttributes.Public
            };

            if (generateXmlDocumentation)
            {
                CustomizationService.AddMissingXmlDocumentation(booleanAttribute.SchemaName, booleanOptionSet.Comments);
            }
            var values = EnumItem.ToUniqueValues(booleanAttribute.OptionSet);

            foreach (var value in values)
            {
                CodeMemberField codeMemberField = new CodeMemberField(typeof(bool), value.Value)
                {
                    InitExpression = new CodePrimitiveExpression(value.Key == 1),
                    Attributes     = MemberAttributes.Const | MemberAttributes.Public
                };

                if (generateXmlDocumentation)
                {
                    CustomizationService.AddMissingXmlDocumentation(value.Description, codeMemberField.Comments);
                }

                booleanOptionSet.Members.Add(codeMemberField);
            }
            return(booleanOptionSet);
        }
        private CodeTypeDeclaration GenerateEnumOptions(string schemaName, IEnumerable <EnumItem> values)
        {
            CodeTypeDeclaration optionSetEnum = new CodeTypeDeclaration(schemaName)
            {
                IsEnum = true
            };

            optionSetEnum.CustomAttributes.Add(new CodeAttributeDeclaration("System.Runtime.Serialization.DataContractAttribute"));
            optionSetEnum.CustomAttributes.Add(new CodeAttributeDeclaration("System.CodeDom.Compiler.GeneratedCodeAttribute",
                                                                            new CodeAttributeArgument(new CodePrimitiveExpression(CrmSvcUtilsName)),
                                                                            new CodeAttributeArgument(new CodePrimitiveExpression(CrmSvcUtilsVersion))));
            if (generateXmlDocumentation)
            {
                CustomizationService.AddMissingXmlDocumentation(schemaName, optionSetEnum.Comments);
            }

            foreach (var value in values)
            {
                CodeMemberField codeMemberField = new CodeMemberField(string.Empty, value.Value)
                {
                    InitExpression = new CodePrimitiveExpression(value.Key)
                };

                if (generateXmlDocumentation)
                {
                    CustomizationService.AddMissingXmlDocumentation(value.Description, codeMemberField.Comments);
                }

                codeMemberField.CustomAttributes.Add(new CodeAttributeDeclaration("System.Runtime.Serialization.EnumMemberAttribute"));

                optionSetEnum.Members.Add(codeMemberField);
            }
            return(optionSetEnum);
        }
        private CodeTypeDeclaration GetOrCreateClass(string className, CodeTypeMemberCollection members)
        {
            var @class = members.ToEnumerable <CodeTypeDeclaration>()
                         .FirstOrDefault(_class => _class.Name == className);

            if (@class == null)
            {
                @class = new CodeTypeDeclaration(className)
                {
                    TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed,
                    IsClass        = true
                };
                if (generateXmlDocumentation)
                {
                    CustomizationService.AddMissingXmlDocumentation(className, @class.Comments);
                }
                members.Add(@class);
            }
            return(@class);
        }
 private bool GetOrCreateOptionSets(IEnumerable <CodeTypeDeclaration> codeTypeDeclarations, out CodeTypeDeclaration optionSets)
 {
     foreach (CodeTypeDeclaration type in codeTypeDeclarations)
     {
         if (type.Name == "OptionSets")
         {
             optionSets = type;
             return(false);
         }
     }
     optionSets = new CodeTypeDeclaration("OptionSets")
     {
         TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed,
         IsClass        = true
     };
     if (generateXmlDocumentation)
     {
         CustomizationService.AddMissingXmlDocumentation("OptionSets", optionSets.Comments);
     }
     return(true);
 }
        private CodeMemberField NewAttributeConstant(CodeMemberProperty property, string attributeLogicalName)
        {
            CodeMemberField attributeConstant = new CodeMemberField(typeof(string), property.Name)
            {
                Attributes     = MemberAttributes.Public | MemberAttributes.Const,
                InitExpression = new CodePrimitiveExpression(attributeLogicalName)
            };

            if (generateXmlDocumentation)
            {
                foreach (var documentation in property.Comments.ToEnumerable().Where(documentation => documentation.Comment.DocComment))
                {
                    attributeConstant.Comments.Add(documentation);
                }
                if (attributeConstant.Comments.Count == 0)
                {
                    CustomizationService.AddMissingXmlDocumentation(attributeConstant.Name, attributeConstant.Comments);
                }
            }
            return(attributeConstant);
        }