private static CppHeaderContext ProcessHeaderFile(string fileName, string dialogClassName)
        {
            if (HeaderFileMap.ContainsKey(fileName.ToLower()))
            {
                IProjectFile projectFile = HeaderFileMap[fileName.ToLower()];

                CppHeaderContext cppHeaderContext = new CppHeaderContext(projectFile.Name, dialogClassName);

                CurrentFileContext = cppHeaderContext;

                cppHeaderContext.ProjectFile = projectFile;

                cppHeaderContext.Init();

                CurrentFileContext = cppHeaderContext;

                AnalyzeHeaderContext(cppHeaderContext);

                cppHeaderContext.WriteSavedNodes();

                cppHeaderContext.ProcessResults();

                cppHeaderContext.Finalize();

                return(cppHeaderContext);
            }
            else
            {
                LogManager.Self.Log($"Missing Header File in map: {fileName}");
                return(null);
            }
        }
        public static void DoAnalytics(Lifetime lifetime)
        {
            var solutionStateTracker = SolutionStateTracker.Instance;

            /*
             * solutionStateTracker?.SolutionName.Change.Advise_HasNew(lifetime, () =>
             * {
             * });
             */

            try
            {
                PenradCppFiles.Clear();
                PenradHeaderFiles.Clear();
                CppFileMap.Clear();
                HeaderFileMap.Clear();
                CppResultsManager.Self.Clear();

                var solution = solutionStateTracker?.Solution;
                if (solution == null)
                {
                    return;
                }

                List <IProject> projects = solution.GetProjectsByName("penrad").ToList();

                if (projects.Count == 1)
                {
                    PenradProject = projects.First();

                    MapProjectFiles();
                    ParsePenradDialogs();

                    CppResultsManager.Self.WriteResults();
                    WidgetTypeFinder.WriteAnalytics();

                    //CppParseTreeNodeFactory.Self.DumpTreeSchema();
                    //CodeGenerator.Self.GenerateCode();
                }
            }
            catch (Exception ex)
            {
                LogManager.Self.Log($"Excpetion {ex.Message}");
            }
        }
        private static void MapProjectFiles()
        {
            List <IProjectFile> projectFiles = PenradProject.GetAllProjectFiles().ToList();

            foreach (IProjectFile projectFile in projectFiles)
            {
                string ext = Path.GetExtension(projectFile.Name).ToLower();

                switch (ext)
                {
                case ".cpp":
                    CppFileMap.Add(projectFile.Name.ToLower(), projectFile);
                    break;

                case ".h":
                    HeaderFileMap.Add(projectFile.Name.ToLower(), projectFile);
                    break;
                }
            }
        }