Ensure class methods and fields are only added once

This commit is contained in:
Bartek Kryza
2022-08-31 18:44:33 +02:00
parent 0cef28ac02
commit 86c5444407
3 changed files with 23 additions and 1 deletions

View File

@@ -184,6 +184,9 @@ bool translation_unit_visitor::VisitClassTemplateSpecializationDecl(
if (source_manager_.isInSystemHeader(cls->getSourceRange().getBegin()))
return true;
if (!diagram().should_include(cls->getQualifiedNameAsString()))
return true;
LOG_DBG("= Visiting template specialization declaration {} at {}",
cls->getQualifiedNameAsString(),
cls->getLocation().printToString(source_manager_));
@@ -227,6 +230,9 @@ bool translation_unit_visitor::VisitTypeAliasTemplateDecl(
if (source_manager_.isInSystemHeader(cls->getSourceRange().getBegin()))
return true;
if (!diagram().should_include(cls->getQualifiedNameAsString()))
return true;
LOG_DBG("= Visiting template type alias declaration {} at {}",
cls->getQualifiedNameAsString(),
cls->getLocation().printToString(source_manager_));
@@ -262,6 +268,9 @@ bool translation_unit_visitor::VisitClassTemplateDecl(
if (source_manager_.isInSystemHeader(cls->getSourceRange().getBegin()))
return true;
if (!diagram().should_include(cls->getQualifiedNameAsString()))
return true;
LOG_DBG("= Visiting class template declaration {} at {}",
cls->getQualifiedNameAsString(),
cls->getLocation().printToString(source_manager_));
@@ -337,7 +346,7 @@ bool translation_unit_visitor::VisitCXXRecordDecl(clang::CXXRecordDecl *cls)
? *diagram().get_class(cls_id).get()
: *c_ptr;
if (cls->isCompleteDefinition())
if (cls->isCompleteDefinition() && !class_model.complete())
process_class_declaration(*cls, class_model);
auto id = class_model.id();
@@ -407,6 +416,8 @@ void translation_unit_visitor::process_class_declaration(
if (cls.getParent()->isRecord()) {
process_record_containment(cls, c);
}
c.complete(true);
}
bool translation_unit_visitor::process_template_parameters(