| //===-- FindAllSymbols.h - find all symbols----------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_SYMBOL_MATCHER_H |
| #define LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_SYMBOL_MATCHER_H |
| |
| #include "SymbolInfo.h" |
| #include "SymbolReporter.h" |
| #include "clang/ASTMatchers/ASTMatchFinder.h" |
| #include <string> |
| |
| namespace clang { |
| namespace find_all_symbols { |
| |
| class HeaderMapCollector; |
| |
| /// \brief FindAllSymbols collects all classes, free standing functions and |
| /// global variables with some extra information such as the path of the header |
| /// file, the namespaces they are contained in, the type of variables and the |
| /// parameter types of functions. |
| /// |
| /// NOTE: |
| /// - Symbols declared in main files are not collected since they can not be |
| /// included. |
| /// - Member functions are not collected because accessing them must go |
| /// through the class. #include fixer only needs the class name to find |
| /// headers. |
| /// |
| class FindAllSymbols : public ast_matchers::MatchFinder::MatchCallback { |
| public: |
| explicit FindAllSymbols(SymbolReporter *Reporter, |
| HeaderMapCollector *Collector = nullptr) |
| : Reporter(Reporter), Collector(Collector) {} |
| |
| void registerMatchers(ast_matchers::MatchFinder *MatchFinder); |
| |
| void run(const ast_matchers::MatchFinder::MatchResult &result) override; |
| |
| protected: |
| void onEndOfTranslationUnit() override; |
| |
| private: |
| // Current source file being processed, filled by first symbol found. |
| std::string Filename; |
| // Findings for the current source file, flushed on onEndOfTranslationUnit. |
| SymbolInfo::SignalMap FileSymbols; |
| // Reporter for SymbolInfo. |
| SymbolReporter *const Reporter; |
| // A remapping header file collector allowing clients include a different |
| // header. |
| HeaderMapCollector *const Collector; |
| }; |
| |
| } // namespace find_all_symbols |
| } // namespace clang |
| |
| #endif // LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_SYMBOL_MATCHER_H |