From 768faaa1c8af8cc0cb5146cd2f9121f03149c503 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 5 Mar 2022 20:15:59 +0100 Subject: [PATCH] Fixed skipping using_namespace when generating packages --- .../plantuml/class_diagram_generator.cc | 26 +++++++++++----- src/class_diagram/model/method_parameter.cc | 5 ++-- .../plantuml/package_diagram_generator.cc | 30 +++++++++++-------- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.cc b/src/class_diagram/generators/plantuml/class_diagram_generator.cc index 3d2e7ce5..c3bd0b3a 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.cc +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.cc @@ -281,19 +281,25 @@ void generator::generate( void generator::generate(const package &p, std::ostream &ostr, std::ostream &relationships_ostr) const { + const auto &uns = m_config.using_namespace(); + if (m_config.generate_packages()) { LOG_DBG("Generating package {}", p.name()); - ostr << "package [" << p.name() << "] "; - ostr << "as " << p.alias(); + // Don't generate packages from namespaces filtered out by + // using_namespace + if (!uns.starts_with(p.full_name(false))) { + ostr << "package [" << p.name() << "] "; + ostr << "as " << p.alias(); - if (p.is_deprecated()) - ostr << " <>"; + if (p.is_deprecated()) + ostr << " <>"; - if (!p.style().empty()) - ostr << " " << p.style(); + if (!p.style().empty()) + ostr << " " << p.style(); - ostr << " {" << '\n'; + ostr << " {" << '\n'; + } } for (const auto &subpackage : p) { @@ -316,7 +322,11 @@ void generator::generate(const package &p, std::ostream &ostr, } if (m_config.generate_packages()) { - ostr << "}" << '\n'; + // Don't generate packages from namespaces filtered out by + // using_namespace + if (!uns.starts_with(p.full_name(false))) { + ostr << "}" << '\n'; + } } generate_notes(ostr, p); diff --git a/src/class_diagram/model/method_parameter.cc b/src/class_diagram/model/method_parameter.cc index 2464e458..3942d43d 100644 --- a/src/class_diagram/model/method_parameter.cc +++ b/src/class_diagram/model/method_parameter.cc @@ -41,9 +41,8 @@ std::string method_parameter::to_string( const common::model::namespace_ &using_namespace) const { using namespace clanguml::util; - auto type_ns = common::model::namespace_{type()} - .relative_to(using_namespace) - .to_string(); + auto type_ns = + using_namespace.relative(common::model::namespace_{type()}.to_string()); if (default_value().empty()) return fmt::format("{} {}", type_ns, name()); diff --git a/src/package_diagram/generators/plantuml/package_diagram_generator.cc b/src/package_diagram/generators/plantuml/package_diagram_generator.cc index 2b093ff1..86512a82 100644 --- a/src/package_diagram/generators/plantuml/package_diagram_generator.cc +++ b/src/package_diagram/generators/plantuml/package_diagram_generator.cc @@ -66,22 +66,28 @@ void generator::generate(const package &p, std::ostream &ostr) const const auto &uns = m_config.using_namespace(); - ostr << "package [" << p.name() << "] "; - ostr << "as " << p.alias(); + // Don't generate packages from namespaces filtered out by + // using_namespace + if (!uns.starts_with(p.full_name(false))) { + ostr << "package [" << p.name() << "] "; + ostr << "as " << p.alias(); - if (p.is_deprecated()) - ostr << " <>"; + if (p.is_deprecated()) + ostr << " <>"; - if (!p.style().empty()) - ostr << " " << p.style(); + if (!p.style().empty()) + ostr << " " << p.style(); - ostr << " {" << '\n'; + ostr << " {" << '\n'; + } for (const auto &subpackage : p) { generate(dynamic_cast(*subpackage), ostr); } - ostr << "}" << '\n'; + if (!uns.starts_with(p.full_name(false))) { + ostr << "}" << '\n'; + } generate_notes(ostr, p); } @@ -92,11 +98,9 @@ void generator::generate(std::ostream &ostr) const generate_plantuml_directives(ostr, m_config.puml().before); - if (m_config.should_include_entities("packages")) { - for (const auto &p : m_model) { - generate(dynamic_cast(*p), ostr); - ostr << '\n'; - } + for (const auto &p : m_model) { + generate(dynamic_cast(*p), ostr); + ostr << '\n'; } // Process package relationships