| //===-- Mapper.h - ClangDoc Mapper ------------------------------*- C++ -*-===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | // | 
 | // This file implements the Mapper piece of the clang-doc tool. It implements | 
 | // a RecursiveASTVisitor to look at each declaration and populate the info | 
 | // into the internal representation. Each seen declaration is serialized to | 
 | // to bitcode and written out to the ExecutionContext as a KV pair where the | 
 | // key is the declaration's USR and the value is the serialized bitcode. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_MAPPER_H | 
 | #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_MAPPER_H | 
 |  | 
 | #include "Representation.h" | 
 | #include "clang/AST/RecursiveASTVisitor.h" | 
 | #include "clang/Tooling/Execution.h" | 
 |  | 
 | using namespace clang::comments; | 
 | using namespace clang::tooling; | 
 |  | 
 | namespace clang { | 
 | namespace doc { | 
 |  | 
 | class MapASTVisitor : public clang::RecursiveASTVisitor<MapASTVisitor>, | 
 |                       public ASTConsumer { | 
 | public: | 
 |   explicit MapASTVisitor(ASTContext *Ctx, ClangDocContext CDCtx) | 
 |       : CDCtx(CDCtx) {} | 
 |  | 
 |   void HandleTranslationUnit(ASTContext &Context) override; | 
 |   bool VisitNamespaceDecl(const NamespaceDecl *D); | 
 |   bool VisitRecordDecl(const RecordDecl *D); | 
 |   bool VisitEnumDecl(const EnumDecl *D); | 
 |   bool VisitCXXMethodDecl(const CXXMethodDecl *D); | 
 |   bool VisitFunctionDecl(const FunctionDecl *D); | 
 |  | 
 | private: | 
 |   template <typename T> bool mapDecl(const T *D); | 
 |  | 
 |   int getLine(const NamedDecl *D, const ASTContext &Context) const; | 
 |   StringRef getFile(const NamedDecl *D, const ASTContext &Context) const; | 
 |   comments::FullComment *getComment(const NamedDecl *D, | 
 |                                     const ASTContext &Context) const; | 
 |  | 
 |   ClangDocContext CDCtx; | 
 | }; | 
 |  | 
 | } // namespace doc | 
 | } // namespace clang | 
 |  | 
 | #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_MAPPER_H |