diff --git a/CHANGELOG.md b/CHANGELOG.md index 10d660cd..1534e4a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # CHANGELOG + * Added rendering of template specialization fields and methods (#128) * Improved template specialization/instantiation matching based on deduced context diff --git a/src/class_diagram/visitor/translation_unit_visitor.cc b/src/class_diagram/visitor/translation_unit_visitor.cc index 24d77996..0b6e329f 100644 --- a/src/class_diagram/visitor/translation_unit_visitor.cc +++ b/src/class_diagram/visitor/translation_unit_visitor.cc @@ -206,10 +206,14 @@ bool translation_unit_visitor::VisitClassTemplateSpecializationDecl( process_template_specialization_children(cls, template_specialization); } - if (cls->hasDefinition()) + if (cls->hasDefinition()) { // Process template specialization bases process_class_bases(cls, template_specialization); + // Process class child entities + process_class_children(cls, template_specialization); + } + if (!template_specialization.template_specialization_found()) { // Only do this if we haven't found a bettern specialization during // construction of the template specialization diff --git a/tests/t00062/test_case.h b/tests/t00062/test_case.h index 8cc85d83..5f55d1a2 100644 --- a/tests/t00062/test_case.h +++ b/tests/t00062/test_case.h @@ -55,6 +55,14 @@ TEST_CASE("t00062", "[test-case][class]") REQUIRE_THAT(puml, IsClassTemplate("A", "C")); REQUIRE_THAT(puml, IsClassTemplate("A", "C")); + REQUIRE_THAT(puml, (IsField("u", "U &"))); + REQUIRE_THAT(puml, (IsField("u", "U **"))); + REQUIRE_THAT(puml, (IsField("u", "U ***"))); + REQUIRE_THAT(puml, (IsField("u", "U &&"))); + REQUIRE_THAT(puml, (IsField("u", "const U &"))); + REQUIRE_THAT(puml, (IsField("c", "C &"))); + REQUIRE_THAT(puml, (IsField("m", "M C::*"))); + REQUIRE_THAT(puml, IsInstantiation(_A("A"), _A("A"))); REQUIRE_THAT(puml, IsInstantiation(_A("A"), _A("A"))); REQUIRE_THAT(puml, IsInstantiation(_A("A"), _A("A")));