Refactored class_parent

This commit is contained in:
Bartek Kryza
2021-09-27 22:28:07 +02:00
parent e119baee5b
commit 2165105922
4 changed files with 46 additions and 15 deletions

View File

@@ -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());
}
}

View File

@@ -279,6 +279,24 @@ void class_method::add_parameter(method_parameter &&parameter)
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
//

View File

@@ -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 {

View File

@@ -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));
}