From f5e0515b7e172acbfdd06640bb03ec665aa934a9 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 21 May 2022 23:16:51 +0200 Subject: [PATCH] Refactored standard template aliases to configuration file --- .../plantuml/class_diagram_generator.cc | 2 -- src/class_diagram/model/template_parameter.cc | 13 +----------- .../visitor/translation_unit_visitor.cc | 16 ++------------ src/config/config.cc | 21 +++++++++++++++++++ src/config/config.h | 5 +++++ 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.cc b/src/class_diagram/generators/plantuml/class_diagram_generator.cc index ff04e5c0..18d7aa3b 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.cc +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.cc @@ -64,8 +64,6 @@ void generator::generate_alias(const class_ &c, std::ostream &ostr) const else full_name = c.full_name(); - // util::replace_all(full_name, "std::basic_string", "std::string"); - if (full_name.empty()) full_name = "<>"; diff --git a/src/class_diagram/model/template_parameter.cc b/src/class_diagram/model/template_parameter.cc index 58888841..133bc364 100644 --- a/src/class_diagram/model/template_parameter.cc +++ b/src/class_diagram/model/template_parameter.cc @@ -36,14 +36,7 @@ void template_parameter::set_type(const std::string &type) { type_ = type; } std::string template_parameter::type() const { return type_; } -void template_parameter::set_name(const std::string &name) -{ - name_ = name; - // TODO: Add a configurable mapping for simplifying non-interesting - // std templates - util::replace_all(name_, "std::basic_string", "std::string"); - util::replace_all(name_, "std::basic_string", "std::wstring"); -} +void template_parameter::set_name(const std::string &name) { name_ = name; } std::string template_parameter::name() const { @@ -157,10 +150,6 @@ std::string template_parameter::to_string( res += default_value(); } - // TODO: Refactor this to external configurable class - util::replace_all(res, "std::basic_string", "std::string"); - util::replace_all(res, "std::basic_string", "std::wstring"); - return res; } diff --git a/src/class_diagram/visitor/translation_unit_visitor.cc b/src/class_diagram/visitor/translation_unit_visitor.cc index 4cacd599..97259946 100644 --- a/src/class_diagram/visitor/translation_unit_visitor.cc +++ b/src/class_diagram/visitor/translation_unit_visitor.cc @@ -2077,20 +2077,8 @@ const cppast::cpp_type &translation_unit_visitor::resolve_alias_template( bool translation_unit_visitor::simplify_system_template( template_parameter &ct, const std::string &full_name) { - if (full_name == "std::basic_string") { - ct.set_name("std::string"); - return true; - } - else if (full_name == "std::basic_string") { - ct.set_name("std::wstring"); - return true; - } - else if (full_name == "std::basic_string") { - ct.set_name("std::u16string"); - return true; - } - else if (full_name == "std::basic_string") { - ct.set_name("std::u32string"); + if (ctx.config().template_aliases().count(full_name) > 0) { + ct.set_name(ctx.config().template_aliases().at(full_name)); return true; } else diff --git a/src/config/config.cc b/src/config/config.cc index eb0f0c1e..f327ab0d 100644 --- a/src/config/config.cc +++ b/src/config/config.cc @@ -148,6 +148,25 @@ void class_diagram::initialize_relationship_hints() } } +void class_diagram::initialize_template_aliases() +{ + if (!template_aliases().count("std::basic_string")) { + template_aliases().insert({"std::basic_string", "std::string"}); + } + if (!template_aliases().count("std::basic_string")) { + template_aliases().insert( + {"std::basic_string", "std::wstring"}); + } + if (!template_aliases().count("std::basic_string")) { + template_aliases().insert( + {"std::basic_string", "std::u16string"}); + } + if (!template_aliases().count("std::basic_string")) { + template_aliases().insert( + {"std::basic_string", "std::u32string"}); + } +} + template <> void append_value(plantuml &l, const plantuml &r) { l.append(r); @@ -489,8 +508,10 @@ template <> struct convert { get_option(node, rhs.generate_method_arguments); get_option(node, rhs.generate_packages); get_option(node, rhs.relationship_hints); + get_option(node, rhs.template_aliases); rhs.initialize_relationship_hints(); + rhs.initialize_template_aliases(); return true; } diff --git a/src/config/config.h b/src/config/config.h index 788871d4..0c2ad6e9 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -116,6 +116,8 @@ struct relationship_hint_t { using relationship_hints_t = std::map; +using template_aliases_t = std::map; + std::string to_string(const hint_t t); struct inheritable_diagram_options { @@ -135,6 +137,7 @@ struct inheritable_diagram_options { option relative_to{"relative_to"}; option generate_system_headers{"generate_system_headers", false}; option relationship_hints{"relationship_hints"}; + option template_aliases{"template_aliases"}; void inherit(const inheritable_diagram_options &parent); }; @@ -162,6 +165,8 @@ struct class_diagram : public diagram { option layout{"layout"}; void initialize_relationship_hints(); + + void initialize_template_aliases(); }; struct sequence_diagram : public diagram {