Refactored test case diagram visitor and generator selection based on traits
This commit is contained in:
@@ -56,196 +56,160 @@ load_config(const std::string &test_name)
|
|||||||
return std::make_pair(std::move(config), std::move(compilation_database));
|
return std::make_pair(std::move(config), std::move(compilation_database));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<clanguml::sequence_diagram::model::diagram>
|
namespace detail {
|
||||||
generate_sequence_diagram(clang::tooling::CompilationDatabase &db,
|
template <typename DiagramConfig>
|
||||||
|
auto generate_diagram_impl(clang::tooling::CompilationDatabase &db,
|
||||||
std::shared_ptr<clanguml::config::diagram> diagram)
|
std::shared_ptr<clanguml::config::diagram> diagram)
|
||||||
{
|
{
|
||||||
using diagram_config = clanguml::config::sequence_diagram;
|
using diagram_config = DiagramConfig;
|
||||||
using diagram_model = clanguml::sequence_diagram::model::diagram;
|
using diagram_model =
|
||||||
|
typename clanguml::common::generators::diagram_model_t<
|
||||||
|
diagram_config>::type;
|
||||||
using diagram_visitor =
|
using diagram_visitor =
|
||||||
clanguml::sequence_diagram::visitor::translation_unit_visitor;
|
typename clanguml::common::generators::diagram_visitor_t<
|
||||||
|
diagram_config>::type;
|
||||||
|
|
||||||
inject_diagram_options(diagram);
|
inject_diagram_options(diagram);
|
||||||
|
|
||||||
auto model = clanguml::common::generators::generate<diagram_model,
|
auto model = clanguml::common::generators::generate<diagram_model,
|
||||||
diagram_config, diagram_visitor>(db, diagram->name,
|
diagram_config, diagram_visitor>(db, diagram->name,
|
||||||
dynamic_cast<clanguml::config::sequence_diagram &>(*diagram),
|
dynamic_cast<diagram_config &>(*diagram),
|
||||||
diagram->get_translation_units());
|
diagram->get_translation_units());
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename DiagramConfig, typename DiagramModel>
|
||||||
|
auto generate_diagram_puml(
|
||||||
|
std::shared_ptr<clanguml::config::diagram> config, DiagramModel &model)
|
||||||
|
{
|
||||||
|
using diagram_config = DiagramConfig;
|
||||||
|
using diagram_model = DiagramModel;
|
||||||
|
using diagram_generator =
|
||||||
|
typename clanguml::common::generators::diagram_generator_t<
|
||||||
|
DiagramConfig,
|
||||||
|
clanguml::common::generators::plantuml_generator_tag>::type;
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << diagram_generator(dynamic_cast<diagram_config &>(*config), model);
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename DiagramConfig, typename DiagramModel>
|
||||||
|
auto generate_diagram_json(
|
||||||
|
std::shared_ptr<clanguml::config::diagram> config, DiagramModel &model)
|
||||||
|
{
|
||||||
|
using diagram_config = DiagramConfig;
|
||||||
|
using diagram_model = DiagramModel;
|
||||||
|
using diagram_generator =
|
||||||
|
typename clanguml::common::generators::diagram_generator_t<
|
||||||
|
DiagramConfig,
|
||||||
|
clanguml::common::generators::json_generator_tag>::type;
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << diagram_generator(dynamic_cast<diagram_config &>(*config), model);
|
||||||
|
|
||||||
|
return nlohmann::json::parse(ss.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<clanguml::class_diagram::model::diagram> generate_class_diagram(
|
std::unique_ptr<clanguml::class_diagram::model::diagram> generate_class_diagram(
|
||||||
clang::tooling::CompilationDatabase &db,
|
clang::tooling::CompilationDatabase &db,
|
||||||
std::shared_ptr<clanguml::config::diagram> diagram)
|
std::shared_ptr<clanguml::config::diagram> diagram)
|
||||||
{
|
{
|
||||||
using diagram_config = clanguml::config::class_diagram;
|
return detail::generate_diagram_impl<clanguml::config::class_diagram>(
|
||||||
using diagram_model = clanguml::class_diagram::model::diagram;
|
db, diagram);
|
||||||
using diagram_visitor =
|
}
|
||||||
clanguml::class_diagram::visitor::translation_unit_visitor;
|
|
||||||
|
|
||||||
inject_diagram_options(diagram);
|
std::unique_ptr<clanguml::sequence_diagram::model::diagram>
|
||||||
|
generate_sequence_diagram(clang::tooling::CompilationDatabase &db,
|
||||||
auto model = clanguml::common::generators::generate<diagram_model,
|
std::shared_ptr<clanguml::config::diagram> diagram)
|
||||||
diagram_config, diagram_visitor>(db, diagram->name,
|
{
|
||||||
dynamic_cast<diagram_config &>(*diagram),
|
return detail::generate_diagram_impl<clanguml::config::sequence_diagram>(
|
||||||
diagram->get_translation_units());
|
db, diagram);
|
||||||
|
|
||||||
return model;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<clanguml::package_diagram::model::diagram>
|
std::unique_ptr<clanguml::package_diagram::model::diagram>
|
||||||
generate_package_diagram(clang::tooling::CompilationDatabase &db,
|
generate_package_diagram(clang::tooling::CompilationDatabase &db,
|
||||||
std::shared_ptr<clanguml::config::diagram> diagram)
|
std::shared_ptr<clanguml::config::diagram> diagram)
|
||||||
{
|
{
|
||||||
using diagram_config = clanguml::config::package_diagram;
|
return detail::generate_diagram_impl<clanguml::config::package_diagram>(
|
||||||
using diagram_model = clanguml::package_diagram::model::diagram;
|
db, diagram);
|
||||||
using diagram_visitor =
|
|
||||||
clanguml::package_diagram::visitor::translation_unit_visitor;
|
|
||||||
|
|
||||||
inject_diagram_options(diagram);
|
|
||||||
|
|
||||||
return clanguml::common::generators::generate<diagram_model, diagram_config,
|
|
||||||
diagram_visitor>(db, diagram->name,
|
|
||||||
dynamic_cast<diagram_config &>(*diagram),
|
|
||||||
diagram->get_translation_units());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<clanguml::include_diagram::model::diagram>
|
std::unique_ptr<clanguml::include_diagram::model::diagram>
|
||||||
generate_include_diagram(clang::tooling::CompilationDatabase &db,
|
generate_include_diagram(clang::tooling::CompilationDatabase &db,
|
||||||
std::shared_ptr<clanguml::config::diagram> diagram)
|
std::shared_ptr<clanguml::config::diagram> diagram)
|
||||||
{
|
{
|
||||||
using diagram_config = clanguml::config::include_diagram;
|
return detail::generate_diagram_impl<clanguml::config::include_diagram>(
|
||||||
using diagram_model = clanguml::include_diagram::model::diagram;
|
db, diagram);
|
||||||
using diagram_visitor =
|
|
||||||
clanguml::include_diagram::visitor::translation_unit_visitor;
|
|
||||||
|
|
||||||
inject_diagram_options(diagram);
|
|
||||||
|
|
||||||
return clanguml::common::generators::generate<diagram_model, diagram_config,
|
|
||||||
diagram_visitor>(db, diagram->name,
|
|
||||||
dynamic_cast<diagram_config &>(*diagram),
|
|
||||||
diagram->get_translation_units());
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string generate_sequence_puml(
|
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
|
||||||
clanguml::sequence_diagram::model::diagram &model)
|
|
||||||
{
|
|
||||||
using namespace clanguml::sequence_diagram::generators::plantuml;
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::sequence_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return ss.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
nlohmann::json generate_sequence_json(
|
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
|
||||||
clanguml::sequence_diagram::model::diagram &model)
|
|
||||||
{
|
|
||||||
using namespace clanguml::sequence_diagram::generators::json;
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::sequence_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return nlohmann::json::parse(ss.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string generate_class_puml(
|
std::string generate_class_puml(
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
clanguml::class_diagram::model::diagram &model)
|
clanguml::class_diagram::model::diagram &model)
|
||||||
{
|
{
|
||||||
using namespace clanguml::class_diagram::generators::plantuml;
|
return detail::generate_diagram_puml<clanguml::config::class_diagram>(
|
||||||
|
config, model);
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::class_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return ss.str();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nlohmann::json generate_class_json(
|
std::string generate_sequence_puml(
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
clanguml::class_diagram::model::diagram &model)
|
clanguml::sequence_diagram::model::diagram &model)
|
||||||
{
|
{
|
||||||
using namespace clanguml::class_diagram::generators::json;
|
return detail::generate_diagram_puml<clanguml::config::sequence_diagram>(
|
||||||
|
config, model);
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::class_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return nlohmann::json::parse(ss.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string generate_package_puml(
|
std::string generate_package_puml(
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
clanguml::package_diagram::model::diagram &model)
|
clanguml::package_diagram::model::diagram &model)
|
||||||
{
|
{
|
||||||
using namespace clanguml::package_diagram::generators::plantuml;
|
return detail::generate_diagram_puml<clanguml::config::package_diagram>(
|
||||||
|
config, model);
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
assert(config.get() != nullptr);
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::package_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return ss.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
nlohmann::json generate_package_json(
|
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
|
||||||
clanguml::package_diagram::model::diagram &model)
|
|
||||||
{
|
|
||||||
using namespace clanguml::package_diagram::generators::json;
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
assert(config.get() != nullptr);
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::package_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return nlohmann::json::parse(ss.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string generate_include_puml(
|
std::string generate_include_puml(
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
clanguml::include_diagram::model::diagram &model)
|
clanguml::include_diagram::model::diagram &model)
|
||||||
{
|
{
|
||||||
using namespace clanguml::include_diagram::generators::plantuml;
|
return detail::generate_diagram_puml<clanguml::config::include_diagram>(
|
||||||
|
config, model);
|
||||||
|
}
|
||||||
|
|
||||||
std::stringstream ss;
|
nlohmann::json generate_class_json(
|
||||||
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
|
clanguml::class_diagram::model::diagram &model)
|
||||||
|
{
|
||||||
|
return detail::generate_diagram_json<clanguml::config::class_diagram>(
|
||||||
|
config, model);
|
||||||
|
}
|
||||||
|
|
||||||
assert(config.get() != nullptr);
|
nlohmann::json generate_sequence_json(
|
||||||
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
|
clanguml::sequence_diagram::model::diagram &model)
|
||||||
|
{
|
||||||
|
return detail::generate_diagram_json<clanguml::config::sequence_diagram>(
|
||||||
|
config, model);
|
||||||
|
}
|
||||||
|
|
||||||
ss << generator(
|
nlohmann::json generate_package_json(
|
||||||
dynamic_cast<clanguml::config::include_diagram &>(*config), model);
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
|
clanguml::package_diagram::model::diagram &model)
|
||||||
return ss.str();
|
{
|
||||||
|
return detail::generate_diagram_json<clanguml::config::package_diagram>(
|
||||||
|
config, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
nlohmann::json generate_include_json(
|
nlohmann::json generate_include_json(
|
||||||
std::shared_ptr<clanguml::config::diagram> config,
|
std::shared_ptr<clanguml::config::diagram> config,
|
||||||
clanguml::include_diagram::model::diagram &model)
|
clanguml::include_diagram::model::diagram &model)
|
||||||
{
|
{
|
||||||
using namespace clanguml::include_diagram::generators::json;
|
return detail::generate_diagram_json<clanguml::config::include_diagram>(
|
||||||
|
config, model);
|
||||||
std::stringstream ss;
|
|
||||||
|
|
||||||
assert(config.get() != nullptr);
|
|
||||||
|
|
||||||
ss << generator(
|
|
||||||
dynamic_cast<clanguml::config::include_diagram &>(*config), model);
|
|
||||||
|
|
||||||
return nlohmann::json::parse(ss.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void save_puml(const std::string &path, const std::string &puml)
|
void save_puml(const std::string &path, const std::string &puml)
|
||||||
|
|||||||
Reference in New Issue
Block a user