Fixed package generation in class diagrams

This commit is contained in:
Bartek Kryza
2022-02-27 00:49:25 +01:00
parent 33c6a4b938
commit 17b0686f5c
6 changed files with 52 additions and 16 deletions

View File

@@ -210,7 +210,7 @@ void generator::generate(
<< " <|-- "
<< m_model.to_alias(ns_relative(uns, c.full_name()))
<< '\n';
ostr << relstr.str();
all_relations_str << relstr.str();
}
catch (error::uml_alias_missing &e) {
LOG_ERROR("=== Skipping inheritance relation from {} to {} due "
@@ -300,15 +300,17 @@ void generator::generate(const package &p, std::ostream &ostr,
for (const auto &subpackage : p) {
if (dynamic_cast<package *>(subpackage.get())) {
generate(
dynamic_cast<package &>(*subpackage), ostr, relationships_ostr);
// TODO: add option - generate_empty_packages
const auto &sp = dynamic_cast<package &>(*subpackage);
if (!sp.is_empty())
generate(sp, ostr, relationships_ostr);
}
if (dynamic_cast<class_ *>(subpackage.get())) {
else if (dynamic_cast<class_ *>(subpackage.get())) {
generate_alias(dynamic_cast<class_ &>(*subpackage), ostr);
generate(
dynamic_cast<class_ &>(*subpackage), ostr, relationships_ostr);
}
if (dynamic_cast<enum_ *>(subpackage.get())) {
else if (dynamic_cast<enum_ *>(subpackage.get())) {
generate_alias(dynamic_cast<enum_ &>(*subpackage), ostr);
generate(
dynamic_cast<enum_ &>(*subpackage), ostr, relationships_ostr);
@@ -326,26 +328,28 @@ void generator::generate(std::ostream &ostr) const
{
ostr << "@startuml" << '\n';
std::stringstream relationship_ostr;
std::stringstream relationships_ostr;
generate_plantuml_directives(ostr, m_config.puml().before);
for (const auto &p : m_model) {
if (dynamic_cast<package *>(p.get())) {
generate(dynamic_cast<package &>(*p), ostr, relationship_ostr);
const auto &sp = dynamic_cast<package &>(*p);
if (!sp.is_empty())
generate(sp, ostr, relationships_ostr);
}
if (dynamic_cast<class_ *>(p.get())) {
else if (dynamic_cast<class_ *>(p.get())) {
generate_alias(dynamic_cast<class_ &>(*p), ostr);
generate(dynamic_cast<class_ &>(*p), ostr, relationship_ostr);
generate(dynamic_cast<class_ &>(*p), ostr, relationships_ostr);
}
if (dynamic_cast<enum_ *>(p.get())) {
else if (dynamic_cast<enum_ *>(p.get())) {
generate_alias(dynamic_cast<enum_ &>(*p), ostr);
generate(dynamic_cast<enum_ &>(*p), ostr, relationship_ostr);
generate(dynamic_cast<enum_ &>(*p), ostr, relationships_ostr);
}
ostr << '\n';
}
ostr << relationship_ostr.str();
ostr << relationships_ostr.str();
generate_config_layout_hints(ostr);

View File

@@ -228,7 +228,7 @@ void translation_unit_visitor::process_namespace(
auto usn = util::split(ctx.config().using_namespace()[0], "::");
if (!util::starts_with(usn, package_path)) {
if (ctx.config().should_include_package(util::join(package_path, "::"))) {
auto p = std::make_unique<common::model::package>(usn);
util::remove_prefix(package_path, usn);
@@ -362,7 +362,8 @@ void translation_unit_visitor::process_class_declaration(
fmt::ptr(reinterpret_cast<const void *>(&cls)));
assert(c_ptr);
ctx.diagram().add_class(std::move(c_ptr));
if (ctx.config().should_include(c.full_name(false)))
ctx.diagram().add_class(std::move(c_ptr));
}
void translation_unit_visitor::process_class_containment(
@@ -1105,7 +1106,8 @@ void translation_unit_visitor::
c.add_relationship(std::move(rr));
ctx.diagram().add_class(std::move(tinst_ptr));
if (ctx.config().should_include(c.full_name(false)))
ctx.diagram().add_class(std::move(tinst_ptr));
}
}
}