From 3eb652e5b54ee662a7a49aa333661fe717624213 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Thu, 24 Feb 2022 22:30:59 +0100 Subject: [PATCH] Moved all generated relationships in class diagram to the end --- .../plantuml/class_diagram_generator.cc | 32 ++++++++++++------- .../plantuml/class_diagram_generator.h | 9 ++++-- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.cc b/src/class_diagram/generators/plantuml/class_diagram_generator.cc index 006f47c6..909f0d54 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.cc +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.cc @@ -55,7 +55,8 @@ void generator::generate_alias(const enum_ &e, std::ostream &ostr) const ostr << "\" as " << e.alias() << '\n'; } -void generator::generate(const class_ &c, std::ostream &ostr) const +void generator::generate( + const class_ &c, std::ostream &ostr, std::ostream &relationships_ostr) const { namespace plantuml_common = clanguml::common::generators::plantuml; @@ -222,10 +223,11 @@ void generator::generate(const class_ &c, std::ostream &ostr) const generate_notes(ostr, c); // Print relationships - ostr << all_relations_str.str(); + relationships_ostr << all_relations_str.str(); } -void generator::generate(const enum_ &e, std::ostream &ostr) const +void generator::generate( + const enum_ &e, std::ostream &ostr, std::ostream &relationships_ostr) const { ostr << "enum " << e.alias(); @@ -264,7 +266,7 @@ void generator::generate(const enum_ &e, std::ostream &ostr) const relstr << '\n'; - ostr << relstr.str(); + relationships_ostr << relstr.str(); } catch (error::uml_alias_missing &ex) { LOG_ERROR("Skipping {} relation from {} to {} due " @@ -278,7 +280,8 @@ void generator::generate(const enum_ &e, std::ostream &ostr) const generate_notes(ostr, e); } -void generator::generate(const package &p, std::ostream &ostr) const +void generator::generate(const package &p, std::ostream &ostr, + std::ostream &relationships_ostr) const { if (m_config.generate_packages()) { LOG_DBG("Generating package {}", p.name()); @@ -297,15 +300,18 @@ void generator::generate(const package &p, std::ostream &ostr) const for (const auto &subpackage : p) { if (dynamic_cast(subpackage.get())) { - generate(dynamic_cast(*subpackage), ostr); + generate( + dynamic_cast(*subpackage), ostr, relationships_ostr); } if (dynamic_cast(subpackage.get())) { generate_alias(dynamic_cast(*subpackage), ostr); - generate(dynamic_cast(*subpackage), ostr); + generate( + dynamic_cast(*subpackage), ostr, relationships_ostr); } if (dynamic_cast(subpackage.get())) { generate_alias(dynamic_cast(*subpackage), ostr); - generate(dynamic_cast(*subpackage), ostr); + generate( + dynamic_cast(*subpackage), ostr, relationships_ostr); } } @@ -320,23 +326,27 @@ void generator::generate(std::ostream &ostr) const { ostr << "@startuml" << '\n'; + std::stringstream relationship_ostr; + generate_plantuml_directives(ostr, m_config.puml().before); for (const auto &p : m_model) { if (dynamic_cast(p.get())) { - generate(dynamic_cast(*p), ostr); + generate(dynamic_cast(*p), ostr, relationship_ostr); } if (dynamic_cast(p.get())) { generate_alias(dynamic_cast(*p), ostr); - generate(dynamic_cast(*p), ostr); + generate(dynamic_cast(*p), ostr, relationship_ostr); } if (dynamic_cast(p.get())) { generate_alias(dynamic_cast(*p), ostr); - generate(dynamic_cast(*p), ostr); + generate(dynamic_cast(*p), ostr, relationship_ostr); } ostr << '\n'; } + ostr << relationship_ostr.str(); + generate_config_layout_hints(ostr); generate_plantuml_directives(ostr, m_config.puml().after); diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.h b/src/class_diagram/generators/plantuml/class_diagram_generator.h index 8e608d29..cb570ca3 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.h +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.h @@ -63,11 +63,14 @@ public: void generate_alias(const enum_ &e, std::ostream &ostr) const; - void generate(const class_ &c, std::ostream &ostr) const; + void generate(const class_ &c, std::ostream &ostr, + std::ostream &relationships_ostr) const; - void generate(const enum_ &e, std::ostream &ostr) const; + void generate(const enum_ &e, std::ostream &ostr, + std::ostream &relationships_ostr) const; - void generate(const package &p, std::ostream &ostr) const; + void generate(const package &p, std::ostream &ostr, + std::ostream &relationships_ostr) const; void generate(std::ostream &ostr) const override; };