Fixed generation of internal clang-uml diagrams
This commit is contained in:
@@ -98,6 +98,11 @@ const activity &diagram::get_activity(common::id_t id) const
|
|||||||
return sequences_.at(id);
|
return sequences_.at(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool diagram::has_activity(common::id_t id) const
|
||||||
|
{
|
||||||
|
return sequences_.count(id) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
activity &diagram::get_activity(common::id_t id) { return sequences_.at(id); }
|
activity &diagram::get_activity(common::id_t id) { return sequences_.at(id); }
|
||||||
|
|
||||||
void diagram::add_message(model::message &&message)
|
void diagram::add_message(model::message &&message)
|
||||||
|
|||||||
@@ -100,6 +100,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
void add_active_participant(common::id_t id);
|
void add_active_participant(common::id_t id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if diagram has activity identified by caller id
|
||||||
|
*
|
||||||
|
* @param id Caller id representing the activity
|
||||||
|
* @return True, if an activity already exists
|
||||||
|
*/
|
||||||
|
bool has_activity(common::id_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get reference to current activity of a participant
|
* @brief Get reference to current activity of a participant
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -514,14 +514,14 @@ bool translation_unit_visitor::TraverseCallExpr(clang::CallExpr *expr)
|
|||||||
if (source_manager().isInSystemHeader(expr->getSourceRange().getBegin()))
|
if (source_manager().isInSystemHeader(expr->getSourceRange().getBegin()))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
LOG_DBG("Entering call expression at {}",
|
LOG_TRACE("Entering call expression at {}",
|
||||||
expr->getBeginLoc().printToString(source_manager()));
|
expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
context().enter_callexpr(expr);
|
context().enter_callexpr(expr);
|
||||||
|
|
||||||
RecursiveASTVisitor<translation_unit_visitor>::TraverseCallExpr(expr);
|
RecursiveASTVisitor<translation_unit_visitor>::TraverseCallExpr(expr);
|
||||||
|
|
||||||
LOG_DBG("Leaving call expression at {}",
|
LOG_TRACE("Leaving call expression at {}",
|
||||||
expr->getBeginLoc().printToString(source_manager()));
|
expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
context().leave_callexpr();
|
context().leave_callexpr();
|
||||||
@@ -537,7 +537,7 @@ bool translation_unit_visitor::TraverseCXXMemberCallExpr(
|
|||||||
if (source_manager().isInSystemHeader(expr->getSourceRange().getBegin()))
|
if (source_manager().isInSystemHeader(expr->getSourceRange().getBegin()))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
LOG_DBG("Entering member call expression at {}",
|
LOG_TRACE("Entering member call expression at {}",
|
||||||
expr->getBeginLoc().printToString(source_manager()));
|
expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
context().enter_callexpr(expr);
|
context().enter_callexpr(expr);
|
||||||
@@ -545,7 +545,7 @@ bool translation_unit_visitor::TraverseCXXMemberCallExpr(
|
|||||||
RecursiveASTVisitor<translation_unit_visitor>::TraverseCXXMemberCallExpr(
|
RecursiveASTVisitor<translation_unit_visitor>::TraverseCXXMemberCallExpr(
|
||||||
expr);
|
expr);
|
||||||
|
|
||||||
LOG_DBG("Leaving member call expression at {}",
|
LOG_TRACE("Leaving member call expression at {}",
|
||||||
expr->getBeginLoc().printToString(source_manager()));
|
expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
context().leave_callexpr();
|
context().leave_callexpr();
|
||||||
@@ -591,7 +591,7 @@ bool translation_unit_visitor::TraverseCXXTemporaryObjectExpr(
|
|||||||
bool translation_unit_visitor::TraverseCXXConstructExpr(
|
bool translation_unit_visitor::TraverseCXXConstructExpr(
|
||||||
clang::CXXConstructExpr *expr)
|
clang::CXXConstructExpr *expr)
|
||||||
{
|
{
|
||||||
LOG_DBG("Entering cxx construct call expression at {}",
|
LOG_TRACE("Entering cxx construct call expression at {}",
|
||||||
expr->getBeginLoc().printToString(source_manager()));
|
expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
context().enter_callexpr(expr);
|
context().enter_callexpr(expr);
|
||||||
@@ -601,7 +601,7 @@ bool translation_unit_visitor::TraverseCXXConstructExpr(
|
|||||||
|
|
||||||
translation_unit_visitor::VisitCXXConstructExpr(expr);
|
translation_unit_visitor::VisitCXXConstructExpr(expr);
|
||||||
|
|
||||||
LOG_DBG("Leaving member call expression at {}",
|
LOG_TRACE("Leaving member call expression at {}",
|
||||||
expr->getBeginLoc().printToString(source_manager()));
|
expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
context().leave_callexpr();
|
context().leave_callexpr();
|
||||||
@@ -1918,7 +1918,12 @@ void translation_unit_visitor::pop_message_to_diagram(clang::CallExpr *expr)
|
|||||||
auto msg = std::move(call_expr_message_map_.at(expr));
|
auto msg = std::move(call_expr_message_map_.at(expr));
|
||||||
|
|
||||||
auto caller_id = msg.from();
|
auto caller_id = msg.from();
|
||||||
diagram().get_activity(caller_id).add_message(std::move(msg));
|
|
||||||
|
if (caller_id == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (diagram().has_activity(caller_id))
|
||||||
|
diagram().get_activity(caller_id).add_message(std::move(msg));
|
||||||
|
|
||||||
call_expr_message_map_.erase(expr);
|
call_expr_message_map_.erase(expr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,8 +69,12 @@ TEST_CASE("t20012", "[test-case][sequence]")
|
|||||||
REQUIRE_THAT(src,
|
REQUIRE_THAT(src,
|
||||||
HasCall(_A("tmain()::(lambda t20012.cc:86:9)"), _A("C"), "c()"));
|
HasCall(_A("tmain()::(lambda t20012.cc:86:9)"), _A("C"), "c()"));
|
||||||
|
|
||||||
// @todo #168
|
REQUIRE_THAT(src,
|
||||||
// REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("D"), "add5(int)"));
|
HasCall(_A("tmain()"), _A("tmain()::(lambda t20012.cc:94:9)"),
|
||||||
|
"operator()(auto) const"));
|
||||||
|
REQUIRE_THAT(src,
|
||||||
|
HasCall(_A("tmain()::(lambda t20012.cc:94:9)"), _A("D"),
|
||||||
|
"add5(int) const"));
|
||||||
|
|
||||||
save_puml(config.output_directory(), diagram->name + ".puml", src);
|
save_puml(config.output_directory(), diagram->name + ".puml", src);
|
||||||
}
|
}
|
||||||
@@ -84,19 +88,20 @@ TEST_CASE("t20012", "[test-case][sequence]")
|
|||||||
FindMessage(j, "tmain()", "tmain()::(lambda t20012.cc:67:20)",
|
FindMessage(j, "tmain()", "tmain()::(lambda t20012.cc:67:20)",
|
||||||
"operator()() const"),
|
"operator()() const"),
|
||||||
FindMessage(j, "tmain()::(lambda t20012.cc:67:20)", "A", "a()"),
|
FindMessage(j, "tmain()::(lambda t20012.cc:67:20)", "A", "a()"),
|
||||||
FindMessage(j, "A", "A", "aa()"), FindMessage(j, "A", "A", "aaa()"),
|
FindMessage(j, "A", "A", "aa()"),
|
||||||
|
FindMessage(j, "A", "A", "aaa()"),
|
||||||
FindMessage(j, "tmain()::(lambda t20012.cc:67:20)", "B", "b()"),
|
FindMessage(j, "tmain()::(lambda t20012.cc:67:20)", "B", "b()"),
|
||||||
FindMessage(j, "B", "B", "bb()"), FindMessage(j, "B", "B", "bbb()"),
|
FindMessage(j, "B", "B", "bb()"),
|
||||||
|
FindMessage(j, "B", "B", "bbb()"),
|
||||||
FindMessage(j, "tmain()::(lambda t20012.cc:80:20)", "C", "c()"),
|
FindMessage(j, "tmain()::(lambda t20012.cc:80:20)", "C", "c()"),
|
||||||
FindMessage(j, "C", "C", "cc()"), FindMessage(j, "C", "C", "ccc()"),
|
FindMessage(j, "C", "C", "cc()"),
|
||||||
|
FindMessage(j, "C", "C", "ccc()"),
|
||||||
FindMessage(j, "tmain()::(lambda t20012.cc:80:20)",
|
FindMessage(j, "tmain()::(lambda t20012.cc:80:20)",
|
||||||
"tmain()::(lambda t20012.cc:67:20)", "operator()() const"),
|
"tmain()::(lambda t20012.cc:67:20)", "operator()() const"),
|
||||||
FindMessage(j, "tmain()", "R<(lambda at t20012.cc:86:9)>", "r()"),
|
FindMessage(j, "tmain()", "R<(lambda at t20012.cc:86:9)>", "r()"),
|
||||||
FindMessage(j, "R<(lambda at t20012.cc:86:9)>",
|
FindMessage(j, "R<(lambda at t20012.cc:86:9)>",
|
||||||
"tmain()::(lambda t20012.cc:86:9)", "operator()() const"),
|
"tmain()::(lambda t20012.cc:86:9)", "operator()() const"),
|
||||||
FindMessage(j, "tmain()::(lambda t20012.cc:86:9)", "C", "c()"),
|
FindMessage(j, "tmain()::(lambda t20012.cc:86:9)", "C", "c()"),
|
||||||
// @todo #168
|
|
||||||
// FindMessage(j, "tmain()", "D", "add5(int)")
|
|
||||||
};
|
};
|
||||||
|
|
||||||
REQUIRE(std::is_sorted(messages.begin(), messages.end()));
|
REQUIRE(std::is_sorted(messages.begin(), messages.end()));
|
||||||
@@ -141,6 +146,13 @@ TEST_CASE("t20012", "[test-case][sequence]")
|
|||||||
REQUIRE_THAT(src,
|
REQUIRE_THAT(src,
|
||||||
HasCall(_A("tmain()::(lambda t20012.cc:86:9)"), _A("C"), "c()"));
|
HasCall(_A("tmain()::(lambda t20012.cc:86:9)"), _A("C"), "c()"));
|
||||||
|
|
||||||
|
REQUIRE_THAT(src,
|
||||||
|
HasCall(_A("tmain()"), _A("tmain()::(lambda t20012.cc:94:9)"),
|
||||||
|
"operator()(auto) const"));
|
||||||
|
REQUIRE_THAT(src,
|
||||||
|
HasCall(_A("tmain()::(lambda t20012.cc:94:9)"), _A("D"),
|
||||||
|
"add5(int) const"));
|
||||||
|
|
||||||
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
|
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user