From 926986081bf9b97d4a25b11846af55e51d9f9871 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Fri, 27 Dec 2019 15:29:30 +0100 Subject: issue #7319: Bug 790856 - Namespace member functions links are broken --- src/dotcallgraph.cpp | 16 ++++++++++------ src/memberdef.cpp | 8 ++++---- .../078__xml__namespace__members__in__file__scope_8h.xml | 4 ++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/dotcallgraph.cpp b/src/dotcallgraph.cpp index b024f09..5e13f8e 100644 --- a/src/dotcallgraph.cpp +++ b/src/dotcallgraph.cpp @@ -24,6 +24,14 @@ #define DOT_GRAPH_MAX_NODES Config_getInt(DOT_GRAPH_MAX_NODES) #define MAX_DOT_GRAPH_DEPTH Config_getInt(MAX_DOT_GRAPH_DEPTH) +static QCString getUniqueId(const MemberDef *md) +{ + QCString result = md->getReference()+"$"+ + md->getOutputFileBase()+"#"+ + md->anchor(); + return result; +} + void DotCallGraph::buildGraph(DotNode *n,const MemberDef *md,int distance) { MemberSDict *refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers(); @@ -36,9 +44,7 @@ void DotCallGraph::buildGraph(DotNode *n,const MemberDef *md,int distance) { if (rmd->showInCallGraph()) { - QCString uniqueId; - uniqueId=rmd->getReference()+"$"+ - rmd->getOutputFileBase()+"#"+rmd->anchor(); + QCString uniqueId = getUniqueId(rmd); DotNode *bn = m_usedNodes->find(uniqueId); if (bn) // file is already a node in the graph { @@ -131,9 +137,7 @@ DotCallGraph::DotCallGraph(const MemberDef *md,bool inverse) m_inverse = inverse; m_diskName = md->getOutputFileBase()+"_"+md->anchor(); m_scope = md->getOuterScope(); - QCString uniqueId; - uniqueId = md->getReference()+"$"+ - md->getOutputFileBase()+"#"+md->anchor(); + QCString uniqueId = getUniqueId(md); QCString name; if (HIDE_SCOPE_NAMES) { diff --git a/src/memberdef.cpp b/src/memberdef.cpp index e03d1df..3349501 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1763,7 +1763,7 @@ QCString MemberDefImpl::getOutputFileBase() const { baseName=groupDef->getOutputFileBase(); } - else if (classDef) + else if (classDef && classDef->isLinkable()) { baseName=classDef->getOutputFileBase(); if (inlineSimpleClasses && classDef->isSimple()) @@ -1771,7 +1771,7 @@ QCString MemberDefImpl::getOutputFileBase() const return baseName; } } - else if (nspace) + else if (nspace && (nspace->isLinkable() || nspace->isAnonymous())) { baseName=nspace->getOutputFileBase(); } @@ -3362,9 +3362,9 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml, else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); } ciname = (dynamic_cast(container))->groupTitle(); } - else if (container->definitionType()==TypeFile && getNamespaceDef() && lang != SrcLangExt_Python) + else if (container->definitionType()==TypeFile && getNamespaceDef() && getNamespaceDef()->isLinkable()) { // member is in a namespace, but is written as part of the file documentation - // as well, so we need to make sure its label is unique. + // as well, so we need to make sure its anchor is unique (it is not really used). memAnchor.prepend("file_"); } diff --git a/testing/078/078__xml__namespace__members__in__file__scope_8h.xml b/testing/078/078__xml__namespace__members__in__file__scope_8h.xml index 078c5ad..1198549 100644 --- a/testing/078/078__xml__namespace__members__in__file__scope_8h.xml +++ b/testing/078/078__xml__namespace__members__in__file__scope_8h.xml @@ -4,7 +4,7 @@ 078_xml_namespace_members_in_file_scope.h Namespace - + Enum @@ -18,7 +18,7 @@ - + void void Namespace::foo () -- cgit v0.12