From a26cfb6d60ca7fd19e7c18b543d0c0560741cf6f Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Wed, 24 Mar 2021 11:00:17 +0100 Subject: [PATCH] Added enum handling --- src/uml/class_diagram_visitor.cc | 25 ++++++++++++++++++++++++- src/uml/class_diagram_visitor.h | 2 ++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/uml/class_diagram_visitor.cc b/src/uml/class_diagram_visitor.cc index 11535397..6d1eb070 100644 --- a/src/uml/class_diagram_visitor.cc +++ b/src/uml/class_diagram_visitor.cc @@ -23,6 +23,7 @@ #include #include #include +#include #include namespace clanguml { @@ -71,16 +72,38 @@ void tu_visitor::operator()(const cppast::cpp_entity &file) [&, this](const cppast::cpp_entity &e, cppast::visitor_info info) { if (e.kind() == cppast::cpp_entity_kind::class_t) { spdlog::debug("{}'{}' - {}", prefix, - cx::util::fully_prefixed(e), cppast::to_string(e.kind())); + cx::util::full_name(e), cppast::to_string(e.kind())); auto &cls = static_cast(e); if (ctx.config.should_include(cx::util::fully_prefixed(cls))) process_class_declaration(cls); } + else if(e.kind() == cppast::cpp_entity_kind::enum_t) { + spdlog::debug("{}'{}' - {}", prefix, + cx::util::full_name(e), cppast::to_string(e.kind())); + + auto &enm = static_cast(e); + + if (ctx.config.should_include(cx::util::fully_prefixed(enm))) + process_enum_declaration(enm); + } }); } +void tu_visitor::process_enum_declaration(const cppast::cpp_enum &enm) { + enum_ e; + e.name = cx::util::full_name(enm); + + for(const auto& ev : enm) { + if(ev.kind() == cppast::cpp_entity_kind::enum_value_t) { + e.constants.push_back(ev.name()); + } + } + + ctx.d.add_enum(std::move(e)); +} + void tu_visitor::process_class_declaration(const cppast::cpp_class &cls) { class_ c; diff --git a/src/uml/class_diagram_visitor.h b/src/uml/class_diagram_visitor.h index 6ccf388b..f5488518 100644 --- a/src/uml/class_diagram_visitor.h +++ b/src/uml/class_diagram_visitor.h @@ -75,6 +75,8 @@ public: void process_class_declaration(const cppast::cpp_class &cls); + void process_enum_declaration(const cppast::cpp_enum &enm); + void process_field(const cppast::cpp_member_variable &mv, clanguml::model::class_diagram::class_ &c, cppast::cpp_access_specifier_kind as);