Fixed package diagram generation

This commit is contained in:
Bartek Kryza
2022-07-31 16:14:36 +02:00
parent 79942e06d7
commit 7274809561
26 changed files with 600 additions and 78 deletions

View File

@@ -25,13 +25,13 @@
namespace clanguml::class_diagram::model {
const std::vector<std::reference_wrapper<const class_>> &
const std::vector<std::reference_wrapper<class_>> &
diagram::classes() const
{
return classes_;
}
const std::vector<std::reference_wrapper<const enum_>> &diagram::enums() const
const std::vector<std::reference_wrapper<enum_>> &diagram::enums() const
{
return enums_;
}
@@ -41,14 +41,11 @@ common::model::diagram_t diagram::type() const
return common::model::diagram_t::kClass;
}
std::optional<
std::reference_wrapper<const clanguml::common::model::diagram_element>>
std::optional<std::reference_wrapper<clanguml::common::model::diagram_element>>
diagram::get(const std::string &full_name) const
{
// type_safe::optional_ref<const clanguml::common::model::diagram_element>
// res;
std::optional<
std::reference_wrapper<const clanguml::common::model::diagram_element>>
std::reference_wrapper<clanguml::common::model::diagram_element>>
res;
res = get_class(full_name);
@@ -61,6 +58,23 @@ diagram::get(const std::string &full_name) const
return res;
}
std::optional<std::reference_wrapper<clanguml::common::model::diagram_element>>
diagram::get(const clanguml::common::model::diagram_element::id_t id) const
{
std::optional<
std::reference_wrapper<clanguml::common::model::diagram_element>>
res;
res = get_class(id);
if (res.has_value())
return res;
res = get_enum(id);
return res;
}
bool diagram::has_class(const class_ &c) const
{
return std::any_of(classes_.cbegin(), classes_.cend(),
@@ -73,7 +87,7 @@ bool diagram::has_enum(const enum_ &e) const
[&e](const auto &ee) { return ee.get().full_name() == e.full_name(); });
}
std::optional<std::reference_wrapper<const class_>> diagram::get_class(
std::optional<std::reference_wrapper<class_>> diagram::get_class(
const std::string &name) const
{
for (const auto &c : classes_) {
@@ -87,7 +101,7 @@ std::optional<std::reference_wrapper<const class_>> diagram::get_class(
return {};
}
std::optional<std::reference_wrapper<const class_>> diagram::get_class(
std::optional<std::reference_wrapper<class_>> diagram::get_class(
clanguml::common::model::diagram_element::id_t id) const
{
for (const auto &c : classes_) {
@@ -99,7 +113,7 @@ std::optional<std::reference_wrapper<const class_>> diagram::get_class(
return {};
}
std::optional<std::reference_wrapper<const enum_>> diagram::get_enum(
std::optional<std::reference_wrapper<enum_>> diagram::get_enum(
const std::string &name) const
{
for (const auto &e : enums_) {
@@ -111,6 +125,18 @@ std::optional<std::reference_wrapper<const enum_>> diagram::get_enum(
return {};
}
std::optional<std::reference_wrapper<enum_>> diagram::get_enum(
clanguml::common::model::diagram_element::id_t id) const
{
for (const auto &e : enums_) {
if (e.get().id() == id) {
return {e};
}
}
return {};
}
void diagram::add_type_alias(std::unique_ptr<type_alias> &&ta)
{
LOG_DBG(
@@ -149,7 +175,7 @@ bool diagram::add_class(std::unique_ptr<class_> &&c)
auto name = base_name;
auto name_with_ns = c->name_and_ns();
auto name_and_ns = ns | name;
const auto &cc = *c;
auto &cc = *c;
auto cc_ref = std::ref(cc);

View File

@@ -46,26 +46,33 @@ public:
common::model::diagram_t type() const override;
std::optional<
std::reference_wrapper<const clanguml::common::model::diagram_element>>
std::reference_wrapper<clanguml::common::model::diagram_element>>
get(const std::string &full_name) const override;
const std::vector<std::reference_wrapper<const class_>> &classes() const;
std::optional<
std::reference_wrapper<clanguml::common::model::diagram_element>>
get(const clanguml::common::model::diagram_element::id_t id) const override;
const std::vector<std::reference_wrapper<const enum_>> &enums() const;
const std::vector<std::reference_wrapper<class_>> &classes() const;
const std::vector<std::reference_wrapper<enum_>> &enums() const;
bool has_class(const class_ &c) const;
bool has_enum(const enum_ &e) const;
std::optional<std::reference_wrapper<const class_>> get_class(
std::optional<std::reference_wrapper<class_>> get_class(
const std::string &name) const;
std::optional<std::reference_wrapper<const class_>> get_class(
std::optional<std::reference_wrapper<class_>> get_class(
clanguml::common::model::diagram_element::id_t id) const;
std::optional<std::reference_wrapper<const enum_>> get_enum(
std::optional<std::reference_wrapper<enum_>> get_enum(
const std::string &name) const;
std::optional<std::reference_wrapper<enum_>> get_enum(
clanguml::common::model::diagram_element::id_t id) const;
void add_type_alias(std::unique_ptr<type_alias> &&ta);
bool add_class(std::unique_ptr<class_> &&c);
@@ -85,11 +92,10 @@ public:
const clanguml::common::model::diagram_element::id_t id) const override;
private:
std::vector<std::reference_wrapper<const class_>> classes_;
std::vector<std::reference_wrapper<const enum_>> enums_;
std::vector<std::reference_wrapper<class_>> classes_;
std::vector<std::reference_wrapper<enum_>> enums_;
// std::vector<type_safe::object_ref<const class_, false>> classes_;
// std::vector<type_safe::object_ref<const enum_, false>> enums_;
std::map<std::string, std::unique_ptr<type_alias>> type_aliases_;
};
}

View File

@@ -783,8 +783,7 @@ bool translation_unit_visitor::find_relationships(const clang::QualType &type,
found_relationships_t &relationships,
clanguml::common::model::relationship_t relationship_hint)
{
bool result = false;
// std::string type_name =
bool result{false};
if (type->isPointerType()) {
relationship_hint = relationship_t::kAssociation;

View File

@@ -58,13 +58,10 @@ public:
virtual bool VisitTypeAliasTemplateDecl(clang::TypeAliasTemplateDecl *cls);
// virtual bool VisitVarDecl(clang::VarDecl *variable_declaration);
clanguml::class_diagram::model::diagram &diagram() { return diagram_; }
const clanguml::config::class_diagram &config() const { return config_; }
// void operator()();
void finalize();
private: