From f84e86ca6d35571d63765cf9d0a8fd0be44d1a8d Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 5 Mar 2022 18:46:29 +0100 Subject: [PATCH] Fixed tests after refactoring namespace handling --- src/class_diagram/model/class.cc | 13 +++++----- src/class_diagram/model/diagram.cc | 3 ++- src/common/model/element.cc | 2 +- src/common/model/namespace.cc | 26 +------------------ src/config/config.cc | 2 +- .../visitor/translation_unit_visitor.cc | 7 +++-- 6 files changed, 14 insertions(+), 39 deletions(-) diff --git a/src/class_diagram/model/class.cc b/src/class_diagram/model/class.cc index 004797f1..4ad31d2a 100644 --- a/src/class_diagram/model/class.cc +++ b/src/class_diagram/model/class.cc @@ -1,5 +1,5 @@ /** - * src/class_diagram/model/class.h + * src/class_diagram/model/class.cc * * Copyright (c) 2021-2022 Bartek Kryza * @@ -115,15 +115,14 @@ std::string class_::full_name(bool relative) const using clanguml::common::model::namespace_; std::ostringstream ostr; - // if (relative && starts_with(get_namespace(), using_namespace())) - if (relative) - ostr << namespace_{name()}.relative_to(using_namespace()).to_string(); - else - ostr << name_and_ns(); + ostr << name_and_ns(); render_template_params(ostr); - return ostr.str(); + if (relative) + return using_namespace().relative(ostr.str()); + else + return ostr.str(); } std::ostringstream &class_::render_template_params( std::ostringstream &ostr) const diff --git a/src/class_diagram/model/diagram.cc b/src/class_diagram/model/diagram.cc index 00687c11..1200e889 100644 --- a/src/class_diagram/model/diagram.cc +++ b/src/class_diagram/model/diagram.cc @@ -66,7 +66,8 @@ void diagram::add_package(std::unique_ptr &&p) void diagram::add_class(std::unique_ptr &&c) { - LOG_DBG("Adding class: {}, {}", c->name(), c->full_name()); + LOG_DBG("Adding class: {}::{}, {}", c->get_namespace().to_string(), + c->name(), c->full_name()); if (util::contains(c->name(), "::")) throw std::runtime_error("Name cannot contain namespace: " + c->name()); diff --git a/src/common/model/element.cc b/src/common/model/element.cc index aa8c0427..3c912c36 100644 --- a/src/common/model/element.cc +++ b/src/common/model/element.cc @@ -62,7 +62,7 @@ void element::set_using_namespaces(const namespace_ &un) using_namespace_ = un; } -const namespace_ &element::using_namespace() const { return ns_; } +const namespace_ &element::using_namespace() const { return using_namespace_; } std::vector &element::relationships() { return relationships_; } diff --git a/src/common/model/namespace.cc b/src/common/model/namespace.cc index 0cc2c139..359bf654 100644 --- a/src/common/model/namespace.cc +++ b/src/common/model/namespace.cc @@ -1,5 +1,5 @@ /** - * src/common/model/namespace.h + * src/common/model/namespace.cc * * Copyright (c) 2021-2022 Bartek Kryza * @@ -156,30 +156,6 @@ namespace_ namespace_::relative_to(const namespace_ &right) const std::string namespace_::relative(const std::string &name) const { - /* - std::vector namespaces_sorted{namespaces}; - - std::sort(namespaces_sorted.rbegin(), namespaces_sorted.rend()); - - auto res = name; - - for (const auto &ns : namespaces_sorted) { - if (ns.empty()) - continue; - - if (name == ns) - return split(n, "::").back(); - - auto ns_prefix = ns + "::"; - auto it = res.find(ns_prefix); - while (it != std::string::npos) { - res.erase(it, ns_prefix.size()); - it = res.find(ns_prefix); - } - } - return res; - */ - if (is_empty()) return name; diff --git a/src/config/config.cc b/src/config/config.cc index c3b64b35..c40de9a1 100644 --- a/src/config/config.cc +++ b/src/config/config.cc @@ -153,7 +153,7 @@ bool diagram::should_include(const std::string &name_) const auto name = clanguml::util::unqualify(name_); for (const auto &ex : exclude().namespaces) { - if (ex.starts_with(name)) { + if (name.find(ex.to_string()) == 0) { LOG_DBG("Skipping from diagram: {}", name); return false; } diff --git a/src/package_diagram/visitor/translation_unit_visitor.cc b/src/package_diagram/visitor/translation_unit_visitor.cc index ea14f4e9..043729cc 100644 --- a/src/package_diagram/visitor/translation_unit_visitor.cc +++ b/src/package_diagram/visitor/translation_unit_visitor.cc @@ -93,15 +93,14 @@ void translation_unit_visitor::operator()(const cppast::cpp_entity &file) auto package_parent = ctx.get_namespace(); auto package_path = package_parent | e.name(); - auto usn = common::model::namespace_{ - ctx.config().using_namespace()}; + auto usn = ctx.config().using_namespace(); - if (!usn.starts_with(package_path)) { + if (ctx.config().should_include_package(package_path)) { auto p = std::make_unique(usn); package_path = package_path.relative_to(usn); p->set_name(e.name()); - p->set_namespace(package_path); + p->set_namespace(package_parent); if (ns_declaration.comment().has_value()) p->add_decorators(decorators::parse(