1241675Suqs//===- CXComment.h - Routines for manipulating CXComments -----------------===//
2241675Suqs//
3241675Suqs// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4241675Suqs// See https://llvm.org/LICENSE.txt for license information.
5241675Suqs// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6241675Suqs//
7241675Suqs//===----------------------------------------------------------------------===//
8241675Suqs//
9241675Suqs// This file defines routines for manipulating CXComments.
10241675Suqs//
11241675Suqs//===----------------------------------------------------------------------===//
12241675Suqs
13241675Suqs#ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
14241675Suqs#define LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
15241675Suqs
16241675Suqs#include "CXTranslationUnit.h"
17241675Suqs#include "clang-c/Documentation.h"
18241675Suqs#include "clang-c/Index.h"
19241675Suqs#include "clang/AST/ASTContext.h"
20241675Suqs#include "clang/AST/Comment.h"
21241675Suqs#include "clang/Frontend/ASTUnit.h"
22241675Suqs
23241675Suqsnamespace clang {
24241675Suqsnamespace comments {
25241675Suqs  class CommandTraits;
26241675Suqs}
27241675Suqs
28241675Suqsnamespace cxcomment {
29241675Suqs
30241675Suqsstatic inline CXComment createCXComment(const comments::Comment *C,
31241675Suqs                                        CXTranslationUnit TU) {
32241675Suqs  CXComment Result;
33241675Suqs  Result.ASTNode = C;
34241675Suqs  Result.TranslationUnit = TU;
35241675Suqs  return Result;
36241675Suqs}
37241675Suqs
38241675Suqsstatic inline const comments::Comment *getASTNode(CXComment CXC) {
39241675Suqs  return static_cast<const comments::Comment *>(CXC.ASTNode);
40241675Suqs}
41241675Suqs
42241675Suqstemplate<typename T>
43241675Suqsstatic inline const T *getASTNodeAs(CXComment CXC) {
44241675Suqs  const comments::Comment *C = getASTNode(CXC);
45241675Suqs  if (!C)
46241675Suqs    return nullptr;
47241675Suqs
48241675Suqs  return dyn_cast<T>(C);
49241675Suqs}
50241675Suqs
51241675Suqsstatic inline ASTContext &getASTContext(CXComment CXC) {
52241675Suqs  return cxtu::getASTUnit(CXC.TranslationUnit)->getASTContext();
53241675Suqs}
54241675Suqs
55241675Suqsstatic inline comments::CommandTraits &getCommandTraits(CXComment CXC) {
56241675Suqs  return getASTContext(CXC).getCommentCommandTraits();
57241675Suqs}
58241675Suqs
59241675Suqs} // end namespace cxcomment
60241675Suqs} // end namespace clang
61241675Suqs
62241675Suqs#endif
63241675Suqs
64241675Suqs