15e4fe00eSDmitri Gribenko //===- CXComment.h - Routines for manipulating CXComments -----------------===// 25e4fe00eSDmitri Gribenko // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65e4fe00eSDmitri Gribenko // 75e4fe00eSDmitri Gribenko //===----------------------------------------------------------------------===// 85e4fe00eSDmitri Gribenko // 95e4fe00eSDmitri Gribenko // This file defines routines for manipulating CXComments. 105e4fe00eSDmitri Gribenko // 115e4fe00eSDmitri Gribenko //===----------------------------------------------------------------------===// 125e4fe00eSDmitri Gribenko 132f5db8b3SBenjamin Kramer #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H 142f5db8b3SBenjamin Kramer #define LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H 155e4fe00eSDmitri Gribenko 167acbf00fSDmitri Gribenko #include "CXTranslationUnit.h" 1759c6bc58SAlp Toker #include "clang-c/Documentation.h" 18575bc3baSChandler Carruth #include "clang-c/Index.h" 197acbf00fSDmitri Gribenko #include "clang/AST/ASTContext.h" 20cc0694c8SChandler Carruth #include "clang/AST/Comment.h" 217acbf00fSDmitri Gribenko #include "clang/Frontend/ASTUnit.h" 225e4fe00eSDmitri Gribenko 235e4fe00eSDmitri Gribenko namespace clang { 247acbf00fSDmitri Gribenko namespace comments { 257acbf00fSDmitri Gribenko class CommandTraits; 267acbf00fSDmitri Gribenko } 277acbf00fSDmitri Gribenko 285e4fe00eSDmitri Gribenko namespace cxcomment { 295e4fe00eSDmitri Gribenko createCXComment(const comments::Comment * C,CXTranslationUnit TU)30ff431602SDmitri Gribenkostatic inline CXComment createCXComment(const comments::Comment *C, 317acbf00fSDmitri Gribenko CXTranslationUnit TU) { 325e4fe00eSDmitri Gribenko CXComment Result; 337acbf00fSDmitri Gribenko Result.ASTNode = C; 347acbf00fSDmitri Gribenko Result.TranslationUnit = TU; 355e4fe00eSDmitri Gribenko return Result; 365e4fe00eSDmitri Gribenko } 375e4fe00eSDmitri Gribenko getASTNode(CXComment CXC)38ff431602SDmitri Gribenkostatic inline const comments::Comment *getASTNode(CXComment CXC) { 397acbf00fSDmitri Gribenko return static_cast<const comments::Comment *>(CXC.ASTNode); 405e4fe00eSDmitri Gribenko } 415e4fe00eSDmitri Gribenko 425e4fe00eSDmitri Gribenko template<typename T> getASTNodeAs(CXComment CXC)43ff431602SDmitri Gribenkostatic inline const T *getASTNodeAs(CXComment CXC) { 445e4fe00eSDmitri Gribenko const comments::Comment *C = getASTNode(CXC); 455e4fe00eSDmitri Gribenko if (!C) 4669186e73SCraig Topper return nullptr; 475e4fe00eSDmitri Gribenko 485e4fe00eSDmitri Gribenko return dyn_cast<T>(C); 495e4fe00eSDmitri Gribenko } 505e4fe00eSDmitri Gribenko getASTContext(CXComment CXC)51ff431602SDmitri Gribenkostatic inline ASTContext &getASTContext(CXComment CXC) { 52c22ea1ceSDmitri Gribenko return cxtu::getASTUnit(CXC.TranslationUnit)->getASTContext(); 537acbf00fSDmitri Gribenko } 547acbf00fSDmitri Gribenko getCommandTraits(CXComment CXC)55ff431602SDmitri Gribenkostatic inline comments::CommandTraits &getCommandTraits(CXComment CXC) { 567acbf00fSDmitri Gribenko return getASTContext(CXC).getCommentCommandTraits(); 577acbf00fSDmitri Gribenko } 587acbf00fSDmitri Gribenko 595e4fe00eSDmitri Gribenko } // end namespace cxcomment 605e4fe00eSDmitri Gribenko } // end namespace clang 615e4fe00eSDmitri Gribenko 625e4fe00eSDmitri Gribenko #endif 635e4fe00eSDmitri Gribenko 64