コード例 #1
0
        private void GetFilesUsing(LexCache cache, List <IPsiSourceFile> psiSourceFiles, IList <IPsiSourceFile> usingFiles)
        {
            var allSymbols = cache.GetAllSymbols();
            List <IPsiSourceFile> files = new List <IPsiSourceFile>();

            foreach (var psiSourceFile in psiSourceFiles)
            {
                foreach (var allIncludeFileSymbol in allSymbols)
                {
                    if (allIncludeFileSymbol.Name == psiSourceFile.Name)
                    {
                        if (!(files.Contains(allIncludeFileSymbol.SourceFile)))
                        {
                            files.Add(allIncludeFileSymbol.SourceFile);
                        }
                        if (!(usingFiles.Contains(allIncludeFileSymbol.SourceFile)))
                        {
                            usingFiles.Add(allIncludeFileSymbol.SourceFile);
                        }
                    }
                }
            }

            if (files.Count > 0)
            {
                GetFilesUsing(cache, files, usingFiles);
            }
        }
コード例 #2
0
        private void GetIncludedFiles(IList <IPsiSourceFile> includedFiles, LexCache cache, IPsiSourceFile sourceFile)
        {
            var firstIncludedFiles             = cache.GetIncludeFileSymbolsDeclaredInFile(sourceFile);
            var allFiles                       = cache.GetAllFiles();
            IList <IPsiSourceFile> sourceFiles = new List <IPsiSourceFile>();

            foreach (var lexIncludeFileSymbol in firstIncludedFiles)
            {
                foreach (var file in allFiles)
                {
                    if (lexIncludeFileSymbol.Name == file.Name)
                    {
                        if (!(sourceFiles.Contains(file)) && !(includedFiles.Contains(file)))
                        {
                            sourceFiles.Add(file);
                            includedFiles.Add(file);
                        }
                    }
                }
            }

            foreach (var psiSourceFile in sourceFiles)
            {
                GetIncludedFiles(includedFiles, cache, psiSourceFile);
            }
        }
コード例 #3
0
        private void CollectStatesInRelatedFiles(LexCache cache, IList <ILexSymbol> symbols)
        {
            var includedFiles = GetRelatedFiles(cache);

            foreach (var lexIncludeFileSymbol in includedFiles)
            {
                var symbolsInFile = cache.GetStateSymbolsDeclaredInFile(lexIncludeFileSymbol);
                foreach (var lexStateSymbol in symbolsInFile)
                {
                    symbols.Add(lexStateSymbol);
                }
            }
        }
コード例 #4
0
        private IEnumerable <IPsiSourceFile> GetRelatedFiles(LexCache cache)
        {
            IList <IPsiSourceFile> includedFiles = new List <IPsiSourceFile>();
            //GetIncludedFiles(includedFiles, cache, GetSourceFile());


            IList <IPsiSourceFile> usingFiles = new List <IPsiSourceFile>();

            GetFilesUsing(cache, GetSourceFile(), usingFiles);
            usingFiles.Add(GetSourceFile());
            foreach (var psiSourceFile in usingFiles)
            {
                GetIncludedFiles(includedFiles, cache, psiSourceFile);
            }
            return(includedFiles);
        }