@@ -185,13 +185,13 @@ void ModuleDefImpl::addHeader(int line,const QCString &headerName,bool isSystem)
185185void ModuleDefImpl::addImport (int line,const QCString &moduleName,const QCString &partitionName,bool isExported)
186186{
187187 AUTO_TRACE (" name={}:line={},module={},partition={}" ,name (),line,moduleName,partitionName);
188- m_imports. emplace ( getDefFileName ().str ()+" :" +std::to_string (line), ImportInfo (this ,moduleName,line,partitionName,isExported));
188+ m_imports[ getDefFileName ().str ()+" :" +std::to_string (line)]. push_back ( ImportInfo (this ,moduleName,line,partitionName,isExported));
189189}
190190
191191void ModuleDefImpl::addExportedModule (const QCString &moduleName,const ImportInfo &info)
192192{
193193 AUTO_TRACE (" name={}:moduleName={},import={}" ,name (),moduleName,info.importName );
194- m_exportedModules. emplace ( moduleName.str (), info);
194+ m_exportedModules[ moduleName.str ()]. push_back ( info);
195195}
196196
197197void ModuleDefImpl::addClassToModule (const Entry *root,ClassDef *cd)
@@ -886,32 +886,35 @@ void ModuleDefImpl::writeExports(OutputList &ol,const QCString &title)
886886 ol.parseText (title);
887887 ol.endMemberHeader ();
888888 ol.startMemberList ();
889- for (auto &[moduleName,importInfo ] : m_exportedModules)
889+ for (const auto &[moduleName,importInfoList ] : m_exportedModules)
890890 {
891- ModuleDef *mod = ModuleManager::instance ().getPrimaryInterface (importInfo.importName );
892- ol.startMemberDeclaration ();
893- ol.startMemberItem (importInfo.importName ,OutputGenerator::MemberItemType::Normal);
894- ol.docify (theTranslator->trModule (FALSE ,TRUE )+" " );
895- ol.insertMemberAlign ();
896- if (mod && mod->isLinkable ())
891+ for (const auto &importInfo : importInfoList)
897892 {
898- ol.writeObjectLink (mod->getReference (),mod->getOutputFileBase (),QCString (),mod->displayName ());
899- }
900- else
901- {
902- ol.startBold ();
903- ol.docify (importInfo.importName );
904- ol.endBold ();
905- }
906- ol.endMemberItem (OutputGenerator::MemberItemType::Normal);
907- if (mod && !mod->briefDescription ().isEmpty () && Config_getBool (BRIEF_MEMBER_DESC))
908- {
909- ol.startMemberDescription (mod->getOutputFileBase ());
910- ol.generateDoc (briefFile (),briefLine (),mod,nullptr ,mod->briefDescription (),FALSE ,FALSE ,
911- QCString (),TRUE ,FALSE ,Config_getBool (MARKDOWN_SUPPORT));
912- ol.endMemberDescription ();
893+ ModuleDef *mod = ModuleManager::instance ().getPrimaryInterface (importInfo.importName );
894+ ol.startMemberDeclaration ();
895+ ol.startMemberItem (importInfo.importName ,OutputGenerator::MemberItemType::Normal);
896+ ol.docify (theTranslator->trModule (FALSE ,TRUE )+" " );
897+ ol.insertMemberAlign ();
898+ if (mod && mod->isLinkable ())
899+ {
900+ ol.writeObjectLink (mod->getReference (),mod->getOutputFileBase (),QCString (),mod->displayName ());
901+ }
902+ else
903+ {
904+ ol.startBold ();
905+ ol.docify (importInfo.importName );
906+ ol.endBold ();
907+ }
908+ ol.endMemberItem (OutputGenerator::MemberItemType::Normal);
909+ if (mod && !mod->briefDescription ().isEmpty () && Config_getBool (BRIEF_MEMBER_DESC))
910+ {
911+ ol.startMemberDescription (mod->getOutputFileBase ());
912+ ol.generateDoc (briefFile (),briefLine (),mod,nullptr ,mod->briefDescription (),FALSE ,FALSE ,
913+ QCString (),TRUE ,FALSE ,Config_getBool (MARKDOWN_SUPPORT));
914+ ol.endMemberDescription ();
915+ }
916+ ol.endMemberDeclaration (QCString (),QCString ());
913917 }
914- ol.endMemberDeclaration (QCString (),QCString ());
915918 }
916919 ol.endMemberList ();
917920 }
@@ -1246,7 +1249,7 @@ void ModuleManager::addImport(const QCString &moduleFile,int line,const QCString
12461249 else // import outside of a module
12471250 {
12481251 AUTO_TRACE_ADD (" outside module" );
1249- p->externalImports . emplace ( moduleFile.str (), ImportInfo (nullptr ,importName,line,partitionName) );
1252+ p->externalImports [ moduleFile.str ()]. emplace_back (nullptr ,importName,line,partitionName);
12501253 }
12511254}
12521255
@@ -1301,32 +1304,38 @@ void ModuleManager::addTagInfo(const QCString &fileName,const QCString &tagFile,
13011304void ModuleManager::resolvePartitionsRecursively (ModuleDef *intfMod, ModuleDef *mod)
13021305{
13031306 AUTO_TRACE ();
1304- for (auto &[partitionFileName,importInfo ] : mod->getImports ()) // foreach import
1307+ for (auto &[partitionFileName,importInfoList ] : mod->getImports ()) // foreach import
13051308 {
1306- AUTO_TRACE_ADD (" partitionFileName={} importName={} partitionName={}" ,
1307- partitionFileName,importInfo.importName ,importInfo.partitionName );
1308- if (importInfo.importName ==intfMod->name () && !importInfo.partitionName .isEmpty () &&
1309- importInfo.exported ) // that is an exported partition of this module
1309+ for (auto &importInfo : importInfoList)
13101310 {
1311- auto it = p->moduleNameMap .find (importInfo.importName .str ());
1312- if (it != p->moduleNameMap .end ())
1311+ AUTO_TRACE_ADD (" partitionFileName={} importName={} partitionName={}" ,
1312+ partitionFileName,importInfo.importName ,importInfo.partitionName );
1313+ if (importInfo.importName ==intfMod->name () && !importInfo.partitionName .isEmpty () &&
1314+ importInfo.exported ) // that is an exported partition of this module
13131315 {
1314- for (auto importedMod : it->second )
1316+ auto it = p->moduleNameMap .find (importInfo.importName .str ());
1317+ if (it != p->moduleNameMap .end ())
13151318 {
1316- if ( importedMod-> qualifiedName ()==importInfo. importName + " : " +importInfo. partitionName )
1319+ for ( auto importedMod : it-> second )
13171320 {
1318- AUTO_TRACE_ADD (" Interface module {} exports partition {}:{}" ,
1319- mod->name (),importedMod->name (),importedMod->partitionName ());
1320- toModuleDefImpl (intfMod)->addPartition (toModuleDefImpl (importedMod));
1321- toModuleDefImpl (importedMod)->setPrimaryInterface (intfMod);
1322- for (const auto &[partitionFileName_,partitionImportInfo] : importedMod->getImports ())
1321+ if (importedMod->qualifiedName ()==importInfo.importName +" :" +importInfo.partitionName )
13231322 {
1324- if (partitionImportInfo.exported && intfMod->name ()!=partitionImportInfo.importName )
1323+ AUTO_TRACE_ADD (" Interface module {} exports partition {}:{}" ,
1324+ mod->name (),importedMod->name (),importedMod->partitionName ());
1325+ toModuleDefImpl (intfMod)->addPartition (toModuleDefImpl (importedMod));
1326+ toModuleDefImpl (importedMod)->setPrimaryInterface (intfMod);
1327+ for (const auto &[partitionFileName_,partitionImportInfoList] : importedMod->getImports ())
13251328 {
1326- toModuleDefImpl (intfMod)->addExportedModule (partitionImportInfo.importName ,partitionImportInfo);
1329+ for (const auto &partitionImportInfo : partitionImportInfoList)
1330+ {
1331+ if (partitionImportInfo.exported && intfMod->name ()!=partitionImportInfo.importName )
1332+ {
1333+ toModuleDefImpl (intfMod)->addExportedModule (partitionImportInfo.importName ,partitionImportInfo);
1334+ }
1335+ }
13271336 }
1337+ resolvePartitionsRecursively (intfMod,importedMod);
13281338 }
1329- resolvePartitionsRecursively (intfMod,importedMod);
13301339 }
13311340 }
13321341 }
@@ -1345,11 +1354,14 @@ void ModuleManager::resolvePartitions()
13451354 }
13461355
13471356 // copy exported imports to m_exportedModules
1348- for (const auto &[fileName,importInfo ] : mod->getImports ())
1357+ for (const auto &[fileName,importInfoList ] : mod->getImports ())
13491358 {
1350- if (importInfo. exported && mod-> name ()!= importInfo. importName )
1359+ for ( const auto & importInfo : importInfoList )
13511360 {
1352- toModuleDefImpl (mod)->addExportedModule (importInfo.importName ,importInfo);
1361+ if (importInfo.exported && mod->name ()!=importInfo.importName )
1362+ {
1363+ toModuleDefImpl (mod)->addExportedModule (importInfo.importName ,importInfo);
1364+ }
13531365 }
13541366 }
13551367
@@ -1372,37 +1384,61 @@ void ModuleManager::resolveImports()
13721384 FileDef *fd = mod->getFileDef ();
13731385 if (fd)
13741386 {
1375- for (const auto &[fileName,importInfo ] : mod->getImports ())
1387+ for (const auto &[fileName,importInfoList ] : mod->getImports ())
13761388 {
1377- ModuleDef *importedModule = getPrimaryInterface (importInfo.importName );
1378- const FileDef *importedFd = importedModule ? importedModule->getFileDef () : nullptr ;
1379- AUTO_TRACE_ADD (" module: addIncludeDependency {}->{}:{} fd={}" ,
1380- mod->qualifiedName (), importInfo.qualifiedName (), importInfo.line , fd?fd->absFilePath ():" " );
1381- fd->addIncludeDependency (importedFd,importInfo.qualifiedName (),IncludeKind::ImportModule);
1389+ for (const auto &importInfo : importInfoList)
1390+ {
1391+ ModuleDef *importedModule = getPrimaryInterface (importInfo.importName );
1392+ const FileDef *importedFd = importedModule ? importedModule->getFileDef () : nullptr ;
1393+ AUTO_TRACE_ADD (" module: addIncludeDependency {}->{}:{} fd={}" ,
1394+ mod->qualifiedName (), importInfo.qualifiedName (), importInfo.line , fd?fd->absFilePath ():" " );
1395+ fd->addIncludeDependency (importedFd,importInfo.qualifiedName (),IncludeKind::ImportModule);
1396+ }
13821397 }
13831398 }
13841399 }
1385- for (const auto &[fileName,importInfo ] : p->externalImports )
1400+ for (const auto &[fileName,importInfoList ] : p->externalImports )
13861401 {
1387- bool ambig = false ;
1388- FileDef *fd = findFileDef (Doxygen::inputNameLinkedMap,QCString (fileName),ambig);
1389- if (fd)
1402+ for (const auto &importInfo : importInfoList)
13901403 {
1391- ModuleDef *mod = getPrimaryInterface (importInfo.importName );
1392- FileDef *importedFd = mod ? mod->getFileDef () : nullptr ;
1393- fd->addIncludeDependency (importedFd,importInfo.importName ,IncludeKind::ImportModule);
1404+ bool ambig = false ;
1405+ FileDef *fd = findFileDef (Doxygen::inputNameLinkedMap,QCString (fileName),ambig);
1406+ AUTO_TRACE_ADD (" externalImport name={} fd={}" ,fileName,(void *)fd);
1407+ if (fd)
1408+ {
1409+ ModuleDef *mod = getPrimaryInterface (importInfo.importName );
1410+ FileDef *importedFd = mod ? mod->getFileDef () : nullptr ;
1411+ fd->addIncludeDependency (importedFd,importInfo.importName ,IncludeKind::ImportModule);
1412+ if (importedFd)
1413+ {
1414+ importedFd->addIncludedByDependency (fd,stripFromPath (QCString (fileName)),IncludeKind::ImportModule);
1415+ }
1416+ }
1417+ else
1418+ {
1419+ fd->addIncludeDependency (nullptr ,importInfo.importName ,IncludeKind::ImportModule);
1420+ }
13941421 }
13951422 }
13961423 for (const auto &headerInfo : p->headers )
13971424 {
13981425 bool ambig = false ;
13991426 FileDef *fd = findFileDef (Doxygen::inputNameLinkedMap,headerInfo.fileName ,ambig);
1427+ AUTO_TRACE_ADD (" header name={} fd={}" ,headerInfo.fileName ,(void *)fd);
14001428 if (fd)
14011429 {
14021430 QCString resolvedHeader = determineAbsoluteIncludeName (headerInfo.fileName ,headerInfo.headerName );
14031431 FileDef *importFd = findFileDef (Doxygen::inputNameLinkedMap,resolvedHeader,ambig);
14041432 fd->addIncludeDependency (importFd, headerInfo.headerName ,
14051433 headerInfo.isSystem ? IncludeKind::ImportSystem : IncludeKind::ImportLocal);
1434+ if (importFd)
1435+ {
1436+ importFd->addIncludedByDependency (fd,headerInfo.fileName ,IncludeKind::ImportModule);
1437+ }
1438+ }
1439+ else
1440+ {
1441+ fd->addIncludeDependency (nullptr ,headerInfo.headerName ,IncludeKind::ImportModule);
14061442 }
14071443 }
14081444}
@@ -1468,7 +1504,7 @@ void ModuleManager::writeDocumentation(OutputList &ol)
14681504int ModuleManager::numDocumentedModules () const
14691505{
14701506 int count=0 ;
1471- for (auto &mod : p->moduleFileMap ) // foreach module
1507+ for (const auto &mod : p->moduleFileMap ) // foreach module
14721508 {
14731509 if (mod->isPrimaryInterface ()) count++;
14741510 }
@@ -1523,7 +1559,7 @@ ModuleDef *ModuleManager::getPrimaryInterface(const QCString &moduleName) const
15231559 auto it = p->moduleNameMap .find (moduleName.str ());
15241560 if (it != p->moduleNameMap .end ())
15251561 {
1526- for (auto &mod : it->second )
1562+ for (const auto &mod : it->second )
15271563 {
15281564 if (mod->isPrimaryInterface ())
15291565 {
@@ -1536,23 +1572,23 @@ ModuleDef *ModuleManager::getPrimaryInterface(const QCString &moduleName) const
15361572
15371573void ModuleManager::addListReferences ()
15381574{
1539- for (auto &mod : p->moduleFileMap ) // foreach module
1575+ for (const auto &mod : p->moduleFileMap ) // foreach module
15401576 {
15411577 if (mod->isPrimaryInterface ()) toModuleDefImpl (mod)->addListReferences ();
15421578 }
15431579}
15441580
15451581void ModuleManager::addMembersToMemberGroup ()
15461582{
1547- for (auto &mod : p->moduleFileMap ) // foreach module
1583+ for (const auto &mod : p->moduleFileMap ) // foreach module
15481584 {
15491585 if (mod->isPrimaryInterface ()) toModuleDefImpl (mod)->addMembersToMemberGroup ();
15501586 }
15511587}
15521588
15531589void ModuleManager::distributeMemberGroupDocumentation ()
15541590{
1555- for (auto &mod : p->moduleFileMap ) // foreach module
1591+ for (const auto &mod : p->moduleFileMap ) // foreach module
15561592 {
15571593 if (mod->isPrimaryInterface ()) toModuleDefImpl (mod)->distributeMemberGroupDocumentation ();
15581594 }
0 commit comments