Skip to content

Commit

Permalink
issue #7302: Determination of anonymous is too restrictive
Browse files Browse the repository at this point in the history
  • Loading branch information
doxygen committed Nov 5, 2019
1 parent cc4675a commit b32afdb
Show file tree
Hide file tree
Showing 17 changed files with 88 additions and 98 deletions.
27 changes: 6 additions & 21 deletions src/classdef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ class ClassDefImpl : public DefinitionImpl, public ClassDef
virtual MemberDef *isSmartPointer() const;
virtual bool isJavaEnum() const;
virtual bool isGeneric() const;
virtual bool isAnonymous() const;
virtual const ClassSDict *innerClasses() const;
virtual QCString title() const;
virtual QCString generatedFromFiles() const;
Expand Down Expand Up @@ -423,8 +422,6 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
{ return getCdAlias()->isJavaEnum(); }
virtual bool isGeneric() const
{ return getCdAlias()->isGeneric(); }
virtual bool isAnonymous() const
{ return getCdAlias()->isAnonymous(); }
virtual const ClassSDict *innerClasses() const
{ return getCdAlias()->innerClasses(); }
virtual QCString title() const
Expand Down Expand Up @@ -687,8 +684,6 @@ class ClassDefImpl::IMPL

bool isGeneric;

bool isAnonymous;

uint64 spec;

QCString metaData;
Expand Down Expand Up @@ -751,7 +746,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
isLocal=FALSE;
}
isGeneric = (lang==SrcLangExt_CSharp || lang==SrcLangExt_Java) && QCString(name).find('<')!=-1;
isAnonymous = QCString(name).find('@')!=-1;
}

ClassDefImpl::IMPL::IMPL() : vhdlSummaryTitles(17)
Expand Down Expand Up @@ -835,6 +829,10 @@ QCString ClassDefImpl::displayName(bool includeScope) const
n=className();
}
}
if (isAnonymous())
{
n = removeAnonymousScopes(n);
}
QCString sep=getLanguageSpecificSeparator(lang);
if (sep!="::")
{
Expand All @@ -849,14 +847,7 @@ QCString ClassDefImpl::displayName(bool includeScope) const
// n = n.left(n.length()-2);
//}
//printf("ClassDefImpl::displayName()=%s\n",n.data());
if (n.find('@')!=-1)
{
return removeAnonymousScopes(n);
}
else
{
return n;
}
return n;
}

// inserts a base/super class in the inheritance list
Expand Down Expand Up @@ -3077,7 +3068,7 @@ void ClassDefImpl::writeMemberList(OutputList &ol) const
//printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
// name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);

if (cd && !md->name().isEmpty() && md->name()[0]!='@')
if (cd && !md->name().isEmpty() && !md->isAnonymous())
{
bool memberWritten=FALSE;
if (cd->isLinkable() && md->isLinkable())
Expand Down Expand Up @@ -5299,7 +5290,6 @@ bool ClassDefImpl::isSliceLocal() const

void ClassDefImpl::setName(const char *name)
{
m_impl->isAnonymous = QCString(name).find('@')!=-1;
DefinitionImpl::setName(name);
}

Expand All @@ -5308,11 +5298,6 @@ void ClassDefImpl::setMetaData(const char *md)
m_impl->metaData = md;
}

bool ClassDefImpl::isAnonymous() const
{
return m_impl->isAnonymous;
}

QCString ClassDefImpl::collaborationGraphFileName() const
{
return m_impl->collabFileName;
Expand Down
1 change: 0 additions & 1 deletion src/classdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,6 @@ class ClassDef : virtual public Definition
virtual bool isJavaEnum() const = 0;

virtual bool isGeneric() const = 0;
virtual bool isAnonymous() const = 0;
virtual const ClassSDict *innerClasses() const = 0;
virtual QCString title() const = 0;

Expand Down
6 changes: 3 additions & 3 deletions src/classlist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const
ClassDef *cd=0;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
(filter==0 || *filter==cd->compoundType())
)
{
Expand Down Expand Up @@ -103,7 +103,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
//printf(" ClassSDict::writeDeclaration for %s\n",cd->name().data());
if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
!cd->isExtension() &&
(cd->protection()!=Private || extractPrivate) &&
(filter==0 || *filter==cd->compoundType())
Expand Down Expand Up @@ -137,7 +137,7 @@ void ClassSDict::writeDocumentation(OutputList &ol,const Definition * container)
// cd->name().data(),cd->getOuterScope(),cd->isLinkableInProject(),cd->isEmbeddedInOuterScope(),
// container,cd->partOfGroups() ? cd->partOfGroups()->count() : 0);

if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
!cd->isAlias() &&
Expand Down
15 changes: 7 additions & 8 deletions src/context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2353,7 +2353,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0
Expand Down Expand Up @@ -2941,7 +2941,7 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
Expand Down Expand Up @@ -3405,7 +3405,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
Expand Down Expand Up @@ -4450,8 +4450,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
}
TemplateVariant isAnonymous() const
{
QCString name = m_memberDef->name();
return !name.isEmpty() && name.at(0)=='@';
return m_memberDef->isAnonymous();
}
TemplateVariant anonymousType() const
{
Expand Down Expand Up @@ -5725,7 +5724,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
if (cd->name().find('@')==-1 &&
if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
Expand Down Expand Up @@ -6543,7 +6542,7 @@ class NestingContext::Private : public GenericNodeListContext
const NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
if (nd->localName().find('@')==-1 &&
if (!nd->isAnonymous() &&
(!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
{
bool hasChildren = namespaceHasVisibleChild(nd,addClasses,false,ClassDef::Class);
Expand Down Expand Up @@ -8799,7 +8798,7 @@ class AllMembersListContext::Private : public GenericNodeListContext
{
MemberDef *md=mi->memberDef;
const ClassDef *cd=md->getClassDef();
if (cd && !md->name().isEmpty() && md->name()[0]!='@')
if (cd && !md->isAnonymous())
{
if ((cd->isLinkable() && md->isLinkable()) ||
(!cd->isArtificial() && !hideUndocMembers &&
Expand Down
43 changes: 22 additions & 21 deletions src/definition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,21 @@
class DefinitionImpl::IMPL
{
public:
IMPL();
~IMPL();
void init(const char *df, const char *n);
void setDefFileName(const QCString &df);

SectionDict *sectionDict; // dictionary of all sections, not accessible
SectionDict *sectionDict = 0; // dictionary of all sections, not accessible

MemberSDict *sourceRefByDict;
MemberSDict *sourceRefsDict;
MemberSDict *sourceRefByDict = 0;
MemberSDict *sourceRefsDict = 0;
std::vector<ListItemInfo> xrefListItems;
GroupList *partOfGroups;
GroupList *partOfGroups = 0;

DocInfo *details; // not exported
DocInfo *inbodyDocs; // not exported
BriefInfo *brief; // not exported
BodyInfo *body; // not exported
DocInfo *details = 0; // not exported
DocInfo *inbodyDocs = 0; // not exported
BriefInfo *brief = 0; // not exported
BodyInfo *body = 0; // not exported
QCString briefSignatures;
QCString docSignatures;

Expand All @@ -75,16 +74,17 @@ class DefinitionImpl::IMPL
QCString qualifiedName;
QCString ref; // reference to external documentation

bool hidden;
bool isArtificial;
bool hidden = FALSE;
bool isArtificial = FALSE;
bool isAnonymous = FALSE;

Definition *outerScope; // not owner
Definition *outerScope = 0; // not owner

// where the item was defined
QCString defFileName;
QCString defFileExt;

SrcLangExt lang;
SrcLangExt lang = SrcLangExt_Unknown;

QCString id; // clang unique id

Expand All @@ -96,13 +96,6 @@ class DefinitionImpl::IMPL
Cookie *cookie;
};

DefinitionImpl::IMPL::IMPL()
: sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
partOfGroups(0),
details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
outerScope(0), lang(SrcLangExt_Unknown)
{
}

DefinitionImpl::IMPL::~IMPL()
{
Expand Down Expand Up @@ -304,7 +297,7 @@ DefinitionImpl::DefinitionImpl(const char *df,int dl,int dc,
const char *d,bool isSymbol)
{
m_impl = new DefinitionImpl::IMPL;
m_impl->name = name;
setName(name);
m_impl->defLine = dl;
m_impl->defColumn = dc;
m_impl->init(df,name);
Expand Down Expand Up @@ -406,6 +399,9 @@ void DefinitionImpl::setName(const char *name)
{
if (name==0) return;
m_impl->name = name;
m_impl->isAnonymous = m_impl->name.isEmpty() ||
m_impl->name.at(0)=='@' ||
m_impl->name.find("::@")!=-1;
}

void DefinitionImpl::setId(const char *id)
Expand Down Expand Up @@ -2203,6 +2199,11 @@ QCString DefinitionImpl::name() const
return m_impl->name;
}

bool DefinitionImpl::isAnonymous() const
{
return m_impl->isAnonymous;
}

int DefinitionImpl::getDefLine() const
{
return m_impl->defLine;
Expand Down
5 changes: 5 additions & 0 deletions src/definition.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,11 @@ class Definition : public DefinitionIntf
/*! Returns the name of the definition */
virtual QCString name() const = 0;

/*! Returns TRUE iff this definition has an artificially generated name
* (typically starting with a @) that is used for nameless definitions
*/
virtual bool isAnonymous() const = 0;

/*! Returns the name of the definition as it appears in the output */
virtual QCString displayName(bool includeScope=TRUE) const = 0;

Expand Down
3 changes: 3 additions & 0 deletions src/definitionimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class DefinitionImpl : virtual public Definition

virtual bool isAlias() const { return FALSE; }
virtual QCString name() const;
virtual bool isAnonymous() const;
virtual QCString localName() const;
virtual QCString qualifiedName() const;
virtual QCString symbolName() const;
Expand Down Expand Up @@ -142,6 +143,8 @@ class DefinitionAliasImpl : virtual public Definition
virtual bool isAlias() const { return TRUE; }
virtual QCString name() const
{ return m_def->name(); }
virtual bool isAnonymous() const
{ return m_def->isAnonymous(); }
virtual QCString localName() const
{ return m_def->localName(); }
virtual QCString qualifiedName() const
Expand Down
16 changes: 8 additions & 8 deletions src/doxygen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1604,7 +1604,7 @@ static void processTagLessClasses(ClassDef *rootCd,
if (type.find(icd->name())!=-1) // matching tag less struct/union
{
QCString name = md->name();
if (name.at(0)=='@') name = "__unnamed__";
if (md->isAnonymous()) name = "__unnamed__";
if (!prefix.isEmpty()) name.prepend(prefix+".");
//printf(" found %s for class %s\n",name.data(),cd->name().data());
ClassDef *ncd = createTagLessInstance(rootCd,icd,name);
Expand Down Expand Up @@ -2461,7 +2461,7 @@ static MemberDef *addVariableToFile(
QCString def;

// determine the definition of the global variable
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@' &&
if (nd && !nd->isAnonymous() &&
!Config_getBool(HIDE_SCOPE_NAMES)
)
// variable is inside a namespace, so put the scope before the name
Expand Down Expand Up @@ -2616,7 +2616,7 @@ static MemberDef *addVariableToFile(
addMemberToGroups(root,md);

md->setRefItems(root->sli);
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
if (nd && !nd->isAnonymous())
{
md->setNamespace(nd);
nd->insertMember(md);
Expand Down Expand Up @@ -7027,7 +7027,7 @@ static void findEnums(const Entry *root)
mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE;
}
else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
else if (nd) // found enum inside namespace
{
mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE;
Expand Down Expand Up @@ -7076,7 +7076,7 @@ static void findEnums(const Entry *root)
baseType.prepend(" : ");
}

if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
if (nd)
{
if (isRelated || Config_getBool(HIDE_SCOPE_NAMES))
{
Expand All @@ -7095,7 +7095,7 @@ static void findEnums(const Entry *root)
// even if we have already added the enum to a namespace, we still
// also want to add it to other appropriate places such as file
// or class.
if (isGlobal)
if (isGlobal && (nd==0 || !nd->isAnonymous()))
{
if (!defSet) md->setDefinition(name+baseType);
if (fd==0 && root->parent())
Expand Down Expand Up @@ -7204,7 +7204,7 @@ static void addEnumValuesToEnums(const Entry *root)
mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE;
}
else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
else if (nd && !nd->isAnonymous()) // found enum inside namespace
{
//printf("Enum in namespace '%s'::'%s'\n",nd->name().data(),name.data());
mnsd=Doxygen::functionNameSDict;
Expand Down Expand Up @@ -7312,7 +7312,7 @@ static void addEnumValuesToEnums(const Entry *root)
{
//printf("found enum value with same name %s in scope %s\n",
// fmd->name().data(),fmd->getOuterScope()->name().data());
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
if (nd && !nd->isAnonymous())
{
const NamespaceDef *fnd=fmd->getNamespaceDef();
if (fnd==nd) // enum value is inside a namespace
Expand Down
Loading

0 comments on commit b32afdb

Please sign in to comment.