From 112f7cb8065c4b1d63778b7628db50b935a77b63 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Thu, 1 Jun 2023 00:06:32 +0200 Subject: [PATCH] Refactored apply_if helper functions --- src/class_diagram/visitor/template_builder.cc | 2 +- .../visitor/translation_unit_visitor.cc | 13 ++++++------- src/common/clang_utils.cc | 2 +- .../visitor/translation_unit_visitor.cc | 9 +++++++-- src/util/util.h | 13 ++++++------- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/class_diagram/visitor/template_builder.cc b/src/class_diagram/visitor/template_builder.cc index 83c5f063..24d9ebcb 100644 --- a/src/class_diagram/visitor/template_builder.cc +++ b/src/class_diagram/visitor/template_builder.cc @@ -499,7 +499,7 @@ template_parameter template_builder::process_template_expansion( LOG_DBG("Processing template expansion argument: {}", arg_name); - util::apply_if_not_null( + util::if_not_null( arg.getAsTemplate().getAsTemplateDecl(), [&arg_name](const auto *decl) { arg_name = decl->getQualifiedNameAsString(); }); diff --git a/src/class_diagram/visitor/translation_unit_visitor.cc b/src/class_diagram/visitor/translation_unit_visitor.cc index ae8d0b25..3c89079b 100644 --- a/src/class_diagram/visitor/translation_unit_visitor.cc +++ b/src/class_diagram/visitor/translation_unit_visitor.cc @@ -495,7 +495,7 @@ void translation_unit_visitor::process_constraint_requirements( llvm::dyn_cast(req); if (simple_req != nullptr) { - util::apply_if_not_null( + util::if_not_null( simple_req->getExpr(), [&concept_model](const auto *e) { auto simple_expr = common::to_string(e); @@ -507,7 +507,7 @@ void translation_unit_visitor::process_constraint_requirements( } } else if (req->getKind() == clang::concepts::Requirement::RK_Type) { - util::apply_if_not_null( + util::if_not_null( llvm::dyn_cast(req), [&concept_model, cpt](const auto *t) { auto type_name = common::to_string( @@ -525,7 +525,7 @@ void translation_unit_visitor::process_constraint_requirements( llvm::dyn_cast(req); if (nested_req != nullptr) { - util::apply_if_not_null( + util::if_not_null( nested_req->getConstraintExpr(), [](const auto *e) { LOG_DBG("=== Processing nested requirement: {}", common::to_string(e)); @@ -805,7 +805,7 @@ std::unique_ptr translation_unit_visitor::create_record_declaration( #if LLVM_VERSION_MAJOR < 16 if (record_name == "(anonymous)") { - util::apply_if_not_null(rec->getTypedefNameForAnonDecl(), + util::if_not_null(rec->getTypedefNameForAnonDecl(), [&record_name](const clang::TypedefNameDecl *name) { record_name = name->getNameAsString(); }); @@ -985,9 +985,8 @@ bool translation_unit_visitor::process_template_parameters( default_arg, template_type_parameter->isParameterPack()); if (template_type_parameter->getTypeConstraint() != nullptr) { - util::apply_if_not_null( - template_type_parameter->getTypeConstraint() - ->getNamedConcept(), + util::if_not_null(template_type_parameter->getTypeConstraint() + ->getNamedConcept(), [this, &ct, &templated_element]( const clang::ConceptDecl *named_concept) mutable { ct.set_concept_constraint( diff --git a/src/common/clang_utils.cc b/src/common/clang_utils.cc index 6c855d06..d0e4688d 100644 --- a/src/common/clang_utils.cc +++ b/src/common/clang_utils.cc @@ -163,7 +163,7 @@ std::string to_string(const clang::QualType &type, const clang::ASTContext &ctx, // Try to get rid of 'type-parameter-X-Y' ugliness if (result.find("type-parameter-") != std::string::npos) { - util::apply_if_not_null( + util::if_not_null( common::dereference(type)->getAs(), [&result, &type](auto *p) { auto [unqualified_type, context] = diff --git a/src/package_diagram/visitor/translation_unit_visitor.cc b/src/package_diagram/visitor/translation_unit_visitor.cc index 861fbc68..2c1ba6ce 100644 --- a/src/package_diagram/visitor/translation_unit_visitor.cc +++ b/src/package_diagram/visitor/translation_unit_visitor.cc @@ -194,8 +194,13 @@ bool translation_unit_visitor::VisitClassTemplateDecl( found_relationships_t relationships; - process_class_declaration(*decl->getTemplatedDecl(), relationships); - add_relationships(decl, relationships); + util::if_not_null(decl->getTemplatedDecl(), + [this, &relationships, decl](const auto *template_decl) { + if (template_decl->isCompleteDefinition()) { + process_class_declaration(*template_decl, relationships); + add_relationships(decl, relationships); + } + }); return true; } diff --git a/src/util/util.h b/src/util/util.h index 19892657..eeafe95d 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -254,7 +254,7 @@ void for_each_if(const T &collection, C &&cond, F &&func) } template -void apply_if_not_null(const T *pointer, F &&func, FElse &&func_else) +void if_not_null(const T *pointer, F &&func, FElse &&func_else) { if (pointer != nullptr) { std::forward(func)(pointer); @@ -264,14 +264,13 @@ void apply_if_not_null(const T *pointer, F &&func, FElse &&func_else) } } -template -void apply_if_not_null(const T *pointer, F &&func) +template void if_not_null(const T *pointer, F &&func) { - apply_if_not_null(pointer, std::forward(func), []() {}); + if_not_null(pointer, std::forward(func), []() {}); } template -void apply_if(const bool condition, F &&func, FElse &&func_else) +void _if(const bool condition, F &&func, FElse &&func_else) { if (condition) { std::forward(func)(); @@ -281,9 +280,9 @@ void apply_if(const bool condition, F &&func, FElse &&func_else) } } -template void apply_if(const bool condition, F &&func) +template void _if(const bool condition, F &&func) { - apply_if(condition, std::forward(func), []() {}); + _if(condition, std::forward(func), []() {}); } std::size_t hash_seed(std::size_t seed);