diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.cc b/src/class_diagram/generators/plantuml/class_diagram_generator.cc index bed14dbf..3e7b906d 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.cc +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.cc @@ -311,36 +311,4 @@ void generator::generate(std::ostream &ostr) const ostr << "@enduml" << '\n'; } -clanguml::class_diagram::model::diagram generate( - cppast::libclang_compilation_database &db, const std::string &name, - clanguml::config::class_diagram &diagram) -{ - LOG_DBG("Generating diagram {}.puml", name); - clanguml::class_diagram::model::diagram d; - d.set_name(name); - - // Get all translation units matching the glob from diagram - // configuration - std::vector translation_units{}; - for (const auto &g : diagram.glob()) { - LOG_DBG("Processing glob: {}", g); - const auto matches = glob::rglob(g); - std::copy(matches.begin(), matches.end(), - std::back_inserter(translation_units)); - } - - cppast::cpp_entity_index idx; - cppast::simple_file_parser parser{ - type_safe::ref(idx)}; - - // Process all matching translation units - clanguml::class_diagram::visitor::translation_unit_visitor ctx( - idx, d, diagram); - cppast::parse_files(parser, translation_units, db); - for (auto &file : parser.files()) - ctx(file); - - return d; -} - } diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.h b/src/class_diagram/generators/plantuml/class_diagram_generator.h index a14f881c..ea6bf845 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.h +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.h @@ -69,10 +69,6 @@ public: void generate(std::ostream &ostr) const override; }; -clanguml::class_diagram::model::diagram generate( - cppast::libclang_compilation_database &db, const std::string &name, - clanguml::config::class_diagram &diagram); - } } } diff --git a/src/common/generators/plantuml/generator.h b/src/common/generators/plantuml/generator.h index 46febef1..9906dbd7 100644 --- a/src/common/generators/plantuml/generator.h +++ b/src/common/generators/plantuml/generator.h @@ -21,6 +21,9 @@ #include "util/error.h" #include "util/util.h" +#include +#include + #include namespace clanguml::common::generators::plantuml { @@ -127,4 +130,36 @@ void generator::generate_notes( } } +template +DiagramModel generate(cppast::libclang_compilation_database &db, + const std::string &name, DiagramConfig &diagram) +{ + LOG_INFO("Generating diagram {}.puml", name); + DiagramModel d; + d.set_name(name); + + // Get all translation units matching the glob from diagram + // configuration + std::vector translation_units{}; + for (const auto &g : diagram.glob()) { + LOG_DBG("Processing glob: {}", g); + const auto matches = glob::rglob(g); + std::copy(matches.begin(), matches.end(), + std::back_inserter(translation_units)); + } + + cppast::cpp_entity_index idx; + cppast::simple_file_parser parser{ + type_safe::ref(idx)}; + + // Process all matching translation units + DiagramVisitor ctx(idx, d, diagram); + cppast::parse_files(parser, translation_units, db); + for (auto &file : parser.files()) + ctx(file); + + return d; +} + } diff --git a/src/main.cc b/src/main.cc index 1b95a308..6f02be90 100644 --- a/src/main.cc +++ b/src/main.cc @@ -113,31 +113,47 @@ int main(int argc, const char *argv[]) ofs.open(path, std::ofstream::out | std::ofstream::trunc); if (diagram->type() == diagram_type::class_diagram) { + using diagram_config = clanguml::config::class_diagram; + using diagram_model = clanguml::class_diagram::model::diagram; + using diagram_visitor = + clanguml::class_diagram::visitor::translation_unit_visitor; + auto model = - clanguml::class_diagram::generators::plantuml::generate( - db, name, dynamic_cast(*diagram)); + clanguml::common::generators::plantuml::generate(db, diagram->name, + dynamic_cast(*diagram)); ofs << clanguml::class_diagram::generators::plantuml::generator( - dynamic_cast(*diagram), - model); + dynamic_cast(*diagram), model); } else if (diagram->type() == diagram_type::sequence_diagram) { + using diagram_config = clanguml::config::sequence_diagram; + using diagram_model = clanguml::sequence_diagram::model::diagram; + using diagram_visitor = + clanguml::sequence_diagram::visitor::translation_unit_visitor; + auto model = - clanguml::sequence_diagram::generators::plantuml::generate( - db, name, dynamic_cast(*diagram)); + clanguml::common::generators::plantuml::generate(db, diagram->name, + dynamic_cast(*diagram)); ofs << clanguml::sequence_diagram::generators::plantuml::generator( dynamic_cast(*diagram), model); } else if (diagram->type() == diagram_type::package_diagram) { + using diagram_config = clanguml::config::package_diagram; + using diagram_model = clanguml::package_diagram::model::diagram; + using diagram_visitor = + clanguml::package_diagram::visitor::translation_unit_visitor; + auto model = - clanguml::package_diagram::generators::plantuml::generate( - db, name, dynamic_cast(*diagram)); + clanguml::common::generators::plantuml::generate(db, diagram->name, + dynamic_cast(*diagram)); ofs << clanguml::package_diagram::generators::plantuml::generator( - dynamic_cast(*diagram), - model); + dynamic_cast(*diagram), model); } LOG_INFO("Written {} diagram to {}", name, path.string()); diff --git a/src/package_diagram/generators/plantuml/package_diagram_generator.cc b/src/package_diagram/generators/plantuml/package_diagram_generator.cc index 289cf9ea..f1a68570 100644 --- a/src/package_diagram/generators/plantuml/package_diagram_generator.cc +++ b/src/package_diagram/generators/plantuml/package_diagram_generator.cc @@ -109,36 +109,4 @@ void generator::generate(std::ostream &ostr) const ostr << "@enduml" << '\n'; } -clanguml::package_diagram::model::diagram generate( - cppast::libclang_compilation_database &db, const std::string &name, - clanguml::config::package_diagram &diagram) -{ - LOG_INFO("Generating package diagram {}.puml", name); - clanguml::package_diagram::model::diagram d; - d.set_name(name); - - // Get all translation units matching the glob from diagram - // configuration - std::vector translation_units{}; - for (const auto &g : diagram.glob()) { - LOG_DBG("Processing glob: {}", g); - const auto matches = glob::rglob(g); - std::copy(matches.begin(), matches.end(), - std::back_inserter(translation_units)); - } - - cppast::cpp_entity_index idx; - cppast::simple_file_parser parser{ - type_safe::ref(idx)}; - - // Process all matching translation units - clanguml::package_diagram::visitor::translation_unit_visitor ctx( - idx, d, diagram); - cppast::parse_files(parser, translation_units, db); - for (auto &file : parser.files()) - ctx(file); - - return d; -} - } diff --git a/src/package_diagram/generators/plantuml/package_diagram_generator.h b/src/package_diagram/generators/plantuml/package_diagram_generator.h index 95bf027f..a29e0743 100644 --- a/src/package_diagram/generators/plantuml/package_diagram_generator.h +++ b/src/package_diagram/generators/plantuml/package_diagram_generator.h @@ -28,7 +28,6 @@ #include #include -#include #include #include @@ -65,10 +64,6 @@ public: void generate(std::ostream &ostr) const; }; -clanguml::package_diagram::model::diagram generate( - cppast::libclang_compilation_database &db, const std::string &name, - clanguml::config::package_diagram &diagram); - } } } diff --git a/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc b/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc index 6e126966..76b6277f 100644 --- a/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc +++ b/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc @@ -107,35 +107,4 @@ void generator::generate(std::ostream &ostr) const ostr << "@enduml" << std::endl; } -clanguml::sequence_diagram::model::diagram generate( - cppast::libclang_compilation_database &db, const std::string &name, - clanguml::config::sequence_diagram &diagram) -{ - spdlog::info("Generating diagram {}.puml", name); - clanguml::sequence_diagram::model::diagram d; - d.name = name; - - cppast::cpp_entity_index idx; - cppast::simple_file_parser parser{ - type_safe::ref(idx)}; - - clanguml::sequence_diagram::visitor::translation_unit_visitor visitor( - idx, d, diagram); - - // Get all translation units matching the glob from diagram - // configuration - std::vector translation_units{}; - for (const auto &g : diagram.glob()) { - spdlog::debug("Processing glob: {}", g); - const auto matches = glob::rglob(g); - std::copy(matches.begin(), matches.end(), - std::back_inserter(translation_units)); - } - cppast::parse_files(parser, translation_units, db); - - for (auto &file : parser.files()) - visitor(file); - - return d; -} } diff --git a/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.h b/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.h index b47aa630..efcf1c0c 100644 --- a/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.h +++ b/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.h @@ -60,10 +60,6 @@ public: void generate(std::ostream &ostr) const; }; -clanguml::sequence_diagram::model::diagram generate( - cppast::libclang_compilation_database &db, const std::string &name, - clanguml::config::sequence_diagram &diagram); - } } } diff --git a/src/sequence_diagram/model/diagram.cc b/src/sequence_diagram/model/diagram.cc index b83869ce..f85568f4 100644 --- a/src/sequence_diagram/model/diagram.cc +++ b/src/sequence_diagram/model/diagram.cc @@ -29,6 +29,10 @@ namespace clanguml::sequence_diagram::model { +std::string diagram::name() const { return name_; } + +void diagram::set_name(const std::string &name) { name_ = name; } + std::string diagram::to_alias(const std::string &full_name) const { return full_name; diff --git a/src/sequence_diagram/model/diagram.h b/src/sequence_diagram/model/diagram.h index 240a0b1b..67f6df39 100644 --- a/src/sequence_diagram/model/diagram.h +++ b/src/sequence_diagram/model/diagram.h @@ -25,12 +25,18 @@ namespace clanguml::sequence_diagram::model { struct diagram { + std::string name() const; + + void set_name(const std::string &name); + std::string to_alias(const std::string &full_name) const; bool started{false}; - std::string name; std::map sequences; + +private: + std::string name_; }; } diff --git a/tests/t20001/test_case.h b/tests/t20001/test_case.h index 1958db5c..66319027 100644 --- a/tests/t20001/test_case.h +++ b/tests/t20001/test_case.h @@ -30,7 +30,7 @@ TEST_CASE("t20001", "[test-case][sequence]") auto model = generate_sequence_diagram(db, diagram); - REQUIRE(model.name == "t20001_sequence"); + REQUIRE(model.name() == "t20001_sequence"); auto puml = generate_sequence_puml(diagram, model); diff --git a/tests/t20002/test_case.h b/tests/t20002/test_case.h index 5b4e3752..24cc8501 100644 --- a/tests/t20002/test_case.h +++ b/tests/t20002/test_case.h @@ -26,7 +26,7 @@ TEST_CASE("t20002", "[test-case][sequence]") auto model = generate_sequence_diagram(db, diagram); - REQUIRE(model.name == "t20002_sequence"); + REQUIRE(model.name() == "t20002_sequence"); auto puml = generate_sequence_puml(diagram, model); diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 8e42aff2..30190d72 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -16,6 +16,7 @@ * limitations under the License. */ #include "test_cases.h" +#include "common/generators/plantuml/generator.h" #include @@ -44,36 +45,48 @@ clanguml::sequence_diagram::model::diagram generate_sequence_diagram( cppast::libclang_compilation_database &db, std::shared_ptr diagram) { - auto diagram_model = - clanguml::sequence_diagram::generators::plantuml::generate(db, - diagram->name, - dynamic_cast(*diagram)); + using diagram_config = clanguml::config::sequence_diagram; + using diagram_model = clanguml::sequence_diagram::model::diagram; + using diagram_visitor = + clanguml::sequence_diagram::visitor::translation_unit_visitor; - return diagram_model; + auto model = clanguml::common::generators::plantuml::generate(db, diagram->name, + dynamic_cast(*diagram)); + + return model; } clanguml::class_diagram::model::diagram generate_class_diagram( cppast::libclang_compilation_database &db, std::shared_ptr diagram) { - auto diagram_model = - clanguml::class_diagram::generators::plantuml::generate(db, - diagram->name, - dynamic_cast(*diagram)); + using diagram_config = clanguml::config::class_diagram; + using diagram_model = clanguml::class_diagram::model::diagram; + using diagram_visitor = + clanguml::class_diagram::visitor::translation_unit_visitor; - return diagram_model; + auto model = clanguml::common::generators::plantuml::generate( + db, diagram->name, dynamic_cast(*diagram)); + + return model; } clanguml::package_diagram::model::diagram generate_package_diagram( cppast::libclang_compilation_database &db, std::shared_ptr diagram) { - auto diagram_model = - clanguml::package_diagram::generators::plantuml::generate(db, - diagram->name, - dynamic_cast(*diagram)); + using diagram_config = clanguml::config::package_diagram; + using diagram_model = clanguml::package_diagram::model::diagram; + using diagram_visitor = + clanguml::package_diagram::visitor::translation_unit_visitor; - return diagram_model; + auto model = clanguml::common::generators::plantuml::generate( + db, diagram->name, dynamic_cast(*diagram)); + + return model; } std::string generate_sequence_puml(