Skip to content

Commit 9b262a4

Browse files
committed
issue doxygen#9266: doxygen runtime went from 10minutes to >14hours (lots of using namespace)
1 parent b78ef98 commit 9b262a4

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

src/filedef.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,6 +1406,7 @@ void FileDefImpl::addIncludedUsingDirectives(FileDefSet &visitedFiles)
14061406
for (auto it = unl.rbegin(); it!=unl.rend(); ++it)
14071407
{
14081408
const auto *nd = *it;
1409+
//printf(" adding using directive for %s\n",qPrint(nd->qualifiedName()));
14091410
m_usingDirList.prepend(nd->qualifiedName(),nd);
14101411
}
14111412
// add using declarations

src/namespacedef.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ NamespaceDefMutable *createNamespaceDef(const QCString &defFileName,int defLine,
165165
const QCString &refFile,const QCString &type,
166166
bool isPublished)
167167
{
168+
//printf("createNamespaceDef(%s)\n",qPrint(name));
168169
return new NamespaceDefImpl(defFileName,defLine,defColumn,name,ref,refFile,type,isPublished);
169170
}
170171

@@ -1167,7 +1168,7 @@ int NamespaceDefImpl::numDocMembers() const
11671168
void NamespaceDefImpl::addUsingDirective(const NamespaceDef *nd)
11681169
{
11691170
m_usingDirList.add(nd->qualifiedName(),nd);
1170-
//printf("%p: NamespaceDefImpl::addUsingDirective: %s:%d\n",this,qPrint(name()),m_usingDirList->count());
1171+
//printf("%s: NamespaceDefImpl::addUsingDirective: %s:%zu\n",qPrint(name()),qPrint(nd->qualifiedName()),m_usingDirList.size());
11711172
}
11721173

11731174
void NamespaceDefImpl::addUsingDeclaration(const ClassDef *cd)

src/symbolresolver.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ struct SymbolResolver::Private
149149
bool accessibleViaUsingNamespace(StringUnorderedSet &visited,
150150
const LinkedRefMap<const NamespaceDef> &nl,
151151
const Definition *item,
152-
const QCString &explicitScopePart="");
152+
const QCString &explicitScopePart="",
153+
int level=0);
153154
bool accessibleViaUsingClass(const LinkedRefMap<const ClassDef> &cl,
154155
const Definition *item,
155156
const QCString &explicitScopePart=""
@@ -835,35 +836,36 @@ const Definition *SymbolResolver::Private::endOfPathIsUsedClass(LinkedRefMap<con
835836
bool SymbolResolver::Private::accessibleViaUsingNamespace(StringUnorderedSet &visited,
836837
const LinkedRefMap<const NamespaceDef> &nl,
837838
const Definition *item,
838-
const QCString &explicitScopePart)
839+
const QCString &explicitScopePart,
840+
int level)
839841
{
842+
//size_t count=0;
840843
for (const auto &und : nl) // check used namespaces for the class
841844
{
842-
//printf("[Trying via used namespace %s: count=%d/%d\n",qPrint(und->name()),
843-
// count,nl->count());
845+
//printf("%d [Trying via used namespace %s: count=%zu/%zu\n",level,qPrint(und->name()),
846+
// count++,nl.size());
844847
const Definition *sc = explicitScopePart.isEmpty() ? und : followPath(und,explicitScopePart);
845848
if (sc && item->getOuterScope()==sc)
846849
{
847-
//printf("] found it\n");
850+
//printf("%d ] found it\n",level);
848851
return true;
849852
}
850853
if (item->getLanguage()==SrcLangExt_Cpp)
851854
{
852-
QCString key=und->name();
855+
QCString key=und->qualifiedName();
853856
if (!und->getUsedNamespaces().empty() && visited.find(key.str())==visited.end())
854857
{
855858
visited.insert(key.str());
856859

857-
if (accessibleViaUsingNamespace(visited,und->getUsedNamespaces(),item,explicitScopePart))
860+
if (accessibleViaUsingNamespace(visited,und->getUsedNamespaces(),item,explicitScopePart,level+1))
858861
{
859-
//printf("] found it via recursion\n");
862+
//printf("%d ] found it via recursion\n",level);
860863
return true;
861864
}
862865

863-
visited.erase(key.str());
864866
}
865867
}
866-
//printf("] Try via used namespace done\n");
868+
//printf("%d ] Try via used namespace done\n",level);
867869
}
868870
return false;
869871
}
@@ -952,7 +954,7 @@ int SymbolResolver::Private::isAccessibleFrom(AccessStack &accessStack,
952954
goto done;
953955
}
954956
StringUnorderedSet visited;
955-
if (accessibleViaUsingNamespace(visited,nscope->getUsedNamespaces(),item))
957+
if (accessibleViaUsingNamespace(visited,nscope->getUsedNamespaces(),item,0))
956958
{
957959
//printf("> found via used namespace\n");
958960
goto done;

0 commit comments

Comments
 (0)