//===--- Indexer.h - IndexProvider implementation ---------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // IndexProvider implementation. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_INDEX_INDEXER_H #define LLVM_CLANG_INDEX_INDEXER_H #include "clang/Index/IndexProvider.h" #include "clang/Index/Entity.h" #include "clang/Index/GlobalSelector.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/DenseMap.h" #include namespace clang { class ASTContext; class FunctionDecl; namespace idx { class Program; class TranslationUnit; /// \brief Maps information to TranslationUnits. class Indexer : public IndexProvider { public: typedef llvm::SmallPtrSet TUSetTy; typedef llvm::DenseMap CtxTUMapTy; typedef std::map MapTy; typedef std::map SelMapTy; typedef std::map > DefMapTy; explicit Indexer(Program &prog) : Prog(prog) { } Program &getProgram() const { return Prog; } /// \brief Find all Entities and map them to the given translation unit. void IndexAST(TranslationUnit *TU); virtual void GetTranslationUnitsFor(Entity Ent, TranslationUnitHandler &Handler); virtual void GetTranslationUnitsFor(GlobalSelector Sel, TranslationUnitHandler &Handler); std::pair getDefinitionFor(Entity Ent); private: Program &Prog; MapTy Map; // Map a function Entity to the its definition. DefMapTy DefMap; CtxTUMapTy CtxTUMap; SelMapTy SelMap; }; } // namespace idx } // namespace clang #endif