Doxygen
Loading...
Searching...
No Matches
ModuleManager Class Reference

#include <src/moduledef.h>

Classes

struct  Private

Public Member Functions

void createModuleDef (const DString &fileName, int line, size_t column, bool exported, const DString &moduleName, const DString &partitionName=DString())
void clear ()
void addHeader (const DString &moduleFile, int line, const DString &headerName, bool isSystem)
void addImport (const DString &moduleFile, int line, const DString &importName, bool isExported, const DString &partitionName=DString())
void addClassToModule (const Entry *root, ClassDef *cd)
void addConceptToModule (const Entry *root, ConceptDef *cd)
void addMemberToModule (const Entry *root, MemberDef *md)
void addDocs (const Entry *root)
void addTagInfo (const DString &moduleFile, const DString &tagName, const DString &clangId)
void addListReferences ()
void addRequirementReferences ()
void addMembersToMemberGroup ()
void distributeMemberGroupDocumentation ()
void findSectionsInDocumentation ()
void sortMemberLists ()
void resolvePartitions ()
void resolveImports ()
void collectExportedSymbols ()
void countMembers ()
void writeDocumentation (OutputList &ol)
int numDocumentedModules () const
ModuleLinkedMapmodules ()
const ModuleLinkedMapmodules () const
ModuleDefgetPrimaryInterface (const DString &moduleName) const

Static Public Member Functions

static ModuleManagerinstance ()

Private Member Functions

 ModuleManager ()
 ~ModuleManager ()=default
void resolvePartitionsRecursively (ModuleDef *intfMod, ModuleDef *mod)
void collectExportedSymbolsRecursively (ModuleDef *intfMod, ModuleDef *mod)

Private Attributes

std::unique_ptr< Privatep

Detailed Description

Definition at line 110 of file moduledef.h.

Constructor & Destructor Documentation

◆ ModuleManager()

ModuleManager::ModuleManager ( )
private

Definition at line 1273 of file moduledef.cpp.

1273 : p(std::make_unique<Private>())
1274{
1275}
std::unique_ptr< Private > p
Definition moduledef.h:148

References p.

Referenced by instance(), and ~ModuleManager().

◆ ~ModuleManager()

ModuleManager::~ModuleManager ( )
privatedefault

References ModuleManager().

Member Function Documentation

◆ addClassToModule()

void ModuleManager::addClassToModule ( const Entry * root,
ClassDef * cd )

Definition at line 1343 of file moduledef.cpp.

1344{
1345 std::lock_guard lock(p->mutex);
1346 auto mod = p->moduleFileMap.find(root->fileName);
1347 if (mod)
1348 {
1349 toModuleDefImpl(mod)->addClassToModule(root,cd);
1350 auto cdm = toClassDefMutable(cd);
1351 if (cdm) cdm->setModuleDef(mod);
1352 }
1353}
DString fileName
file this entry was extracted from
Definition entry.h:223
void addClassToModule(const Entry *root, ClassDef *cd)
ClassDefMutable * toClassDefMutable(Definition *d)
static ModuleDefImpl * toModuleDefImpl(ModuleDef *m)

References ModuleDefImpl::addClassToModule(), Entry::fileName, p, toClassDefMutable(), and toModuleDefImpl().

Referenced by addClassToContext().

◆ addConceptToModule()

void ModuleManager::addConceptToModule ( const Entry * root,
ConceptDef * cd )

Definition at line 1355 of file moduledef.cpp.

1356{
1357 std::lock_guard lock(p->mutex);
1358 auto mod = p->moduleFileMap.find(root->fileName);
1359 if (mod)
1360 {
1361 toModuleDefImpl(mod)->addConceptToModule(root,cd);
1362 auto cdm = toConceptDefMutable(cd);
1363 if (cdm) cdm->setModuleDef(mod);
1364 }
1365}
void addConceptToModule(const Entry *root, ConceptDef *cd)
ConceptDefMutable * toConceptDefMutable(Definition *d)

References ModuleDefImpl::addConceptToModule(), Entry::fileName, p, toConceptDefMutable(), and toModuleDefImpl().

Referenced by addConceptToContext().

◆ addDocs()

void ModuleManager::addDocs ( const Entry * root)

Definition at line 1603 of file moduledef.cpp.

1604{
1605 AUTO_TRACE("file={} module={}",root->fileName,root->name);
1606 if (root->doc.empty() && root->brief.empty()) return;
1607 if (root->name.find(':')!=DString::npos)
1608 {
1609 warn(root->fileName,root->startLine,"Ignoring documentation for module partition {}. Please place documentation at the primary module name",
1610 root->name);
1611 }
1612 else
1613 {
1614 auto it = p->moduleNameMap.find(root->name.str());
1615 if (it != p->moduleNameMap.end())
1616 {
1617 ModuleDef *mod = getPrimaryInterface(root->name);
1618 if (mod)
1619 {
1620 mod->setDocumentation(root->doc,root->docFile,root->docLine);
1621 mod->setBriefDescription(root->brief,root->briefFile,root->briefLine);
1622 mod->setId(root->id);
1623 mod->setHidden(root->hidden);
1624 mod->setBodySegment(root->startLine,root->bodyLine,root->endBodyLine);
1625 mod->setRefItems(root->sli);
1626 mod->setRequirementReferences(root->rqli);
1627 //mod->addSectionsToDefinition(root->anchors);
1628 addModuleToGroups(root,mod);
1629 }
1630 else
1631 {
1632 warn(root->fileName,root->startLine,"Found documentation for module {} but it has no primary interface unit.",root->name);
1633 }
1634 }
1635 else
1636 {
1637 warn(root->fileName,root->startLine,"Found documentation for unknown module {}.",root->name);
1638 }
1639 }
1640}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:178
size_t find(char c, size_t pos=0) const
Definition dstring.h:239
const std::string & str() const
Definition dstring.h:645
virtual void setBodySegment(int defLine, int bls, int ble)=0
virtual void setHidden(bool b)=0
virtual void setDocumentation(const DString &d, const DString &docFile, int docLine, bool stripWhiteSpace=true)=0
virtual void setBriefDescription(const DString &b, const DString &briefFile, int briefLine)=0
virtual void setRequirementReferences(const RequirementRefs &rqli)=0
virtual void setId(const DString &name)=0
virtual void setRefItems(const RefItemVector &sli)=0
RequirementRefs rqli
references to requirements
Definition entry.h:227
int docLine
line number at which the documentation was found
Definition entry.h:201
int endBodyLine
line number where the definition ends
Definition entry.h:218
DString docFile
file in which the documentation was found
Definition entry.h:202
DString doc
documentation block (partly parsed)
Definition entry.h:200
DString brief
brief description (doc block)
Definition entry.h:203
int startLine
start line of entry in the source
Definition entry.h:224
int bodyLine
line number of the body in the source
Definition entry.h:216
DString name
member name
Definition entry.h:173
RefItemVector sli
special lists (test/todo/bug/deprecated/..) this entry is in
Definition entry.h:226
bool hidden
does this represent an entity that is hidden from the output
Definition entry.h:229
int briefLine
line number at which the brief desc. was found
Definition entry.h:204
DString id
libclang id
Definition entry.h:232
DString briefFile
file in which the brief desc. was found
Definition entry.h:205
ModuleDef * getPrimaryInterface(const DString &moduleName) const
#define AUTO_TRACE(...)
Definition docnode.cpp:53
void addModuleToGroups(const Entry *root, ModuleDef *mod)
#define warn(file, line, fmt,...)
Definition message.h:97

References addModuleToGroups(), AUTO_TRACE, Entry::bodyLine, Entry::brief, Entry::briefFile, Entry::briefLine, Entry::doc, Entry::docFile, Entry::docLine, DString::empty(), Entry::endBodyLine, Entry::fileName, DString::find(), getPrimaryInterface(), Entry::hidden, Entry::id, Entry::name, DString::npos, p, Entry::rqli, DefinitionMutable::setBodySegment(), DefinitionMutable::setBriefDescription(), DefinitionMutable::setDocumentation(), DefinitionMutable::setHidden(), DefinitionMutable::setId(), DefinitionMutable::setRefItems(), DefinitionMutable::setRequirementReferences(), Entry::sli, Entry::startLine, DString::str(), and warn.

Referenced by findModuleDocumentation().

◆ addHeader()

void ModuleManager::addHeader ( const DString & moduleFile,
int line,
const DString & headerName,
bool isSystem )

Definition at line 1308 of file moduledef.cpp.

1309{
1310 AUTO_TRACE("{}:{} headerName={} isSystem={}",moduleFile,line,headerName,isSystem);
1311 std::lock_guard lock(p->mutex);
1312 auto mod = p->moduleFileMap.find(moduleFile);
1313 if (mod)
1314 {
1315 toModuleDefImpl(mod)->addHeader(line,headerName,isSystem);
1316 }
1317 else
1318 {
1319 AUTO_TRACE_ADD("imported header '{}' found in file '{}' that is not a module",headerName,moduleFile);
1320 }
1321 p->headers.emplace_back(moduleFile,headerName,isSystem);
1322}
void addHeader(int line, const DString &headerName, bool isSystem)
#define AUTO_TRACE_ADD(...)
Definition docnode.cpp:54

References ModuleDefImpl::addHeader(), AUTO_TRACE, AUTO_TRACE_ADD, p, and toModuleDefImpl().

◆ addImport()

void ModuleManager::addImport ( const DString & moduleFile,
int line,
const DString & importName,
bool isExported,
const DString & partitionName = DString() )

Definition at line 1324 of file moduledef.cpp.

1326{
1327 AUTO_TRACE("{}:{} importName={},isExported={},partitionName={}",
1328 moduleFile,line,importName,isExported,partitionName);
1329 std::lock_guard lock(p->mutex);
1330 auto mod = p->moduleFileMap.find(moduleFile);
1331 if (mod) // import inside a module
1332 {
1333 AUTO_TRACE_ADD("in module");
1334 toModuleDefImpl(mod)->addImport(line,importName.empty()?mod->name():importName,partitionName,isExported);
1335 }
1336 else // import outside of a module
1337 {
1338 AUTO_TRACE_ADD("outside module");
1339 p->externalImports[moduleFile.str()].emplace_back(nullptr,importName,line,partitionName);
1340 }
1341}
void addImport(int line, const DString &moduleName, const DString &partitionName, bool isExported)

References ModuleDefImpl::addImport(), AUTO_TRACE, AUTO_TRACE_ADD, DString::empty(), p, DString::str(), and toModuleDefImpl().

◆ addListReferences()

void ModuleManager::addListReferences ( )

Definition at line 1658 of file moduledef.cpp.

1659{
1660 for (const auto &mod : p->moduleFileMap) // foreach module
1661 {
1662 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->addListReferences();
1663 }
1664}
void addListReferences()

References ModuleDefImpl::addListReferences(), p, and toModuleDefImpl().

◆ addMembersToMemberGroup()

void ModuleManager::addMembersToMemberGroup ( )

Definition at line 1674 of file moduledef.cpp.

1675{
1676 for (const auto &mod : p->moduleFileMap) // foreach module
1677 {
1678 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->addMembersToMemberGroup();
1679 }
1680}
void addMembersToMemberGroup()

References ModuleDefImpl::addMembersToMemberGroup(), p, and toModuleDefImpl().

Referenced by addMembersToMemberGroup().

◆ addMemberToModule()

void ModuleManager::addMemberToModule ( const Entry * root,
MemberDef * md )

Definition at line 1367 of file moduledef.cpp.

1368{
1369 std::lock_guard lock(p->mutex);
1370 auto mod = p->moduleFileMap.find(root->fileName);
1371 if (mod && root->exported && md->getClassDef()==nullptr)
1372 {
1373 toModuleDefImpl(mod)->addMemberToModule(root,md);
1374 auto mdm = toMemberDefMutable(md);
1375 if (mdm) mdm->setModuleDef(mod);
1376 }
1377}
bool exported
is the symbol exported from a C++20 module
Definition entry.h:188
virtual const ClassDef * getClassDef() const =0
void addMemberToModule(const Entry *root, MemberDef *md)
MemberDefMutable * toMemberDefMutable(Definition *d)

References ModuleDefImpl::addMemberToModule(), Entry::exported, Entry::fileName, MemberDef::getClassDef(), p, toMemberDefMutable(), and toModuleDefImpl().

Referenced by addDefineDoc(), addEnumDocs(), addGlobalFunction(), addInterfaceOrServiceToServiceOrSingleton(), addMemberDocs(), addMethodToClass(), addVariableToClass(), addVariableToFile(), buildFunctionList(), findEnums(), and findMember().

◆ addRequirementReferences()

void ModuleManager::addRequirementReferences ( )

Definition at line 1666 of file moduledef.cpp.

1667{
1668 for (const auto &mod : p->moduleFileMap) // foreach module
1669 {
1670 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->addRequirementReferences();
1671 }
1672}
void addRequirementReferences()

References ModuleDefImpl::addRequirementReferences(), p, and toModuleDefImpl().

◆ addTagInfo()

void ModuleManager::addTagInfo ( const DString & moduleFile,
const DString & tagName,
const DString & clangId )

Definition at line 1379 of file moduledef.cpp.

1380{
1381 std::lock_guard lock(p->mutex);
1382 auto mod = p->moduleFileMap.find(fileName);
1383 if (mod)
1384 {
1385 ModuleDefImpl *modi = toModuleDefImpl(mod);
1386 modi->setReference(tagFile);
1387 modi->setId(clangId);
1388 }
1389}
void setId(const DString &name) override
void setReference(const DString &r) override

References p, DefinitionMixin< Base >::setId(), DefinitionMixin< Base >::setReference(), and toModuleDefImpl().

◆ clear()

void ModuleManager::clear ( )

Definition at line 1299 of file moduledef.cpp.

1300{
1301 std::lock_guard lock(p->mutex);
1302 p->headers.clear();
1303 p->externalImports.clear();
1304 p->moduleNameMap.clear();
1305 p->moduleFileMap.clear();
1306}

References p.

Referenced by cleanUpDoxygen().

◆ collectExportedSymbols()

void ModuleManager::collectExportedSymbols ( )

Definition at line 1533 of file moduledef.cpp.

1534{
1535 AUTO_TRACE();
1536 for (auto &mod : p->moduleFileMap) // foreach module
1537 {
1538 if (mod->isPrimaryInterface()) // that is a primary interface
1539 {
1540 for (auto &[partitionName,partitionMod] : mod->partitions())
1541 {
1542 collectExportedSymbolsRecursively(mod.get(),partitionMod);
1543 }
1544
1545 // collect all files that contribute to this module (e.g. implementation/partition modules)
1546 auto it = p->moduleNameMap.find(mod->name().str());
1547 if (it != p->moduleNameMap.end())
1548 {
1549 for (auto contributingMod : it->second)
1550 {
1551 AUTO_TRACE_ADD(" adding contributing module {} to interface module {} type={} partition={} isPrimaryIntf={}",
1552 contributingMod->qualifiedName(),
1553 mod->name(),
1554 contributingMod->moduleType()==ModuleDef::Type::Interface ? "Interface" : "Implementation",
1555 contributingMod->partitionName(),
1556 contributingMod->isPrimaryInterface());
1558 }
1559 }
1560 }
1561 }
1562}
void addContributingModule(ModuleDefImpl *mod)
void collectExportedSymbolsRecursively(ModuleDef *intfMod, ModuleDef *mod)

References ModuleDefImpl::addContributingModule(), AUTO_TRACE, AUTO_TRACE_ADD, collectExportedSymbolsRecursively(), ModuleDef::Interface, p, and toModuleDefImpl().

◆ collectExportedSymbolsRecursively()

void ModuleManager::collectExportedSymbolsRecursively ( ModuleDef * intfMod,
ModuleDef * mod )
private

Definition at line 1525 of file moduledef.cpp.

1526{
1527 AUTO_TRACE("{}: collecting symbols for partition {}",intfMod->qualifiedName(),partitionMod->qualifiedName());
1528 auto intfModImpl = toModuleDefImpl(intfMod);
1529 auto partitionModImpl = toModuleDefImpl(partitionMod);
1530 intfModImpl->mergeSymbolsFrom(partitionModImpl);
1531}
virtual DString qualifiedName() const =0

References AUTO_TRACE, Definition::qualifiedName(), and toModuleDefImpl().

Referenced by collectExportedSymbols().

◆ countMembers()

void ModuleManager::countMembers ( )

Definition at line 1564 of file moduledef.cpp.

1565{
1566 for (auto &mod : p->moduleFileMap) // foreach module
1567 {
1569 }
1570}
void countMembers()

References ModuleDefImpl::countMembers(), p, and toModuleDefImpl().

◆ createModuleDef()

void ModuleManager::createModuleDef ( const DString & fileName,
int line,
size_t column,
bool exported,
const DString & moduleName,
const DString & partitionName = DString() )

Definition at line 1277 of file moduledef.cpp.

1279{
1280 AUTO_TRACE("{}:{}: Found module name='{}' partition='{}' exported='{}'",
1281 fileName,line,moduleName,partitionName,exported);
1282 std::lock_guard lock(p->mutex);
1284 std::unique_ptr<ModuleDef> modDef = std::make_unique<ModuleDefImpl>(fileName,line,column,moduleName,mt,partitionName);
1285 auto mod = p->moduleFileMap.add(fileName,std::move(modDef));
1286 auto it = p->moduleNameMap.find(moduleName.str());
1287 if (it == p->moduleNameMap.end())
1288 {
1289 ModuleList ml;
1290 ml.push_back(mod);
1291 p->moduleNameMap.emplace(moduleName.str(),ml);
1292 }
1293 else
1294 {
1295 it->second.push_back(mod);
1296 }
1297}

References AUTO_TRACE, ModuleDef::Implementation, ModuleDef::Interface, p, and DString::str().

◆ distributeMemberGroupDocumentation()

void ModuleManager::distributeMemberGroupDocumentation ( )

Definition at line 1682 of file moduledef.cpp.

1683{
1684 for (const auto &mod : p->moduleFileMap) // foreach module
1685 {
1686 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->distributeMemberGroupDocumentation();
1687 }
1688}
void distributeMemberGroupDocumentation()

References ModuleDefImpl::distributeMemberGroupDocumentation(), p, and toModuleDefImpl().

Referenced by distributeMemberGroupDocumentation().

◆ findSectionsInDocumentation()

void ModuleManager::findSectionsInDocumentation ( )

Definition at line 1690 of file moduledef.cpp.

1691{
1692 for (auto &mod : p->moduleFileMap) // foreach module
1693 {
1694 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->findSectionsInDocumentation();
1695 }
1696}
void findSectionsInDocumentation()

References ModuleDefImpl::findSectionsInDocumentation(), p, and toModuleDefImpl().

Referenced by findSectionsInDocumentation().

◆ getPrimaryInterface()

ModuleDef * ModuleManager::getPrimaryInterface ( const DString & moduleName) const

Definition at line 1642 of file moduledef.cpp.

1643{
1644 auto it = p->moduleNameMap.find(moduleName.str());
1645 if (it != p->moduleNameMap.end())
1646 {
1647 for (const auto &mod : it->second)
1648 {
1649 if (mod->isPrimaryInterface())
1650 {
1651 return mod;
1652 }
1653 }
1654 }
1655 return nullptr;
1656}

References p, and DString::str().

Referenced by addDocs(), resolveImports(), ModuleDefImpl::writeExports(), writeExports(), and FileDefImpl::writeIncludeFiles().

◆ instance()

◆ modules() [1/2]

ModuleLinkedMap & ModuleManager::modules ( )

Definition at line 1598 of file moduledef.cpp.

1599{
1600 return p->moduleFileMap;
1601}

References p.

◆ modules() [2/2]

const ModuleLinkedMap & ModuleManager::modules ( ) const

Definition at line 1593 of file moduledef.cpp.

1594{
1595 return p->moduleFileMap;
1596}

References p.

◆ numDocumentedModules()

int ModuleManager::numDocumentedModules ( ) const

Definition at line 1583 of file moduledef.cpp.

1584{
1585 int count=0;
1586 for (const auto &mod : p->moduleFileMap) // foreach module
1587 {
1588 if (mod->isPrimaryInterface()) count++;
1589 }
1590 return count;
1591}

References p.

Referenced by Index::countDataStructures().

◆ resolveImports()

void ModuleManager::resolveImports ( )

Definition at line 1466 of file moduledef.cpp.

1467{
1468 AUTO_TRACE();
1469 for (auto &mod : p->moduleFileMap)
1470 {
1471 FileDef *fd = mod->getFileDef();
1472 if (fd)
1473 {
1474 for (const auto &[fileName,importInfoList] : mod->getImports())
1475 {
1476 for (const auto &importInfo : importInfoList)
1477 {
1478 ModuleDef *importedModule = getPrimaryInterface(importInfo.importName);
1479 const FileDef *importedFd = importedModule ? importedModule->getFileDef() : nullptr;
1480 AUTO_TRACE_ADD("module: addIncludeDependency {}->{}:{} fd={}",
1481 mod->qualifiedName(), importInfo.qualifiedName(), importInfo.line, fd?fd->absFilePath():"");
1482 fd->addIncludeDependency(importedFd,importInfo.qualifiedName(),IncludeKind::ImportModule);
1483 }
1484 }
1485 }
1486 }
1487 for (const auto &[fileName,importInfoList] : p->externalImports)
1488 {
1489 for (const auto &importInfo : importInfoList)
1490 {
1491 bool ambig = false;
1492 FileDef *fd = Doxygen::inputNameLinkedMap->findFileDef(fileName,ambig);
1493 AUTO_TRACE_ADD("externalImport name={} fd={}",fileName,(void*)fd);
1494 if (fd)
1495 {
1496 ModuleDef *mod = getPrimaryInterface(importInfo.importName);
1497 FileDef *importedFd = mod ? mod->getFileDef() : nullptr;
1498 fd->addIncludeDependency(importedFd,importInfo.importName,IncludeKind::ImportModule);
1499 if (importedFd)
1500 {
1502 }
1503 }
1504 }
1505 }
1506 for (const auto &headerInfo : p->headers)
1507 {
1508 bool ambig = false;
1509 FileDef *fd = Doxygen::inputNameLinkedMap->findFileDef(headerInfo.fileName,ambig);
1510 AUTO_TRACE_ADD("header name={} fd={}",headerInfo.fileName,(void*)fd);
1511 if (fd)
1512 {
1513 DString resolvedHeader = determineAbsoluteIncludeName(headerInfo.fileName,headerInfo.headerName);
1514 FileDef *importFd = Doxygen::inputNameLinkedMap->findFileDef(resolvedHeader,ambig);
1515 fd->addIncludeDependency(importFd, headerInfo.headerName,
1516 headerInfo.isSystem ? IncludeKind::ImportSystem : IncludeKind::ImportLocal);
1517 if (importFd)
1518 {
1519 importFd->addIncludedByDependency(fd,headerInfo.fileName,IncludeKind::ImportModule);
1520 }
1521 }
1522 }
1523}
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:97
virtual void addIncludeDependency(const FileDef *fd, const DString &incName, IncludeKind kind)=0
virtual DString absFilePath() const =0
virtual void addIncludedByDependency(const FileDef *fd, const DString &incName, IncludeKind kind)=0
FileDef * findFileDef(const DString &n, bool &ambig) const
Returns the file definition in fnMap that matches the file name n.
Definition filename.cpp:38
virtual FileDef * getFileDef() const =0
@ ImportLocal
Definition filedef.h:51
@ ImportModule
Definition filedef.h:52
@ ImportSystem
Definition filedef.h:50
DString determineAbsoluteIncludeName(const DString &curFile, const DString &incFileName)
Definition util.cpp:2929
DString stripFromPath(const DString &path)
Definition util.cpp:219

References FileDef::absFilePath(), FileDef::addIncludedByDependency(), FileDef::addIncludeDependency(), AUTO_TRACE, AUTO_TRACE_ADD, determineAbsoluteIncludeName(), FileDef::fileName(), FileNameLinkedMap::findFileDef(), ModuleDef::getFileDef(), getPrimaryInterface(), ImportLocal, ImportModule, ImportSystem, Doxygen::inputNameLinkedMap, p, Definition::qualifiedName(), and stripFromPath().

◆ resolvePartitions()

void ModuleManager::resolvePartitions ( )

Definition at line 1433 of file moduledef.cpp.

1434{
1435 AUTO_TRACE();
1436 for (auto &mod : p->moduleFileMap) // foreach module
1437 {
1438 if (mod->moduleType()==ModuleDef::Type::Interface && mod->partitionName().empty())
1439 { // that is a primary interface
1440 resolvePartitionsRecursively(mod.get(),mod.get());
1441 }
1442
1443 // copy exported imports to m_exportedModules
1444 for (const auto &[fileName,importInfoList] : mod->getImports())
1445 {
1446 for (const auto &importInfo : importInfoList)
1447 {
1448 if (importInfo.exported && mod->name()!=importInfo.importName)
1449 {
1450 toModuleDefImpl(mod)->addExportedModule(importInfo.importName,importInfo);
1451 }
1452 }
1453 }
1454
1455 // also link the ModuleDef and FileDef together
1456 bool ambig = false;
1457 FileDef *fd = Doxygen::inputNameLinkedMap->findFileDef(mod->getDefFileName(),ambig);
1458 if (fd)
1459 {
1460 fd->setModuleDef(mod.get());
1461 toModuleDefImpl(mod)->setFileDef(fd);
1462 }
1463 }
1464}
virtual void setModuleDef(ModuleDef *mod)=0
void setFileDef(FileDef *fd)
void addExportedModule(const DString &moduleName, const ImportInfo &info)
void resolvePartitionsRecursively(ModuleDef *intfMod, ModuleDef *mod)

References ModuleDefImpl::addExportedModule(), AUTO_TRACE, FileNameLinkedMap::findFileDef(), Doxygen::inputNameLinkedMap, ModuleDef::Interface, p, resolvePartitionsRecursively(), ModuleDefImpl::setFileDef(), FileDef::setModuleDef(), and toModuleDefImpl().

◆ resolvePartitionsRecursively()

void ModuleManager::resolvePartitionsRecursively ( ModuleDef * intfMod,
ModuleDef * mod )
private

Definition at line 1391 of file moduledef.cpp.

1392{
1393 AUTO_TRACE();
1394 for (auto &[partitionFileName,importInfoList] : mod->getImports()) // foreach import
1395 {
1396 for (auto &importInfo : importInfoList)
1397 {
1398 AUTO_TRACE_ADD("partitionFileName={} importName={} partitionName={}",
1399 partitionFileName,importInfo.importName,importInfo.partitionName);
1400 if (importInfo.importName==intfMod->name() && !importInfo.partitionName.empty() &&
1401 importInfo.exported) // that is an exported partition of this module
1402 {
1403 auto it = p->moduleNameMap.find(importInfo.importName.str());
1404 if (it != p->moduleNameMap.end())
1405 {
1406 for (auto importedMod : it->second)
1407 {
1408 if (importedMod->qualifiedName()==importInfo.importName+":"+importInfo.partitionName)
1409 {
1410 AUTO_TRACE_ADD("Interface module {} exports partition {}:{}",
1411 mod->name(),importedMod->name(),importedMod->partitionName());
1412 toModuleDefImpl(intfMod)->addPartition(toModuleDefImpl(importedMod));
1413 toModuleDefImpl(importedMod)->setPrimaryInterface(intfMod);
1414 for (const auto &[partitionFileName_,partitionImportInfoList] : importedMod->getImports())
1415 {
1416 for (const auto &partitionImportInfo : partitionImportInfoList)
1417 {
1418 if (partitionImportInfo.exported && intfMod->name()!=partitionImportInfo.importName)
1419 {
1420 toModuleDefImpl(intfMod)->addExportedModule(partitionImportInfo.importName,partitionImportInfo);
1421 }
1422 }
1423 }
1424 resolvePartitionsRecursively(intfMod,importedMod);
1425 }
1426 }
1427 }
1428 }
1429 }
1430 }
1431}
virtual const DString & name() const =0
virtual const ImportInfoMap & getImports() const =0
void addPartition(ModuleDefImpl *mod)
void setPrimaryInterface(const ModuleDef *mod)

References ModuleDefImpl::addExportedModule(), ModuleDefImpl::addPartition(), AUTO_TRACE, AUTO_TRACE_ADD, DString::empty(), ModuleDef::getImports(), Definition::name(), p, resolvePartitionsRecursively(), ModuleDefImpl::setPrimaryInterface(), and toModuleDefImpl().

Referenced by resolvePartitions(), and resolvePartitionsRecursively().

◆ sortMemberLists()

void ModuleManager::sortMemberLists ( )

Definition at line 1698 of file moduledef.cpp.

1699{
1700 for (auto &mod : p->moduleFileMap) // foreach module
1701 {
1702 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->sortMemberLists();
1703 }
1704}
void sortMemberLists()

References p, ModuleDefImpl::sortMemberLists(), and toModuleDefImpl().

Referenced by sortMemberLists().

◆ writeDocumentation()

void ModuleManager::writeDocumentation ( OutputList & ol)

Definition at line 1572 of file moduledef.cpp.

1573{
1574 for (auto &mod : p->moduleFileMap) // foreach module
1575 {
1576 if (mod->isPrimaryInterface())
1577 {
1578 mod->writeDocumentation(ol);
1579 }
1580 }
1581}

References p.

Referenced by generateOutput().

Member Data Documentation

◆ p


The documentation for this class was generated from the following files: