Home | History | Annotate | Download | only in libclang
      1 //===- CXComment.h - Routines for manipulating CXComments -----------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines routines for manipulating CXComments.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
     15 #define LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
     16 
     17 #include "CXTranslationUnit.h"
     18 #include "clang-c/Documentation.h"
     19 #include "clang-c/Index.h"
     20 #include "clang/AST/ASTContext.h"
     21 #include "clang/AST/Comment.h"
     22 #include "clang/Frontend/ASTUnit.h"
     23 
     24 namespace clang {
     25 namespace comments {
     26   class CommandTraits;
     27 }
     28 
     29 namespace cxcomment {
     30 
     31 static inline CXComment createCXComment(const comments::Comment *C,
     32                                         CXTranslationUnit TU) {
     33   CXComment Result;
     34   Result.ASTNode = C;
     35   Result.TranslationUnit = TU;
     36   return Result;
     37 }
     38 
     39 static inline const comments::Comment *getASTNode(CXComment CXC) {
     40   return static_cast<const comments::Comment *>(CXC.ASTNode);
     41 }
     42 
     43 template<typename T>
     44 static inline const T *getASTNodeAs(CXComment CXC) {
     45   const comments::Comment *C = getASTNode(CXC);
     46   if (!C)
     47     return nullptr;
     48 
     49   return dyn_cast<T>(C);
     50 }
     51 
     52 static inline ASTContext &getASTContext(CXComment CXC) {
     53   return cxtu::getASTUnit(CXC.TranslationUnit)->getASTContext();
     54 }
     55 
     56 static inline comments::CommandTraits &getCommandTraits(CXComment CXC) {
     57   return getASTContext(CXC).getCommentCommandTraits();
     58 }
     59 
     60 } // end namespace cxcomment
     61 } // end namespace clang
     62 
     63 #endif
     64 
     65