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); } }
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); } }
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); } } }
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); }