Skip to main content

The memberdef.h File Reference

Included Headers

#include <vector> #include <memory> #include <optional> #include <sys/types.h> #include "types.h" #include "definition.h" #include "arguments.h" #include "classdef.h"

Classes Index

classMemberDef

A model of a class/file/namespace member symbol. More...

classMemberDefMutable

Functions Index

MemberDef *toMemberDef (Definition *d)
MemberDef *toMemberDef (DefinitionMutable *d)
const MemberDef *toMemberDef (const Definition *d)
MemberDefMutable *toMemberDefMutable (Definition *d)
std::unique_ptr< MemberDef >createMemberDef (const QCString &defFileName, int defLine, int defColumn, const QCString &type, const QCString &name, const QCString &args, const QCString &excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList &tal, const ArgumentList &al, const QCString &metaData)

Factory method to create a new instance of a MemberDef. More...

std::unique_ptr< MemberDef >createMemberDefAlias (const Definition *newScope, const MemberDef *aliasMd)
voidcombineDeclarationAndDefinition (MemberDefMutable *mdec, MemberDefMutable *mdef)
voidaddDocCrossReference (const MemberDef *src, const MemberDef *dst)

Functions

addDocCrossReference()

void addDocCrossReference (const MemberDef * src, const MemberDef * dst)

Declaration at line 457 of file memberdef.h, definition at line 6399 of file memberdef.cpp.

6400{
6401 MemberDefMutable *src = toMemberDefMutable(const_cast<MemberDef*>(s));
6402 MemberDefMutable *dst = toMemberDefMutable(const_cast<MemberDef*>(d));
6403 if (src==nullptr || dst==nullptr) return;
6404 //printf("--> addDocCrossReference src=%s,dst=%s\n",qPrint(src->name()),qPrint(dst->name()));
6405 if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
6406 if ((dst->hasReferencedByRelation() || dst->hasCallerGraph()) &&
6407 src->isCallable()
6408 )
6409 {
6410 QCString sourceRefName = src->sourceRefName();
6413
6414 // ---- critical section
6415 std::lock_guard<std::mutex> lock(g_docCrossReferenceMutex);
6416 dst->addSourceReferencedBy(src,sourceRefName);
6417 if (mdDef)
6418 {
6419 mdDef->addSourceReferencedBy(src,sourceRefName);
6420 }
6421 if (mdDecl)
6422 {
6423 mdDecl->addSourceReferencedBy(src,sourceRefName);
6424 }
6425 // ---- end critical section
6426 }
6427 if ((src->hasReferencesRelation() || src->hasCallGraph()) &&
6428 src->isCallable()
6429 )
6430 {
6431 QCString sourceRefName = dst->sourceRefName();
6434
6435 // ---- critical section
6436 std::lock_guard<std::mutex> lock(g_docCrossReferenceMutex);
6437 src->addSourceReferences(dst,sourceRefName);
6438 if (mdDef)
6439 {
6440 mdDef->addSourceReferences(dst,sourceRefName);
6441 }
6442 if (mdDecl)
6443 {
6444 mdDecl->addSourceReferences(dst,sourceRefName);
6445 }
6446 // ---- end critical section
6447 }
6448}

References DefinitionMutable::addSourceReferencedBy, DefinitionMutable::addSourceReferences, g_docCrossReferenceMutex, MemberDef::hasCallerGraph, MemberDef::hasCallGraph, MemberDef::hasReferencedByRelation, MemberDef::hasReferencesRelation, MemberDef::isCallable, MemberDef::isEnumerate, MemberDef::isTypedef, MemberDef::memberDeclaration, MemberDef::memberDefinition, MemberDef::sourceRefName and toMemberDefMutable.

Referenced by findMemberLink, generateClassMemberLink, generateClassOrGlobalLink, generateClassOrGlobalLink, getLink, getLinkInScope, getLinkInScope, MemberDefMutable::setFromAnonymousScope and writeObjCMethodCall.

combineDeclarationAndDefinition()

void combineDeclarationAndDefinition (MemberDefMutable * mdec, MemberDefMutable * mdef)

Declaration at line 456 of file memberdef.h, definition at line 6165 of file memberdef.cpp.

6166{
6167 AUTO_TRACE("mdec='{}' mdef='{}' mdec.isPrototype={} mdef.isPrototype={}",
6168 mdec->name(), mdef->name(), mdec->isPrototype(), mdef->isPrototype());
6169 if (
6170 (mdef->isFunction() && !mdef->isStatic() && !mdef->isPrototype()) ||
6171 (mdef->isVariable() && !mdef->isExternal() && !mdef->isStatic())
6172 )
6173 {
6174 bool sameNumTemplateArgs = mdef->templateArguments().size()==mdec->templateArguments().size();
6175
6176 ArgumentList &mdefAl = const_cast<ArgumentList&>(mdef->argumentList());
6177 ArgumentList &mdecAl = const_cast<ArgumentList&>(mdec->argumentList());
6178 if (sameNumTemplateArgs &&
6179 matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),&mdefAl,
6180 mdec->getOuterScope(),mdec->getFileDef(),&mdecAl,
6181 TRUE,mdef->getLanguage()
6182 )
6183 ) /* match found */
6184 {
6185 AUTO_TRACE_ADD("combining definition and declaration");
6186
6187 if (Config_getBool(RESOLVE_UNNAMED_PARAMS))
6188 {
6189 mdec->resolveUnnamedParameters(mdef);
6190 }
6191
6192 // first merge argument documentation
6193 transferArgumentDocumentation(mdecAl,mdefAl);
6194
6195 /* copy documentation between function definition and declaration */
6196 if (!mdec->briefDescription().isEmpty())
6197 {
6198 mdef->setBriefDescription(mdec->briefDescription(),mdec->briefFile(),mdec->briefLine());
6199 }
6200 else if (!mdef->briefDescription().isEmpty())
6201 {
6202 mdec->setBriefDescription(mdef->briefDescription(),mdef->briefFile(),mdef->briefLine());
6203 }
6204 if (!mdef->documentation().isEmpty())
6205 {
6206 //printf("transferring docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString());
6207 mdec->setDocumentation(mdef->documentation(),mdef->docFile(),mdef->docLine());
6209 if (mdefAl.hasParameters())
6210 {
6211 auto mdefAlComb = stringToArgumentList(mdef->getLanguage(),mdef->argsString());
6212 transferArgumentDocumentation(mdefAl,*mdefAlComb);
6213 mdec->moveArgumentList(std::move(mdefAlComb));
6214 }
6215 }
6216 else if (!mdec->documentation().isEmpty())
6217 {
6218 //printf("transferring docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString());
6219 mdef->setDocumentation(mdec->documentation(),mdec->docFile(),mdec->docLine());
6221 if (mdecAl.hasParameters())
6222 {
6223 auto mdecAlComb = stringToArgumentList(mdec->getLanguage(),mdec->argsString());
6224 transferArgumentDocumentation(mdecAl,*mdecAlComb);
6225 mdef->moveDeclArgumentList(std::move(mdecAlComb));
6226 }
6227 }
6228 if (!mdef->inbodyDocumentation().isEmpty())
6229 {
6231 }
6232 else if (!mdec->inbodyDocumentation().isEmpty())
6233 {
6235 }
6236 if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1)
6237 {
6238 //printf("body mdec->mdef %d-%d\n",mdec->getStartBodyLine(),mdef->getEndBodyLine());
6239 mdef->setBodySegment(mdec->getDefLine(),mdec->getStartBodyLine(),mdec->getEndBodyLine());
6240 mdef->setBodyDef(mdec->getBodyDef());
6241 //mdef->setBodyMember(mdec);
6242 }
6243 else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1)
6244 {
6245 //printf("body mdef->mdec %d-%d\n",mdef->getStartBodyLine(),mdec->getEndBodyLine());
6246 mdec->setBodySegment(mdef->getDefLine(),mdef->getStartBodyLine(),mdef->getEndBodyLine());
6247 mdec->setBodyDef(mdef->getBodyDef());
6248 //mdec->setBodyMember(mdef);
6249 }
6252
6253 // copy group info.
6254 if (mdec->getGroupDef()==nullptr && mdef->getGroupDef()!=nullptr)
6255 {
6256 mdec->setGroupDef(mdef->getGroupDef(),
6257 mdef->getGroupPri(),
6258 mdef->docFile(),
6259 mdef->docLine(),
6260 mdef->hasDocumentation(),
6261 mdef
6262 );
6263 }
6264 else if (mdef->getGroupDef()==nullptr && mdec->getGroupDef()!=nullptr)
6265 {
6266 mdef->setGroupDef(mdec->getGroupDef(),
6267 mdec->getGroupPri(),
6268 mdec->docFile(),
6269 mdec->docLine(),
6270 mdec->hasDocumentation(),
6271 mdec
6272 );
6273 }
6274
6275
6276 mdec->mergeRefItems(mdef);
6277 mdef->mergeRefItems(mdec);
6278
6279 mdef->setMemberDeclaration(mdec);
6280 mdec->setMemberDefinition(mdef);
6281
6283
6284 mdef->addQualifiers(mdec->getQualifiers());
6285 mdec->addQualifiers(mdef->getQualifiers());
6286 }
6287 }
6288}

References MemberDefMutable::addQualifiers, MemberDef::argsString, MemberDef::argumentList, AUTO_TRACE, AUTO_TRACE_ADD, Definition::briefDescription, Definition::briefFile, Definition::briefLine, Config_getBool, Definition::docFile, Definition::docLine, Definition::documentation, Definition::getBodyDef, Definition::getDefLine, Definition::getEndBodyLine, MemberDef::getFileDef, MemberDef::getGroupDef, MemberDef::getGroupPri, Definition::getLanguage, MemberDef::getMemberSpecifiers, Definition::getOuterScope, MemberDef::getQualifiers, Definition::getStartBodyLine, Definition::hasDocumentation, ArgumentList::hasParameters, Definition::inbodyDocumentation, Definition::inbodyFile, Definition::inbodyLine, MemberDef::isDocsForDefinition, QCString::isEmpty, MemberDef::isExternal, MemberDef::isFunction, MemberDef::isPrototype, MemberDef::isStatic, MemberDef::isVariable, matchArguments2, mergeMemberOverrideOptions, MemberDefMutable::mergeMemberSpecifiers, DefinitionMutable::mergeRefItems, MemberDefMutable::moveArgumentList, MemberDefMutable::moveDeclArgumentList, Definition::name, MemberDefMutable::resolveUnnamedParameters, DefinitionMutable::setBodyDef, DefinitionMutable::setBodySegment, DefinitionMutable::setBriefDescription, MemberDefMutable::setDocsForDefinition, DefinitionMutable::setDocumentation, MemberDefMutable::setGroupDef, DefinitionMutable::setInbodyDocumentation, MemberDefMutable::setMemberDeclaration, MemberDefMutable::setMemberDefinition, ArgumentList::size, stringToArgumentList, MemberDef::templateArguments, transferArgumentDocumentation and TRUE.

Referenced by ClassDefImpl::mergeCategory, MemberDefMutable::setFromAnonymousScope and transferFunctionDocumentation.

createMemberDef()

std::unique_ptr< MemberDef > createMemberDef (const QCString & defFileName, int defLine, int defColumn, const QCString & type, const QCString & name, const QCString & args, const QCString & excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList & tal, const ArgumentList & al, const QCString & metaData)

Factory method to create a new instance of a MemberDef.

Declaration at line 448 of file memberdef.h, definition at line 516 of file memberdef.cpp.

516std::unique_ptr<MemberDef> createMemberDef(const QCString &defFileName,int defLine,int defColumn,
517 const QCString &type,const QCString &name,const QCString &args,
518 const QCString &excp,Protection prot,Specifier virt,bool stat,
519 Relationship related,MemberType t,const ArgumentList &tal,
520 const ArgumentList &al,const QCString &metaData)
521{
522 return std::make_unique<MemberDefImpl>(defFileName,defLine,defColumn,type,name,args,excp,prot,virt,
523 stat,related,t,tal,al,metaData);
524}

Referenced by addEnumValuesToEnums, addGlobalFunction, addInstance, addInterfaceOrServiceToServiceOrSingleton, addLocalObjCMethod, addMemberSpecialization, addMethodToClass, addOverloaded, addVariableToClass, addVariableToFile, buildDefineList, createTagLessInstance, MemberDefImpl::createTemplateInstanceMember, createUsingMemberImportForClass, findDefineDocumentation, findEnums, findMember, findUsingDeclImports and MemberDefMutable::setFromAnonymousScope.

createMemberDefAlias()

std::unique_ptr< MemberDef > createMemberDefAlias (const Definition * newScope, const MemberDef * aliasMd)

Declaration at line 454 of file memberdef.h, definition at line 966 of file memberdef.cpp.

966std::unique_ptr<MemberDef> createMemberDefAlias(const Definition *newScope,const MemberDef *aliasMd)
967{
968 auto amd = std::make_unique<MemberDefAliasImpl>(newScope,aliasMd);
969 //printf("amd: name=%s displayName=%s\n",qPrint(amd->name()),qPrint(amd->displayName()));
970 return amd;
971}

Referenced by MemberDefAliasImpl::deepCopy, findUsingDeclImports, NamespaceDefImpl::insertMember, insertMemberAlias and MemberDefMutable::setFromAnonymousScope.

toMemberDef()

toMemberDef()

MemberDef * toMemberDef (DefinitionMutable * d)

Declaration at line 440 of file memberdef.h, definition at line 6464 of file memberdef.cpp.

6465{
6466 Definition *d = toDefinition(md);
6467 if (d && typeid(*d)==typeid(MemberDefImpl))
6468 {
6469 return static_cast<MemberDef*>(d);
6470 }
6471 else
6472 {
6473 return nullptr;
6474 }
6475}

Reference toDefinition.

toMemberDef()

const MemberDef * toMemberDef (const Definition * d)

Declaration at line 441 of file memberdef.h, definition at line 6477 of file memberdef.cpp.

6478{
6479 if (d && (typeid(*d)==typeid(MemberDefImpl) || typeid(*d)==typeid(MemberDefAliasImpl)))
6480 {
6481 return static_cast<const MemberDef*>(d);
6482 }
6483 else
6484 {
6485 return nullptr;
6486 }
6487}

toMemberDefMutable()

MemberDefMutable * toMemberDefMutable (Definition * d)

Declaration at line 442 of file memberdef.h, definition at line 6489 of file memberdef.cpp.

6490{
6491 if (d && typeid(*d)==typeid(MemberDefImpl))
6492 {
6493 return static_cast<MemberDefMutable*>(d);
6494 }
6495 else
6496 {
6497 return nullptr;
6498 }
6499}

Referenced by addDocCrossReference, addEnumValuesToEnums, addGlobalFunction, addInstance, addInterfaceOrServiceToServiceOrSingleton, MemberList::addListReferences, addLocalObjCMethod, addMemberFunction, addMemberSpecialization, addMembersToMemberGroup, addMemberToGroups, ClassDefImpl::addMemberToList, FileDefImpl::addMemberToList, ModuleDefImpl::addMemberToList, NamespaceDefImpl::addMemberToList, ModuleDefImpl::addMemberToModule, ModuleManager::addMemberToModule, ClassDefImpl::addMemberToTemplateInstance, addMethodToClass, addOverloaded, addVariableToClass, addVariableToFile, buildDefineList, buildFunctionList, buildTypedefList, computeMemberRelationsForBaseClass, createTagLessInstance, MemberDefImpl::createTemplateInstanceMember, createUsingMemberImportForClass, ClassDefImpl::deepCopy, MemberGroup::distributeMemberGroupDocumentation, findDefineDocumentation, findDEV, findEnumDocumentation, findEnums, findFriends, findGlobalMember, findMember, MemberList::findSectionsInDocumentation, findUsingDeclImports, flushCachedTemplateRelations, flushUnresolvedRelations, generateClassMemberLink, generateClassOrGlobalLink, getLinkInScope, ClassDefImpl::hideDerivedVariablesInPython, incrementFlowKeyWordCount, incrementFlowKeyWordCount, inheritDocumentation, GroupDefImpl::insertMember, MemberGroup::insertMember, NamespaceDefImpl::insertMember, MemberDefImpl::insertReimplementedBy, ClassDefImpl::mergeCategory, SymbolResolver::Private::newResolveTypedef, processTagLessClasses, MemberList::setAnchors, MemberList::setAnonymousEnumType, MemberDefMutable::setFromAnonymousScope, ClassDefImpl::setGroupDefForAllMembers, transferFunctionDocumentation, transferFunctionReferences, transferRelatedFunctionDocumentation, transferStaticInstanceInitializers, tryAddEnumDocsToGroupMember, vhdlCorrectMemberProperties, MemberDefImpl::writeDeclaration, MemberList::writeDocumentation, MemberList::writeDocumentationPage, VhdlDocGen::writePlainVHDLDeclarations, MemberList::writeSimpleDocumentation, VhdlDocGen::writeSource and MemberList::writeTagFile.


Generated via doxygen2docusaurus by Doxygen 1.14.0.