26#include <clang/AST/Expr.h>
27#include <clang/AST/RecursiveASTVisitor.h>
28#include <clang/Basic/SourceManager.h>
35using common::model::template_parameter;
37std::string to_string(
const clang::FunctionTemplateDecl *decl);
50 :
public clang::RecursiveASTVisitor<translation_unit_visitor>,
119 clang::ClassTemplateSpecializationDecl *declaration);
128 clang::FunctionTemplateDecl *function_declaration);
131 clang::ObjCInterfaceDecl *interface_declaration);
181 template <
typename T = model::participant>
184 assert(decl !=
nullptr);
187 if (!unique_participant_id.has_value())
190 return get_participant<T>(unique_participant_id.value());
200 template <
typename T = model::participant>
203 assert(decl !=
nullptr);
206 if (!unique_participant_id.has_value())
209 return get_participant<T>(unique_participant_id.value());
219 template <
typename T = model::participant>
222 if (
diagram().participants().find(
id) ==
diagram().participants().end())
226 *(
static_cast<T *
>(
diagram().participants().at(
id).get())));
236 template <
typename T = model::participant>
239 if (
diagram().participants().find(
id) ==
diagram().participants().end())
243 *(
static_cast<T *
>(
diagram().participants().at(
id).get())));
271 const clang::NamedDecl *decl)
const;
338 bool should_include(
const clang::FunctionTemplateDecl *decl)
const;
348 std::unique_ptr<clanguml::sequence_diagram::model::class_>
351 std::unique_ptr<clanguml::sequence_diagram::model::class_>
354 std::unique_ptr<clanguml::sequence_diagram::model::class_>
357 std::unique_ptr<clanguml::sequence_diagram::model::method>
360 std::unique_ptr<clanguml::sequence_diagram::model::objc_method>
363 std::unique_ptr<clanguml::sequence_diagram::model::method>
366 std::unique_ptr<model::function_template>
370 const clang::FunctionDecl &declaration);
373 const clang::FunctionTemplateDecl &declaration);
376 clang::ClassTemplateSpecializationDecl *cls);
405 const clang::SourceLocation &source_location)
const;
422 const clang::CXXDependentScopeMemberExpr *dependent_member_expr)
const;
432 model::message &m,
const clang::CXXConstructExpr *construct_expr);
442 const clang::CXXOperatorCallExpr *operator_call_expr);
445 model::message &m,
const clang::CUDAKernelCallExpr *cuda_call_expr);
455 model::message &m,
const clang::CXXMemberCallExpr *method_call_expr);
520 const clang::SourceManager &sm,
const clang::ASTContext &
context,
521 eid_t caller_id,
const clang::Stmt *stmt);
552 std::map<clang::CallExpr *, std::deque<model::message>>
554 std::map<clang::CXXConstructExpr *, model::message>
558 std::map<eid_t, std::unique_ptr<clanguml::sequence_diagram::model::class_>>
569 mutable std::set<const clang::Expr *>
572 mutable std::set<std::pair<int64_t, const clang::RawComment *>>