@@ -227,6 +227,7 @@ class MemberDefImpl : public DefinitionMixin<MemberDefMutable>
227227 bool hasReferencedByRelation () const override ;
228228 bool hasEnumValues () const override ;
229229 bool hasInlineSource () const override ;
230+ QCString sourceRefName () const override ;
230231 const MemberDef *templateMaster () const override ;
231232 QCString getScopeString () const override ;
232233 ClassDef *getClassDefOfAnonymousType () const override ;
@@ -867,6 +868,8 @@ class MemberDefAliasImpl : public DefinitionAliasMixin<MemberDef>
867868 { return getMdAlias ()->hasReferencedByRelation (); }
868869 bool hasInlineSource () const override
869870 { return getMdAlias ()->hasInlineSource (); }
871+ QCString sourceRefName () const override
872+ { return getMdAlias ()->sourceRefName (); }
870873 bool hasEnumValues () const override
871874 { return getMdAlias ()->hasEnumValues (); }
872875 StringVector getQualifiers () const override
@@ -1623,6 +1626,26 @@ bool MemberDefImpl::hasExamples() const
16231626 return !m_examples.empty ();
16241627}
16251628
1629+ QCString MemberDefImpl::sourceRefName () const
1630+ {
1631+ QCString n = name ();
1632+ QCString s = getScopeString ();
1633+
1634+ if (!s.isEmpty ())
1635+ {
1636+ n.prepend (s+" ::" );
1637+ }
1638+ else if (isStatic () && getFileDef ())
1639+ {
1640+ n.prepend (getFileDef ()->name ()+" :" );
1641+ }
1642+ if (isCallable ())
1643+ {
1644+ n.append (argsString ());
1645+ }
1646+ return n;
1647+ }
1648+
16261649QCString MemberDefImpl::getOutputFileBase () const
16271650{
16281651 bool separateMemberPages = Config_getBool (SEPARATE_MEMBER_PAGES);
@@ -6327,39 +6350,46 @@ void addDocCrossReference(const MemberDef *s,const MemberDef *d)
63276350 MemberDefMutable *src = toMemberDefMutable (const_cast <MemberDef*>(s));
63286351 MemberDefMutable *dst = toMemberDefMutable (const_cast <MemberDef*>(d));
63296352 if (src==nullptr || dst==nullptr ) return ;
6330- std::lock_guard<std::mutex> lock (g_docCrossReferenceMutex);
63316353 // printf("--> addDocCrossReference src=%s,dst=%s\n",qPrint(src->name()),qPrint(dst->name()));
63326354 if (dst->isTypedef () || dst->isEnumerate ()) return ; // don't add types
63336355 if ((dst->hasReferencedByRelation () || dst->hasCallerGraph ()) &&
63346356 src->isCallable ()
63356357 )
63366358 {
6337- dst-> addSourceReferencedBy (src );
6359+ QCString sourceRefName = src-> sourceRefName ( );
63386360 MemberDefMutable *mdDef = toMemberDefMutable (dst->memberDefinition ());
6361+ MemberDefMutable *mdDecl = toMemberDefMutable (dst->memberDeclaration ());
6362+
6363+ // critical section
6364+ std::lock_guard<std::mutex> lock (g_docCrossReferenceMutex);
6365+ dst->addSourceReferencedBy (src,sourceRefName);
63396366 if (mdDef)
63406367 {
6341- mdDef->addSourceReferencedBy (src);
6368+ mdDef->addSourceReferencedBy (src,sourceRefName );
63426369 }
6343- MemberDefMutable *mdDecl = toMemberDefMutable (dst->memberDeclaration ());
63446370 if (mdDecl)
63456371 {
6346- mdDecl->addSourceReferencedBy (src);
6372+ mdDecl->addSourceReferencedBy (src,sourceRefName );
63476373 }
63486374 }
63496375 if ((src->hasReferencesRelation () || src->hasCallGraph ()) &&
63506376 src->isCallable ()
63516377 )
63526378 {
6353- src-> addSourceReferences (dst );
6379+ QCString sourceRefName = dst-> sourceRefName ( );
63546380 MemberDefMutable *mdDef = toMemberDefMutable (src->memberDefinition ());
6381+ MemberDefMutable *mdDecl = toMemberDefMutable (src->memberDeclaration ());
6382+
6383+ // critical section
6384+ std::lock_guard<std::mutex> lock (g_docCrossReferenceMutex);
6385+ src->addSourceReferences (dst,sourceRefName);
63556386 if (mdDef)
63566387 {
6357- mdDef->addSourceReferences (dst);
6388+ mdDef->addSourceReferences (dst,sourceRefName );
63586389 }
6359- MemberDefMutable *mdDecl = toMemberDefMutable (src->memberDeclaration ());
63606390 if (mdDecl)
63616391 {
6362- mdDecl->addSourceReferences (dst);
6392+ mdDecl->addSourceReferences (dst,sourceRefName );
63636393 }
63646394 }
63656395}
0 commit comments