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

#include <src/moduledef.h>

Classes

struct  Private

Public Member Functions

void createModuleDef (const QCString &fileName, int line, int column, bool exported, const QCString &moduleName, const QCString &partitionName=QCString())
void clear ()
void addHeader (const QCString &moduleFile, int line, const QCString &headerName, bool isSystem)
void addImport (const QCString &moduleFile, int line, const QCString &importName, bool isExported, const QCString &partitionName=QCString())
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 QCString &moduleFile, const QCString &tagName, const QCString &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 QCString &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 1266 of file moduledef.cpp.

1266 : p(std::make_unique<Private>())
1267{
1268}
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 1336 of file moduledef.cpp.

1337{
1338 std::lock_guard lock(p->mutex);
1339 auto mod = p->moduleFileMap.find(root->fileName);
1340 if (mod)
1341 {
1342 toModuleDefImpl(mod)->addClassToModule(root,cd);
1343 auto cdm = toClassDefMutable(cd);
1344 if (cdm) cdm->setModuleDef(mod);
1345 }
1346}
QCString fileName
file this entry was extracted from
Definition entry.h:224
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 1348 of file moduledef.cpp.

1349{
1350 std::lock_guard lock(p->mutex);
1351 auto mod = p->moduleFileMap.find(root->fileName);
1352 if (mod)
1353 {
1354 toModuleDefImpl(mod)->addConceptToModule(root,cd);
1355 auto cdm = toConceptDefMutable(cd);
1356 if (cdm) cdm->setModuleDef(mod);
1357 }
1358}
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 1596 of file moduledef.cpp.

1597{
1598 AUTO_TRACE("file={} module={}",root->fileName,root->name);
1599 if (root->doc.isEmpty() && root->brief.isEmpty()) return;
1600 if (root->name.find(':')!=-1)
1601 {
1602 warn(root->fileName,root->startLine,"Ignoring documentation for module partition {}. Please place documentation at the primary module name",
1603 root->name);
1604 }
1605 else
1606 {
1607 auto it = p->moduleNameMap.find(root->name.str());
1608 if (it != p->moduleNameMap.end())
1609 {
1610 ModuleDef *mod = getPrimaryInterface(root->name);
1611 if (mod)
1612 {
1613 mod->setDocumentation(root->doc,root->docFile,root->docLine);
1614 mod->setBriefDescription(root->brief,root->briefFile,root->briefLine);
1615 mod->setId(root->id);
1616 mod->setHidden(root->hidden);
1617 mod->setBodySegment(root->startLine,root->bodyLine,root->endBodyLine);
1618 mod->setRefItems(root->sli);
1619 mod->setRequirementReferences(root->rqli);
1620 //mod->addSectionsToDefinition(root->anchors);
1621 addModuleToGroups(root,mod);
1622 }
1623 else
1624 {
1625 warn(root->fileName,root->startLine,"Found documentation for module {} but it has no primary interface unit.",root->name);
1626 }
1627 }
1628 else
1629 {
1630 warn(root->fileName,root->startLine,"Found documentation for unknown module {}.",root->name);
1631 }
1632 }
1633}
virtual void setBodySegment(int defLine, int bls, int ble)=0
virtual void setHidden(bool b)=0
virtual void setDocumentation(const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE)=0
virtual void setId(const QCString &name)=0
virtual void setBriefDescription(const QCString &b, const QCString &briefFile, int briefLine)=0
virtual void setRequirementReferences(const RequirementRefs &rqli)=0
virtual void setRefItems(const RefItemVector &sli)=0
RequirementRefs rqli
references to requirements
Definition entry.h:228
int docLine
line number at which the documentation was found
Definition entry.h:202
int endBodyLine
line number where the definition ends
Definition entry.h:219
QCString id
libclang id
Definition entry.h:233
int startLine
start line of entry in the source
Definition entry.h:225
QCString name
member name
Definition entry.h:175
QCString briefFile
file in which the brief desc. was found
Definition entry.h:206
int bodyLine
line number of the body in the source
Definition entry.h:217
QCString doc
documentation block (partly parsed)
Definition entry.h:201
RefItemVector sli
special lists (test/todo/bug/deprecated/..) this entry is in
Definition entry.h:227
QCString docFile
file in which the documentation was found
Definition entry.h:203
bool hidden
does this represent an entity that is hidden from the output
Definition entry.h:230
QCString brief
brief description (doc block)
Definition entry.h:204
int briefLine
line number at which the brief desc. was found
Definition entry.h:205
ModuleDef * getPrimaryInterface(const QCString &moduleName) const
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
const std::string & str() const
Definition qcstring.h:552
#define AUTO_TRACE(...)
Definition docnode.cpp:47
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, Entry::endBodyLine, Entry::fileName, QCString::find(), getPrimaryInterface(), Entry::hidden, Entry::id, QCString::isEmpty(), Entry::name, p, Entry::rqli, DefinitionMutable::setBodySegment(), DefinitionMutable::setBriefDescription(), DefinitionMutable::setDocumentation(), DefinitionMutable::setHidden(), DefinitionMutable::setId(), DefinitionMutable::setRefItems(), DefinitionMutable::setRequirementReferences(), Entry::sli, Entry::startLine, QCString::str(), and warn.

Referenced by findModuleDocumentation().

◆ addHeader()

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

Definition at line 1301 of file moduledef.cpp.

1302{
1303 AUTO_TRACE("{}:{} headerName={} isSystem={}",moduleFile,line,headerName,isSystem);
1304 std::lock_guard lock(p->mutex);
1305 auto mod = p->moduleFileMap.find(moduleFile);
1306 if (mod)
1307 {
1308 toModuleDefImpl(mod)->addHeader(line,headerName,isSystem);
1309 }
1310 else
1311 {
1312 AUTO_TRACE_ADD("imported header '{}' found in file '{}' that is not a module",headerName,moduleFile);
1313 }
1314 p->headers.emplace_back(moduleFile,headerName,isSystem);
1315}
void addHeader(int line, const QCString &headerName, bool isSystem)
#define AUTO_TRACE_ADD(...)
Definition docnode.cpp:48

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

◆ addImport()

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

Definition at line 1317 of file moduledef.cpp.

1319{
1320 AUTO_TRACE("{}:{} importName={},isExported={},partitionName={}",
1321 moduleFile,line,importName,isExported,partitionName);
1322 std::lock_guard lock(p->mutex);
1323 auto mod = p->moduleFileMap.find(moduleFile);
1324 if (mod) // import inside a module
1325 {
1326 AUTO_TRACE_ADD("in module");
1327 toModuleDefImpl(mod)->addImport(line,importName.isEmpty()?mod->name():importName,partitionName,isExported);
1328 }
1329 else // import outside of a module
1330 {
1331 AUTO_TRACE_ADD("outside module");
1332 p->externalImports[moduleFile.str()].emplace_back(nullptr,importName,line,partitionName);
1333 }
1334}
void addImport(int line, const QCString &moduleName, const QCString &partitionName, bool isExported)

References ModuleDefImpl::addImport(), AUTO_TRACE, AUTO_TRACE_ADD, QCString::isEmpty(), p, QCString::str(), and toModuleDefImpl().

◆ addListReferences()

void ModuleManager::addListReferences ( )

Definition at line 1651 of file moduledef.cpp.

1652{
1653 for (const auto &mod : p->moduleFileMap) // foreach module
1654 {
1655 if (mod->isPrimaryInterface()) toModuleDefImpl(mod)->addListReferences();
1656 }
1657}
void addListReferences()

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

◆ addMembersToMemberGroup()

void ModuleManager::addMembersToMemberGroup ( )

Definition at line 1667 of file moduledef.cpp.

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

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

Referenced by addMembersToMemberGroup().

◆ addMemberToModule()

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

Definition at line 1360 of file moduledef.cpp.

1361{
1362 std::lock_guard lock(p->mutex);
1363 auto mod = p->moduleFileMap.find(root->fileName);
1364 if (mod && root->exported && md->getClassDef()==nullptr)
1365 {
1366 toModuleDefImpl(mod)->addMemberToModule(root,md);
1367 auto mdm = toMemberDefMutable(md);
1368 if (mdm) mdm->setModuleDef(mod);
1369 }
1370}
bool exported
is the symbol exported from a C++20 module
Definition entry.h:190
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 1659 of file moduledef.cpp.

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

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

◆ addTagInfo()

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

Definition at line 1372 of file moduledef.cpp.

1373{
1374 std::lock_guard lock(p->mutex);
1375 auto mod = p->moduleFileMap.find(fileName);
1376 if (mod)
1377 {
1378 ModuleDefImpl *modi = toModuleDefImpl(mod);
1379 modi->setReference(tagFile);
1380 modi->setId(clangId);
1381 }
1382}
void setId(const QCString &name) override
void setReference(const QCString &r) override

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

◆ clear()

void ModuleManager::clear ( )

Definition at line 1292 of file moduledef.cpp.

1293{
1294 std::lock_guard lock(p->mutex);
1295 p->headers.clear();
1296 p->externalImports.clear();
1297 p->moduleNameMap.clear();
1298 p->moduleFileMap.clear();
1299}

References p.

Referenced by cleanUpDoxygen().

◆ collectExportedSymbols()

void ModuleManager::collectExportedSymbols ( )

Definition at line 1526 of file moduledef.cpp.

1527{
1528 AUTO_TRACE();
1529 for (auto &mod : p->moduleFileMap) // foreach module
1530 {
1531 if (mod->isPrimaryInterface()) // that is a primary interface
1532 {
1533 for (auto &[partitionName,partitionMod] : mod->partitions())
1534 {
1535 collectExportedSymbolsRecursively(mod.get(),partitionMod);
1536 }
1537
1538 // collect all files that contribute to this module (e.g. implementation/partition modules)
1539 auto it = p->moduleNameMap.find(mod->name().str());
1540 if (it != p->moduleNameMap.end())
1541 {
1542 for (auto contributingMod : it->second)
1543 {
1544 AUTO_TRACE_ADD(" adding contributing module {} to interface module {} type={} partition={} isPrimaryIntf={}",
1545 contributingMod->qualifiedName(),
1546 mod->name(),
1547 contributingMod->moduleType()==ModuleDef::Type::Interface ? "Interface" : "Implementation",
1548 contributingMod->partitionName(),
1549 contributingMod->isPrimaryInterface());
1551 }
1552 }
1553 }
1554 }
1555}
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 1518 of file moduledef.cpp.

1519{
1520 AUTO_TRACE("{}: collecting symbols for partition {}",intfMod->qualifiedName(),partitionMod->qualifiedName());
1521 auto intfModImpl = toModuleDefImpl(intfMod);
1522 auto partitionModImpl = toModuleDefImpl(partitionMod);
1523 intfModImpl->mergeSymbolsFrom(partitionModImpl);
1524}
virtual QCString qualifiedName() const =0

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

Referenced by collectExportedSymbols().

◆ countMembers()

void ModuleManager::countMembers ( )

Definition at line 1557 of file moduledef.cpp.

1558{
1559 for (auto &mod : p->moduleFileMap) // foreach module
1560 {
1562 }
1563}
void countMembers()

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

◆ createModuleDef()

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

Definition at line 1270 of file moduledef.cpp.

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

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

◆ distributeMemberGroupDocumentation()

void ModuleManager::distributeMemberGroupDocumentation ( )

Definition at line 1675 of file moduledef.cpp.

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

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

Referenced by distributeMemberGroupDocumentation().

◆ findSectionsInDocumentation()

void ModuleManager::findSectionsInDocumentation ( )

Definition at line 1683 of file moduledef.cpp.

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

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

Referenced by findSectionsInDocumentation().

◆ getPrimaryInterface()

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

Definition at line 1635 of file moduledef.cpp.

1636{
1637 auto it = p->moduleNameMap.find(moduleName.str());
1638 if (it != p->moduleNameMap.end())
1639 {
1640 for (const auto &mod : it->second)
1641 {
1642 if (mod->isPrimaryInterface())
1643 {
1644 return mod;
1645 }
1646 }
1647 }
1648 return nullptr;
1649}

References p, and QCString::str().

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

◆ instance()

◆ modules() [1/2]

ModuleLinkedMap & ModuleManager::modules ( )

Definition at line 1591 of file moduledef.cpp.

1592{
1593 return p->moduleFileMap;
1594}

References p.

◆ modules() [2/2]

const ModuleLinkedMap & ModuleManager::modules ( ) const

Definition at line 1586 of file moduledef.cpp.

1587{
1588 return p->moduleFileMap;
1589}

References p.

◆ numDocumentedModules()

int ModuleManager::numDocumentedModules ( ) const

Definition at line 1576 of file moduledef.cpp.

1577{
1578 int count=0;
1579 for (const auto &mod : p->moduleFileMap) // foreach module
1580 {
1581 if (mod->isPrimaryInterface()) count++;
1582 }
1583 return count;
1584}

References p.

Referenced by Index::countDataStructures().

◆ resolveImports()

void ModuleManager::resolveImports ( )

Definition at line 1459 of file moduledef.cpp.

1460{
1461 AUTO_TRACE();
1462 for (auto &mod : p->moduleFileMap)
1463 {
1464 FileDef *fd = mod->getFileDef();
1465 if (fd)
1466 {
1467 for (const auto &[fileName,importInfoList] : mod->getImports())
1468 {
1469 for (const auto &importInfo : importInfoList)
1470 {
1471 ModuleDef *importedModule = getPrimaryInterface(importInfo.importName);
1472 const FileDef *importedFd = importedModule ? importedModule->getFileDef() : nullptr;
1473 AUTO_TRACE_ADD("module: addIncludeDependency {}->{}:{} fd={}",
1474 mod->qualifiedName(), importInfo.qualifiedName(), importInfo.line, fd?fd->absFilePath():"");
1475 fd->addIncludeDependency(importedFd,importInfo.qualifiedName(),IncludeKind::ImportModule);
1476 }
1477 }
1478 }
1479 }
1480 for (const auto &[fileName,importInfoList] : p->externalImports)
1481 {
1482 for (const auto &importInfo : importInfoList)
1483 {
1484 bool ambig = false;
1485 FileDef *fd = findFileDef(Doxygen::inputNameLinkedMap,fileName,ambig);
1486 AUTO_TRACE_ADD("externalImport name={} fd={}",fileName,(void*)fd);
1487 if (fd)
1488 {
1489 ModuleDef *mod = getPrimaryInterface(importInfo.importName);
1490 FileDef *importedFd = mod ? mod->getFileDef() : nullptr;
1491 fd->addIncludeDependency(importedFd,importInfo.importName,IncludeKind::ImportModule);
1492 if (importedFd)
1493 {
1495 }
1496 }
1497 }
1498 }
1499 for (const auto &headerInfo : p->headers)
1500 {
1501 bool ambig = false;
1502 FileDef *fd = findFileDef(Doxygen::inputNameLinkedMap,headerInfo.fileName,ambig);
1503 AUTO_TRACE_ADD("header name={} fd={}",headerInfo.fileName,(void*)fd);
1504 if (fd)
1505 {
1506 QCString resolvedHeader = determineAbsoluteIncludeName(headerInfo.fileName,headerInfo.headerName);
1507 FileDef *importFd = findFileDef(Doxygen::inputNameLinkedMap,resolvedHeader,ambig);
1508 fd->addIncludeDependency(importFd, headerInfo.headerName,
1509 headerInfo.isSystem ? IncludeKind::ImportSystem : IncludeKind::ImportLocal);
1510 if (importFd)
1511 {
1512 importFd->addIncludedByDependency(fd,headerInfo.fileName,IncludeKind::ImportModule);
1513 }
1514 }
1515 }
1516}
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:104
virtual void addIncludedByDependency(const FileDef *fd, const QCString &incName, IncludeKind kind)=0
virtual QCString absFilePath() const =0
virtual void addIncludeDependency(const FileDef *fd, const QCString &incName, IncludeKind kind)=0
virtual FileDef * getFileDef() const =0
@ ImportLocal
Definition filedef.h:54
@ ImportModule
Definition filedef.h:55
@ ImportSystem
Definition filedef.h:53
static QCString stripFromPath(const QCString &p, const StringVector &l)
Definition util.cpp:299
QCString determineAbsoluteIncludeName(const QCString &curFile, const QCString &incFileName)
Definition util.cpp:3581
FileDef * findFileDef(const FileNameLinkedMap *fnMap, const QCString &n, bool &ambig)
Definition util.cpp:2871

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

◆ resolvePartitions()

void ModuleManager::resolvePartitions ( )

Definition at line 1426 of file moduledef.cpp.

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

References ModuleDefImpl::addExportedModule(), AUTO_TRACE, 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 1384 of file moduledef.cpp.

1385{
1386 AUTO_TRACE();
1387 for (auto &[partitionFileName,importInfoList] : mod->getImports()) // foreach import
1388 {
1389 for (auto &importInfo : importInfoList)
1390 {
1391 AUTO_TRACE_ADD("partitionFileName={} importName={} partitionName={}",
1392 partitionFileName,importInfo.importName,importInfo.partitionName);
1393 if (importInfo.importName==intfMod->name() && !importInfo.partitionName.isEmpty() &&
1394 importInfo.exported) // that is an exported partition of this module
1395 {
1396 auto it = p->moduleNameMap.find(importInfo.importName.str());
1397 if (it != p->moduleNameMap.end())
1398 {
1399 for (auto importedMod : it->second)
1400 {
1401 if (importedMod->qualifiedName()==importInfo.importName+":"+importInfo.partitionName)
1402 {
1403 AUTO_TRACE_ADD("Interface module {} exports partition {}:{}",
1404 mod->name(),importedMod->name(),importedMod->partitionName());
1405 toModuleDefImpl(intfMod)->addPartition(toModuleDefImpl(importedMod));
1406 toModuleDefImpl(importedMod)->setPrimaryInterface(intfMod);
1407 for (const auto &[partitionFileName_,partitionImportInfoList] : importedMod->getImports())
1408 {
1409 for (const auto &partitionImportInfo : partitionImportInfoList)
1410 {
1411 if (partitionImportInfo.exported && intfMod->name()!=partitionImportInfo.importName)
1412 {
1413 toModuleDefImpl(intfMod)->addExportedModule(partitionImportInfo.importName,partitionImportInfo);
1414 }
1415 }
1416 }
1417 resolvePartitionsRecursively(intfMod,importedMod);
1418 }
1419 }
1420 }
1421 }
1422 }
1423 }
1424}
virtual const QCString & 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, ModuleDef::getImports(), QCString::isEmpty(), Definition::name(), p, resolvePartitionsRecursively(), ModuleDefImpl::setPrimaryInterface(), and toModuleDefImpl().

Referenced by resolvePartitions(), and resolvePartitionsRecursively().

◆ sortMemberLists()

void ModuleManager::sortMemberLists ( )

Definition at line 1691 of file moduledef.cpp.

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

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

Referenced by sortMemberLists().

◆ writeDocumentation()

void ModuleManager::writeDocumentation ( OutputList & ol)

Definition at line 1565 of file moduledef.cpp.

1566{
1567 for (auto &mod : p->moduleFileMap) // foreach module
1568 {
1569 if (mod->isPrimaryInterface())
1570 {
1571 mod->writeDocumentation(ol);
1572 }
1573 }
1574}

References p.

Referenced by generateOutput().

Member Data Documentation

◆ p


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