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 CppClassResult AddClassResult(CppFileContextBase cppFileContext, PenWebClassSpecifier penWebClassSpecifier)
        {
            CppClassResult cppClassResult = null;

            if (!this.ClassMap.ContainsKey(penWebClassSpecifier.ClassName))
            {
                cppClassResult = new CppClassResult(penWebClassSpecifier.ClassName, penWebClassSpecifier.BaseClass);
                this.ClassMap.Add(penWebClassSpecifier.ClassName, cppClassResult);
                return(cppClassResult);
            }
            else
            {
                return(this.ClassMap[penWebClassSpecifier.ClassName]);
            }
        }
        public void AddVariableReference(CppFileContextBase cppFileContext, PenWebQualifiedReference penWebQualifiedReference, string fileName)
        {
            if (this.ClassMap.ContainsKey(penWebQualifiedReference.OwningClass))
            {
                CppClassResult cppClassResult = this.ClassMap[penWebQualifiedReference.OwningClass];

                CppVariableReference cppVariableReference = cppClassResult.AddVariableReference(penWebQualifiedReference.ItemName, fileName, penWebQualifiedReference.Location.StartLine);
            }
            else
            {
                if (this.MissingRefClassNames.ContainsKey(penWebQualifiedReference.OwningClass))
                {
                    this.MissingRefClassNames[penWebQualifiedReference.OwningClass]++;
                }
                else
                {
                    this.MissingRefClassNames.Add(penWebQualifiedReference.OwningClass, 1);
                }

                LogManager.Self.Log($"Unknown TypeName: {penWebQualifiedReference.OwningClass}");
            }
        }
        private static void ProcessCppFile(CppHeaderContext cppHeaderContext, string fileName, string dialogClassName)
        {
            if (CppFileMap.ContainsKey(fileName.ToLower()))
            {
                IProjectFile projectFile = CppFileMap[fileName.ToLower()];

                CppCodeContext cppCodeContext = new CppCodeContext(fileName, dialogClassName);

                cppCodeContext.CppHeaderContext = cppHeaderContext;
                cppHeaderContext.CppCodeContext = cppCodeContext;
                cppCodeContext.WidgetTypeFinder = new WidgetTypeFinder(cppCodeContext, cppHeaderContext);

                CurrentFileContext = cppCodeContext;

                cppCodeContext.ProjectFile = projectFile;

                cppCodeContext.Init();

                CurrentFileContext = cppCodeContext;

                AnalyzeCodeContext(cppCodeContext);

                cppCodeContext.WriteSavedNodes();

                cppCodeContext.ProcessResults();

                cppCodeContext.Finalize();

                cppCodeContext.SaveClassInfo();

                cppCodeContext.WidgetTypeFinder.DoAnalytics();
            }
            else
            {
                LogManager.Self.Log($"Missing Cpp File in map: {fileName}");
            }
        }
        public void AddVariableDefinition(CppFileContextBase cppFileContext, PenWebDeclaration penWebDeclaration, string fileName)
        {
            CppTypeResult cppTypeResult = null;

            if (this.TypeMap.ContainsKey(penWebDeclaration.TypeName))
            {
                cppTypeResult = this.TypeMap[penWebDeclaration.TypeName];
            }
            else
            {
                cppTypeResult = new CppTypeResult(penWebDeclaration.TypeName);
                this.TypeMap.Add(penWebDeclaration.TypeName, cppTypeResult);
            }

            CppVariableDefinition cppVariableDefinition = cppTypeResult.AddDefinition(penWebDeclaration.VariableName, penWebDeclaration.OwningClass, fileName, penWebDeclaration.Location.StartLine);

            if (this.ClassMap.ContainsKey(penWebDeclaration.OwningClass))
            {
                CppClassResult cppClassResult = this.ClassMap[penWebDeclaration.OwningClass];

                cppClassResult.AddVariableDefinition(cppVariableDefinition);
            }
            else
            {
                if (this.MissingDefClassNames.ContainsKey(penWebDeclaration.OwningClass))
                {
                    this.MissingDefClassNames[penWebDeclaration.OwningClass]++;
                }
                else
                {
                    this.MissingDefClassNames.Add(penWebDeclaration.OwningClass, 1);
                }

                LogManager.Self.Log($"Unknown class: {penWebDeclaration.OwningClass}");
            }
        }