diff --git a/src/puml/class_diagram_generator.cc b/src/puml/class_diagram_generator.cc index 3ee285e6..00d1845a 100644 --- a/src/puml/class_diagram_generator.cc +++ b/src/puml/class_diagram_generator.cc @@ -258,7 +258,8 @@ void generator::generate(const class_ &c, std::ostream &ostr) const for (const auto &b : c.parents()) { std::stringstream relstr; try { - relstr << m_model.to_alias(ns_relative(uns, b.name)) << " <|-- " + relstr << m_model.to_alias(ns_relative(uns, b.name())) + << " <|-- " << m_model.to_alias(ns_relative(uns, c.full_name())) << '\n'; ostr << relstr.str(); @@ -266,7 +267,7 @@ void generator::generate(const class_ &c, std::ostream &ostr) const catch (error::uml_alias_missing &e) { LOG_ERROR("=== Skipping inheritance relation from {} to {} due " "to: {}", - b.name, c.name(), e.what()); + b.name(), c.name(), e.what()); } } diff --git a/src/uml/class_diagram_model.cc b/src/uml/class_diagram_model.cc index 23e3f770..8c0b6ec3 100644 --- a/src/uml/class_diagram_model.cc +++ b/src/uml/class_diagram_model.cc @@ -279,6 +279,24 @@ void class_method::add_parameter(method_parameter &¶meter) parameters_.emplace_back(std::move(parameter)); } +// +// class_parent +// +void class_parent::set_name(const std::string &name) { name_ = name; } + +std::string class_parent::name() const { return name_; } + +void class_parent::is_virtual(bool is_virtual) { is_virtual_ = is_virtual; } + +bool class_parent::is_virtual() const { return is_virtual_; } + +void class_parent::set_access(class_parent::access_t access) +{ + access_ = access; +} + +class_parent::access_t class_parent::access() const { return access_; } + // // class_relationship // diff --git a/src/uml/class_diagram_model.h b/src/uml/class_diagram_model.h index 9726dd98..978a4834 100644 --- a/src/uml/class_diagram_model.h +++ b/src/uml/class_diagram_model.h @@ -166,11 +166,23 @@ private: bool is_static_{false}; }; -struct class_parent { +class class_parent { +public: enum class access_t { kPublic, kProtected, kPrivate }; - std::string name; - bool is_virtual{false}; - access_t access; + + void set_name(const std::string &name); + std::string name() const; + + void is_virtual(bool is_virtual); + bool is_virtual() const; + + void set_access(access_t access); + access_t access() const; + +private: + std::string name_; + bool is_virtual_{false}; + access_t access_; }; struct class_relationship : public decorated_element, public stylable_element { diff --git a/src/uml/class_diagram_visitor.cc b/src/uml/class_diagram_visitor.cc index e1b8869f..f23c7564 100644 --- a/src/uml/class_diagram_visitor.cc +++ b/src/uml/class_diagram_visitor.cc @@ -421,24 +421,24 @@ void tu_visitor::process_class_declaration(const cppast::cpp_class &cls, // Process class bases for (auto &base : cls.bases()) { class_parent cp; - cp.name = clanguml::cx::util::fully_prefixed(ctx.namespace_, base); - cp.is_virtual = base.is_virtual(); + cp.set_name(clanguml::cx::util::fully_prefixed(ctx.namespace_, base)); + cp.is_virtual(base.is_virtual()); switch (base.access_specifier()) { case cppast::cpp_access_specifier_kind::cpp_private: - cp.access = class_parent::access_t::kPrivate; + cp.set_access(class_parent::access_t::kPrivate); break; case cppast::cpp_access_specifier_kind::cpp_public: - cp.access = class_parent::access_t::kPublic; + cp.set_access(class_parent::access_t::kPublic); break; case cppast::cpp_access_specifier_kind::cpp_protected: - cp.access = class_parent::access_t::kProtected; + cp.set_access(class_parent::access_t::kProtected); break; default: - cp.access = class_parent::access_t::kPublic; + cp.set_access(class_parent::access_t::kPublic); } - LOG_DBG("Found base class {} for class {}", cp.name, c.name()); + LOG_DBG("Found base class {} for class {}", cp.name(), c.name()); c.add_parent(std::move(cp)); } @@ -1527,8 +1527,8 @@ class_ tu_visitor::build_template_instantiation( LOG_DBG("Adding template argument '{}' as base class", ct.type); class_parent cp; - cp.access = class_parent::access_t::kPublic; - cp.name = ct.type; + cp.set_access(class_parent::access_t::kPublic); + cp.set_name(ct.type); tinst.add_parent(std::move(cp)); }