private static DocumentedType MapType(ITypeInfo type, XmlDocumentationModel xmlModel)
        {
            SummaryComment summary = null;
            RemarksComment remarks = null;
            IEnumerable<ExampleComment> example = null;

            // Get the documentation for the type.
            var member = xmlModel.Find(type.Identity);
            if (member != null)
            {
                // Get the comments for the type.
                summary = member.Comments.OfType<SummaryComment>().SingleOrDefault();
                remarks = member.Comments.OfType<RemarksComment>().SingleOrDefault();
                example = member.Comments.OfType<ExampleComment>();
            }

            // Map the methods.
            var methods = new List<DocumentedMethod>();
            foreach (var method in type.Methods)
            {
                methods.Add(MapMethod(method, xmlModel));
            }

            // Map the properties.
            var properties = new List<DocumentedProperty>();
            foreach (var property in type.Properties)
            {
                properties.Add(MapProperty(property, xmlModel));
            }

            // Map the fields.
            var fields = new List<DocumentedField>();
            foreach (var field in type.Fields)
            {
                fields.Add(MapField(field, xmlModel));
            }

            // Return the documented type.
            return new DocumentedType(type, properties, methods, fields, summary, remarks, example, type.Metadata);
        }
        private static DocumentedProperty MapProperty(IPropertyInfo property, XmlDocumentationModel xmlModel)
        {
            SummaryComment summary = null;
            RemarksComment remarks = null;
            IEnumerable<ExampleComment> examples = null;
            ValueComment value = null;

            // Get the documentation for the type.
            var member = xmlModel.Find(property.Identity);
            if (member != null)
            {
                // Get the comments for the type.
                summary = member.Comments.OfType<SummaryComment>().SingleOrDefault();
                remarks = member.Comments.OfType<RemarksComment>().SingleOrDefault();
                examples = member.Comments.OfType<ExampleComment>();
                value = member.Comments.OfType<ValueComment>().SingleOrDefault();
            }

            return new DocumentedProperty(property, summary, remarks, examples, value, property.Metadata);
        }
        private static DocumentedMethod MapMethod(IMethodInfo method, XmlDocumentationModel xmlModel)
        {
            var parameters = new List<DocumentedParameter>();

            SummaryComment summary = null;
            RemarksComment remarks = null;
            IEnumerable<ExampleComment> examples = null;
            ReturnsComment returns = null;

            // Get the documentation for the type.
            var member = xmlModel.Find(method.Identity);
            if (member != null)
            {
                // Get the comments for the type.
                summary = member.Comments.OfType<SummaryComment>().FirstOrDefault();
                remarks = member.Comments.OfType<RemarksComment>().FirstOrDefault();
                examples = member.Comments.OfType<ExampleComment>();
                returns = member.Comments.OfType<ReturnsComment>().FirstOrDefault();
            }

            // Map parameters.
            foreach (var parameterDefinition in method.Definition.Parameters.ToList())
            {
                ParamComment comment = null;
                if (member != null)
                {
                    // Try to get the comment for the current parameter.
                    comment = member.Comments.OfType<ParamComment>().FirstOrDefault(x => x.Name == parameterDefinition.Name);
                }

                var parameter = new DocumentedParameter(parameterDefinition, comment, method.Metadata);
                parameters.Add(parameter);
            }

            var metadata = method.Metadata;
            var isPropertyAlias = false;
            if (method.Definition.IsCakeAlias(out isPropertyAlias))
            {
                metadata = new AliasMetadataAdapter(metadata, isPropertyAlias);
            }

            return new DocumentedMethod(method, parameters, summary, remarks, examples, returns, metadata);
        }
        private static DocumentedField MapField(IFieldInfo field, XmlDocumentationModel xmlModel)
        {
            SummaryComment summary = null;
            RemarksComment remarks = null;
            IEnumerable<ExampleComment> examples = null;

            // Get the documentation for the type.
            var member = xmlModel.Find(field.Identity);
            if (member != null)
            {
                // Get the comments for the type.
                summary = member.Comments.OfType<SummaryComment>().SingleOrDefault();
                remarks = member.Comments.OfType<RemarksComment>().SingleOrDefault();
                examples = member.Comments.OfType<ExampleComment>();
            }

            return new DocumentedField(field, summary, remarks, examples, field.Metadata);
        }
        private static DocumentedMethod MapMethod(IMethodInfo method, XmlDocumentationModel xmlModel)
        {
            var parameters = new List<DocumentedParameter>();

            SummaryComment summary = null;
            RemarksComment remarks = null;
            ExampleComment example = null;
            ReturnsComment returns = null;

            // Get the documentation for the type.
            var member = xmlModel.Find(method.Identity);
            if (member != null)
            {
                // Get the comments for the type.
                summary = member.Comments.OfType<SummaryComment>().FirstOrDefault();
                remarks = member.Comments.OfType<RemarksComment>().FirstOrDefault();
                example = member.Comments.OfType<ExampleComment>().FirstOrDefault();
                returns = member.Comments.OfType<ReturnsComment>().FirstOrDefault();
            }

            // Map parameters.
            foreach (var parameterDefinition in method.Definition.Parameters.ToList())
            {
                ParamComment comment = null;
                if (member != null)
                {
                    // Try to get the comment for the current parameter.
                    comment = member.Comments.OfType<ParamComment>().FirstOrDefault(x => x.Name == parameterDefinition.Name);
                }

                var parameter = new DocumentedParameter(parameterDefinition, comment);
                parameters.Add(parameter);
            }

            return new DocumentedMethod(method, parameters, summary, remarks, example, returns);
        }
        private static DocumentedType MapType(ITypeInfo type, XmlDocumentationModel xmlModel)
        {
            SummaryComment summary = null;
            RemarksComment remarks = null;
            IEnumerable<ExampleComment> example = null;

            // Get the documentation for the type.
            var member = xmlModel.Find(type.Identity);
            if (member != null)
            {
                // Get the comments for the type.
                summary = member.Comments.OfType<SummaryComment>().Aggregate(
                    null as SummaryComment,
                    (prev, curr) => (curr != null && prev != null)
                        ? new SummaryComment(prev.Children.Concat(curr.Children))
                        : curr ?? prev,
                    result => result
                    );
                remarks = member.Comments.OfType<RemarksComment>().Aggregate(
                    null as RemarksComment,
                    (prev, curr) => (curr != null && prev != null)
                        ? new RemarksComment(prev.Children.Concat(curr.Children))
                        : curr ?? prev,
                    result => result
                    );
                example = member.Comments.OfType<ExampleComment>();
            }

            // Map the methods.
            var methods = new List<DocumentedMethod>();
            foreach (var method in type.Methods)
            {
                methods.Add(MapMethod(method, xmlModel));
            }

            // Map the properties.
            var properties = new List<DocumentedProperty>();
            foreach (var property in type.Properties)
            {
                properties.Add(MapProperty(property, xmlModel));
            }

            // Map the fields.
            var fields = new List<DocumentedField>();
            foreach (var field in type.Fields)
            {
                fields.Add(MapField(field, xmlModel));
            }

            // Return the documented type.
            return new DocumentedType(type, properties, methods, fields, summary, remarks, example, type.Metadata);
        }