Skip to content

Commit

Permalink
issue #7973: C++ grouped functions in namespace have disapeard
Browse files Browse the repository at this point in the history
- reverted some of the change that introduced the problem
- fixed the original problem (#7216) in a different way
  • Loading branch information
doxygen committed Aug 24, 2020
1 parent 61e31b9 commit 8578e6b
Show file tree
Hide file tree
Showing 11 changed files with 83 additions and 89 deletions.
2 changes: 1 addition & 1 deletion src/classdef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4416,7 +4416,7 @@ void ClassDefImpl::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
ml->append(md);

// for members in the declaration lists we set the section, needed for member grouping
if ((ml->listType()&MemberListType_detailedLists)==0) md->setSectionList(ml);
if ((ml->listType()&MemberListType_detailedLists)==0) md->setSectionList(this,ml);
}

void ClassDefImpl::sortMemberLists()
Expand Down
2 changes: 1 addition & 1 deletion src/code.l
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
// absPath = QDir::cleanDirPath(yyextra->sourceFileDef->getPath()+"/"+absPath);
//}

FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,yytext,ambig);
const FileDef *fd=findFileDef(Doxygen::inputNameLinkedMap,yytext,ambig);
//printf("looking for include %s -> %s fd=%p\n",yytext,absPath.data(),fd);
if (fd && fd->isLinkable())
{
Expand Down
2 changes: 1 addition & 1 deletion src/context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9238,7 +9238,7 @@ class InheritedMemberInfoListContext::Private : public GenericNodeListContext
MemberDef *md;
for (li.toFirst();(md=li.current());++li)
{
if (lt==md->getSectionList()->listType() &&
if (lt==md->getSectionList(mg->container())->listType() &&
!md->isReimplementedBy(inheritedFrom) &&
md->isBriefSectionVisible())
{
Expand Down
11 changes: 6 additions & 5 deletions src/doxygen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3680,17 +3680,18 @@ static void transferFunctionReferences()
{
MemberDef *mdef=0,*mdec=0;
/* find a matching function declaration and definition for this function */
for (const auto &md : *mn)
for (const auto &md_p : *mn)
{
MemberDef *md = md_p.get();
if (md->isPrototype())
mdec=md.get();
mdec=md;
else if (md->isVariable() && md->isExternal())
mdec=md.get();
mdec=md;

if (md->isFunction() && !md->isStatic() && !md->isPrototype())
mdef=md.get();
mdef=md;
else if (md->isVariable() && !md->isExternal() && !md->isStatic())
mdef=md.get();
mdef=md;

if (mdef && mdec) break;
}
Expand Down
8 changes: 1 addition & 7 deletions src/filedef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2050,17 +2050,11 @@ void FileDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) ||
((ml->listType()&MemberListType_documentationLists) && sortMemberDocs));
ml->append(md);
#if 0
if (ml->needsSorting())
ml->inSort(md);
else
ml->append(md);
#endif
if (lt&MemberListType_documentationLists)
{
ml->setInFile(TRUE);
}
if (ml->listType()&MemberListType_declarationLists) md->setSectionList(ml);
if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
}

void FileDefImpl::sortMemberLists()
Expand Down
20 changes: 10 additions & 10 deletions src/memberdef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual const QCString &initializer() const;
virtual int initializerLines() const;
virtual uint64 getMemberSpecifiers() const;
virtual const MemberList *getSectionList() const;
virtual const MemberList *getSectionList(const Definition *) const;
virtual QCString displayDefinition() const;
virtual const ClassDef *getClassDef() const;
virtual ClassDef *getClassDef();
Expand Down Expand Up @@ -251,7 +251,7 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual void setBitfields(const char *s);
virtual void setMaxInitLines(int lines);
virtual void setMemberClass(ClassDef *cd);
virtual void setSectionList(MemberList *sl);
virtual void setSectionList(const Definition *container,MemberList *sl);
virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
MemberDef *member=0);
Expand Down Expand Up @@ -418,8 +418,8 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
{ return getMdAlias()->initializerLines(); }
virtual uint64 getMemberSpecifiers() const
{ return getMdAlias()->getMemberSpecifiers(); }
virtual const MemberList *getSectionList() const
{ return getMdAlias()->getSectionList(); }
virtual const MemberList *getSectionList(const Definition *container) const
{ return getMdAlias()->getSectionList(container); }
virtual QCString displayDefinition() const
{ return getMdAlias()->displayDefinition(); }
virtual const ClassDef *getClassDef() const
Expand Down Expand Up @@ -763,7 +763,7 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
virtual void setBitfields(const char *s) {}
virtual void setMaxInitLines(int lines) {}
virtual void setMemberClass(ClassDef *cd) {}
virtual void setSectionList(MemberList *sl) {}
virtual void setSectionList(const Definition *c,MemberList *sl) {}
virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
MemberDef *member=0) {}
Expand Down Expand Up @@ -4449,18 +4449,18 @@ void MemberDefImpl::addListReference(Definition *)
getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
}

const MemberList *MemberDefImpl::getSectionList() const
const MemberList *MemberDefImpl::getSectionList(const Definition *container) const
{
const Definition *d= resolveAlias()->getOuterScope();
const Definition *d = container;
char key[20];
sprintf(key,"%p",(void*)d);
return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
}

void MemberDefImpl::setSectionList(MemberList *sl)
void MemberDefImpl::setSectionList(const Definition *container,MemberList *sl)
{
//printf("MemberDefImpl::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
const Definition *d= resolveAlias()->getOuterScope();
//printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",d->name().data(),sl,name().data());
const Definition *d= container;
char key[20];
sprintf(key,"%p",(void*)d);
if (m_impl->classSectionSDict==0)
Expand Down
4 changes: 2 additions & 2 deletions src/memberdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class MemberDef : virtual public Definition
virtual const QCString &initializer() const = 0;
virtual int initializerLines() const = 0;
virtual uint64 getMemberSpecifiers() const = 0;
virtual const MemberList *getSectionList() const = 0;
virtual const MemberList *getSectionList(const Definition *container) const = 0;
virtual QCString displayDefinition() const = 0;

// scope query members
Expand Down Expand Up @@ -297,7 +297,7 @@ class MemberDef : virtual public Definition
virtual void setBitfields(const char *s) = 0;
virtual void setMaxInitLines(int lines) = 0;
virtual void setMemberClass(ClassDef *cd) = 0;
virtual void setSectionList(MemberList *sl) = 0;
virtual void setSectionList(const Definition *container,MemberList *sl) = 0;
virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
MemberDef *member=0) = 0;
Expand Down
37 changes: 12 additions & 25 deletions src/membergroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,33 +29,14 @@
#include "entry.h"
#include "md5.h"

//static QCString idToName(int id)
//{
// QCString result;
// result.sprintf("mgroup_%d",id);
// return result;
//}

MemberGroup::MemberGroup()
{
}

MemberGroup::MemberGroup(int id,const char *hdr,const char *d,const char *docFile,int docLine)
MemberGroup::MemberGroup(const Definition *container,int id,const char *hdr,const char *d,const char *docFile,int docLine)
: m_container(container), grpId(id), grpHeader(hdr), doc(d), m_docFile(docFile), m_docLine(docLine)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);

//printf("New member group id=%d header=%s desc=%s\n",id,hdr,d);
memberList = new MemberList(MemberListType_memberGroup);
memberList->setNeedsSorting(sortBriefDocs); // detailed sections are already sorted elsewhere.
grpId = id;
grpHeader = hdr;
doc = d;
inSameSection = TRUE;
inDeclSection = 0;
m_numDecMembers = -1;
m_numDocMembers = -1;
m_docFile = docFile;
m_docLine = docLine;
//printf("Member group docs='%s'\n",doc.data());
}

Expand All @@ -74,13 +55,14 @@ void MemberGroup::insertMember(MemberDef *md)
// md,md->name().data());

MemberDef *firstMd = memberList->getFirst();
if (inSameSection && firstMd && firstMd->getSectionList()!=md->getSectionList())
if (inSameSection && firstMd &&
firstMd->getSectionList(m_container)!=md->getSectionList(m_container))
{
inSameSection=FALSE;
}
else if (inDeclSection==0)
{
inDeclSection = const_cast<MemberList*>(md->getSectionList());
inDeclSection = const_cast<MemberList*>(md->getSectionList(m_container));
//printf("inDeclSection=%p type=%d\n",inDeclSection,inDeclSection->listType());
}
memberList->append(md);
Expand Down Expand Up @@ -125,6 +107,7 @@ void MemberGroup::writePlainDeclarations(OutputList &ol,
void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName,
const Definition *container,bool showEnumValues,bool showInline) const
{
//printf("MemberGroup::writeDocumentation() %s\n",grpHeader.data());
memberList->writeDocumentation(ol,scopeName,container,0,showEnumValues,showInline);
}

Expand All @@ -149,7 +132,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,const ClassDef *cd,
for (li.toFirst();(md=li.current());++li)
{
//printf("matching %d == %d\n",lt,md->getSectionList()->listType());
const MemberList *ml = md->getSectionList();
const MemberList *ml = md->getSectionList(m_container);
if (ml && lt==ml->listType())
{
MemberList mml(lt);
Expand All @@ -169,7 +152,7 @@ int MemberGroup::countGroupedInheritedMembers(MemberListType lt)
for (li.toFirst();(md=li.current());++li)
{
//printf("matching %d == %d\n",lt,md->getSectionList()->listType());
const MemberList *ml = md->getSectionList();
const MemberList *ml = md->getSectionList(m_container);
if (ml && lt==ml->listType())
{
count++;
Expand Down Expand Up @@ -202,6 +185,10 @@ void MemberGroup::countDocMembers()
memberList->countDocMembers();
}

const Definition *MemberGroup::container() const
{
return m_container;
}

int MemberGroup::countInheritableMembers(const ClassDef *inheritedFrom) const
{
Expand Down
12 changes: 6 additions & 6 deletions src/membergroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ class RefItem;
class MemberGroup
{
public:
MemberGroup();
MemberGroup(int id,const char *header,
//MemberGroup();
MemberGroup(const Definition *container,int id,const char *header,
const char *docs,const char *docFile,int docLine);
~MemberGroup();
QCString header() const { return grpHeader; }
Expand Down Expand Up @@ -78,6 +78,7 @@ class MemberGroup
int numDecEnumValues() const;
int numDocMembers() const;
int numDocEnumValues() const;
const Definition *container() const;

int countInheritableMembers(const ClassDef *inheritedFrom) const;
void setInGroup(bool b);
Expand All @@ -90,17 +91,16 @@ class MemberGroup
int docLine() const { return m_docLine; }

private:
const Definition *m_container;
MemberList *memberList = 0; // list of all members in the group
MemberList *inDeclSection = 0;
int grpId = 0;
QCString grpHeader;
QCString fileName; // base name of the generated file
QCString doc;
bool inSameSection = 0;
int m_numDecMembers = 0;
int m_numDocMembers = 0;
bool inSameSection = true;
QCString m_docFile;
int m_docLine = 0;
int m_docLine;
RefItemVector m_xrefListItems;
};

Expand Down
2 changes: 1 addition & 1 deletion src/namespacedef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1483,7 +1483,7 @@ void NamespaceDefImpl::addMemberToList(MemberListType lt,MemberDef *md)

if (ml->listType()&MemberListType_declarationLists)
{
md->setSectionList(ml);
md->setSectionList(this,ml);
}
}

Expand Down
Loading

0 comments on commit 8578e6b

Please sign in to comment.