Fixed module handling on LLVM versions < 15.0.0
This commit is contained in:
@@ -171,12 +171,19 @@ void translation_unit_visitor::set_owning_module(
|
|||||||
if (const clang::Module *module = decl.getOwningModule();
|
if (const clang::Module *module = decl.getOwningModule();
|
||||||
module != nullptr) {
|
module != nullptr) {
|
||||||
std::string module_name = module->Name;
|
std::string module_name = module->Name;
|
||||||
if (module->isPrivateModule()) {
|
bool is_private{false};
|
||||||
|
#if LLVM_VERSION_MAJOR < 15
|
||||||
|
is_private =
|
||||||
|
module->Kind == clang::Module::ModuleKind::PrivateModuleFragment;
|
||||||
|
#else
|
||||||
|
is_private = module->isPrivateModule();
|
||||||
|
#endif
|
||||||
|
if (is_private) {
|
||||||
// Clang just maps private modules names to "<private>"
|
// Clang just maps private modules names to "<private>"
|
||||||
module_name = module->getTopLevelModule()->Name;
|
module_name = module->getTopLevelModule()->Name;
|
||||||
}
|
}
|
||||||
element.set_module(module_name);
|
element.set_module(module_name);
|
||||||
element.set_module_private(module->isPrivateModule());
|
element.set_module_private(is_private);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace clanguml::common::visitor
|
} // namespace clanguml::common::visitor
|
||||||
@@ -247,8 +247,13 @@ void translation_unit_visitor::add_relationships(
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string module_path_str = module->Name;
|
std::string module_path_str = module->Name;
|
||||||
if (module->isPrivateModule())
|
#if LLVM_VERSION_MAJOR < 15
|
||||||
|
if (module->Kind == clang::Module::ModuleKind::PrivateModuleFragment) {
|
||||||
|
#else
|
||||||
|
if (module->isPrivateModule()) {
|
||||||
|
#endif
|
||||||
module_path_str = module->getTopLevelModule()->Name;
|
module_path_str = module->getTopLevelModule()->Name;
|
||||||
|
}
|
||||||
|
|
||||||
common::model::path module_path{
|
common::model::path module_path{
|
||||||
module_path_str, common::model::path_type::kModule};
|
module_path_str, common::model::path_type::kModule};
|
||||||
@@ -326,7 +331,12 @@ common::id_t translation_unit_visitor::get_package_id(const clang::Decl *cls)
|
|||||||
const auto *module = cls->getOwningModule();
|
const auto *module = cls->getOwningModule();
|
||||||
if (module != nullptr) {
|
if (module != nullptr) {
|
||||||
std::string module_path = module->Name;
|
std::string module_path = module->Name;
|
||||||
|
#if LLVM_VERSION_MAJOR < 15
|
||||||
|
if (module->Kind ==
|
||||||
|
clang::Module::ModuleKind::PrivateModuleFragment) {
|
||||||
|
#else
|
||||||
if (module->isPrivateModule()) {
|
if (module->isPrivateModule()) {
|
||||||
|
#endif
|
||||||
module_path = module->getTopLevelModule()->Name;
|
module_path = module->getTopLevelModule()->Name;
|
||||||
}
|
}
|
||||||
return common::to_id(module_path);
|
return common::to_id(module_path);
|
||||||
|
|||||||
@@ -63,12 +63,7 @@ TEST_CASE("t00008", "[test-case][class]")
|
|||||||
|
|
||||||
using namespace json;
|
using namespace json;
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR >= 16
|
|
||||||
REQUIRE(IsClassTemplate(j, "A<T,P=T,CMP=nullptr,int N=3>"));
|
REQUIRE(IsClassTemplate(j, "A<T,P=T,CMP=nullptr,int N=3>"));
|
||||||
#else
|
|
||||||
REQUIRE(IsClassTemplate(
|
|
||||||
j, "A<T,P=T,clanguml::t00008::CMP=nullptr,int N=3>"));
|
|
||||||
#endif
|
|
||||||
REQUIRE(IsClassTemplate(j, "E::nested_template<ET>"));
|
REQUIRE(IsClassTemplate(j, "E::nested_template<ET>"));
|
||||||
REQUIRE(IsClass(j, "E::nested_template<char>"));
|
REQUIRE(IsClass(j, "E::nested_template<char>"));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user