private ICompletionDataProvider GlobalComplete()
        {
            CProject project = Document.Project as CProject;

            if (project == null)
            {
                return(null);
            }

            ProjectInformation info = ProjectInformationManager.Instance.Get(project);

            CompletionDataProvider provider = new CompletionDataProvider();

            foreach (LanguageItem li in info.Containers())
            {
                if (li.Parent == null)
                {
                    provider.AddCompletionData(new CompletionData(li));
                }
            }

            foreach (Function f in info.Functions)
            {
                if (f.Parent == null)
                {
                    provider.AddCompletionData(new CompletionData(f));
                }
            }

            foreach (Enumerator e in info.Enumerators)
            {
                provider.AddCompletionData(new CompletionData(e));
            }

            foreach (Macro m in info.Macros)
            {
                provider.AddCompletionData(new CompletionData(m));
            }

            string currentFileName = Document.FileName;

            if (info.IncludedFiles.ContainsKey(currentFileName))
            {
                foreach (FileInformation fi in info.IncludedFiles[currentFileName])
                {
                    foreach (LanguageItem li in fi.Containers())
                    {
                        if (li.Parent == null)
                        {
                            provider.AddCompletionData(new CompletionData(li));
                        }
                    }

                    foreach (Function f in fi.Functions)
                    {
                        if (f.Parent == null)
                        {
                            provider.AddCompletionData(new CompletionData(f));
                        }
                    }

                    foreach (Enumerator e in fi.Enumerators)
                    {
                        provider.AddCompletionData(new CompletionData(e));
                    }

                    foreach (Macro m in fi.Macros)
                    {
                        provider.AddCompletionData(new CompletionData(m));
                    }
                }
            }

            return(provider);
        }
        private CompletionDataProvider GetMembersOfItem(string itemFullName)
        {
            CProject project = Document.Project as CProject;

            if (project == null)
            {
                return(null);
            }

            ProjectInformation     info     = ProjectInformationManager.Instance.Get(project);
            CompletionDataProvider provider = new CompletionDataProvider();

            LanguageItem container = null;

            string currentFileName = Document.FileName;
            bool   in_project      = false;

            foreach (LanguageItem li in info.Containers())
            {
                if (itemFullName == li.FullName)
                {
                    container  = li;
                    in_project = true;
                }
            }

            if (!in_project && info.IncludedFiles.ContainsKey(currentFileName))
            {
                foreach (FileInformation fi in info.IncludedFiles[currentFileName])
                {
                    foreach (LanguageItem li in fi.Containers())
                    {
                        if (itemFullName == li.FullName)
                        {
                            container = li;
                        }
                    }
                }
            }

            if (container == null)
            {
                return(null);
            }

            if (in_project)
            {
                foreach (LanguageItem li in info.AllItems())
                {
                    if (li.Parent != null && li.Parent.Equals(container))
                    {
                        provider.AddCompletionData(new CompletionData(li));
                    }
                }
            }
            else
            {
                foreach (FileInformation fi in info.IncludedFiles[currentFileName])
                {
                    foreach (LanguageItem li in fi.AllItems())
                    {
                        if (li.Parent != null && li.Parent.Equals(container))
                        {
                            provider.AddCompletionData(new CompletionData(li));
                        }
                    }
                }
            }

            return(provider);
        }