/// <summary>
        /// Gets the code classes form a CodeElements collection.
        /// </summary>
        /// <param name="codeElements">CodeElements collection from where to get the code classes.</param>
        /// <returns></returns>
        private static List <CodeClass> GetCodeClasses(CodeElements codeElements)
        {
            var result = new List <CodeClass>();

            CodeClass codeClass;

            // Loop through code elements
            foreach (CodeElement code in codeElements)
            {
                if (code.Kind == vsCMElement.vsCMElementNamespace)
                {
                    // Get classes from namespace
                    result.AddRange(VisualStudioHelper.GetCodeClasses((code as CodeNamespace).Members));
                }
                else if (code.Kind == vsCMElement.vsCMElementClass)
                {
                    // Case code to CodeClass
                    codeClass = (code as CodeClass);

                    // Add class to the result
                    result.Add(codeClass);

                    // Add nested classes
                    result.AddRange(VisualStudioHelper.GetCodeClasses(codeClass.Members));
                }
            }

            return(result);
        }
        /// <summary>
        /// Gets the code classes from a project.
        /// </summary>
        /// <param name="project">Project from where to obtain the code classes.</param>
        /// <returns></returns>
        public static IEnumerable <CodeClass> GetProjectCodeClasses(Project project)
        {
            var result = new List <CodeClass>();

            foreach (ProjectItem codeFile in VisualStudioHelper.GetProjectCodeFiles(project))
            {
                // Add classes from code file
                result.AddRange(VisualStudioHelper.GetCodeClasses(codeFile.FileCodeModel.CodeElements));
            }

            return(result.OrderBy(c => c.Name));
        }