Fixed handling of nested classes in relative namespaces
This commit is contained in:
@@ -70,7 +70,7 @@ public:
|
|||||||
|
|
||||||
std::string full_name(bool relative = true) const override;
|
std::string full_name(bool relative = true) const override;
|
||||||
|
|
||||||
std::string full_name_no_ns() const;
|
std::string full_name_no_ns() const override;
|
||||||
|
|
||||||
bool is_abstract() const;
|
bool is_abstract() const;
|
||||||
|
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ bool translation_unit_visitor::VisitEnumDecl(clang::EnumDecl *enm)
|
|||||||
assert(parent_class);
|
assert(parent_class);
|
||||||
|
|
||||||
e.set_namespace(ns);
|
e.set_namespace(ns);
|
||||||
e.set_name(parent_class.value().full_name(true) + "##" +
|
e.set_name(parent_class.value().full_name_no_ns() + "##" +
|
||||||
enm->getNameAsString());
|
enm->getNameAsString());
|
||||||
e.set_id(common::to_id(e.full_name(false)));
|
e.set_id(common::to_id(e.full_name(false)));
|
||||||
e.add_relationship({relationship_t::kContainment, *id_opt});
|
e.add_relationship({relationship_t::kContainment, *id_opt});
|
||||||
@@ -462,19 +462,19 @@ std::unique_ptr<class_> translation_unit_visitor::create_class_declaration(
|
|||||||
const auto &[label, hint, access] =
|
const auto &[label, hint, access] =
|
||||||
anonymous_struct_relationships_[cls->getID()];
|
anonymous_struct_relationships_[cls->getID()];
|
||||||
|
|
||||||
c.set_name(parent_class.value().full_name(true) + "##" +
|
c.set_name(parent_class.value().full_name_no_ns() + "##" +
|
||||||
fmt::format("({})", label));
|
fmt::format("({})", label));
|
||||||
|
|
||||||
parent_class.value().add_relationship(
|
parent_class.value().add_relationship(
|
||||||
{hint, common::to_id(c.full_name(false)), access, label});
|
{hint, common::to_id(c.full_name(false)), access, label});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
c.set_name(parent_class.value().full_name(true) + "##" +
|
c.set_name(parent_class.value().full_name_no_ns() + "##" +
|
||||||
fmt::format(
|
fmt::format(
|
||||||
"(anonymous_{})", std::to_string(cls->getID())));
|
"(anonymous_{})", std::to_string(cls->getID())));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
c.set_name(parent_class.value().full_name(true) + "##" +
|
c.set_name(parent_class.value().full_name_no_ns() + "##" +
|
||||||
cls->getNameAsString());
|
cls->getNameAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ public:
|
|||||||
return name_and_ns();
|
return name_and_ns();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual std::string full_name_no_ns() const { return name(); }
|
||||||
|
|
||||||
void set_using_namespaces(const namespace_ &un);
|
void set_using_namespaces(const namespace_ &un);
|
||||||
|
|
||||||
const namespace_ &using_namespace() const;
|
const namespace_ &using_namespace() const;
|
||||||
|
|||||||
@@ -35,5 +35,15 @@ public:
|
|||||||
enum class CC { CC_1, CC_2 };
|
enum class CC { CC_1, CC_2 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
class D {
|
||||||
|
public:
|
||||||
|
enum class AA { AA_1, AA_2, AA_3 };
|
||||||
|
|
||||||
|
class DD {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ TEST_CASE("t00004", "[test-case][class]")
|
|||||||
REQUIRE_THAT(puml, IsInnerClass(_A("C<T>"), _A("C<T>::CC")));
|
REQUIRE_THAT(puml, IsInnerClass(_A("C<T>"), _A("C<T>::CC")));
|
||||||
REQUIRE_THAT(puml, IsInnerClass(_A("C<T>::AA"), _A("C<T>::AA::CCC")));
|
REQUIRE_THAT(puml, IsInnerClass(_A("C<T>::AA"), _A("C<T>::AA::CCC")));
|
||||||
|
|
||||||
|
REQUIRE_THAT(puml, IsClass(_A("detail::D")));
|
||||||
|
REQUIRE_THAT(puml, IsClass(_A("detail::D::DD")));
|
||||||
|
REQUIRE_THAT(puml, IsEnum(_A("detail::D::AA")));
|
||||||
|
|
||||||
save_puml(
|
save_puml(
|
||||||
"./" + config.output_directory() + "/" + diagram->name + ".puml", puml);
|
"./" + config.output_directory() + "/" + diagram->name + ".puml", puml);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user