Fixed handling of elements filter in sequence diagrams (#248)

This commit is contained in:
Bartek Kryza
2024-03-06 17:38:44 +01:00
parent 812979779b
commit 6facb386bb
6 changed files with 67 additions and 1 deletions

View File

@@ -280,10 +280,12 @@ void generator<C, D>::generate(std::ostream &ostr) const
generate_title(ostr);
// Generate PlantUML directives before auto generated content
generate_plantuml_directives(ostr, config.puml().before);
generate_diagram(ostr);
// Generate PlantUML directives after auto generated content
generate_plantuml_directives(ostr, config.puml().after);
generate_metadata(ostr);

View File

@@ -346,6 +346,35 @@ tvl::value_t element_filter::match(const diagram &d, const element &e) const
});
}
tvl::value_t element_filter::match(
const diagram &d, const sequence_diagram::model::participant &p) const
{
using sequence_diagram::model::method;
using sequence_diagram::model::participant;
if (d.type() != diagram_t::kSequence)
return {};
const auto &sequence_model =
dynamic_cast<const sequence_diagram::model::diagram &>(d);
return tvl::any_of(elements_.begin(), elements_.end(),
[&sequence_model, &p](const auto &el) {
if (p.type_name() == "method") {
const auto &m = dynamic_cast<const method &>(p);
const auto class_id = m.class_id();
const auto &class_participant =
sequence_model.get_participant<participant>(class_id)
.value();
return el == p.full_name(false) ||
el == class_participant.full_name(false);
}
return el == p.full_name(false);
});
}
element_type_filter::element_type_filter(
filter_t type, std::vector<std::string> element_types)
: filter_visitor{type}

View File

@@ -180,6 +180,9 @@ struct element_filter : public filter_visitor {
tvl::value_t match(const diagram &d, const element &e) const override;
tvl::value_t match(const diagram &d,
const sequence_diagram::model::participant &p) const override;
private:
std::vector<common::string_or_regex> elements_;
};