Doxygen
Loading...
Searching...
No Matches
MemberDefImpl Class Reference
Inheritance diagram for MemberDefImpl:
Collaboration diagram for MemberDefImpl:

Public Member Functions

 MemberDefImpl (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)
 ~MemberDefImpl () override=default
DefType definitionType () const override
MemberDefresolveAlias () override
const MemberDefresolveAlias () const override
CodeSymbolType codeSymbolType () const override
std::unique_ptr< MemberDefdeepCopy () const override
void moveTo (Definition *) override
QCString getOutputFileBase () const override
QCString getReference () const override
QCString anchor () const override
QCString declaration () const override
QCString definition () const override
QCString typeString () const override
QCString argsString () const override
QCString excpString () const override
QCString bitfieldString () const override
QCString extraTypeChars () const override
const QCStringinitializer () const override
int initializerLines () const override
TypeSpecifier getMemberSpecifiers () const override
VhdlSpecifier getVhdlSpecifiers () const override
const MemberListgetSectionList (const Definition *) const override
QCString displayDefinition () const override
const ClassDefgetClassDef () const override
ClassDefgetClassDef () override
const FileDefgetFileDef () const override
FileDefgetFileDef () override
const NamespaceDefgetNamespaceDef () const override
NamespaceDefgetNamespaceDef () override
const GroupDefgetGroupDef () const override
GroupDefgetGroupDef () override
const ModuleDefgetModuleDef () const override
ClassDefaccessorClass () const override
QCString getReadAccessor () const override
QCString getWriteAccessor () const override
Grouping::GroupPri_t getGroupPri () const override
QCString getGroupFileName () const override
int getGroupStartLine () const override
bool getGroupHasDocs () const override
QCString qualifiedName () const override
QCString objCMethodName (bool localLink, bool showStatic) const override
Protection protection () const override
Specifier virtualness (int count=0) const override
MemberType memberType () const override
QCString memberTypeName () const override
bool isSignal () const override
bool isSlot () const override
bool isVariable () const override
bool isEnumerate () const override
bool isEnumValue () const override
bool isTypedef () const override
bool isSequence () const override
bool isDictionary () const override
bool isFunction () const override
bool isFunctionPtr () const override
bool isDefine () const override
bool isFriend () const override
bool isDCOP () const override
bool isProperty () const override
bool isEvent () const override
bool isRelated () const override
bool isForeign () const override
bool isStatic () const override
bool isInline () const override
bool isExplicit () const override
bool isMutable () const override
bool isThreadLocal () const override
bool isGettable () const override
bool isPrivateGettable () const override
bool isProtectedGettable () const override
bool isSettable () const override
bool isPrivateSettable () const override
bool isProtectedSettable () const override
bool isReadable () const override
bool isWritable () const override
bool isAddable () const override
bool isRemovable () const override
bool isRaisable () const override
bool isFinal () const override
bool isAbstract () const override
bool isOverride () const override
bool isInitonly () const override
bool isOptional () const override
bool isRequired () const override
bool isNonAtomic () const override
bool isCopy () const override
bool isAssign () const override
bool isRetain () const override
bool isWeak () const override
bool isStrong () const override
bool isEnumStruct () const override
bool isUnretained () const override
bool isNew () const override
bool isSealed () const override
bool isImplementation () const override
bool isExternal () const override
bool isTypeAlias () const override
bool isDefault () const override
bool isDelete () const override
bool isNoExcept () const override
bool isAttribute () const override
bool isUNOProperty () const override
bool isReadonly () const override
bool isBound () const override
bool isConstrained () const override
bool isTransient () const override
bool isMaybeVoid () const override
bool isMaybeDefault () const override
bool isMaybeAmbiguous () const override
bool isPublished () const override
bool isTemplateSpecialization () const override
bool isObjCMethod () const override
bool isObjCProperty () const override
bool isCSharpProperty () const override
bool isConstructor () const override
bool isDestructor () const override
bool hasOneLineInitializer () const override
bool hasMultiLineInitializer () const override
bool isCallable () const override
bool isStrongEnumValue () const override
bool livesInsideEnum () const override
bool isSliceLocal () const override
bool isNoDiscard () const override
bool isConstExpr () const override
bool isConstEval () const override
bool isConstInit () const override
int numberOfFlowKeyWords () const override
bool isFriendToHide () const override
bool isNotFriend () const override
bool isFunctionOrSignalSlot () const override
bool isRelatedOrFriend () const override
bool isLinkableInProject () const override
bool isLinkable () const override
bool hasDocumentation () const override
bool hasUserDocumentation () const override
bool isDeleted () const override
bool isBriefSectionVisible () const override
bool isDetailedSectionVisible (MemberListContainer container) const override
bool hasDetailedDescription () const override
bool isFriendClass () const override
bool isDocumentedFriendClass () const override
const MemberDefreimplements () const override
const MemberVectorreimplementedBy () const override
bool isReimplementedBy (const ClassDef *cd) const override
ClassDefrelatedAlso () const override
bool hasDocumentedEnumValues () const override
const MemberDefgetAnonymousEnumType () const override
bool isDocsForDefinition () const override
const MemberDefgetEnumScope () const override
const MemberVectorenumFieldList () const override
void setEnumBaseType (const QCString &type) override
QCString enumBaseType () const override
bool hasExamples () const override
const ExampleListgetExamples () const override
bool isPrototype () const override
const ArgumentListargumentList () const override
const ArgumentListdeclArgumentList () const override
const ArgumentListtemplateArguments () const override
const ArgumentListsdefinitionTemplateParameterLists () const override
std::optional< ArgumentListformalTemplateArguments () const override
int getMemberGroupId () const override
MemberGroupgetMemberGroup () const override
bool fromAnonymousScope () const override
MemberDeffromAnonymousMember () const override
bool hasCallGraph () const override
bool hasCallerGraph () const override
bool hasReferencesRelation () const override
bool hasReferencedByRelation () const override
bool hasEnumValues () const override
bool hasInlineSource () const override
QCString sourceRefName () const override
const MemberDeftemplateMaster () const override
QCString getScopeString () const override
ClassDefgetClassDefOfAnonymousType () const override
bool isTypedefValCached () const override
const ClassDefgetCachedTypedefVal () const override
QCString getCachedTypedefTemplSpec () const override
QCString getCachedResolvedTypedef () const override
MemberDefmemberDefinition () const override
MemberDefmemberDeclaration () const override
const MemberDefinheritsDocsFrom () const override
const MemberDefgetGroupAlias () const override
ClassDefcategory () const override
const MemberDefcategoryRelation () const override
QCString displayName (bool=TRUE) const override
QCString getDeclType () const override
StringVector getLabels (const Definition *container) const override
const ArgumentListtypeConstraints () const override
QCString requiresClause () const override
QCString documentation () const override
QCString briefDescription (bool abbr=FALSE) const override
QCString fieldType () const override
bool isReference () const override
QCString getDeclFileName () const override
int getDeclLine () const override
int getDeclColumn () const override
void setMemberType (MemberType t) override
void setDefinition (const QCString &d) override
void setFileDef (FileDef *fd) override
void setAnchor () override
void setProtection (Protection p) override
void setMemberSpecifiers (TypeSpecifier s) override
void setVhdlSpecifiers (VhdlSpecifier s) override
void mergeMemberSpecifiers (TypeSpecifier s) override
void setInitializer (const QCString &i) override
void setBitfields (const QCString &s) override
void setMaxInitLines (int lines) override
void setMemberClass (ClassDef *cd) override
void setSectionList (const Definition *container, const MemberList *sl) override
void setGroupDef (GroupDef *gd, Grouping::GroupPri_t pri, const QCString &fileName, int startLine, bool hasDocs, MemberDef *member=nullptr) override
void setReadAccessor (const QCString &r) override
void setWriteAccessor (const QCString &w) override
void setTemplateSpecialization (bool b) override
void makeRelated () override
void makeForeign () override
void setInheritsDocsFrom (const MemberDef *md) override
void setTagInfo (const TagInfo *i) override
void setArgsString (const QCString &as) override
void setReimplements (MemberDef *md) override
void insertReimplementedBy (MemberDef *md) override
void setRelatedAlso (ClassDef *cd) override
void insertEnumField (MemberDef *md) override
void setEnumScope (MemberDef *md, bool livesInsideEnum=FALSE) override
void setEnumClassScope (ClassDef *cd) override
void setDocumentedEnumValues (bool value) override
void setAnonymousEnumType (const MemberDef *md) override
bool addExample (const QCString &anchor, const QCString &name, const QCString &file) override
void setPrototype (bool p, const QCString &df, int line, int column) override
void setExplicitExternal (bool b, const QCString &df, int line, int column) override
void setDeclFile (const QCString &df, int line, int column) override
void moveArgumentList (std::unique_ptr< ArgumentList > al) override
void moveDeclArgumentList (std::unique_ptr< ArgumentList > al) override
void setDefinitionTemplateParameterLists (const ArgumentLists &lists) override
void setTypeConstraints (const ArgumentList &al) override
void setType (const QCString &t) override
void setAccessorType (ClassDef *cd, const QCString &t) override
void setNamespace (NamespaceDef *nd) override
void setMemberGroup (MemberGroup *grp) override
void setMemberGroupId (int id) override
void makeImplementationDetail () override
void setFromAnonymousScope (bool b) override
void setFromAnonymousMember (MemberDef *m) override
void overrideCallGraph (bool e) override
void overrideCallerGraph (bool e) override
void overrideReferencedByRelation (bool e) override
void overrideReferencesRelation (bool e) override
void overrideEnumValues (bool e) override
void overrideInlineSource (bool e) override
void setTemplateMaster (const MemberDef *mt) override
void setFormalTemplateArguments (const ArgumentList &al) override
void addListReference (Definition *d) override
void setDocsForDefinition (bool b) override
void setGroupAlias (const MemberDef *md) override
void cacheTypedefVal (const ClassDef *val, const QCString &templSpec, const QCString &resolvedType) override
void invalidateTypedefValCache () override
void invalidateCachedArgumentTypes () override
void setMemberDefinition (MemberDef *md) override
void setMemberDeclaration (MemberDef *md) override
void copyArgumentNames (const MemberDef *bmd) override
void setCategory (ClassDef *) override
void setCategoryRelation (const MemberDef *) override
void setDocumentation (const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE) override
void setBriefDescription (const QCString &b, const QCString &briefFile, int briefLine) override
void setInbodyDocumentation (const QCString &d, const QCString &inbodyFile, int inbodyLine) override
void setHidden (bool b) override
void setRequiresClause (const QCString &req) override
void incrementFlowKeyWordCount () override
void writeDeclaration (OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, bool inGroup, int indentLevel, const ClassDef *inheritFrom=nullptr, const QCString &inheritId=QCString()) const override
void writeDocumentation (const MemberList *ml, int memCount, int memTotal, OutputList &ol, const QCString &scopeName, const Definition *container, bool inGroup, bool showEnumValues=FALSE, bool showInline=FALSE) const override
void writeMemberDocSimple (OutputList &ol, const Definition *container) const override
void writeEnumDeclaration (OutputList &typeDecl, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod) const override
void writeTagFile (TextStream &, bool useQualifiedName, bool showNamespaceMembers) const override
void warnIfUndocumented () const override
void warnIfUndocumentedParams () const override
bool visibleInIndex () const override
void detectUndocumentedParams (bool hasParamCommand, bool hasReturnCommand) const override
std::unique_ptr< MemberDefcreateTemplateInstanceMember (const ArgumentList &formalArgs, const std::unique_ptr< ArgumentList > &actualArgs) const override
void findSectionsInDocumentation () override
void writeLink (OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, bool onlyText=FALSE) const override
void resolveUnnamedParameters (const MemberDef *md) override
void addQualifiers (const StringVector &qualifiers) override
StringVector getQualifiers () const override
ClassDefMutablegetClassDefMutable () override
void setModuleDef (ModuleDef *mod) override
int redefineCount () const override
void setRedefineCount (int) override
Public Member Functions inherited from DefinitionMixin< MemberDefMutable >
 DefinitionMixin (const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
DefinitionMixinoperator= (const DefinitionMixin &other)
 ~DefinitionMixin () override=default
bool isAlias () const override
const QCStringname () const override
bool isAnonymous () const override
const QCStringlocalName () const override
QCString symbolName () const override
QCString getSourceFileBase () const override
QCString getSourceAnchor () const override
int docLine () const override
QCString docFile () const override
QCString briefDescriptionAsTooltip () const override
int briefLine () const override
QCString inbodyDocumentation () const override
QCString inbodyFile () const override
int inbodyLine () const override
QCString briefFile () const override
QCString getDefFileName () const override
QCString getDefFileExtension () const override
int getDefLine () const override
int getDefColumn () const override
bool isVisibleInProject () const override
bool isVisible () const override
bool isHidden () const override
bool isArtificial () const override
bool isExported () const override
QCString externalReference (const QCString &relPath) const override
int getStartDefLine () const override
int getStartBodyLine () const override
int getEndBodyLine () const override
const FileDefgetBodyDef () const override
SrcLangExt getLanguage () const override
const GroupListpartOfGroups () const override
bool isLinkableViaGroup () const override
const RefItemVectorxrefListItems () const override
const DefinitionfindInnerCompound (const QCString &name) const override
DefinitiongetOuterScope () const override
const MemberVectorgetReferencesMembers () const override
const MemberVectorgetReferencedByMembers () const override
bool hasSections () const override
bool hasSources () const override
bool hasBriefDescription () const override
QCString id () const override
const SectionRefsgetSectionRefs () const override
void setName (const QCString &name) override
void setId (const QCString &name) override
void setDefFile (const QCString &df, int defLine, int defColumn) override
void setReference (const QCString &r) override
void addSectionsToDefinition (const std::vector< const SectionInfo * > &anchorList) override
void setBodySegment (int defLine, int bls, int ble) override
void setBodyDef (const FileDef *fd) override
void addSourceReferencedBy (MemberDef *md, const QCString &sourceRefName) override
void addSourceReferences (MemberDef *md, const QCString &sourceRefName) override
void setRefItems (const RefItemVector &sli) override
void mergeRefItems (Definition *def) override
void mergeReferences (const Definition *other) override
void mergeReferencedBy (const Definition *other) override
void addInnerCompound (Definition *def) override
void setOuterScope (Definition *def) override
void setArtificial (bool b) override
void setExported (bool b) override
void setLanguage (SrcLangExt lang) override
void writeSourceDef (OutputList &ol) const override
void writeInlineCode (OutputList &ol, const QCString &scopeName) const override
bool hasSourceRefs () const override
bool hasSourceReffedBy () const override
void writeSourceRefs (OutputList &ol, const QCString &scopeName) const override
void writeSourceReffedBy (OutputList &ol, const QCString &scopeName) const override
void makePartOfGroup (GroupDef *gd) override
void writeNavigationPath (OutputList &ol) const override
QCString navigationPathAsString () const override
void writeQuickMemberLinks (OutputList &ol, const MemberDef *md) const override
void writeSummaryLinks (OutputList &ol) const override
void writePageNavigation (OutputList &ol) const override
QCString pathFragment () const override
void writeDocAnchorsToTagFile (TextStream &fs) const override
void setLocalName (const QCString &name) override
void writeToc (OutputList &ol, const LocalToc &lt) const override
void computeTooltip () override
void _setSymbolName (const QCString &name) override
QCString _symbolName () const override

Private Member Functions

void _computeLinkableInProject ()
void _computeIsConstructor ()
void _computeIsDestructor ()
void _writeGroupInclude (OutputList &ol, bool inGroup) const
void _writeMultiLineInitializer (OutputList &ol, const QCString &scopeName) const
void _writeCallGraph (OutputList &ol) const
void _writeCallerGraph (OutputList &ol) const
void _writeReimplements (OutputList &ol) const
bool _isReimplements () const
void _writeReimplementedBy (OutputList &ol) const
size_t _countReimplementedBy () const
void _writeExamples (OutputList &ol) const
void _writeTypeConstraints (OutputList &ol) const
void _writeEnumValues (OutputList &ol, const Definition *container, const QCString &cfname, const QCString &ciname, const QCString &cname) const
void _writeCategoryRelation (OutputList &ol) const
void _writeTagData (const DefType) const
void _writeTemplatePrefix (OutputList &ol, const Definition *def, const ArgumentList &al, bool writeReqClause=true) const
bool _hasVisibleCallGraph () const
bool _hasVisibleCallerGraph () const
bool _isAnonymousBitField () const
void init (Definition *def, const QCString &t, const QCString &a, const QCString &e, Protection p, Specifier v, bool s, Relationship r, MemberType mt, const ArgumentList &tal, const ArgumentList &al, const QCString &meta)

Private Attributes

uint8_t m_isLinkableCached
uint8_t m_isConstructorCached
uint8_t m_isDestructorCached
ClassDefm_classDef = nullptr
FileDefm_fileDef = nullptr
NamespaceDefm_nspace = nullptr
ModuleDefm_moduleDef = nullptr
const MemberDefm_enumScope = nullptr
bool m_livesInsideEnum = false
const MemberDefm_annEnumType = nullptr
MemberVector m_enumFields
MemberDefm_redefines = nullptr
MemberVector m_redefinedBy
MemberDefm_memDef = nullptr
MemberDefm_memDec = nullptr
ClassDefm_relatedAlso = nullptr
ExampleList m_examples
QCString m_type
QCString m_accessorType
ClassDefm_accessorClass = nullptr
QCString m_args
QCString m_def
QCString m_anc
Specifier m_virt = Specifier::Normal
Protection m_prot = Protection::Public
QCString m_decl
QCString m_bitfields
QCString m_read
QCString m_write
QCString m_exception
QCString m_initializer
QCString m_extraTypeChars
QCString m_enumBaseType
QCString m_requiresClause
int m_initLines = 0
TypeSpecifier m_memSpec
VhdlSpecifier m_vhdlSpec
MemberType m_mtype = MemberType::Define
int m_maxInitLines = 0
int m_userInitLines = 0
MemberDefm_annMemb = nullptr
ArgumentList m_defArgList
ArgumentList m_declArgList
ArgumentList m_tArgList
ArgumentList m_typeConstraints
const MemberDefm_templateMaster = nullptr
std::optional< ArgumentListm_formalTemplateArguments
ArgumentLists m_defTmpArgLists
QCString m_metaData
ClassDefm_cachedAnonymousType = nullptr
std::map< const Definition *, const MemberList * > m_sectionMap
const MemberDefm_groupAlias = nullptr
int m_grpId = 0
MemberGroupm_memberGroup = nullptr
GroupDefm_group = nullptr
Grouping::GroupPri_t m_grouppri = Grouping::GROUPING_AUTO_DEF
QCString m_groupFileName
int m_groupStartLine = 0
MemberDefm_groupMember = nullptr
bool m_isTypedefValCached = false
const ClassDefm_cachedTypedefValue = nullptr
QCString m_cachedTypedefTemplSpec
QCString m_cachedResolvedType
const MemberDefm_docProvider = nullptr
QCString m_explicitOutputFileBase
StringVector m_qualifiers
bool m_implOnly = false
bool m_hasDocumentedParams = false
bool m_hasDocumentedReturnType = false
bool m_isDMember = false
Relationship m_related = Relationship::Member
bool m_stat = false
bool m_proto = false
bool m_docEnumValues = false
bool m_annScope = false
bool m_hasDetailedDescriptionCached = false
bool m_detailedDescriptionCachedValue = false
bool m_hasCallGraph = false
bool m_hasCallerGraph = false
bool m_hasReferencedByRelation = false
bool m_hasReferencesRelation = false
bool m_hasInlineSource = false
bool m_hasEnumValues = false
bool m_explExt = false
bool m_tspec = false
bool m_groupHasDocs = false
bool m_docsForDefinition = false
ClassDefm_category = nullptr
const MemberDefm_categoryRelation = nullptr
QCString m_declFileName
int m_declLine = -1
int m_declColumn = -1
int m_numberOfFlowKW = 0
int m_redefineCount = 0

Additional Inherited Members

Public Types inherited from Definition
enum  DefType {
  TypeClass = 0 , TypeFile = 1 , TypeNamespace = 2 , TypeModule = 3 ,
  TypeMember = 4 , TypeGroup = 5 , TypePackage = 6 , TypePage = 7 ,
  TypeDir = 8 , TypeConcept = 9
}

Detailed Description

Definition at line 53 of file memberdef.cpp.

Constructor & Destructor Documentation

◆ MemberDefImpl()

MemberDefImpl::MemberDefImpl ( const QCString & df,
int dl,
int dc,
const QCString & t,
const QCString & na,
const QCString & a,
const QCString & e,
Protection p,
Specifier v,
bool s,
Relationship r,
MemberType mt,
const ArgumentList & tal,
const ArgumentList & al,
const QCString & meta )

Creates a new member definition.

Parameters
dfFile containing the definition of this member.
dlLine at which the member definition was found.
dcColumn at which the member definition was found.
tA string representing the type of the member.
naA string representing the name of the member.
aA string representing the arguments of the member.
eA string representing the throw clause of the members.
pThe protection context of the member, possible values are: Public, Protected, Private.
vThe degree of 'virtualness' of the member, possible values are: Normal, Virtual, Pure.
sA boolean that is true iff the member is static.
rThe relationship between the class and the member.
mtThe kind of member. See MemberType for a list of all types.
talThe template arguments of this member.
alThe arguments of this member. This is a structured form of the string past as argument a.
metaSlice metadata.

Definition at line 1436 of file memberdef.cpp.

1441{
1442 //printf("MemberDefImpl::MemberDef(%s)\n",qPrint(na));
1443 init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
1447}
DefinitionMixin(const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
void init(Definition *def, const QCString &t, const QCString &a, const QCString &e, Protection p, Specifier v, bool s, Relationship r, MemberType mt, const ArgumentList &tal, const ArgumentList &al, const QCString &meta)
uint8_t m_isConstructorCached
uint8_t m_isDestructorCached
uint8_t m_isLinkableCached
QCString removeRedundantWhiteSpace(const QCString &s)
Definition util.cpp:568

References DefinitionMixin< MemberDefMutable >::DefinitionMixin(), init(), m_isConstructorCached, m_isDestructorCached, m_isLinkableCached, and removeRedundantWhiteSpace().

Referenced by deepCopy(), isConstructor(), isDestructor(), isLinkableInProject(), and ~MemberDefImpl().

◆ ~MemberDefImpl()

MemberDefImpl::~MemberDefImpl ( )
overridedefault

References MemberDefImpl().

Member Function Documentation

◆ _computeIsConstructor()

void MemberDefImpl::_computeIsConstructor ( )
private

Definition at line 4710 of file memberdef.cpp.

4711{
4712 m_isConstructorCached=1; // FALSE
4713 if (getClassDef())
4714 {
4715 if (m_isDMember) // for D
4716 {
4717 m_isConstructorCached = name()=="this" ? 2 : 1;
4718 return;
4719 }
4720 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4721 {
4722 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4723 return;
4724 }
4725 else if (name()=="__init__" &&
4726 getLanguage()==SrcLangExt::Python) // for Python
4727 {
4728 m_isConstructorCached = 2; // TRUE
4729 return;
4730 }
4731 else // for other languages
4732 {
4733 QCString locName = getClassDef()->localName();
4734 int i=locName.find('<');
4735 if (i==-1) // not a template class
4736 {
4737 m_isConstructorCached = name()==locName ? 2 : 1;
4738 }
4739 else
4740 {
4741 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4742 }
4743 return;
4744 }
4745 }
4746}
virtual const QCString & localName() const =0
const QCString & name() const override
SrcLangExt getLanguage() const override
const ClassDef * getClassDef() const override
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
QCString left(size_t len) const
Definition qcstring.h:229

References QCString::find(), getClassDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), QCString::left(), Definition::localName(), m_isConstructorCached, m_isDMember, and DefinitionMixin< MemberDefMutable >::name().

Referenced by isConstructor().

◆ _computeIsDestructor()

void MemberDefImpl::_computeIsDestructor ( )
private

Definition at line 4760 of file memberdef.cpp.

4761{
4762 bool isDestructor = false;
4763 if (m_isDMember) // for D
4764 {
4765 isDestructor = name()=="~this";
4766 }
4767 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4768 {
4769 isDestructor = name()=="__destruct";
4770 }
4771 else if (name()=="__del__" &&
4772 getLanguage()==SrcLangExt::Python) // for Python
4773 {
4774 isDestructor = true;
4775 }
4776 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4777 {
4778 isDestructor = typeString()=="final";
4779 }
4780 else // other languages
4781 {
4782 isDestructor =
4783 (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
4784 && name().find("operator")==-1;
4785 }
4787}
bool isDestructor() const override
QCString typeString() const override

References QCString::find(), DefinitionMixin< MemberDefMutable >::getLanguage(), isDestructor(), m_isDestructorCached, m_isDMember, DefinitionMixin< MemberDefMutable >::name(), and typeString().

Referenced by isDestructor().

◆ _computeLinkableInProject()

void MemberDefImpl::_computeLinkableInProject ( )
private

Definition at line 1789 of file memberdef.cpp.

1790{
1791 AUTO_TRACE("name={}",qualifiedName());
1792 bool extractStatic = Config_getBool(EXTRACT_STATIC);
1793 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
1794 m_isLinkableCached = 2; // linkable
1795 //printf("MemberDefImpl::isLinkableInProject(name=%s)\n",qPrint(name()));
1796 if (isHidden())
1797 {
1798 AUTO_TRACE_ADD("is hidden");
1800 return;
1801 }
1802 if (templateMaster())
1803 {
1804 AUTO_TRACE_ADD("has master template");
1806 return;
1807 }
1808 if (isAnonymous())
1809 {
1810 AUTO_TRACE_ADD("name invalid");
1811 m_isLinkableCached = 1; // not a valid or a dummy name
1812 return;
1813 }
1814 if (!hasDocumentation() || isReference())
1815 {
1816 AUTO_TRACE_ADD("no docs or reference");
1817 m_isLinkableCached = 1; // no documentation
1818 return;
1819 }
1820 const GroupDef *groupDef = getGroupDef();
1821 const ClassDef *classDef = getClassDef();
1822 if (groupDef && !groupDef->isLinkableInProject())
1823 {
1824 AUTO_TRACE_ADD("in not linkable group");
1825 m_isLinkableCached = 1; // group but group not linkable
1826 return;
1827 }
1828 if (!groupDef && classDef && !classDef->isLinkableInProject())
1829 {
1830 AUTO_TRACE_ADD("in not linkable class");
1831 m_isLinkableCached = 1; // in class but class not linkable
1832 return;
1833 }
1834 const NamespaceDef *nspace = getNamespaceDef();
1835 const FileDef *fileDef = getFileDef();
1836 if (!groupDef && nspace /*&& m_related==Relationship::Member*/ && !nspace->isLinkableInProject()
1837 && (fileDef==nullptr || !fileDef->isLinkableInProject()))
1838 {
1839 AUTO_TRACE_ADD("in not linkable namespace");
1840 m_isLinkableCached = 1; // in namespace but namespace not linkable
1841 return;
1842 }
1843 if (!groupDef && !nspace &&
1844 /*m_related==Relationship::Member &&*/ !classDef &&
1845 fileDef && !fileDef->isLinkableInProject())
1846 {
1847 AUTO_TRACE_ADD("in not linkable file");
1848 m_isLinkableCached = 1; // in file (and not in namespace) but file not linkable
1849 return;
1850 }
1852 !(m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual))
1853 {
1854 AUTO_TRACE_ADD("private and invisible");
1855 m_isLinkableCached = 1; // hidden due to protection
1856 return;
1857 }
1858 if (m_stat && classDef==nullptr && !extractStatic)
1859 {
1860 AUTO_TRACE_ADD("static and invisible");
1861 m_isLinkableCached = 1; // hidden due to staticness
1862 return;
1863 }
1864 AUTO_TRACE_ADD("linkable");
1865 return; // linkable!
1866}
virtual bool isLinkableInProject() const =0
MemberType m_mtype
const NamespaceDef * getNamespaceDef() const override
QCString qualifiedName() const override
Specifier m_virt
bool isReference() const override
Protection m_prot
const GroupDef * getGroupDef() const override
const MemberDef * templateMaster() const override
bool isFinal() const override
bool hasDocumentation() const override
const FileDef * getFileDef() const override
bool isOverride() const override
#define Config_getBool(name)
Definition config.h:33
#define AUTO_TRACE_ADD(...)
Definition docnode.cpp:47
#define AUTO_TRACE(...)
Definition docnode.cpp:46
bool protectionLevelVisible(Protection prot)
Definition util.cpp:5889

References AUTO_TRACE, AUTO_TRACE_ADD, Config_getBool, Friend, getClassDef(), getFileDef(), getGroupDef(), getNamespaceDef(), hasDocumentation(), DefinitionMixin< MemberDefMutable >::isAnonymous(), isFinal(), DefinitionMixin< MemberDefMutable >::isHidden(), Definition::isLinkableInProject(), isOverride(), isReference(), m_isLinkableCached, m_mtype, m_prot, m_stat, m_virt, protectionLevelVisible(), qualifiedName(), and templateMaster().

Referenced by isLinkableInProject().

◆ _countReimplementedBy()

size_t MemberDefImpl::_countReimplementedBy ( ) const
private

Definition at line 3056 of file memberdef.cpp.

3057{
3058 const MemberVector &bml=reimplementedBy();
3059 size_t count=0;
3060 for (const auto &bmd : bml)
3061 {
3062 const ClassDef *bcd=bmd->getClassDef();
3063 // count the members that directly inherit from md and for
3064 // which the member and class are visible in the docs.
3065 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
3066 {
3067 count++;
3068 }
3069 }
3070 return count;
3071}
virtual bool isLinkable() const =0
const MemberVector & reimplementedBy() const override

References Definition::isLinkable(), and reimplementedBy().

Referenced by _writeReimplementedBy(), and hasDetailedDescription().

◆ _hasVisibleCallerGraph()

bool MemberDefImpl::_hasVisibleCallerGraph ( ) const
private

Definition at line 5737 of file memberdef.cpp.

5738{
5739 bool enabled = m_hasCallerGraph &&
5740 (isFunction() || isSlot() || isSignal()) &&
5741 Config_getBool(HAVE_DOT);
5742 if (enabled)
5743 {
5744 bool trivial = DotCallGraph::isTrivial(this,TRUE);
5745 return !trivial;
5746 }
5747 return FALSE;
5748}
bool isTrivial() const
bool isFunction() const override
bool m_hasCallerGraph
bool isSlot() const override
bool isSignal() const override
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References Config_getBool, FALSE, isFunction(), isSignal(), isSlot(), DotCallGraph::isTrivial(), m_hasCallerGraph, and TRUE.

Referenced by _writeCallerGraph(), and hasDetailedDescription().

◆ _hasVisibleCallGraph()

bool MemberDefImpl::_hasVisibleCallGraph ( ) const
private

Definition at line 5719 of file memberdef.cpp.

5720{
5721 bool enabled = m_hasCallGraph &&
5722 (isFunction() || isSlot() || isSignal()) &&
5723 Config_getBool(HAVE_DOT);
5724 if (enabled)
5725 {
5726 bool trivial = DotCallGraph::isTrivial(this,FALSE);
5727 return !trivial;
5728 }
5729 return FALSE;
5730}

References Config_getBool, FALSE, isFunction(), isSignal(), isSlot(), DotCallGraph::isTrivial(), and m_hasCallGraph.

Referenced by _writeCallGraph(), and hasDetailedDescription().

◆ _isAnonymousBitField()

bool MemberDefImpl::_isAnonymousBitField ( ) const
private

Definition at line 2215 of file memberdef.cpp.

2216{
2217 return !m_bitfields.isEmpty() && name().startsWith("__pad"); // anonymous bitfield
2218}
QCString m_bitfields
bool startsWith(const char *s) const
Definition qcstring.h:507

References m_bitfields, DefinitionMixin< MemberDefMutable >::name(), and QCString::startsWith().

Referenced by warnIfUndocumented(), and writeDeclaration().

◆ _isReimplements()

bool MemberDefImpl::_isReimplements ( ) const
private

Definition at line 2983 of file memberdef.cpp.

2984{
2985 const MemberDef *bmd=reimplements();
2986 const ClassDef *bcd=nullptr;
2987 if (bmd && (bcd=bmd->getClassDef()))
2988 {
2989 // write class that contains a member that is reimplemented by this one
2990 if (bcd->isLinkable())
2991 {
2992 return true;
2993 }
2994 }
2995 return false;
2996}
virtual const ClassDef * getClassDef() const =0
const MemberDef * reimplements() const override

References MemberDef::getClassDef(), Definition::isLinkable(), and reimplements().

Referenced by hasDetailedDescription().

◆ _writeCallerGraph()

void MemberDefImpl::_writeCallerGraph ( OutputList & ol) const
private

Definition at line 2961 of file memberdef.cpp.

2962{
2964 {
2965 DotCallGraph callerGraph(this, TRUE);
2966 if (callerGraph.isTooBig())
2967 {
2968 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2969 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2970 }
2971 else if (!callerGraph.isTrivial())
2972 {
2973 msg("Generating caller graph for function {}\n",qualifiedName());
2975 ol.startCallGraph();
2977 ol.endCallGraph(callerGraph);
2978 ol.enableAll();
2979 }
2980 }
2981}
bool _hasVisibleCallerGraph() const
void disable(OutputType o)
void startCallGraph()
Definition outputlist.h:656
void endCallGraph(DotCallGraph &g)
Definition outputlist.h:658
void enableAll()
void parseText(const QCString &textStr)
virtual QCString trCallerGraph()=0
#define Config_getInt(name)
Definition config.h:34
Translator * theTranslator
Definition language.cpp:71
#define warn_uncond(fmt,...)
Definition message.h:122
#define msg(fmt,...)
Definition message.h:94

References _hasVisibleCallerGraph(), Config_getInt, OutputList::disable(), OutputList::enableAll(), OutputList::endCallGraph(), DotCallGraph::isTooBig(), DotCallGraph::isTrivial(), Man, msg, DotCallGraph::numNodes(), OutputList::parseText(), qualifiedName(), OutputList::startCallGraph(), theTranslator, TRUE, and warn_uncond.

Referenced by writeDocumentation().

◆ _writeCallGraph()

void MemberDefImpl::_writeCallGraph ( OutputList & ol) const
private

Definition at line 2938 of file memberdef.cpp.

2939{
2940 // write call graph
2942 {
2943 DotCallGraph callGraph(this,FALSE);
2944 if (callGraph.isTooBig())
2945 {
2946 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2947 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2948 }
2949 else if (!callGraph.isTrivial())
2950 {
2951 msg("Generating call graph for function {}\n",qualifiedName());
2953 ol.startCallGraph();
2955 ol.endCallGraph(callGraph);
2956 ol.enableAll();
2957 }
2958 }
2959}
bool _hasVisibleCallGraph() const
virtual QCString trCallGraph()=0

References _hasVisibleCallGraph(), Config_getInt, OutputList::disable(), OutputList::enableAll(), OutputList::endCallGraph(), FALSE, DotCallGraph::isTooBig(), DotCallGraph::isTrivial(), Man, msg, DotCallGraph::numNodes(), OutputList::parseText(), qualifiedName(), OutputList::startCallGraph(), theTranslator, and warn_uncond.

Referenced by writeDocumentation().

◆ _writeCategoryRelation()

void MemberDefImpl::_writeCategoryRelation ( OutputList & ol) const
private

Definition at line 3132 of file memberdef.cpp.

3133{
3134 if (getClassDef()) // this should be a member of a class/category
3135 {
3136 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3137 // qPrint(name()),
3138 // m_category ? qPrint(m_category->name()) : "<none>",
3139 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3140 // qPrint(m_classDef->name()),
3141 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3142 // );
3143 QCString text;
3144 QCString ref;
3145 QCString file;
3146 QCString anc;
3147 QCString name;
3148 int i=-1;
3149 if (m_categoryRelation && m_categoryRelation->isLinkable())
3150 {
3151 if (m_category)
3152 {
3153 // this member is in a normal class and implements method categoryRelation from category
3154 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3156 name = m_category->displayName();
3157 }
3158 else if (getClassDef()->categoryOf())
3159 {
3160 // this member is part of a category so link to the corresponding class member of the class we extend
3161 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3162 text = theTranslator->trExtendsClass();
3164 }
3165 i=text.find("@0");
3166 if (i!=-1)
3167 {
3168 const MemberDef *md = m_categoryRelation;
3169 ref = md->getReference();
3170 file = md->getOutputFileBase();
3171 anc = md->anchor();
3172 }
3173 }
3174 if (i!=-1 && !name.isEmpty())
3175 {
3176 ol.startParagraph();
3177 ol.parseText(text.left(i));
3178 ol.writeObjectLink(ref,file,anc,name);
3179 ol.parseText(text.mid(i+2));
3180 ol.endParagraph();
3181 }
3182 }
3183}
virtual ClassDef * categoryOf() const =0
Returns the class of which this is a category (Objective-C only).
virtual QCString anchor() const =0
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString getOutputFileBase() const =0
virtual const QCString & name() const =0
const MemberDef * m_categoryRelation
ClassDef * m_category
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:407
void endParagraph()
Definition outputlist.h:409
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
virtual QCString trProvidedByCategory()=0
virtual QCString trExtendsClass()=0

References Definition::anchor(), ClassDef::categoryOf(), Definition::displayName(), OutputList::endParagraph(), QCString::find(), getClassDef(), Definition::getOutputFileBase(), Definition::getReference(), QCString::left(), m_category, m_categoryRelation, QCString::mid(), DefinitionMixin< MemberDefMutable >::name(), OutputList::parseText(), OutputList::startParagraph(), theTranslator, and OutputList::writeObjectLink().

Referenced by writeDocumentation().

◆ _writeEnumValues()

void MemberDefImpl::_writeEnumValues ( OutputList & ol,
const Definition * container,
const QCString & cfname,
const QCString & ciname,
const QCString & cname ) const
private

Definition at line 3206 of file memberdef.cpp.

3209{
3210 // For enum, we also write the documented enum values
3211 if (isEnumerate())
3212 {
3213 bool first=true;
3214 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3215 bool hasInits = false;
3216 if (hasEnumValues())
3217 {
3218 for (const auto &fmd : enumFieldList())
3219 {
3220 if (fmd->isLinkable())
3221 {
3222 if (!fmd->initializer().isEmpty())
3223 {
3224 hasInits = true;
3225 break;
3226 }
3227 }
3228 }
3229 }
3230 for (const auto &fmd : enumFieldList())
3231 {
3232 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3233 if (fmd->isLinkable())
3234 {
3235 if (first)
3236 {
3238 first=false;
3239 }
3240
3241 ol.startDescTableRow();
3242 ol.addIndexItem(fmd->name(),ciname);
3243 ol.addIndexItem(ciname,fmd->name());
3244
3246 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3247 ol.addLabel(cfname,fmd->anchor());
3248 ol.docify(fmd->name());
3250 ol.writeString(" ");
3251 ol.enableAll();
3252 ol.endDoxyAnchor(cfname,fmd->anchor());
3253 ol.endDescTableTitle();
3254 if (hasInits)
3255 {
3256 ol.startDescTableInit();
3257 if (!fmd->initializer().isEmpty())
3258 {
3259 QCString initStr = fmd->initializer().stripWhiteSpace();
3260 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3262 ol.writeString("(");
3263 ol.enableAll();
3264 ol.docify(initStr);
3266 ol.writeString(")");
3267 ol.enableAll();
3268 }
3269 ol.endDescTableInit();
3270 }
3271 ol.startDescTableData();
3272
3273 bool hasBrief = !fmd->briefDescription().isEmpty();
3274 bool hasDetails = !fmd->documentation().isEmpty();
3275
3276 if (hasBrief)
3277 {
3278 ol.generateDoc(fmd->briefFile(),
3279 fmd->briefLine(),
3280 getOuterScope()?getOuterScope():container,
3281 fmd,
3282 fmd->briefDescription(),
3283 DocOptions()
3284 .setIndexWords(true));
3285 }
3286 if (hasDetails)
3287 {
3288 ol.generateDoc(fmd->docFile(),
3289 fmd->docLine(),
3290 getOuterScope()?getOuterScope():container,
3291 fmd,
3292 fmd->documentation()+"\n",
3293 DocOptions()
3294 .setIndexWords(true));
3295 }
3296 ol.endDescTableData();
3297 ol.endDescTableRow();
3298 }
3299 }
3300 if (!first)
3301 {
3302 ol.endDescTable();
3303 }
3304 }
3305}
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString documentation() const =0
virtual Definition * getOuterScope() const =0
Definition * getOuterScope() const override
bool isEnumerate() const override
bool hasEnumValues() const override
const MemberVector & enumFieldList() const override
void writeString(const QCString &text)
Definition outputlist.h:411
void endDescTableRow()
Definition outputlist.h:634
void startDescTableInit()
Definition outputlist.h:640
void endDescTable()
Definition outputlist.h:630
void endDescTableTitle()
Definition outputlist.h:638
void endDoxyAnchor(const QCString &fn, const QCString &anchor)
Definition outputlist.h:541
void docify(const QCString &s)
Definition outputlist.h:437
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void endDescTableData()
Definition outputlist.h:646
void addIndexItem(const QCString &s1, const QCString &s2)
Definition outputlist.h:590
void startDescTableTitle()
Definition outputlist.h:636
void startDescTable(const QCString &title, const bool hasInits)
Definition outputlist.h:628
void addLabel(const QCString &fName, const QCString &anchor)
Definition outputlist.h:543
void startDescTableData()
Definition outputlist.h:644
void disableAllBut(OutputType o)
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args)
Definition outputlist.h:537
void endDescTableInit()
Definition outputlist.h:642
void startDescTableRow()
Definition outputlist.h:632
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:260
virtual QCString trEnumerationValues()=0

References OutputList::addIndexItem(), OutputList::addLabel(), Definition::briefDescription(), OutputList::disableAllBut(), OutputList::docify(), Definition::documentation(), OutputList::enableAll(), OutputList::endDescTable(), OutputList::endDescTableData(), OutputList::endDescTableInit(), OutputList::endDescTableRow(), OutputList::endDescTableTitle(), OutputList::endDoxyAnchor(), enumFieldList(), OutputList::generateDoc(), DefinitionMixin< MemberDefMutable >::getOuterScope(), hasEnumValues(), isEnumerate(), Man, QCString::mid(), OutputList::startDescTable(), OutputList::startDescTableData(), OutputList::startDescTableInit(), OutputList::startDescTableRow(), OutputList::startDescTableTitle(), OutputList::startDoxyAnchor(), QCString::startsWith(), QCString::stripWhiteSpace(), theTranslator, and OutputList::writeString().

Referenced by writeDocumentation().

◆ _writeExamples()

void MemberDefImpl::_writeExamples ( OutputList & ol) const
private

Definition at line 3185 of file memberdef.cpp.

3186{
3187 // write the list of examples that use this member
3188 if (hasExamples())
3189 {
3190 ol.startExamples();
3191 ol.startDescForItem();
3193 ol.endDescForItem();
3194 ol.endExamples();
3195 }
3196}
ExampleList m_examples
bool hasExamples() const override
void endDescForItem()
Definition outputlist.h:549
void endExamples()
Definition outputlist.h:580
void startExamples()
Definition outputlist.h:578
void startDescForItem()
Definition outputlist.h:547
void writeExamples(OutputList &ol, const ExampleList &list)
Definition util.cpp:1124

References OutputList::endDescForItem(), OutputList::endExamples(), hasExamples(), m_examples, OutputList::startDescForItem(), OutputList::startExamples(), and writeExamples().

Referenced by writeDocumentation().

◆ _writeGroupInclude()

void MemberDefImpl::_writeGroupInclude ( OutputList & ol,
bool inGroup ) const
private

Definition at line 3385 of file memberdef.cpp.

3386{
3387 // only write out the include file if this is not part of a class or file
3388 // definition
3389 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3390 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3391 const FileDef *fd = getFileDef();
3392 QCString nm;
3393 if (inGroup && fd && showGroupedMembInc)
3394 {
3395 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3396 {
3398 }
3399 else
3400 {
3401 nm = fd->name();
3402 }
3403 }
3404 if (!nm.isEmpty())
3405 {
3406 ol.startParagraph();
3407 ol.startTypewriter();
3408 SrcLangExt lang = getLanguage();
3409 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3410 if (isIDLorJava)
3411 {
3412 ol.docify("import ");
3413 }
3414 else
3415 {
3416 ol.docify("#include ");
3417 }
3418
3419 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3420
3421 if (fd->isLinkable())
3422 {
3423 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3424 }
3425 else
3426 {
3427 ol.docify(nm);
3428 }
3429
3430 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3431
3432 ol.endTypewriter();
3433 ol.endParagraph();
3434 }
3435}
virtual QCString absFilePath() const =0
void startTypewriter()
Definition outputlist.h:449
void endTypewriter()
Definition outputlist.h:451
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
#define Config_getList(name)
Definition config.h:38
SrcLangExt
Definition types.h:207
QCString stripFromIncludePath(const QCString &path)
Definition util.cpp:330

References FileDef::absFilePath(), Definition::anchor(), Config_getBool, Config_getList, OutputList::docify(), OutputList::endParagraph(), OutputList::endTypewriter(), getFileDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), Definition::getOutputFileBase(), Definition::getReference(), QCString::isEmpty(), Definition::isLinkable(), Definition::name(), OutputList::startParagraph(), OutputList::startTypewriter(), stripFromIncludePath(), and OutputList::writeObjectLink().

Referenced by writeDocumentation().

◆ _writeMultiLineInitializer()

void MemberDefImpl::_writeMultiLineInitializer ( OutputList & ol,
const QCString & scopeName ) const
private

Definition at line 3437 of file memberdef.cpp.

3438{
3439 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3440 ol.startBold();
3443 else
3445 ol.endBold();
3446 QCString langCorrected = getDefFileExtension();
3448 if (srcLangExt == SrcLangExt::Lex)
3449 {
3450 langCorrected = ".doxygen_lex_c";
3451 srcLangExt = SrcLangExt::Cpp;
3452 }
3453 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3454 intf->resetCodeParserState();
3455 auto &codeOL = ol.codeGenerators();
3456 codeOL.startCodeFragment("DoxyCode");
3457 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3458 CodeParserOptions()
3460 .setInlineFragment(true)
3461 .setMemberDef(this)
3462 .setShowLineNumbers(false)
3463 .setSearchCtx(this)
3464 );
3465 codeOL.endCodeFragment("DoxyCode");
3466}
QCString getDefFileExtension() const override
static ParserManager * parserManager
Definition doxygen.h:130
void setFileDef(FileDef *fd) override
QCString m_initializer
void startCodeFragment(const QCString &style)
Definition outputlist.h:279
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
void startBold()
Definition outputlist.h:561
void endBold()
Definition outputlist.h:563
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:254
virtual QCString trDefineValue()=0
virtual QCString trInitialValue()=0
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5147

References OutputList::codeGenerators(), Config_getBool, Define, OutputList::endBold(), DefinitionMixin< MemberDefMutable >::getDefFileExtension(), getFileDef(), getLanguageFromFileName(), m_initializer, m_mtype, Doxygen::parserManager, OutputList::parseText(), setFileDef(), OutputList::startBold(), OutputCodeList::startCodeFragment(), and theTranslator.

Referenced by writeDocumentation().

◆ _writeReimplementedBy()

void MemberDefImpl::_writeReimplementedBy ( OutputList & ol) const
private

Definition at line 3073 of file memberdef.cpp.

3074{
3075 const MemberVector &bml=reimplementedBy();
3076 size_t count = _countReimplementedBy();
3077 if (count>0)
3078 {
3079 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3080 {
3081 size_t cnt=0;
3082 auto it = bml.begin();
3083 // find the entryIndex-th documented entry in the inheritance list.
3084 const MemberDef *bmd = nullptr;
3085 const ClassDef *bcd = nullptr;
3086 while (it!=bml.end())
3087 {
3088 bmd = *it;
3089 bcd = bmd->getClassDef();
3090 if ( bmd->isLinkable() && bcd->isLinkable())
3091 {
3092 if (cnt==entryIndex) break;
3093 cnt++;
3094 }
3095 ++it;
3096 }
3097
3098 if (bcd && bmd) // write link for marker
3099 {
3100 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3101 // bmd->anchor(),bcd->name());
3103 bmd->anchor(),bcd->displayName());
3104
3105 if (bmd->isLinkableInProject() )
3106 {
3107 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3108 }
3109 }
3110 };
3111
3112 QCString reimplInLine;
3113 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3114 {
3115 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3116 }
3117 else
3118 {
3119 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3120 }
3121
3122 // write the list of classes that overwrite this member
3123 ol.startParagraph();
3124 writeMarkerList(ol,
3125 reimplInLine.str(),
3126 count,
3127 replaceFunc);
3128 ol.endParagraph();
3129 }
3130}
@ Interface
Definition classdef.h:112
size_t _countReimplementedBy() const
iterator end() noexcept
Definition memberlist.h:56
iterator begin() noexcept
Definition memberlist.h:54
const std::string & str() const
Definition qcstring.h:552
virtual QCString trReimplementedInList(int numEntries)=0
virtual QCString trImplementedInList(int numEntries)=0
void writePageRef(OutputList &ol, const QCString &cn, const QCString &mn)
Definition util.cpp:260
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1100

References _countReimplementedBy(), Definition::anchor(), MemberVector::begin(), Definition::displayName(), MemberVector::end(), OutputList::endParagraph(), MemberDef::getClassDef(), getClassDef(), Definition::getOutputFileBase(), Definition::getReference(), ClassDef::Interface, Definition::isLinkable(), Definition::isLinkableInProject(), m_virt, reimplementedBy(), OutputList::startParagraph(), QCString::str(), theTranslator, writeMarkerList(), OutputList::writeObjectLink(), and writePageRef().

Referenced by writeDocumentation().

◆ _writeReimplements()

void MemberDefImpl::_writeReimplements ( OutputList & ol) const
private

Definition at line 2997 of file memberdef.cpp.

2998{
2999 const MemberDef *bmd=reimplements();
3000 const ClassDef *bcd=nullptr;
3001 if (bmd && (bcd=bmd->getClassDef()))
3002 {
3003 // write class that contains a member that is reimplemented by this one
3004 if (bcd->isLinkable())
3005 {
3006 ol.startParagraph();
3007 QCString reimplFromLine;
3008 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
3009 {
3010 reimplFromLine = theTranslator->trReimplementedFromList(1);
3011 }
3012 else
3013 {
3014 reimplFromLine = theTranslator->trImplementedFromList(1);
3015 }
3016 int markerPos = reimplFromLine.find("@0");
3017 if (markerPos!=-1) // should always pass this.
3018 {
3019 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
3020 if (bmd->isLinkable()) // replace marker with link
3021 {
3022 //Definition *bd=bmd->group;
3023 //if (bd==0) bd=bcd;
3025 bmd->anchor(),bcd->displayName());
3026
3027 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3028 // bmd->anchor(),bcd->name());
3029 if ( bmd->isLinkableInProject() )
3030 {
3031 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3032 }
3033 }
3034 else
3035 {
3037 QCString(),bcd->displayName());
3038 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3039 {
3040 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3041 }
3042 }
3043 ol.parseText(reimplFromLine.right(
3044 reimplFromLine.length()-markerPos-2)); // text right from marker
3045
3046 }
3047 else
3048 {
3049 err("translation error: no marker in trReimplementsFromList()\n");
3050 }
3051 ol.endParagraph();
3052 }
3053 }
3054}
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
virtual Specifier virtualness(int count=0) const =0
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
QCString right(size_t len) const
Definition qcstring.h:234
virtual QCString trReimplementedFromList(int numEntries)=0
virtual QCString trImplementedFromList(int numEntries)=0
#define err(fmt,...)
Definition message.h:127

References Definition::anchor(), ClassDef::compoundType(), Definition::displayName(), OutputList::endParagraph(), err, QCString::find(), MemberDef::getClassDef(), Definition::getOutputFileBase(), Definition::getReference(), ClassDef::Interface, Definition::isLinkable(), Definition::isLinkableInProject(), QCString::left(), QCString::length(), OutputList::parseText(), reimplements(), QCString::right(), OutputList::startParagraph(), theTranslator, MemberDef::virtualness(), OutputList::writeObjectLink(), and writePageRef().

Referenced by writeDocumentation().

◆ _writeTagData()

void MemberDefImpl::_writeTagData ( const DefType ) const
private

◆ _writeTemplatePrefix()

void MemberDefImpl::_writeTemplatePrefix ( OutputList & ol,
const Definition * def,
const ArgumentList & al,
bool writeReqClause = true ) const
private

Definition at line 2164 of file memberdef.cpp.

2166{
2167 ol.docify("template<");
2168 for (auto it = al.begin(); it!=al.end();)
2169 {
2170 Argument a = *it;
2171 linkifyText(TextGeneratorOLImpl(ol), // out
2172 def, // scope
2173 getFileDef(), // fileScope
2174 this, // self
2175 a.type, // text
2176 FALSE // autoBreak
2177 );
2178 if (!a.name.isEmpty())
2179 {
2180 ol.docify(" ");
2181 ol.docify(a.name);
2182 }
2183 if (!a.defval.isEmpty())
2184 {
2185 ol.docify(" = ");
2186 ol.docify(a.defval);
2187 }
2188 ++it;
2189 if (it!=al.end()) ol.docify(", ");
2190 }
2191 ol.docify("> ");
2192 if (writeReqClause && !m_requiresClause.isEmpty())
2193 {
2194 ol.lineBreak();
2195 ol.docify("requires ");
2196 linkifyText(TextGeneratorOLImpl(ol), // out
2197 def, // scope
2198 getFileDef(), // fileScope
2199 this, // self
2200 m_requiresClause, // text
2201 FALSE // autoBreak
2202 );
2203 }
2204}
iterator end()
Definition arguments.h:94
iterator begin()
Definition arguments.h:93
QCString m_requiresClause
void lineBreak(const QCString &style=QCString())
Definition outputlist.h:559
QCString type
Definition arguments.h:42
QCString name
Definition arguments.h:44
QCString defval
Definition arguments.h:46
void linkifyText(const TextGeneratorIntf &out, const Definition *scope, const FileDef *fileScope, const Definition *self, const QCString &text, bool autoBreak, bool external, bool keepSpaces, int indentLevel)
Definition util.cpp:894

References ArgumentList::begin(), Argument::defval, OutputList::docify(), ArgumentList::end(), FALSE, getFileDef(), QCString::isEmpty(), OutputList::lineBreak(), linkifyText(), m_requiresClause, Argument::name, and Argument::type.

Referenced by writeDeclaration(), and writeDocumentation().

◆ _writeTypeConstraints()

void MemberDefImpl::_writeTypeConstraints ( OutputList & ol) const
private

Definition at line 3198 of file memberdef.cpp.

3199{
3200 if (m_typeConstraints.hasParameters())
3201 {
3203 }
3204}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5395

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ accessorClass()

ClassDef * MemberDefImpl::accessorClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4951 of file memberdef.cpp.

4952{
4953 return m_accessorClass;
4954}
ClassDef * m_accessorClass

References m_accessorClass.

◆ addExample()

bool MemberDefImpl::addExample ( const QCString & anchor,
const QCString & name,
const QCString & file )
overridevirtual

Implements MemberDefMutable.

Definition at line 1628 of file memberdef.cpp.

1629{
1630 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1631 return m_examples.inSort(Example(anchor,nameStr,file));
1632}
QCString anchor() const override

References anchor(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( Definition * d)
overridevirtual

Implements MemberDefMutable.

Definition at line 4555 of file memberdef.cpp.

4556{
4557 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4558 SrcLangExt lang = getLanguage();
4559 if (!isLinkableInProject()) return;
4560 QCString memLabel;
4561 if (optimizeOutputForC)
4562 {
4563 memLabel=theTranslator->trGlobal(TRUE,TRUE);
4564 }
4565 else if (lang==SrcLangExt::Fortran)
4566 {
4568 }
4569 else
4570 {
4571 memLabel=theTranslator->trMember(TRUE,TRUE);
4572 }
4573 QCString memName = name();
4574 Definition *pd=getOuterScope();
4575 QCString pdName = pd->definitionType()==Definition::TypeClass ?
4576 (toClassDef(pd))->displayName() : pd->name();
4577 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4578 QCString memArgs;
4579 if (!isRelated())
4580 {
4581 if (isObjCMethod())
4582 {
4583 memName = "[" + pd->name() + " " + name() + "]";
4584 }
4585 else
4586 {
4587 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4588 memArgs = argsString();
4589 }
4590 }
4591 const RefItemVector &xrefItems = xrefListItems();
4592 if (sep!="::")
4593 {
4594 memName = substitute(memName,"::",sep);
4595 }
4596 addRefItem(xrefItems,
4597 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4598 memLabel,
4599 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4600}
virtual DefType definitionType() const =0
const RefItemVector & xrefListItems() const override
static NamespaceDefMutable * globalScope
Definition doxygen.h:120
bool isObjCMethod() const override
bool isLinkableInProject() const override
QCString displayName(bool=TRUE) const override
QCString argsString() const override
bool isRelated() const override
QCString getOutputFileBase() const override
QCString & prepend(const char *s)
Definition qcstring.h:422
virtual QCString trGlobal(bool first_capital, bool singular)=0
virtual QCString trSubprogram(bool first_capital, bool singular)=0
virtual QCString trMember(bool first_capital, bool singular)=0
ClassDef * toClassDef(Definition *d)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
void addRefItem(const RefItemVector &sli, const QCString &key, const QCString &prefix, const QCString &name, const QCString &title, const QCString &args, const Definition *scope)
Definition util.cpp:4766
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5849

References addRefItem(), anchor(), argsString(), Config_getBool, Definition::definitionType(), displayName(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), DefinitionMixin< MemberDefMutable >::getOuterScope(), getOutputFileBase(), Doxygen::globalScope, isLinkableInProject(), isObjCMethod(), isRelated(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), QCString::prepend(), qualifiedName(), substitute(), theTranslator, toClassDef(), TRUE, Definition::TypeClass, and DefinitionMixin< MemberDefMutable >::xrefListItems().

◆ addQualifiers()

void MemberDefImpl::addQualifiers ( const StringVector & qualifiers)
overridevirtual

Implements MemberDefMutable.

Definition at line 5889 of file memberdef.cpp.

5890{
5891 for (const auto &sx : qualifiers)
5892 {
5893 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5894 if (!alreadyAdded)
5895 {
5896 m_qualifiers.push_back(sx);
5897 }
5898 }
5899}
StringVector m_qualifiers

References m_qualifiers.

◆ anchor()

QCString MemberDefImpl::anchor ( ) const
overridevirtual

Returns the anchor within a page where this item can be found

Implements Definition.

Definition at line 1766 of file memberdef.cpp.

1767{
1768 QCString result=m_anc;
1769 if (m_groupAlias) return m_groupAlias->anchor();
1770 if (m_templateMaster) return m_templateMaster->anchor();
1771 if (m_enumScope && m_enumScope!=this) // avoid recursion for C#'s public enum E { E, F }
1772 {
1773 result.prepend(m_enumScope->anchor());
1774 }
1775 if (getGroupDef())
1776 {
1777 if (m_groupMember)
1778 {
1779 result=m_groupMember->anchor();
1780 }
1781 else if (getReference().isEmpty())
1782 {
1783 result.prepend("g");
1784 }
1785 }
1786 return result;
1787}
QCString m_anc
const MemberDef * m_enumScope
const MemberDef * m_groupAlias
const MemberDef * m_templateMaster
QCString getReference() const override
MemberDef * m_groupMember

References getGroupDef(), getReference(), m_anc, m_enumScope, m_groupAlias, m_groupMember, m_templateMaster, and QCString::prepend().

Referenced by addExample(), addListReference(), getOutputFileBase(), writeDeclaration(), writeDocumentation(), writeLink(), writeMemberDocSimple(), and writeTagFile().

◆ argsString()

QCString MemberDefImpl::argsString ( ) const
overridevirtual

◆ argumentList()

const ArgumentList & MemberDefImpl::argumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5631 of file memberdef.cpp.

5632{
5633 return m_defArgList;
5634}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5097 of file memberdef.cpp.

5098{
5099 return m_bitfields;
5100}

References m_bitfields.

◆ briefDescription()

QCString MemberDefImpl::briefDescription ( bool abbreviate = FALSE) const
overridevirtual

Returns the brief description of this definition. This can include commands.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 6340 of file memberdef.cpp.

6341{
6342 if (m_templateMaster)
6343 {
6344 return m_templateMaster->briefDescription(abbr);
6345 }
6346 else
6347 {
6349 }
6350}
QCString briefDescription(bool abbreviate=FALSE) const override

References DefinitionMixin< Base >::briefDescription(), and m_templateMaster.

Referenced by findSectionsInDocumentation(), hasDetailedDescription(), writeDeclaration(), writeDocumentation(), and writeMemberDocSimple().

◆ cacheTypedefVal()

void MemberDefImpl::cacheTypedefVal ( const ClassDef * val,
const QCString & templSpec,
const QCString & resolvedType )
overridevirtual

Implements MemberDefMutable.

Definition at line 6107 of file memberdef.cpp.

6108{
6111 m_cachedTypedefTemplSpec=templSpec;
6112 m_cachedResolvedType=resolvedType;
6113 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6114}
bool m_isTypedefValCached
const ClassDef * m_cachedTypedefValue
QCString m_cachedTypedefTemplSpec
QCString m_cachedResolvedType

References m_cachedResolvedType, m_cachedTypedefTemplSpec, m_cachedTypedefValue, m_isTypedefValCached, and TRUE.

◆ category()

ClassDef * MemberDefImpl::category ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6067 of file memberdef.cpp.

6068{
6069 return m_category;
6070}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6077 of file memberdef.cpp.

6078{
6079 return m_categoryRelation;
6080}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6420 of file memberdef.cpp.

6421{
6422 switch (memberType())
6423 {
6440 }
6442}
MemberType memberType() const override
@ Enumeration
Definition types.h:557
@ EnumValue
Definition types.h:558
@ Dictionary
Definition types.h:568
@ Interface
Definition types.h:565
@ Sequence
Definition types.h:567
@ Variable
Definition types.h:555
@ Property
Definition types.h:563
@ Typedef
Definition types.h:556
@ Function
Definition types.h:554
@ Service
Definition types.h:566

References DCOP, Default, Define, Dictionary, Enumeration, EnumValue, Event, Friend, Function, Interface, memberType(), Property, Sequence, Service, Signal, Slot, Typedef, and Variable.

◆ copyArgumentNames()

void MemberDefImpl::copyArgumentNames ( const MemberDef * bmd)
overridevirtual

Implements MemberDefMutable.

Definition at line 6116 of file memberdef.cpp.

6117{
6118 {
6119 const ArgumentList &srcAl = bmd->argumentList();
6120 ArgumentList &dstAl = m_defArgList;
6121 auto srcIt = srcAl.begin();
6122 auto dstIt = dstAl.begin();
6123 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6124 {
6125 Argument &argDst = *dstIt;
6126 const Argument &argSrc = *srcIt;
6127 argDst.name = argSrc.name;
6128 argDst.docs = argSrc.docs;
6129 ++srcIt;
6130 ++dstIt;
6131 }
6132 }
6133
6134 {
6135 const ArgumentList &srcAl = bmd->declArgumentList();
6136 ArgumentList &dstAl = m_declArgList;
6137 auto srcIt = srcAl.begin();
6138 auto dstIt = dstAl.begin();
6139
6140 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6141 {
6142 Argument &argDst = *dstIt;
6143 const Argument &argSrc = *srcIt;
6144 argDst.name = argSrc.name;
6145 argDst.docs = argSrc.docs;
6146 ++srcIt;
6147 ++dstIt;
6148 }
6149 }
6150}
virtual const ArgumentList & argumentList() const =0
virtual const ArgumentList & declArgumentList() const =0
ArgumentList m_declArgList
QCString docs
Definition arguments.h:47

References MemberDef::argumentList(), ArgumentList::begin(), MemberDef::declArgumentList(), Argument::docs, ArgumentList::end(), m_declArgList, m_defArgList, and Argument::name.

◆ createTemplateInstanceMember()

std::unique_ptr< MemberDef > MemberDefImpl::createTemplateInstanceMember ( const ArgumentList & formalArgs,
const std::unique_ptr< ArgumentList > & actualArgs ) const
overridevirtual

Implements MemberDef.

Definition at line 4478 of file memberdef.cpp.

4480{
4481 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4482 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4483 if (!m_defArgList.empty())
4484 {
4485 // replace formal arguments with actuals
4486 for (Argument &arg : *actualArgList)
4487 {
4488 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4489 }
4490 actualArgList->setTrailingReturnType(
4491 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4492 }
4493
4494 QCString methodName=name();
4495 if (methodName.startsWith("operator ")) // conversion operator
4496 {
4497 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4498 }
4499
4500 auto imd = createMemberDef(
4502 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4503 methodName,
4504 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4507 ArgumentList(), ArgumentList(), ""
4508 );
4509 auto mmd = toMemberDefMutable(imd.get());
4510 mmd->moveArgumentList(std::move(actualArgList));
4511 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4512 mmd->setBodyDef(getBodyDef());
4513 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4514 mmd->setFormalTemplateArguments(formalArgs);
4515
4516 // TODO: init other member variables (if needed).
4517 // TODO: reimplemented info
4518 return imd;
4519}
QCString getDefFileName() const override
const FileDef * getBodyDef() const override
QCString m_type
Relationship m_related
QCString m_def
QCString m_exception
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.
QCString substituteTemplateArgumentsInString(const QCString &nm, const ArgumentList &formalArgs, const ArgumentList *actualArgs)
Definition util.cpp:4307

References createMemberDef(), DefinitionMixin< MemberDefMutable >::getBodyDef(), DefinitionMixin< MemberDefMutable >::getDefColumn(), DefinitionMixin< MemberDefMutable >::getDefFileName(), DefinitionMixin< MemberDefMutable >::getDefLine(), DefinitionMixin< MemberDefMutable >::getEndBodyLine(), DefinitionMixin< MemberDefMutable >::getStartBodyLine(), m_args, m_def, m_defArgList, m_exception, m_mtype, m_prot, m_related, m_stat, m_type, m_virt, DefinitionMixin< MemberDefMutable >::name(), QCString::startsWith(), substituteTemplateArgumentsInString(), and toMemberDefMutable().

◆ declaration()

QCString MemberDefImpl::declaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5067 of file memberdef.cpp.

5068{
5069 return m_decl;
5070}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5636 of file memberdef.cpp.

5637{
5638 return m_declArgList;
5639}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

std::unique_ptr< MemberDef > MemberDefImpl::deepCopy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1449 of file memberdef.cpp.

1450{
1451 std::unique_ptr<MemberDefImpl> result(new MemberDefImpl(
1454 // first copy base members
1455 result->DefinitionMixin<MemberDefMutable>::operator=(*this);
1456 // then copy other members
1457 result->m_typeConstraints = m_typeConstraints ;
1458 result->m_declArgList = m_declArgList ;
1459 result->m_classDef = m_classDef ;
1460 result->m_fileDef = m_fileDef ;
1461 result->m_moduleDef = m_moduleDef ;
1462 result->m_nspace = m_nspace ;
1463 result->m_enumScope = m_enumScope ;
1464 result->m_livesInsideEnum = m_livesInsideEnum ;
1465 result->m_annEnumType = m_annEnumType ;
1466 result->m_enumFields = m_enumFields ;
1467 result->m_redefines = m_redefines ;
1468 result->m_redefinedBy = m_redefinedBy ;
1469 result->m_memDef = m_memDef ;
1470 result->m_memDec = m_memDec ;
1471 result->m_relatedAlso = m_relatedAlso ;
1472 result->m_examples = m_examples ;
1473 result->m_accessorType = m_accessorType ;
1474 result->m_accessorClass = m_accessorClass ;
1475 result->m_def = m_def ;
1476 result->m_anc = m_anc ;
1477 result->m_decl = m_decl ;
1478 result->m_bitfields = m_bitfields ;
1479 result->m_read = m_read ;
1480 result->m_write = m_write ;
1481 result->m_exception = m_exception ;
1482 result->m_initializer = m_initializer ;
1483 result->m_extraTypeChars = m_extraTypeChars ;
1484 result->m_enumBaseType = m_enumBaseType ;
1485 result->m_requiresClause = m_requiresClause ;
1486 result->m_initLines = m_initLines ;
1487 result->m_memSpec = m_memSpec ;
1488 result->m_vhdlSpec = m_vhdlSpec ;
1489 result->m_maxInitLines = m_maxInitLines ;
1490 result->m_userInitLines = m_userInitLines ;
1491 result->m_annMemb = m_annMemb ;
1492 result->m_defArgList = m_defArgList ;
1493 result->m_declArgList = m_declArgList ;
1494 result->m_tArgList = m_tArgList ;
1495 result->m_typeConstraints = m_typeConstraints ;
1496 result->m_templateMaster = m_templateMaster ;
1497 result->m_formalTemplateArguments = m_formalTemplateArguments ;
1498 result->m_defTmpArgLists = m_defTmpArgLists ;
1499 result->m_cachedAnonymousType = m_cachedAnonymousType ;
1500 result->m_sectionMap = m_sectionMap ;
1501 result->m_groupAlias = m_groupAlias ;
1502 result->m_grpId = m_grpId ;
1503 result->m_memberGroup = m_memberGroup ;
1504 result->m_group = m_group ;
1505 result->m_grouppri = m_grouppri ;
1506 result->m_groupFileName = m_groupFileName ;
1507 result->m_groupStartLine = m_groupStartLine ;
1508 result->m_groupMember = m_groupMember ;
1509 result->m_isTypedefValCached = m_isTypedefValCached ;
1510 result->m_cachedTypedefValue = m_cachedTypedefValue ;
1511 result->m_cachedTypedefTemplSpec = m_cachedTypedefTemplSpec ;
1512 result->m_cachedResolvedType = m_cachedResolvedType ;
1513 result->m_docProvider = m_docProvider ;
1514 result->m_explicitOutputFileBase = m_explicitOutputFileBase ;
1515 result->m_qualifiers = m_qualifiers ;
1516 result->m_implOnly = m_implOnly ;
1517 result->m_hasDocumentedParams = m_hasDocumentedParams ;
1518 result->m_hasDocumentedReturnType = m_hasDocumentedReturnType ;
1519 result->m_isDMember = m_isDMember ;
1520 result->m_proto = m_proto ;
1521 result->m_docEnumValues = m_docEnumValues ;
1522 result->m_annScope = m_annScope ;
1523 result->m_hasDetailedDescriptionCached = m_hasDetailedDescriptionCached ;
1524 result->m_detailedDescriptionCachedValue = m_detailedDescriptionCachedValue ;
1525 result->m_hasCallGraph = m_hasCallGraph ;
1526 result->m_hasCallerGraph = m_hasCallerGraph ;
1527 result->m_hasReferencedByRelation = m_hasReferencedByRelation ;
1528 result->m_hasReferencesRelation = m_hasReferencesRelation ;
1529 result->m_hasEnumValues = m_hasEnumValues ;
1530 result->m_hasInlineSource = m_hasInlineSource ;
1531 result->m_explExt = m_explExt ;
1532 result->m_tspec = m_tspec ;
1533 result->m_groupHasDocs = m_groupHasDocs ;
1534 result->m_docsForDefinition = m_docsForDefinition ;
1535 result->m_category = m_category ;
1536 result->m_categoryRelation = m_categoryRelation ;
1537 result->m_declFileName = m_declFileName ;
1538 result->m_declLine = m_declLine ;
1539 result->m_declColumn = m_declColumn ;
1540 result->m_numberOfFlowKW = m_numberOfFlowKW ;
1541 result->setDefinitionTemplateParameterLists(m_defTmpArgLists);
1542
1543 result->m_isLinkableCached = 0;
1544 result->m_isConstructorCached = 0;
1545 result->m_isDestructorCached = 0;
1546 return result;
1547}
const QCString & localName() const override
VhdlSpecifier m_vhdlSpec
bool m_detailedDescriptionCachedValue
ArgumentLists m_defTmpArgLists
bool m_hasReferencedByRelation
MemberDef * m_memDec
MemberDef * m_annMemb
std::map< const Definition *, const MemberList * > m_sectionMap
bool m_hasDocumentedReturnType
QCString m_extraTypeChars
bool m_hasDocumentedParams
ModuleDef * m_moduleDef
bool m_hasReferencesRelation
bool m_hasInlineSource
QCString m_groupFileName
NamespaceDef * m_nspace
bool m_docsForDefinition
std::optional< ArgumentList > m_formalTemplateArguments
QCString m_read
MemberDef * m_redefines
QCString m_accessorType
ClassDef * m_classDef
MemberGroup * m_memberGroup
MemberVector m_redefinedBy
GroupDef * m_group
QCString m_metaData
TypeSpecifier m_memSpec
bool m_hasDetailedDescriptionCached
ClassDef * m_relatedAlso
const MemberDef * m_annEnumType
MemberDefImpl(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)
QCString m_enumBaseType
Grouping::GroupPri_t m_grouppri
MemberDef * m_memDef
bool m_livesInsideEnum
MemberVector m_enumFields
ClassDef * m_cachedAnonymousType
QCString m_write
FileDef * m_fileDef
QCString m_declFileName
ArgumentList m_tArgList
QCString m_explicitOutputFileBase
const MemberDef * m_docProvider

References DefinitionMixin< MemberDefMutable >::getDefColumn(), DefinitionMixin< MemberDefMutable >::getDefFileName(), DefinitionMixin< MemberDefMutable >::getDefLine(), DefinitionMixin< MemberDefMutable >::localName(), m_accessorClass, m_accessorType, m_anc, m_annEnumType, m_annMemb, m_annScope, m_args, m_bitfields, m_cachedAnonymousType, m_cachedResolvedType, m_cachedTypedefTemplSpec, m_cachedTypedefValue, m_category, m_categoryRelation, m_classDef, m_decl, m_declArgList, m_declColumn, m_declFileName, m_declLine, m_def, m_defArgList, m_defTmpArgLists, m_detailedDescriptionCachedValue, m_docEnumValues, m_docProvider, m_docsForDefinition, m_enumBaseType, m_enumFields, m_enumScope, m_examples, m_exception, m_explExt, m_explicitOutputFileBase, m_extraTypeChars, m_fileDef, m_formalTemplateArguments, m_group, m_groupAlias, m_groupFileName, m_groupHasDocs, m_groupMember, m_grouppri, m_groupStartLine, m_grpId, m_hasCallerGraph, m_hasCallGraph, m_hasDetailedDescriptionCached, m_hasDocumentedParams, m_hasDocumentedReturnType, m_hasEnumValues, m_hasInlineSource, m_hasReferencedByRelation, m_hasReferencesRelation, m_implOnly, m_initializer, m_initLines, m_isDMember, m_isTypedefValCached, m_livesInsideEnum, m_maxInitLines, m_memberGroup, m_memDec, m_memDef, m_memSpec, m_metaData, m_moduleDef, m_mtype, m_nspace, m_numberOfFlowKW, m_prot, m_proto, m_qualifiers, m_read, m_redefinedBy, m_redefines, m_related, m_relatedAlso, m_requiresClause, m_sectionMap, m_stat, m_tArgList, m_templateMaster, m_tspec, m_type, m_typeConstraints, m_userInitLines, m_vhdlSpec, m_virt, m_write, and MemberDefImpl().

◆ definition()

QCString MemberDefImpl::definition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5072 of file memberdef.cpp.

5073{
5074 return m_def;
5075}

References m_def.

Referenced by displayDefinition(), setAnchor(), and writeDocumentation().

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5694 of file memberdef.cpp.

5695{
5696 return m_defTmpArgLists;
5697}

References m_defTmpArgLists.

◆ definitionType()

DefType MemberDefImpl::definitionType ( ) const
inlineoverridevirtual

Use this for dynamic inspection of the type of the derived class

Implements Definition.

Definition at line 64 of file memberdef.cpp.

64{ return TypeMember; }

References definitionType(), and Definition::TypeMember.

Referenced by definitionType().

◆ detectUndocumentedParams()

void MemberDefImpl::detectUndocumentedParams ( bool hasParamCommand,
bool hasReturnCommand ) const
overridevirtual

Implements MemberDef.

Definition at line 4233 of file memberdef.cpp.

4234{
4235 //printf("%s:detectUndocumentedParams(%d,%d)\n",qPrint(name()),hasParamCommand,hasReturnCommand);
4236 bool isPython = getLanguage()==SrcLangExt::Python;
4237
4238 // this function is called while parsing the documentation. A member can have multiple
4239 // documentation blocks, which could be handled by multiple threads, hence this guard.
4240 std::lock_guard<std::mutex> lock(g_detectUndocumentedParamsMutex);
4241
4242 if (!m_hasDocumentedParams && hasParamCommand)
4243 {
4244 //printf("%s:hasDocumentedParams=TRUE;\n",qPrint(name()));
4245 m_hasDocumentedParams = true;
4246 }
4247 else if (!m_hasDocumentedParams)
4248 {
4249 const ArgumentList &al = argumentList();
4250 const ArgumentList &declAl = declArgumentList();
4251 bool allDoc=TRUE; // no parameter => all parameters are documented
4252 if ( // member has parameters
4253 al.hasParameters() // with at least one parameter (that is not void)
4254 )
4255 {
4256 // see if all parameters have documentation
4257 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4258 {
4259 const Argument &a = *it;
4260 if (!a.name.isEmpty() && a.type!="void" && a.name!="..." &&
4261 !(isPython && (a.name=="self" || a.name=="cls"))
4262 )
4263 {
4264 allDoc = !a.docs.isEmpty();
4265 }
4266 //printf("a.type=%s a.name=%s doc=%s\n",
4267 // qPrint(a.type),qPrint(a.name),qPrint(a.docs));
4268 }
4269 if (!allDoc && declAl.empty()) // try declaration arguments as well
4270 {
4271 allDoc=true;
4272 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4273 {
4274 const Argument &a = *it;
4275 if (!a.name.isEmpty() && a.type!="void" && a.name!="..." &&
4276 !(isPython && (a.name=="self" || a.name=="cls"))
4277 )
4278 {
4279 allDoc = !a.docs.isEmpty();
4280 }
4281 //printf("a.name=%s doc=%s\n",qPrint(a.name),qPrint(a.docs));
4282 }
4283 }
4284 }
4285 if (allDoc)
4286 {
4287 //printf("%s:hasDocumentedParams=TRUE;\n",qPrint(name()));
4288 m_hasDocumentedParams = true;
4289 }
4290 }
4291
4292 //printf("Member %s hasDocumentedReturnType=%d hasReturnCommand=%d\n",
4293 // qPrint(name()),m_hasDocumentedReturnType,hasReturnCommand);
4295}
bool hasParameters() const
Definition arguments.h:76
bool empty() const
Definition arguments.h:99
const ArgumentList & argumentList() const override
const ArgumentList & declArgumentList() const override
static std::mutex g_detectUndocumentedParamsMutex

References argumentList(), ArgumentList::begin(), declArgumentList(), Argument::docs, ArgumentList::empty(), ArgumentList::end(), g_detectUndocumentedParamsMutex, DefinitionMixin< MemberDefMutable >::getLanguage(), ArgumentList::hasParameters(), QCString::isEmpty(), m_hasDocumentedParams, m_hasDocumentedReturnType, Argument::name, TRUE, and Argument::type.

◆ displayDefinition()

QCString MemberDefImpl::displayDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3310 of file memberdef.cpp.

3311{
3312 QCString ldef = definition();
3313 QCString title = name();
3314 if (isEnumerate())
3315 {
3316 if (isAnonymous())
3317 {
3318 ldef = title = "anonymous enum";
3319 if (!m_enumBaseType.isEmpty())
3320 {
3321 ldef+=" : "+m_enumBaseType;
3322 }
3323 }
3324 else
3325 {
3326 ldef.prepend("enum ");
3327 if (isSliceLocal())
3328 {
3329 ldef.prepend("local ");
3330 }
3331 }
3332 }
3333 else if (isEnumValue())
3334 {
3335 if (isAnonymous())
3336 {
3337 ldef=ldef.mid(2);
3338 }
3339 }
3340
3341 std::string sdef = ldef.str();
3342 reg::Match match;
3343 if (reg::search(sdef,match,reAnonymous))
3344 {
3345 ldef = match.prefix().str() + " { ... } " + removeAnonymousScopes(match.suffix().str());
3346 }
3347
3348 const ClassDef *cd=getClassDef();
3349 if (cd && cd->isObjectiveC())
3350 {
3351 // strip scope name
3352 int ep = ldef.find("::");
3353 if (ep!=-1)
3354 {
3355 int sp=ldef.findRev(' ',ep);
3356 if (sp!=-1)
3357 {
3358 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3359 }
3360 }
3361 // strip keywords
3362 int dp = ldef.find(':');
3363 if (dp!=-1)
3364 {
3365 ldef=ldef.left(dp+1);
3366 }
3367 int l=static_cast<int>(ldef.length());
3368 //printf("start >%s<\n",qPrint(ldef));
3369 int i=l-1;
3370 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3371 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3372 if (i>0)
3373 {
3374 // insert branches around the type
3375 ldef = "("+ldef.left(i+1)+")"+ldef.mid(i+1);
3376 }
3377 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3378 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3379 }
3380 SrcLangExt lang = getLanguage();
3381 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
3382 return substitute(ldef,"::",sep);
3383}
virtual bool isObjectiveC() const =0
Returns TRUE if this class is implemented in Objective-C.
bool isSliceLocal() const override
bool isEnumValue() const override
QCString definition() const override
bool isStatic() const override
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition qcstring.cpp:96
static const reg::Ex reAnonymous(R"([\w:@]*@\d+)")
bool search(std::string_view str, Match &match, const Ex &re, size_t pos)
Search in a given string str starting at position pos for a match against regular expression re.
Definition regex.cpp:844
bool match(std::string_view str, Match &match, const Ex &re)
Matches a given string str for a match against regular expression re.
Definition regex.cpp:855
QCString removeAnonymousScopes(const QCString &str)
Definition util.cpp:162
bool isId(int c)
Definition util.h:207

References QCString::at(), definition(), QCString::find(), QCString::findRev(), getClassDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), DefinitionMixin< MemberDefMutable >::isAnonymous(), isEnumerate(), isEnumValue(), isId(), ClassDef::isObjectiveC(), isSliceLocal(), isStatic(), QCString::left(), QCString::length(), m_enumBaseType, QCString::mid(), DefinitionMixin< MemberDefMutable >::name(), QCString::prepend(), reAnonymous, removeAnonymousScopes(), reg::search(), QCString::str(), substitute(), and TRUE.

◆ displayName()

QCString MemberDefImpl::displayName ( bool includeScope = TRUE) const
overridevirtual

Returns the name of the definition as it appears in the output

Implements Definition.

Definition at line 6178 of file memberdef.cpp.

6179{
6180 return DefinitionMixin::name();
6181}

References DefinitionMixin< Base >::name().

Referenced by addListReference().

◆ documentation()

QCString MemberDefImpl::documentation ( ) const
overridevirtual

Returns the detailed description of this definition

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 6352 of file memberdef.cpp.

6353{
6354 if (m_templateMaster)
6355 {
6356 return m_templateMaster->documentation();
6357 }
6358 else
6359 {
6361 }
6362}
QCString documentation() const override

References DefinitionMixin< Base >::documentation(), and m_templateMaster.

Referenced by findSectionsInDocumentation(), hasDetailedDescription(), isBriefSectionVisible(), writeDocumentation(), and writeMemberDocSimple().

◆ enumBaseType()

QCString MemberDefImpl::enumBaseType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6092 of file memberdef.cpp.

6093{
6094 return m_enumBaseType;
6095}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5616 of file memberdef.cpp.

5617{
5618 return m_enumFields;
5619}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5092 of file memberdef.cpp.

5093{
5094 return m_exception;
5095}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5077 of file memberdef.cpp.

5078{
5079 return m_extraTypeChars;
5080}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3985 of file memberdef.cpp.

3986{
3987 QCString type = m_accessorType;
3988 if (type.isEmpty())
3989 {
3990 type = m_type;
3991 }
3992
3993 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3994 return simplifyTypeForTable(type);
3995}
bool isTypedef() const override
static QCString simplifyTypeForTable(const QCString &s)

References DefinitionMixin< MemberDefMutable >::getLanguage(), QCString::isEmpty(), isTypedef(), m_accessorType, m_type, QCString::prepend(), and simplifyTypeForTable().

Referenced by writeMemberDocSimple().

◆ findSectionsInDocumentation()

void MemberDefImpl::findSectionsInDocumentation ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4956 of file memberdef.cpp.

4957{
4961}
QCString docFile() const override
QCString inbodyDocumentation() const override
QCString briefDescription(bool abbr=FALSE) const override
QCString documentation() const override
void docFindSections(const QCString &input, const Definition *d, const QCString &fileName)

References briefDescription(), DefinitionMixin< MemberDefMutable >::docFile(), docFindSections(), documentation(), and DefinitionMixin< MemberDefMutable >::inbodyDocumentation().

◆ formalTemplateArguments()

std::optional< ArgumentList > MemberDefImpl::formalTemplateArguments ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5775 of file memberdef.cpp.

5776{
5778}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6026 of file memberdef.cpp.

6027{
6028 return m_annMemb;
6029}

References m_annMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5709 of file memberdef.cpp.

5710{
5711 return m_annScope;
5712}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5571 of file memberdef.cpp.

5572{
5573 return m_annEnumType;
5574}

References m_annEnumType.

Referenced by writeDeclaration().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5795 of file memberdef.cpp.

5796{
5797 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5798 return m_cachedResolvedType;
5799}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5790 of file memberdef.cpp.

5791{
5793}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5785 of file memberdef.cpp.

5786{
5787 return m_cachedTypedefValue;
5788}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5127 of file memberdef.cpp.

5128{
5129 return m_classDef;
5130}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5132 of file memberdef.cpp.

5133{
5135}
ClassDefMutable * toClassDefMutable(Definition *d)

References m_classDef, and toClassDefMutable().

◆ getClassDefOfAnonymousType()

ClassDef * MemberDefImpl::getClassDefOfAnonymousType ( ) const
overridevirtual

If this member has an anonymous class/struct/union as its type, then this method will return the ClassDef that describes this return type.

Implements MemberDef.

Definition at line 1979 of file memberdef.cpp.

1980{
1981 std::lock_guard<std::mutex> lock(g_cachedAnonymousTypeMutex);
1982 //printf("%s:getClassDefOfAnonymousType() cache=%s\n",qPrint(name()),
1983 // m_cachedAnonymousType?qPrint(m_cachedAnonymousType->name()):"<empty>");
1985
1986 QCString cname;
1987 if (getClassDef()!=nullptr)
1988 {
1989 cname=getClassDef()->name();
1990 }
1991 else if (getNamespaceDef()!=nullptr)
1992 {
1993 cname=getNamespaceDef()->name();
1994 }
1995 QCString ltype(m_type);
1996 // strip 'friend' keyword from ltype
1997 ltype.stripPrefix("friend ");
1998
1999 // search for the last anonymous scope in the member type
2000 ClassDef *annoClassDef=nullptr;
2001
2002 // match expression if it contains at least one @1 marker, e.g.
2003 // 'struct A::@1::@2::B' matches 'A::@1::@2::B' but 'struct A::B' does not match.
2004 std::string stype = ltype.str();
2005 static const reg::Ex r(R"([\w@:]*@\d+[\w@:]*)");
2006 reg::Match match;
2007 if (reg::search(stype,match,r)) // found anonymous scope in type
2008 {
2009 QCString annName = match.str();
2010
2011 // if inside a class or namespace try to prepend the scope name
2012 if (!cname.isEmpty() && annName.left(cname.length()+2)!=cname+"::")
2013 {
2014 QCString ts=stripAnonymousNamespaceScope(cname+"::"+annName);
2015 annoClassDef=getClass(ts);
2016 }
2017 // if not found yet, try without scope name
2018 if (annoClassDef==nullptr)
2019 {
2020 QCString ts=stripAnonymousNamespaceScope(annName);
2021 annoClassDef=getClass(ts);
2022 }
2023 }
2024 m_cachedAnonymousType = annoClassDef;
2025 return annoClassDef;
2026}
ClassDef * getClass(const QCString &n)
static std::mutex g_cachedAnonymousTypeMutex
QCString stripAnonymousNamespaceScope(const QCString &s)
Definition util.cpp:231

References g_cachedAnonymousTypeMutex, getClass(), getClassDef(), getNamespaceDef(), QCString::isEmpty(), QCString::left(), QCString::length(), m_cachedAnonymousType, m_type, Definition::name(), reg::search(), QCString::str(), stripAnonymousNamespaceScope(), and QCString::stripPrefix().

Referenced by writeDeclaration(), and writeDocumentation().

◆ getDeclColumn()

int MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5831 of file memberdef.cpp.

5832{
5833 return m_declColumn;
5834}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5821 of file memberdef.cpp.

5822{
5823 return m_declFileName;
5824}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5826 of file memberdef.cpp.

5827{
5828 return m_declLine;
5829}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2124 of file memberdef.cpp.

2125{
2126 SrcLangExt lang = getLanguage();
2127 QCString ltype(m_type);
2128 if (lang==SrcLangExt::Cpp && isEnumerate() && isStrong())
2129 {
2130 if (isEnumStruct())
2131 {
2132 ltype+=" struct";
2133 }
2134 else
2135 {
2136 ltype+=" class";
2137 }
2138 }
2139 if (isTypedef() && getLanguage() != SrcLangExt::Slice)
2140 {
2141 ltype.prepend("typedef ");
2142 }
2143 if (isTypeAlias())
2144 {
2145 ltype="using";
2146 }
2147 // strip 'friend' keyword from ltype
2148 ltype.stripPrefix("friend ");
2149 if (ltype=="@") // rename type from enum values
2150 {
2151 ltype="";
2152 }
2153 else
2154 {
2155 if (isObjCMethod())
2156 {
2157 ltype.prepend("(");
2158 ltype.append(")");
2159 }
2160 }
2161 return ltype;
2162}
bool isStrong() const override
bool isTypeAlias() const override
bool isEnumStruct() const override

References QCString::append(), DefinitionMixin< MemberDefMutable >::getLanguage(), isEnumerate(), isEnumStruct(), isObjCMethod(), isStrong(), isTypeAlias(), isTypedef(), m_type, QCString::prepend(), and QCString::stripPrefix().

◆ getEnumScope()

const MemberDef * MemberDefImpl::getEnumScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5581 of file memberdef.cpp.

5582{
5583 return m_enumScope;
5584}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5621 of file memberdef.cpp.

5622{
5623 return m_examples;
5624}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5142 of file memberdef.cpp.

5143{
5144 return m_fileDef;
5145}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5816 of file memberdef.cpp.

5817{
5818 return m_groupAlias;
5819}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5172 of file memberdef.cpp.

5173{
5174 return m_group;
5175}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5187 of file memberdef.cpp.

5188{
5189 return m_groupFileName;
5190}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5197 of file memberdef.cpp.

5198{
5199 return m_groupHasDocs;
5200}

References m_groupHasDocs.

◆ getGroupPri()

Grouping::GroupPri_t MemberDefImpl::getGroupPri ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5182 of file memberdef.cpp.

5183{
5184 return m_grouppri;
5185}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5192 of file memberdef.cpp.

5193{
5194 return m_groupStartLine;
5195}

References m_groupStartLine.

◆ getLabels()

StringVector MemberDefImpl::getLabels ( const Definition * container) const
overridevirtual

Implements MemberDef.

Definition at line 2801 of file memberdef.cpp.

2802{
2803 StringVector sl;
2804 bool inlineInfo = Config_getBool(INLINE_INFO);
2805
2806 Specifier lvirt=virtualness();
2807 if ((!isObjCMethod() || isOptional() || isRequired()) &&
2808 (protection()!=Protection::Public || lvirt!=Specifier::Normal ||
2809 isFriend() || isRelated() ||
2810 (isInline() && inlineInfo) ||
2811 isSignal() || isSlot() ||
2812 isStatic() || isExternal() ||
2813 isExported() ||
2814 (getClassDef() && getClassDef()!=container && container->definitionType()==TypeClass) ||
2815 TypeSpecifier(m_memSpec).setInline(false)!=TypeSpecifier()
2816 )
2817 )
2818 {
2819 // write the member specifier list
2820 //ol.writeLatexSpacing();
2821 //ol.startTypewriter();
2822 //ol.docify(" [");
2823 SrcLangExt lang = getLanguage();
2824 bool optVhdl = lang==SrcLangExt::VHDL;
2825 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2826 if (optVhdl)
2827 {
2828 sl.push_back(theTranslator->trVhdlType(getVhdlSpecifiers(),TRUE).str());
2829 }
2830 else
2831 {
2832 if (isFriend()) sl.emplace_back("friend");
2833 else if (isRelated()) sl.emplace_back("related");
2834 else
2835 {
2836 if (isExternal()) sl.emplace_back("extern");
2837 if (inlineInfo && isInline()) sl.emplace_back("inline");
2838 if (isExplicit()) sl.emplace_back("explicit");
2839 if (isMutable()) sl.emplace_back("mutable");
2840 if (isThreadLocal()) sl.emplace_back("thread_local");
2841 if (isStatic()) sl.emplace_back("static");
2842 if (isGettable()) sl.emplace_back("get");
2843 if (isProtectedGettable()) sl.emplace_back("protected get");
2844 if (isSettable()) sl.emplace_back("set");
2845 if (isProtectedSettable()) sl.emplace_back("protected set");
2846 if (extractPrivate)
2847 {
2848 if (isPrivateGettable()) sl.emplace_back("private get");
2849 if (isPrivateSettable()) sl.emplace_back("private set");
2850 }
2851 if (isNoDiscard()) sl.emplace_back("nodiscard");
2852 if (isConstExpr()) sl.emplace_back("constexpr");
2853 if (isConstEval()) sl.emplace_back("consteval");
2854 if (isConstInit()) sl.emplace_back("constinit");
2855 if (isAddable()) sl.emplace_back("add");
2856 if (!isUNOProperty() && isRemovable()) sl.emplace_back("remove");
2857 if (isRaisable()) sl.emplace_back("raise");
2858 if (isReadable()) sl.emplace_back("read");
2859 if (isWritable()) sl.emplace_back("write");
2860 if (isFinal()) sl.emplace_back("final");
2861 if (isAbstract()) sl.emplace_back("abstract");
2862 if (isOverride()) sl.emplace_back("override");
2863 if (isInitonly()) sl.emplace_back("initonly");
2864 if (isSealed()) sl.emplace_back("sealed");
2865 if (isNew()) sl.emplace_back("new");
2866 if (isOptional()) sl.emplace_back("optional");
2867 if (isRequired()) sl.emplace_back("required");
2868 if (isExported()) sl.emplace_back("export");
2869
2870 if (isNonAtomic()) sl.emplace_back("nonatomic");
2871 else if (isObjCProperty()) sl.emplace_back("atomic");
2872
2873 // mutual exclusive Objective 2.0 property attributes
2874 if (isAssign()) sl.emplace_back("assign");
2875 else if (isCopy()) sl.emplace_back("copy");
2876 else if (isRetain()) sl.emplace_back("retain");
2877 else if (isWeak()) sl.emplace_back("weak");
2878 else if (lang!=SrcLangExt::CSharp && isStrong()) sl.emplace_back("strong");
2879 else if (isUnretained()) sl.emplace_back("unsafe_unretained");
2880
2881 if (!isObjCMethod())
2882 {
2883 if (protection()==Protection::Protected) sl.emplace_back("protected");
2884 else if (protection()==Protection::Private) sl.emplace_back("private");
2885 else if (protection()==Protection::Package) sl.emplace_back("package");
2886
2887 if (lvirt==Specifier::Virtual) sl.emplace_back("virtual");
2888 else if (lvirt==Specifier::Pure) sl.emplace_back("pure virtual");
2889 if (isSignal()) sl.emplace_back("signal");
2890 if (isSlot()) sl.emplace_back("slot");
2891 if (isDefault()) sl.emplace_back("default");
2892 if (isDelete()) sl.emplace_back("delete");
2893 if (isNoExcept()) sl.emplace_back("noexcept");
2894 if (isAttribute()) sl.emplace_back("attribute");
2895 if (isUNOProperty()) sl.emplace_back("property");
2896 if (isReadonly()) sl.emplace_back("readonly");
2897 if (isBound()) sl.emplace_back("bound");
2898 if (isUNOProperty() && isRemovable()) sl.emplace_back("removable");
2899 if (isConstrained()) sl.emplace_back("constrained");
2900 if (isTransient()) sl.emplace_back("transient");
2901 if (isMaybeVoid()) sl.emplace_back("maybevoid");
2902 if (isMaybeDefault()) sl.emplace_back("maybedefault");
2903 if (isMaybeAmbiguous()) sl.emplace_back("maybeambiguous");
2904 if (isPublished()) sl.emplace_back("published"); // enum
2905 }
2907 {
2908 sl.emplace_back("implementation");
2909 }
2910 }
2911 if (getClassDef() &&
2912 container->definitionType()==TypeClass &&
2913 getClassDef()!=container &&
2914 !isRelated()
2915 )
2916 {
2917 sl.emplace_back("inherited");
2918 }
2919 }
2920 }
2921 else if (isObjCMethod() && isImplementation())
2922 {
2923 sl.emplace_back("implementation");
2924 }
2925
2926 for (const auto &sx : m_qualifiers)
2927 {
2928 bool alreadyAdded = std::find(sl.begin(), sl.end(), sx) != sl.end();
2929 if (!alreadyAdded)
2930 {
2931 sl.push_back(sx);
2932 }
2933 }
2934
2935 return sl;
2936}
bool isInline() const override
bool isOptional() const override
VhdlSpecifier getVhdlSpecifiers() const override
bool isNew() const override
bool isUnretained() const override
bool isGettable() const override
Specifier virtualness(int count=0) const override
bool isRaisable() const override
bool isMutable() const override
bool isPublished() const override
bool isProtectedSettable() const override
bool isUNOProperty() const override
bool isRequired() const override
bool isMaybeDefault() const override
bool isTransient() const override
bool isInitonly() const override
bool isAddable() const override
Protection protection() const override
bool isCopy() const override
bool isReadonly() const override
bool isAttribute() const override
bool isRetain() const override
bool isConstEval() const override
bool isExplicit() const override
bool isImplementation() const override
bool isDelete() const override
bool isNoExcept() const override
bool isWeak() const override
bool isNoDiscard() const override
bool isConstInit() const override
bool isProtectedGettable() const override
bool isWritable() const override
bool isSealed() const override
bool isAbstract() const override
bool isPrivateSettable() const override
bool isThreadLocal() const override
bool isMaybeVoid() const override
bool isMaybeAmbiguous() const override
bool isAssign() const override
bool isRemovable() const override
bool isFriend() const override
bool isConstExpr() const override
bool isExternal() const override
bool isNonAtomic() const override
bool isPrivateGettable() const override
bool isObjCProperty() const override
bool isConstrained() const override
bool isReadable() const override
bool isDefault() const override
bool isSettable() const override
bool isBound() const override
virtual QCString trVhdlType(VhdlSpecifier type, bool single)=0
std::vector< std::string > StringVector
Definition containers.h:33
Specifier
Definition types.h:80

References Config_getBool, Definition::definitionType(), getClassDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getVhdlSpecifiers(), isAbstract(), isAddable(), isAssign(), isAttribute(), isBound(), isConstEval(), isConstExpr(), isConstInit(), isConstrained(), isCopy(), isDefault(), isDelete(), isExplicit(), DefinitionMixin< MemberDefMutable >::isExported(), isExternal(), isFinal(), isFriend(), isGettable(), isImplementation(), isInitonly(), isInline(), isMaybeAmbiguous(), isMaybeDefault(), isMaybeVoid(), isMutable(), isNew(), isNoDiscard(), isNoExcept(), isNonAtomic(), isObjCMethod(), isObjCProperty(), isOptional(), isOverride(), isPrivateGettable(), isPrivateSettable(), isProtectedGettable(), isProtectedSettable(), isPublished(), isRaisable(), isReadable(), isReadonly(), isRelated(), isRemovable(), isRequired(), isRetain(), isSealed(), isSettable(), isSignal(), isSlot(), isStatic(), isStrong(), isThreadLocal(), isTransient(), isUNOProperty(), isUnretained(), isWeak(), isWritable(), m_memSpec, m_qualifiers, protection(), theTranslator, TRUE, Definition::TypeClass, and virtualness().

Referenced by writeDocumentation().

◆ getMemberGroup()

MemberGroup * MemberDefImpl::getMemberGroup ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5704 of file memberdef.cpp.

5705{
5706 return m_memberGroup;
5707}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5699 of file memberdef.cpp.

5700{
5701 return m_grpId;
5702}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5112 of file memberdef.cpp.

5113{
5114 return m_memSpec;
5115}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5177 of file memberdef.cpp.

5178{
5179 return m_moduleDef;
5180}

References m_moduleDef.

Referenced by getOutputFileBase(), getReference(), hasDetailedDescription(), and writeDocumentation().

◆ getNamespaceDef() [1/2]

◆ getNamespaceDef() [2/2]

NamespaceDef * MemberDefImpl::getNamespaceDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5152 of file memberdef.cpp.

5153{
5154 return m_nspace;
5155}

References m_nspace.

◆ getOutputFileBase()

QCString MemberDefImpl::getOutputFileBase ( ) const
overridevirtual

Returns the base file name (without extension) of this definition. as it is referenced to/written to disk.

Implements Definition.

Definition at line 1659 of file memberdef.cpp.

1660{
1661 bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES);
1662 bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
1663 QCString baseName;
1664
1665 //printf("Member: %s: templateMaster=%p group=%p classDef=%p nspace=%p fileDef=%p\n",
1666 // qPrint(name()),m_templateMaster,m_group,m_classDef,
1667 // m_nspace,m_fileDef);
1668 const NamespaceDef *nspace = getNamespaceDef();
1669 const FileDef *fileDef = getFileDef();
1670 const ClassDef *classDef = getClassDef();
1671 const ModuleDef *moduleDef = getModuleDef();
1672 const GroupDef *groupDef = getGroupDef();
1673 if (!m_explicitOutputFileBase.isEmpty())
1674 {
1676 }
1677 else if (templateMaster())
1678 {
1680 }
1681 else if (groupDef)
1682 {
1683 baseName=groupDef->getOutputFileBase();
1684 }
1685 else if (classDef)
1686 {
1687 baseName=classDef->getOutputFileBase();
1688 if (inlineSimpleClasses && classDef->isSimple())
1689 {
1690 return baseName;
1691 }
1692 }
1693 else if (nspace && (nspace->isLinkable() || nspace->isAnonymous()))
1694 {
1695 baseName=nspace->getOutputFileBase();
1696 }
1697 else if (fileDef)
1698 {
1699 baseName=fileDef->getOutputFileBase();
1700 }
1701 else if (moduleDef)
1702 {
1703 baseName=moduleDef->getOutputFileBase();
1704 }
1705
1706 if (baseName.isEmpty())
1707 {
1709 "Internal inconsistency: member {} does not belong to any container!",name()
1710 );
1711 return "dummy";
1712 }
1713 else if (separateMemberPages && hasDetailedDescription())
1714 {
1715 if (getEnumScope()) // enum value, which is part of enum's documentation
1716 {
1717 baseName+="_"+getEnumScope()->anchor();
1718 }
1719 else
1720 {
1721 baseName+="_"+anchor();
1722 }
1723 }
1724 return baseName;
1725}
virtual bool isSimple() const =0
virtual bool isAnonymous() const =0
bool hasDetailedDescription() const override
const MemberDef * getEnumScope() const override
const ModuleDef * getModuleDef() const override
#define warn(file, line, fmt,...)
Definition message.h:97

References Definition::anchor(), anchor(), Config_getBool, getClassDef(), DefinitionMixin< MemberDefMutable >::getDefFileName(), DefinitionMixin< MemberDefMutable >::getDefLine(), getEnumScope(), getFileDef(), getGroupDef(), getModuleDef(), getNamespaceDef(), Definition::getOutputFileBase(), hasDetailedDescription(), Definition::isAnonymous(), QCString::isEmpty(), Definition::isLinkable(), ClassDef::isSimple(), m_explicitOutputFileBase, DefinitionMixin< MemberDefMutable >::name(), templateMaster(), and warn.

Referenced by addListReference(), writeDeclaration(), writeDocumentation(), writeLink(), writeMemberDocSimple(), and writeTagFile().

◆ getQualifiers()

StringVector MemberDefImpl::getQualifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5884 of file memberdef.cpp.

5885{
5886 return m_qualifiers;
5887}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5157 of file memberdef.cpp.

5158{
5159 return m_read;
5160}

References m_read.

◆ getReference()

QCString MemberDefImpl::getReference ( ) const
overridevirtual

If this definition was imported via a tag file, this function returns the tagfile for the external project. This can be translated into an external link target via Doxygen::tagDestinationDict

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1727 of file memberdef.cpp.

1728{
1729 QCString ref = DefinitionMixin::getReference();
1730 if (!ref.isEmpty())
1731 {
1732 return ref;
1733 }
1734 const NamespaceDef *nspace = getNamespaceDef();
1735 const FileDef *fileDef = getFileDef();
1736 const ClassDef *classDef = getClassDef();
1737 const ModuleDef *moduleDef = getModuleDef();
1738 const GroupDef *groupDef = getGroupDef();
1739 if (templateMaster())
1740 {
1741 return templateMaster()->getReference();
1742 }
1743 else if (groupDef)
1744 {
1745 return groupDef->getReference();
1746 }
1747 else if (classDef)
1748 {
1749 return classDef->getReference();
1750 }
1751 else if (nspace)
1752 {
1753 return nspace->getReference();
1754 }
1755 else if (moduleDef)
1756 {
1757 return moduleDef->getReference();
1758 }
1759 else if (fileDef)
1760 {
1761 return fileDef->getReference();
1762 }
1763 return "";
1764}
QCString getReference() const override

References getClassDef(), getFileDef(), getGroupDef(), getModuleDef(), getNamespaceDef(), Definition::getReference(), DefinitionMixin< Base >::getReference(), QCString::isEmpty(), and templateMaster().

Referenced by anchor(), and writeLink().

◆ getScopeString()

QCString MemberDefImpl::getScopeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4383 of file memberdef.cpp.

4384{
4385 QCString result;
4386 if (isStrong()) result=name();
4387 else if (getClassDef()) result=getClassDef()->displayName();
4388 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4389 return result;
4390}

References Definition::displayName(), getClassDef(), getNamespaceDef(), isStrong(), and DefinitionMixin< MemberDefMutable >::name().

Referenced by sourceRefName(), and writeDocumentation().

◆ getSectionList()

const MemberList * MemberDefImpl::getSectionList ( const Definition * container) const
overridevirtual

Implements MemberDef.

Definition at line 4602 of file memberdef.cpp.

4603{
4604 auto it = m_sectionMap.find(container);
4605 return it!=m_sectionMap.end() ? it->second : nullptr;
4606}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5117 of file memberdef.cpp.

5118{
5119 return m_vhdlSpec;
5120}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5162 of file memberdef.cpp.

5163{
5164 return m_write;
5165}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5732 of file memberdef.cpp.

5733{
5734 return m_hasCallerGraph;
5735}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5714 of file memberdef.cpp.

5715{
5716 return m_hasCallGraph;
5717}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2669 of file memberdef.cpp.

2670{
2671 std::lock_guard<std::mutex> lock(g_hasDetailedDescriptionMutex);
2672 //printf(">hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2674 {
2675 bool extractAll = Config_getBool(EXTRACT_ALL);
2676 bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
2677 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2678 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2679 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2680 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2681 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2682 bool inlineSources = hasInlineSource();
2683
2684 // the member has detailed documentation because the user added some comments
2685 bool docFilter =
2686 // extract all is enabled
2687 extractAll ||
2688 // has detailed docs
2689 !documentation().isEmpty() ||
2690 // has inbody docs
2692 // is an enum with values that are documented
2694 // is documented enum value
2695 (m_mtype==MemberType::EnumValue && !briefDescription().isEmpty()) ||
2696 // has brief description that is part of the detailed description
2697 (!briefDescription().isEmpty() && // has brief docs
2698 (alwaysDetailedSec && // they are visible in
2699 (repeatBrief || // detailed section or
2700 !briefMemberDesc // they are explicitly not
2701 ) // shown in brief section
2702 )
2703 ) ||
2704 // has one or more documented arguments
2706 m_templateMaster->argumentList().hasDocumentation() :
2707 m_defArgList.hasDocumentation()) ||
2709 m_templateMaster->templateArguments().hasTemplateDocumentation() :
2710 m_tArgList.hasTemplateDocumentation()) ||
2711 // user-specified qualifiers
2712 !m_qualifiers.empty();
2713
2714 // generate function guard
2715 // ================== =======
2716 // _writeGroupInclude -> ignored in calculation
2717 // multiLineInitializer() -> hasMultiLineInitializer()
2718 // _writeReimplements -> _isReimplements()
2719 // _writeReimplementedBy -> _countReimplementedBy()>0
2720 // _writeExamples -> hasExamples()
2721 // _writeTypeConstraints -> m_typeConstraints.hasParameters()
2722 // writeSourceDef -> !getSourceFileBase().isEmpty();
2723 // writeInlineCode -> hasInlineSource() && hasSources()
2724 // writeSourceRefs -> hasReferencesRelation() && hasSourceRefs()
2725 // writeSourceReffedBy -> hasReferencedByRelation() && hasSourceReffedBy()
2726 // _writeCallGraph -> _hasVisibleCallGraph()
2727 // _writeCallerGraph -> _hasVisibleCallerGraph()
2728
2729 // the member has detailed documentation because there is some generated info
2730 bool docInfo =
2731 // has a multi-line initialization block
2733 // reimplements / reimplemented by
2735 // examples
2736 hasExamples() ||
2737 // type constraints
2738 m_typeConstraints.hasParameters() ||
2739 // has source definition
2741 // has inline sources
2742 (inlineSources && hasSources()) ||
2743 // has references
2746 // call graph
2748 // caller graph
2750
2751 if (!hideUndocMembers) // if HIDE_UNDOC_MEMBERS is NO we also show the detailed section
2752 // if there is only some generated info
2753 {
2754 docFilter = docFilter || docInfo;
2755 }
2756
2757 // this is not a global static or global statics should be extracted
2758 bool staticFilter = getClassDef()!=nullptr || !isStatic() || extractStatic;
2759
2760 // a module does not contain details for members, so either the namespace or file should be linkable
2761 bool moduleFilter = getModuleDef()==nullptr || (getFileDef() && getFileDef()->isLinkable()) ||
2763
2764 // only include members that are non-private unless EXTRACT_PRIVATE is
2765 // set to YES or the member is part of a group
2766 bool privateFilter = protectionLevelVisible(protection()) || m_mtype==MemberType::Friend ||
2767 (m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual);
2768
2769 // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
2770 // is true
2771 bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend());
2772
2774 (docFilter && staticFilter && moduleFilter && privateFilter && friendCompoundFilter && !isHidden());
2775 //printf("docFilter=%d docInfo=%d staticFilter=%d privateFilter=%d friendCompoundFilter=%d !isHidden()=%d",
2776 // docFilter,docInfo,staticFilter,privateFilter,friendCompoundFilter,!isHidden());
2778 }
2779 //printf("<hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2781}
QCString getSourceFileBase() const override
bool hasSourceReffedBy() const override
bool _isReimplements() const
bool hasMultiLineInitializer() const override
bool hasInlineSource() const override
bool hasReferencesRelation() const override
bool hasReferencedByRelation() const override
bool isLinkable() const override
bool hasDocumentedEnumValues() const override
static std::mutex g_hasDetailedDescriptionMutex

References _countReimplementedBy(), _hasVisibleCallerGraph(), _hasVisibleCallGraph(), _isReimplements(), briefDescription(), Config_getBool, documentation(), EnumValue, Friend, g_hasDetailedDescriptionMutex, getClassDef(), getFileDef(), getModuleDef(), getNamespaceDef(), DefinitionMixin< MemberDefMutable >::getSourceFileBase(), hasDocumentation(), hasDocumentedEnumValues(), hasExamples(), hasInlineSource(), hasMultiLineInitializer(), hasReferencedByRelation(), hasReferencesRelation(), DefinitionMixin< MemberDefMutable >::hasSourceReffedBy(), DefinitionMixin< MemberDefMutable >::hasSourceRefs(), DefinitionMixin< MemberDefMutable >::hasSources(), DefinitionMixin< MemberDefMutable >::inbodyDocumentation(), QCString::isEmpty(), isEnumerate(), isFinal(), isFriend(), DefinitionMixin< MemberDefMutable >::isHidden(), Definition::isLinkable(), isLinkable(), isOverride(), isStatic(), m_defArgList, m_detailedDescriptionCachedValue, m_hasDetailedDescriptionCached, m_mtype, m_prot, m_qualifiers, m_tArgList, m_templateMaster, m_typeConstraints, m_virt, protection(), and protectionLevelVisible().

Referenced by getOutputFileBase(), isDetailedSectionVisible(), warnIfUndocumented(), writeDeclaration(), and writeLink().

◆ hasDocumentation()

bool MemberDefImpl::hasDocumentation ( ) const
overridevirtual

Returns TRUE iff the definition is documented (which could be generated documentation)

See also
hasUserDocumentation()

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 4370 of file memberdef.cpp.

4371{
4373 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4374 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4375}
bool hasDocumentation() const override

References Enumeration, DefinitionMixin< Base >::hasDocumentation(), m_defArgList, m_docEnumValues, m_mtype, and m_tArgList.

Referenced by _computeLinkableInProject(), hasDetailedDescription(), isBriefSectionVisible(), visibleInIndex(), warnIfUndocumentedParams(), and writeDeclaration().

◆ hasDocumentedEnumValues()

bool MemberDefImpl::hasDocumentedEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5566 of file memberdef.cpp.

5567{
5568 return m_docEnumValues;
5569}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5765 of file memberdef.cpp.

5766{
5767 return m_hasEnumValues;
5768}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1634 of file memberdef.cpp.

1635{
1636 return !m_examples.empty();
1637}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5760 of file memberdef.cpp.

5761{
5762 return m_hasInlineSource;
5763}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4532 of file memberdef.cpp.

4533{
4534 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4535 // initLines,userInitLines,maxInitLines);
4536 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4537 return (m_initLines>0 || (!m_initializer.isEmpty() && isFuncLikeMacro)) &&
4538 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4539 || m_initLines<m_userInitLines // explicitly enabled
4540 );
4541}

References Define, m_defArgList, m_initializer, m_initLines, m_maxInitLines, m_mtype, and m_userInitLines.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasOneLineInitializer()

bool MemberDefImpl::hasOneLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4521 of file memberdef.cpp.

4522{
4523 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4524 // qPrint(name()),qPrint(m_initializer),m_initLines,
4525 // m_maxInitLines,m_userInitLines);
4526 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4527 return !m_initializer.isEmpty() && m_initLines==0 && // one line initializer
4528 !isFuncLikeMacro &&
4529 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4530}

References Define, m_defArgList, m_initializer, m_initLines, m_maxInitLines, m_mtype, and m_userInitLines.

Referenced by writeDeclaration(), writeDocumentation(), and writeMemberDocSimple().

◆ hasReferencedByRelation()

bool MemberDefImpl::hasReferencedByRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5750 of file memberdef.cpp.

5751{
5753}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5755 of file memberdef.cpp.

5756{
5758}

References m_hasReferencesRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasUserDocumentation()

bool MemberDefImpl::hasUserDocumentation ( ) const
overridevirtual

Returns TRUE iff the definition is documented by the user.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 6364 of file memberdef.cpp.

6365{
6366 if (m_templateMaster)
6367 {
6368 return m_templateMaster->hasUserDocumentation();
6369 }
6370 else
6371 {
6373 }
6374}
bool hasUserDocumentation() const override

References DefinitionMixin< Base >::hasUserDocumentation(), and m_templateMaster.

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6166 of file memberdef.cpp.

6167{
6169}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5811 of file memberdef.cpp.

5812{
5813 return m_docProvider;
5814}

References m_docProvider.

◆ init()

void MemberDefImpl::init ( Definition * def,
const QCString & t,
const QCString & a,
const QCString & e,
Protection p,
Specifier v,
bool s,
Relationship r,
MemberType mt,
const ArgumentList & tal,
const ArgumentList & al,
const QCString & meta )
private

Definition at line 1326 of file memberdef.cpp.

1332{
1333 m_classDef=nullptr;
1334 m_fileDef=nullptr;
1335 m_moduleDef=nullptr;
1336 m_redefines=nullptr;
1337 m_relatedAlso=nullptr;
1338 m_accessorClass=nullptr;
1339 m_nspace=nullptr;
1340 m_memDef=nullptr;
1341 m_memDec=nullptr;
1342 m_group=nullptr;
1343 m_grpId=-1;
1344 m_enumScope=nullptr;
1346 m_hasCallGraph = Config_getBool(CALL_GRAPH);
1347 m_hasCallerGraph = Config_getBool(CALLER_GRAPH);
1348 m_hasReferencedByRelation = Config_getBool(REFERENCED_BY_RELATION);
1349 m_hasReferencesRelation = Config_getBool(REFERENCES_RELATION);
1350 m_hasEnumValues = Config_getBool(SHOW_ENUM_VALUES);
1351 m_hasInlineSource = Config_getBool(INLINE_SOURCES);
1352 m_initLines=0;
1353 m_type=t;
1354 if (mt==MemberType::Typedef) m_type.stripPrefix("typedef ");
1355 // type.stripPrefix("struct ");
1356 // type.stripPrefix("class " );
1357 // type.stripPrefix("union " );
1359 m_args=a;
1361 if (m_type.isEmpty()) m_decl=d->name()+m_args; else m_decl=m_type+" "+d->name()+m_args;
1362
1363 m_memberGroup=nullptr;
1364 m_virt=v;
1365 m_prot=p;
1366 m_related=r;
1367 m_stat=s;
1368 m_mtype=mt;
1369 m_exception=e;
1370 m_proto=FALSE;
1372 m_memSpec=TypeSpecifier();
1374 m_annMemb=nullptr;
1375 m_annEnumType=nullptr;
1376 m_groupAlias=nullptr;
1378 m_tspec=FALSE;
1379 m_cachedAnonymousType=nullptr;
1380 m_maxInitLines=Config_getInt(MAX_INITIALIZER_LINES);
1381 m_userInitLines=-1;
1383 // copy function template arguments (if any)
1384 m_tArgList = tal;
1385 //printf("new member al=%p\n",al);
1386 // copy function definition arguments (if any)
1387 m_defArgList = al;
1388 // convert function declaration arguments (if any)
1389 if (!m_args.isEmpty())
1390 {
1392 //printf("setDeclArgList %s to %s const=%d\n",qPrint(args),
1393 // qPrint(argListToString(declArgList)),declArgList->constSpecifier);
1394 }
1395 m_metaData = meta;
1396 m_templateMaster = nullptr;
1399 m_cachedTypedefValue = nullptr;
1401 m_groupMember = nullptr;
1404 m_docProvider = nullptr;
1405 m_isDMember = d->getDefFileName().lower().endsWith(".d");
1406}
std::unique_ptr< ArgumentList > stringToArgumentList(SrcLangExt lang, const QCString &argsString, QCString *extraTypeChars=nullptr)
Definition defargs.l:822

References Config_getBool, Config_getInt, QCString::endsWith(), FALSE, Definition::getDefFileName(), Definition::getLanguage(), QCString::lower(), m_accessorClass, m_annEnumType, m_annMemb, m_annScope, m_args, m_cachedAnonymousType, m_cachedTypedefValue, m_classDef, m_decl, m_declArgList, m_defArgList, m_docEnumValues, m_docProvider, m_docsForDefinition, m_enumScope, m_exception, m_explExt, m_extraTypeChars, m_fileDef, m_group, m_groupAlias, m_groupMember, m_grpId, m_hasCallerGraph, m_hasCallGraph, m_hasDocumentedParams, m_hasDocumentedReturnType, m_hasEnumValues, m_hasInlineSource, m_hasReferencedByRelation, m_hasReferencesRelation, m_implOnly, m_initLines, m_isDMember, m_isTypedefValCached, m_livesInsideEnum, m_maxInitLines, m_memberGroup, m_memDec, m_memDef, m_memSpec, m_metaData, m_moduleDef, m_mtype, m_nspace, m_prot, m_proto, m_redefines, m_related, m_relatedAlso, m_stat, m_tArgList, m_templateMaster, m_tspec, m_type, m_userInitLines, m_vhdlSpec, m_virt, Definition::name(), removeRedundantWhiteSpace(), stringToArgumentList(), TRUE, Typedef, and UNKNOWN.

Referenced by MemberDefImpl(), and writeDocumentation().

◆ initializer()

const QCString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5102 of file memberdef.cpp.

5103{
5104 return m_initializer;
5105}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5107 of file memberdef.cpp.

5108{
5109 return m_initLines;
5110}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1623 of file memberdef.cpp.

1624{
1625 m_enumFields.push_back(md);
1626}

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1578 of file memberdef.cpp.

1579{
1580 if (m_templateMaster)
1581 {
1582 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef *>(m_templateMaster));
1583 if (mdm)
1584 {
1585 mdm->insertReimplementedBy(md);
1586 }
1587 }
1588 if (!m_redefinedBy.contains(md))
1589 {
1590 m_redefinedBy.inSort(md);
1591 }
1592}
virtual void insertReimplementedBy(MemberDef *md)=0

References MemberDefMutable::insertReimplementedBy(), m_redefinedBy, m_templateMaster, and toMemberDefMutable().

◆ invalidateCachedArgumentTypes()

void MemberDefImpl::invalidateCachedArgumentTypes ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6160 of file memberdef.cpp.

6161{
6164}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6052 of file memberdef.cpp.

6053{
6055}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5402 of file memberdef.cpp.

5403{
5404 return m_memSpec.isAbstract();
5405}

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5352 of file memberdef.cpp.

5353{
5354 return m_memSpec.isAddable();
5355}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5427 of file memberdef.cpp.

5428{
5429 return m_memSpec.isAssign();
5430}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5484 of file memberdef.cpp.

5485{
5486 return m_memSpec.isAttribute();
5487}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5499 of file memberdef.cpp.

5500{
5501 return m_memSpec.isBound();
5502}

References m_memSpec.

Referenced by getLabels().

◆ isBriefSectionVisible()

bool MemberDefImpl::isBriefSectionVisible ( ) const
overridevirtual

This methods returns TRUE iff the brief section (also known as declaration section) is visible in the documentation.

Implements MemberDef.

Definition at line 2031 of file memberdef.cpp.

2032{
2033 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2034 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2035 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2036 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2037 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2038 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
2039
2040 //printf("Member %s grpId=%d docs=%s file=%s args=%s\n",
2041 // qPrint(name()),
2042 // 0,"", //grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
2043 // "", //qPrint(getFileDef()->name()),
2044 // argsString());
2045
2046 bool hasDocs = hasDocumentation();
2047
2048 // only include static members with file/namespace scope if
2049 // explicitly enabled in the config file
2050 bool visibleIfStatic = !(getClassDef()==nullptr &&
2051 isStatic() &&
2052 !extractStatic
2053 );
2054
2055 // only include members is the are documented or
2056 // HIDE_UNDOC_MEMBERS is NO in the config file
2057 bool visibleIfDocumented = (!hideUndocMembers ||
2058 hasDocs ||
2060 );
2061
2062 // hide members with no detailed description and brief descriptions
2063 // explicitly disabled.
2064 bool visibleIfEnabled = !(hideUndocMembers &&
2065 documentation().isEmpty() &&
2066 !briefMemberDesc &&
2067 !repeatBrief
2068 );
2069
2070 // Hide friend (class|struct|union) declarations if HIDE_FRIEND_COMPOUNDS is true
2071 bool visibleIfFriendCompound = !(hideFriendCompounds &&
2072 isFriend() /*&&
2073 (m_type=="friend class" ||
2074 m_type=="friend struct" ||
2075 m_type=="friend union"
2076 )*/
2077 );
2078
2079 // only include members that are non-private unless EXTRACT_PRIVATE is
2080 // set to YES or the member is part of a group. And as a special case,
2081 // private *documented* virtual members are shown if EXTRACT_PRIV_VIRTUAL
2082 // is set to YES
2083 bool visibleIfPrivate = (protectionLevelVisible(protection()) ||
2085 (m_prot==Protection::Private &&
2086 (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual && hasDocs)
2087 );
2088
2089 // hide member if it overrides a member in a superclass and has no
2090 // documentation of its own
2091 //bool visibleIfDocVirtual = !reimplements() ||
2092 // !Config_getBool(INHERIT_DOCS) ||
2093 // hasDocs;
2094
2095 // true if this member is a constructor or destructor
2096 bool cOrDTor = isConstructor() || isDestructor();
2097
2098 // hide default constructors or destructors (no args) without
2099 // documentation
2100 bool visibleIfNotDefaultCDTor = !(cOrDTor &&
2101 (m_defArgList.empty() ||
2102 m_defArgList.front().type == "void"
2103 ) &&
2104 !hasDocs
2105 );
2106
2107
2108 //printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d "
2109 // "visibleIfPrivate=%d visibleIfNotDefaultCDTor=%d "
2110 // "visibleIfFriendCompound=%d !annScope=%d\n",
2111 // visibleIfStatic,visibleIfDocumented,
2112 // visibleIfEnabled,visibleIfPrivate,visibleIfNotDefaultCDTor,
2113 // visibleIfFriendCompound,!m_annScope);
2114
2115 bool visible = visibleIfStatic && visibleIfDocumented &&
2116 visibleIfEnabled && visibleIfPrivate &&
2117 /*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
2118 visibleIfFriendCompound &&
2119 !m_annScope && !isHidden();
2120 //printf("MemberDefImpl::isBriefSectionVisible() %d\n",visible);
2121 return visible;
2122}
bool isConstructor() const override
bool isDocumentedFriendClass() const override

References Config_getBool, documentation(), Friend, getClassDef(), hasDocumentation(), isConstructor(), isDestructor(), isDocumentedFriendClass(), QCString::isEmpty(), isFinal(), isFriend(), DefinitionMixin< MemberDefMutable >::isHidden(), isOverride(), isStatic(), m_annScope, m_defArgList, m_mtype, m_prot, m_virt, protection(), and protectionLevelVisible().

Referenced by writeEnumDeclaration().

◆ isCallable()

bool MemberDefImpl::isCallable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5550 of file memberdef.cpp.

5551{
5552 return isFunction() ||
5553 isSlot() ||
5554 isSignal() ||
5555 isConstructor() ||
5556 isDestructor() ||
5557 isObjCMethod() ||
5558 isFriend();
5559}

References isConstructor(), isDestructor(), isFriend(), isFunction(), isObjCMethod(), isSignal(), and isSlot().

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5606 of file memberdef.cpp.

5607{
5608 return m_memSpec.isConstEval();
5609}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5601 of file memberdef.cpp.

5602{
5603 return m_memSpec.isConstExpr();
5604}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5611 of file memberdef.cpp.

5612{
5613 return m_memSpec.isConstInit();
5614}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5504 of file memberdef.cpp.

5505{
5506 return m_memSpec.isConstrained();
5507}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4748 of file memberdef.cpp.

4749{
4750 if (m_isConstructorCached==0)
4751 {
4752 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4753 that->_computeIsConstructor();
4754 }
4756 return m_isConstructorCached==2;
4757
4758}
void _computeIsConstructor()
#define ASSERT(x)
Definition qcstring.h:39

References _computeIsConstructor(), ASSERT, m_isConstructorCached, and MemberDefImpl().

Referenced by isBriefSectionVisible(), isCallable(), and warnIfUndocumentedParams().

◆ isCopy()

bool MemberDefImpl::isCopy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5422 of file memberdef.cpp.

5423{
5424 return m_memSpec.isCopy();
5425}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5009 of file memberdef.cpp.

5010{
5011 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return TRUE;
5012 return FALSE;
5013}
bool isProperty() const override

References FALSE, getClassDef(), isProperty(), and TRUE.

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5272 of file memberdef.cpp.

5273{
5274 return m_mtype==MemberType::DCOP;
5275}

References DCOP, and m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5469 of file memberdef.cpp.

5470{
5471 return m_memSpec.isDefault();
5472}

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5262 of file memberdef.cpp.

5263{
5265}

References Define, and m_mtype.

Referenced by writeDeclaration(), writeDocumentation(), and writeMemberDocSimple().

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5474 of file memberdef.cpp.

5475{
5476 return m_memSpec.isDelete();
5477}

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4365 of file memberdef.cpp.

4366{
4367 return m_defArgList.isDeleted();
4368}

References m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4789 of file memberdef.cpp.

4790{
4791 if (m_isDestructorCached==0)
4792 {
4793 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4794 that->_computeIsDestructor();
4795 }
4797 return m_isDestructorCached==2;
4798}
void _computeIsDestructor()

References _computeIsDestructor(), ASSERT, m_isDestructorCached, and MemberDefImpl().

Referenced by _computeIsDestructor(), isBriefSectionVisible(), isCallable(), and warnIfUndocumentedParams().

◆ isDetailedSectionVisible()

bool MemberDefImpl::isDetailedSectionVisible ( MemberListContainer container) const
overridevirtual

Implements MemberDef.

Definition at line 2783 of file memberdef.cpp.

2784{
2785 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2786 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2787 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2788 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2789 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2790 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2791 getClassDef()!=nullptr && getClassDef()->isSimple();
2792
2793 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2794 !isReference();
2795 bool result = visible || simpleFilter;
2796 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2797 // qPrint(name()),result,groupFilter,fileFilter);
2798 return result;
2799}
bool hasBriefDescription() const override

References Config_getBool, File, getClassDef(), getGroupDef(), getNamespaceDef(), Group, DefinitionMixin< MemberDefMutable >::hasBriefDescription(), hasDetailedDescription(), Definition::isLinkable(), isReference(), and ClassDef::isSimple().

◆ isDictionary()

bool MemberDefImpl::isDictionary ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5247 of file memberdef.cpp.

5248{
5250}

References Dictionary, and m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5576 of file memberdef.cpp.

5577{
5578 return m_docsForDefinition;
5579}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4355 of file memberdef.cpp.

4356{
4357 ClassDef *fcd=nullptr;
4358 QCString baseName=name();
4359 int i=baseName.find('<');
4360 if (i!=-1) baseName=baseName.left(i);
4361 return (isFriendClass() &&
4362 (fcd=getClass(baseName)) && fcd->isLinkable());
4363}
bool isFriendClass() const override

References QCString::find(), getClass(), isFriendClass(), Definition::isLinkable(), QCString::left(), and DefinitionMixin< MemberDefMutable >::name().

Referenced by isBriefSectionVisible(), and writeDeclaration().

◆ isEnumerate()

bool MemberDefImpl::isEnumerate ( ) const
overridevirtual

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5447 of file memberdef.cpp.

5448{
5449 return m_memSpec.isEnumStruct();
5450}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5232 of file memberdef.cpp.

5233{
5235}

References EnumValue, and m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5282 of file memberdef.cpp.

5283{
5284 return m_mtype==MemberType::Event;
5285}

References Event, and m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5307 of file memberdef.cpp.

5308{
5309 return m_memSpec.isExplicit();
5310}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5540 of file memberdef.cpp.

5541{
5542 return m_explExt;
5543}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5377 of file memberdef.cpp.

5378{
5379 return m_memSpec.isFinal();
5380}

References m_memSpec.

Referenced by _computeLinkableInProject(), getLabels(), hasDetailedDescription(), isBriefSectionVisible(), and writeDeclaration().

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5292 of file memberdef.cpp.

5293{
5294 return m_related == Relationship::Foreign;
5295}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6391 of file memberdef.cpp.

6392{
6393 return (isFriend() &&
6394 (m_type=="friend class" || m_type=="friend struct" ||
6395 m_type=="friend union"));
6396}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6381 of file memberdef.cpp.

6382{
6383 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6384 bool isFriendToHide = hideFriendCompounds &&
6385 (m_type=="friend class" ||
6386 m_type=="friend struct" ||
6387 m_type=="friend union");
6388 return isFriendToHide;
6389}
bool isFriendToHide() const override

References Config_getBool, isFriendToHide(), and m_type.

Referenced by isFriendToHide(), isNotFriend(), and isRelatedOrFriend().

◆ isFunction()

bool MemberDefImpl::isFunction ( ) const
overridevirtual

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6404 of file memberdef.cpp.

6405{
6406 return isFunction() || isSlot() || isSignal();
6407}

References isFunction(), isSignal(), and isSlot().

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5257 of file memberdef.cpp.

5258{
5259 return m_mtype==MemberType::Variable && QCString(argsString()).find(")(")!=-1;
5260}

References argsString(), QCString::find(), m_mtype, and Variable.

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5322 of file memberdef.cpp.

5323{
5324 return m_memSpec.isGettable();
5325}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5535 of file memberdef.cpp.

5536{
5537 return m_implOnly;
5538}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5397 of file memberdef.cpp.

5398{
5399 return m_memSpec.isInitonly();
5400}

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5302 of file memberdef.cpp.

5303{
5304 return m_memSpec.isInline();
5305}

References m_memSpec.

Referenced by getLabels().

◆ isLinkable()

bool MemberDefImpl::isLinkable ( ) const
overridevirtual

Returns TRUE iff it is possible to link to this item. This can be a link to another project imported via a tag file.

Implements Definition.

Definition at line 1903 of file memberdef.cpp.

1904{
1905 if (m_templateMaster)
1906 {
1907 return m_templateMaster->isLinkable();
1908 }
1909 else
1910 {
1911 return isLinkableInProject() || isReference();
1912 }
1913}

References isLinkableInProject(), isReference(), and m_templateMaster.

Referenced by hasDetailedDescription(), visibleInIndex(), writeDocumentation(), and writeLink().

◆ isLinkableInProject()

bool MemberDefImpl::isLinkableInProject ( ) const
overridevirtual

Returns TRUE iff it is possible to link to this item within this project.

Implements Definition.

Definition at line 1892 of file memberdef.cpp.

1893{
1894 if (m_isLinkableCached==0)
1895 {
1896 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1898 }
1900 return m_isLinkableCached==2;
1901}
void _computeLinkableInProject()

References _computeLinkableInProject(), ASSERT, m_isLinkableCached, and MemberDefImpl().

Referenced by addListReference(), isLinkable(), writeEnumDeclaration(), and writeTagFile().

◆ isMaybeAmbiguous()

bool MemberDefImpl::isMaybeAmbiguous ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5524 of file memberdef.cpp.

5525{
5526 return m_memSpec.isMaybeAmbiguous();
5527}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5519 of file memberdef.cpp.

5520{
5521 return m_memSpec.isMaybeDefault();
5522}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5514 of file memberdef.cpp.

5515{
5516 return m_memSpec.isMaybeVoid();
5517}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5312 of file memberdef.cpp.

5313{
5314 return m_memSpec.isMutable();
5315}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5382 of file memberdef.cpp.

5383{
5384 return m_memSpec.isNew();
5385}

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5596 of file memberdef.cpp.

5597{
5598 return m_memSpec.isNoDiscard();
5599}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5479 of file memberdef.cpp.

5480{
5481 return m_memSpec.isNoExcept();
5482}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5417 of file memberdef.cpp.

5418{
5419 return m_memSpec.isNonAtomic();
5420}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6399 of file memberdef.cpp.

6400{
6401 return !(isFriend() && isFriendToHide());
6402}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4997 of file memberdef.cpp.

4998{
4999 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return TRUE;
5000 return FALSE;
5001}

References FALSE, getClassDef(), isFunction(), and TRUE.

Referenced by addListReference(), getDeclType(), getLabels(), isCallable(), qualifiedName(), writeDeclaration(), writeDocumentation(), writeLink(), and writeMemberDocSimple().

◆ isObjCProperty()

bool MemberDefImpl::isObjCProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5003 of file memberdef.cpp.

5004{
5005 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return TRUE;
5006 return FALSE;
5007}

References FALSE, getClassDef(), isProperty(), and TRUE.

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5407 of file memberdef.cpp.

5408{
5409 return m_memSpec.isOptional();
5410}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5392 of file memberdef.cpp.

5393{
5394 return m_memSpec.isOverride();
5395}

References m_memSpec.

Referenced by _computeLinkableInProject(), getLabels(), hasDetailedDescription(), isBriefSectionVisible(), and writeDeclaration().

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5327 of file memberdef.cpp.

5328{
5329 return m_memSpec.isPrivateGettable();
5330}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5342 of file memberdef.cpp.

5343{
5344 return m_memSpec.isPrivateSettable();
5345}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5277 of file memberdef.cpp.

5278{
5280}

References m_mtype, and Property.

Referenced by isCSharpProperty(), isObjCProperty(), and writeDeclaration().

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5332 of file memberdef.cpp.

5333{
5334 return m_memSpec.isProtectedGettable();
5335}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5347 of file memberdef.cpp.

5348{
5349 return m_memSpec.isProtectedSettable();
5350}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5626 of file memberdef.cpp.

5627{
5628 return m_proto;
5629}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5529 of file memberdef.cpp.

5530{
5531 return m_memSpec.isPublished();
5532}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5362 of file memberdef.cpp.

5363{
5364 return m_memSpec.isRaisable();
5365}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5367 of file memberdef.cpp.

5368{
5369 return m_memSpec.isReadable();
5370}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5494 of file memberdef.cpp.

5495{
5496 return m_memSpec.isReadonly();
5497}

References m_memSpec.

Referenced by getLabels().

◆ isReference()

bool MemberDefImpl::isReference ( ) const
overridevirtual

Returns TRUE if this definition is imported via a tag file.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 6414 of file memberdef.cpp.

6415{
6417 (m_templateMaster && m_templateMaster->isReference());
6418}
bool isReference() const override

References DefinitionMixin< Base >::isReference(), and m_templateMaster.

Referenced by _computeLinkableInProject(), isDetailedSectionVisible(), isLinkable(), warnIfUndocumented(), warnIfUndocumentedParams(), and writeDeclaration().

◆ isReimplementedBy()

bool MemberDefImpl::isReimplementedBy ( const ClassDef * cd) const
overridevirtual

Implements MemberDef.

Definition at line 1604 of file memberdef.cpp.

1605{
1606 if (cd)
1607 {
1608 for (const auto &md : m_redefinedBy)
1609 {
1610 const ClassDef *mcd = md->getClassDef();
1611 if (mcd)
1612 {
1613 if (cd==mcd || cd->isBaseClass(mcd,TRUE))
1614 {
1615 return TRUE;
1616 }
1617 }
1618 }
1619 }
1620 return FALSE;
1621}
virtual int isBaseClass(const ClassDef *bcd, bool followInstances, const QCString &templSpec=QCString()) const =0
Returns TRUE iff bcd is a direct or indirect base class of this class.

References FALSE, ClassDef::isBaseClass(), m_redefinedBy, and TRUE.

◆ isRelated()

bool MemberDefImpl::isRelated ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5287 of file memberdef.cpp.

5288{
5289 return m_related == Relationship::Related;
5290}

References m_related.

Referenced by addListReference(), getLabels(), isRelatedOrFriend(), and writeLink().

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6409 of file memberdef.cpp.

6410{
6411 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6412}
bool isForeign() const override

References isForeign(), isFriend(), isFriendToHide(), and isRelated().

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5357 of file memberdef.cpp.

5358{
5359 return m_memSpec.isRemovable();
5360}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5412 of file memberdef.cpp.

5413{
5414 return m_memSpec.isRequired();
5415}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5432 of file memberdef.cpp.

5433{
5434 return m_memSpec.isRetain();
5435}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5387 of file memberdef.cpp.

5388{
5389 return m_memSpec.isSealed();
5390}

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5242 of file memberdef.cpp.

5243{
5245}

References m_mtype, and Sequence.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5337 of file memberdef.cpp.

5338{
5339 return m_memSpec.isSettable();
5340}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5212 of file memberdef.cpp.

5213{
5215}

References m_mtype, and Signal.

Referenced by _hasVisibleCallerGraph(), _hasVisibleCallGraph(), getLabels(), isCallable(), and isFunctionOrSignalSlot().

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5591 of file memberdef.cpp.

5592{
5593 return m_memSpec.isLocal();
5594}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5217 of file memberdef.cpp.

5218{
5219 return m_mtype==MemberType::Slot;
5220}

References m_mtype, and Slot.

Referenced by _hasVisibleCallerGraph(), _hasVisibleCallGraph(), getLabels(), isCallable(), and isFunctionOrSignalSlot().

◆ isStatic()

bool MemberDefImpl::isStatic ( ) const
overridevirtual

◆ isStrong()

bool MemberDefImpl::isStrong ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5442 of file memberdef.cpp.

5443{
5444 return m_memSpec.isStrong();
5445}

References m_memSpec.

Referenced by getDeclType(), getLabels(), getScopeString(), writeDocumentation(), and writeTagFile().

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5452 of file memberdef.cpp.

5453{
5455 m_enumScope &&
5456 m_enumScope->isStrong();
5457}

References EnumValue, m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5545 of file memberdef.cpp.

5546{
5547 return m_tspec;
5548}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5317 of file memberdef.cpp.

5318{
5319 return m_memSpec.isThreadLocal();
5320}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5509 of file memberdef.cpp.

5510{
5511 return m_memSpec.isTransient();
5512}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5464 of file memberdef.cpp.

5465{
5466 return m_memSpec.isAlias();
5467}

References m_memSpec.

Referenced by getDeclType(), writeDeclaration(), and writeDocumentation().

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5237 of file memberdef.cpp.

5238{
5240}

References m_mtype, and Typedef.

Referenced by fieldType(), getDeclType(), writeDeclaration(), and writeDocumentation().

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5780 of file memberdef.cpp.

5781{
5782 return m_isTypedefValCached;
5783}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5489 of file memberdef.cpp.

5490{
5491 return m_memSpec.isProperty();
5492}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5459 of file memberdef.cpp.

5460{
5461 return m_memSpec.isUnretained();
5462}

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5222 of file memberdef.cpp.

5223{
5225}

References m_mtype, and Variable.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5437 of file memberdef.cpp.

5438{
5439 return m_memSpec.isWeak();
5440}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5372 of file memberdef.cpp.

5373{
5374 return m_memSpec.isWritable();
5375}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5586 of file memberdef.cpp.

5587{
5588 return m_livesInsideEnum;
5589}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5935 of file memberdef.cpp.

5936{
5937 m_related = Relationship::Foreign;
5939}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6011 of file memberdef.cpp.

6012{
6014}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5929 of file memberdef.cpp.

5930{
5931 m_related = Relationship::Related;
5933}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5806 of file memberdef.cpp.

5807{
5808 return m_memDec;
5809}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5801 of file memberdef.cpp.

5802{
5803 return m_memDef;
5804}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5207 of file memberdef.cpp.

5208{
5209 return m_mtype;
5210}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4111 of file memberdef.cpp.

4112{
4113 switch (m_mtype)
4114 {
4115 case MemberType::Define: return "macro definition";
4116 case MemberType::Function: return "function";
4117 case MemberType::Variable: return "variable";
4118 case MemberType::Typedef: return "typedef";
4119 case MemberType::Enumeration: return "enumeration";
4120 case MemberType::EnumValue: return "enumvalue";
4121 case MemberType::Signal: return "signal";
4122 case MemberType::Slot: return "slot";
4123 case MemberType::Friend: return "friend";
4124 case MemberType::DCOP: return "dcop";
4125 case MemberType::Property: return "property";
4126 case MemberType::Event: return "event";
4127 case MemberType::Interface: return "interface";
4128 case MemberType::Service: return "service";
4129 case MemberType::Sequence: return "sequence";
4130 case MemberType::Dictionary: return "dictionary";
4131 default: return "unknown";
4132 }
4133}

References DCOP, Define, Dictionary, Enumeration, EnumValue, Event, Friend, Function, Interface, m_mtype, Property, Sequence, Service, Signal, Slot, Typedef, and Variable.

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5879 of file memberdef.cpp.

5880{
5881 m_memSpec.merge(s);
5882}

References m_memSpec.

◆ moveArgumentList()

void MemberDefImpl::moveArgumentList ( std::unique_ptr< ArgumentList > al)
overridevirtual

Implements MemberDefMutable.

Definition at line 4925 of file memberdef.cpp.

4926{
4927 m_defArgList = *al;
4928}

References m_defArgList.

◆ moveDeclArgumentList()

void MemberDefImpl::moveDeclArgumentList ( std::unique_ptr< ArgumentList > al)
overridevirtual

Implements MemberDefMutable.

Definition at line 4930 of file memberdef.cpp.

4931{
4932 m_declArgList = *al;
4933}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1549 of file memberdef.cpp.

1550{
1551 setOuterScope(scope);
1553 {
1554 m_classDef = toClassDef(scope);
1555 }
1556 else if (scope->definitionType()==Definition::TypeFile)
1557 {
1558 m_fileDef = toFileDef(scope);
1559 }
1560 else if (scope->definitionType()==Definition::TypeModule)
1561 {
1562 m_moduleDef = toModuleDef(scope);
1563 }
1564 else if (scope->definitionType()==Definition::TypeNamespace)
1565 {
1566 m_nspace = toNamespaceDef(scope);
1567 }
1570}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1951
ModuleDef * toModuleDef(Definition *d)
NamespaceDef * toNamespaceDef(Definition *d)

References Definition::definitionType(), m_classDef, m_fileDef, m_isConstructorCached, m_isLinkableCached, m_moduleDef, m_nspace, DefinitionMixin< MemberDefMutable >::setOuterScope(), toClassDef(), toFileDef(), toModuleDef(), toNamespaceDef(), Definition::TypeClass, Definition::TypeFile, Definition::TypeModule, and Definition::TypeNamespace.

◆ numberOfFlowKeyWords()

int MemberDefImpl::numberOfFlowKeyWords ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6171 of file memberdef.cpp.

6172{
6173 return m_numberOfFlowKW;
6174}

References m_numberOfFlowKW.

◆ objCMethodName()

QCString MemberDefImpl::objCMethodName ( bool localLink,
bool showStatic ) const
overridevirtual

Implements MemberDef.

Definition at line 5050 of file memberdef.cpp.

5051{
5052 QCString qm;
5053 if (showStatic)
5054 {
5055 if (isStatic()) qm="+ "; else qm="- ";
5056 }
5057 qm+=name();
5058 if (!localLink) // link to method of same class
5059 {
5060 qm+=" (";
5061 qm+=getClassDef()->name();
5062 qm+=")";
5063 }
5064 return qm;
5065}

References getClassDef(), isStatic(), Definition::name(), and DefinitionMixin< MemberDefMutable >::name().

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4969 of file memberdef.cpp.

4970{
4973}
static bool parseSourcesNeeded
Definition doxygen.h:122

References m_hasCallerGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideCallGraph()

void MemberDefImpl::overrideCallGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4963 of file memberdef.cpp.

4964{
4967}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4987 of file memberdef.cpp.

4988{
4990}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4992 of file memberdef.cpp.

4993{
4995}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4975 of file memberdef.cpp.

4976{
4979}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4981 of file memberdef.cpp.

4982{
4985}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5202 of file memberdef.cpp.

5203{
5204 return m_prot;
5205}

References m_prot.

Referenced by getLabels(), hasDetailedDescription(), isBriefSectionVisible(), and writeDeclaration().

◆ qualifiedName()

QCString MemberDefImpl::qualifiedName ( ) const
overridevirtual

Returns the fully qualified name of this definition

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 5015 of file memberdef.cpp.

5016{
5017 if (isObjCMethod())
5018 {
5019 QCString qm;
5020 if (isStatic()) qm="+"; else qm="-";
5021 qm+="[";
5022 qm+=getClassDef()->name()+" ";
5023 qm+=name();
5024 qm+="]";
5025 return qm;
5026 }
5027 else if (m_enumScope && m_enumScope->isStrong())
5028 {
5029 return m_enumScope->qualifiedName()+
5031 localName();
5032 }
5033 else
5034 {
5036 }
5037}
QCString qualifiedName() const override

References getClassDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), isObjCMethod(), isStatic(), DefinitionMixin< MemberDefMutable >::localName(), m_enumScope, Definition::name(), DefinitionMixin< MemberDefMutable >::name(), and DefinitionMixin< Base >::qualifiedName().

Referenced by _computeLinkableInProject(), _writeCallerGraph(), _writeCallGraph(), addListReference(), warnIfUndocumented(), warnIfUndocumentedParams(), and writeTagFile().

◆ redefineCount()

int MemberDefImpl::redefineCount ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6444 of file memberdef.cpp.

6445{
6446 return m_redefineCount;
6447}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1599 of file memberdef.cpp.

1600{
1601 return m_redefinedBy;
1602}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1594 of file memberdef.cpp.

1595{
1596 return m_redefines;
1597}

References m_redefines.

Referenced by _isReimplements(), _writeReimplements(), and virtualness().

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5561 of file memberdef.cpp.

5562{
5563 return m_relatedAlso;
5564}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6102 of file memberdef.cpp.

6103{
6104 return m_requiresClause;
6105}

References m_requiresClause.

◆ resolveAlias() [1/2]

const MemberDef * MemberDefImpl::resolveAlias ( ) const
inlineoverridevirtual

Implements MemberDef.

Definition at line 66 of file memberdef.cpp.

66{ return this; }

◆ resolveAlias() [2/2]

MemberDef * MemberDefImpl::resolveAlias ( )
inlineoverridevirtual

Implements MemberDef.

Definition at line 65 of file memberdef.cpp.

65{ return this; }

◆ resolveUnnamedParameters()

void MemberDefImpl::resolveUnnamedParameters ( const MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5641 of file memberdef.cpp.

5642{
5643 ArgumentList &decAl = m_declArgList;
5644 ArgumentList &defAl = m_defArgList;
5645 const ArgumentList &decAlSrc = md->declArgumentList();
5646 const ArgumentList &defAlSrc = md->argumentList();
5647 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5648 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5649 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5650 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5651 {
5652 Argument &decA = *decIt;
5653 Argument &defA = *defIt;
5654 const Argument &decAS = *decSrc;
5655 const Argument &defAS = *defSrc;
5656 if (decA.name.isEmpty())
5657 {
5658 if (!defA.name.isEmpty())
5659 {
5660 decA.name = defA.name;
5661 }
5662 else if (!decAS.name.isEmpty())
5663 {
5664 decA.name = decAS.name;
5665 }
5666 else if (!defAS.name.isEmpty())
5667 {
5668 decA.name = defAS.name;
5669 }
5670 }
5671 if (defA.name.isEmpty())
5672 {
5673 if (!decA.name.isEmpty())
5674 {
5675 defA.name = decA.name;
5676 }
5677 else if (!decAS.name.isEmpty())
5678 {
5679 defA.name = decAS.name;
5680 }
5681 else if (!defAS.name.isEmpty())
5682 {
5683 defA.name = defAS.name;
5684 }
5685 }
5686 }
5687}

References MemberDef::argumentList(), ArgumentList::begin(), MemberDef::declArgumentList(), ArgumentList::end(), QCString::isEmpty(), m_declArgList, m_defArgList, and Argument::name.

◆ setAccessorType()

void MemberDefImpl::setAccessorType ( ClassDef * cd,
const QCString & t )
overridevirtual

Implements MemberDefMutable.

Definition at line 4945 of file memberdef.cpp.

4946{
4947 m_accessorClass = cd;
4948 m_accessorType = t;
4949}

References m_accessorClass, and m_accessorType.

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4392 of file memberdef.cpp.

4393{
4394 QCString memAnchor = name();
4395 if (!m_args.isEmpty()) memAnchor+=m_args;
4396 if (m_memSpec.isAlias()) // this is for backward compatibility
4397 {
4398 memAnchor.prepend(" = "+m_initializer);
4399 }
4400 memAnchor.prepend(definition()); // actually the method name is now included
4401 // twice, which is silly, but we keep it this way for backward
4402 // compatibility.
4403
4404
4405 // include number of template arguments as well,
4406 // to distinguish between two template
4407 // specializations that only differ in the template parameters.
4408 if (m_tArgList.hasParameters())
4409 {
4410 char buf[20];
4411 qsnprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4412 buf[19]='\0';
4413 memAnchor.prepend(buf);
4414 }
4415 if (!m_requiresClause.isEmpty())
4416 {
4417 memAnchor+=" "+m_requiresClause;
4418 }
4419 if (m_redefineCount>0)
4420 {
4421 char buf[20];
4422 qsnprintf(buf,20,":%d",m_redefineCount);
4423 buf[19]='\0';
4424 memAnchor.append(buf);
4425 }
4426
4427 // convert to md5 hash
4428 uint8_t md5_sig[16];
4429 char sigStr[33];
4430 MD5Buffer(memAnchor.data(),static_cast<unsigned int>(memAnchor.length()),md5_sig);
4431 MD5SigToString(md5_sig,sigStr);
4432 m_anc = QCString("a")+sigStr;
4433}
QCString & append(char c)
Definition qcstring.h:396
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
#define qsnprintf
Definition qcstring.h:49

References QCString::append(), QCString::data(), definition(), QCString::length(), m_anc, m_args, m_initializer, m_memSpec, m_redefineCount, m_requiresClause, m_tArgList, DefinitionMixin< MemberDefMutable >::name(), QCString::prepend(), and qsnprintf.

◆ setAnonymousEnumType()

void MemberDefImpl::setAnonymousEnumType ( const MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5968 of file memberdef.cpp.

5969{
5970 m_annEnumType = md;
5971}

References m_annEnumType.

◆ setArgsString()

void MemberDefImpl::setArgsString ( const QCString & as)
overridevirtual

Implements MemberDefMutable.

Definition at line 5946 of file memberdef.cpp.

5947{
5948 m_args = as;
5949}

References m_args.

◆ setBitfields()

void MemberDefImpl::setBitfields ( const QCString & s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5901 of file memberdef.cpp.

5902{
5903 m_bitfields = QCString(s).simplifyWhiteSpace();
5904}

References m_bitfields, and QCString::simplifyWhiteSpace().

◆ setBriefDescription()

void MemberDefImpl::setBriefDescription ( const QCString & b,
const QCString & briefFile,
int briefLine )
overridevirtual

Sets the brief description of this definition to b. A dot is added to the sentence if not available.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1874 of file memberdef.cpp.

1875{
1878}
virtual int briefLine() const =0
virtual QCString briefFile() const =0
void setBriefDescription(const QCString &brief, const QCString &briefFile, int briefLine) override

References DefinitionMixin< MemberDefMutable >::briefFile(), DefinitionMixin< MemberDefMutable >::briefLine(), m_isLinkableCached, and DefinitionMixin< Base >::setBriefDescription().

◆ setCategory()

void MemberDefImpl::setCategory ( ClassDef * def)
overridevirtual

Implements MemberDefMutable.

Definition at line 6072 of file memberdef.cpp.

6073{
6074 m_category = def;
6075}

References m_category.

◆ setCategoryRelation()

void MemberDefImpl::setCategoryRelation ( const MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6082 of file memberdef.cpp.

6083{
6084 m_categoryRelation = md;
6085}

References m_categoryRelation.

◆ setDeclFile()

void MemberDefImpl::setDeclFile ( const QCString & df,
int line,
int column )
overridevirtual

Implements MemberDefMutable.

Definition at line 5999 of file memberdef.cpp.

6000{
6001 m_declFileName = df;
6002 m_declLine = line;
6003 m_declColumn = column;
6004}

References m_declColumn, m_declFileName, and m_declLine.

Referenced by setExplicitExternal(), and setPrototype().

◆ setDefinition()

void MemberDefImpl::setDefinition ( const QCString & d)
overridevirtual

Implements MemberDefMutable.

Definition at line 5845 of file memberdef.cpp.

5846{
5847 m_def=d;
5848}

References m_def.

◆ setDefinitionTemplateParameterLists()

void MemberDefImpl::setDefinitionTemplateParameterLists ( const ArgumentLists & lists)
overridevirtual

Implements MemberDefMutable.

Definition at line 1916 of file memberdef.cpp.

1917{
1918 m_defTmpArgLists = lists;
1919}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6042 of file memberdef.cpp.

6043{
6045}

References m_docsForDefinition.

◆ setDocumentation()

void MemberDefImpl::setDocumentation ( const QCString & d,
const QCString & docFile,
int docLine,
bool stripWhiteSpace = TRUE )
overridevirtual

Sets the documentation of this definition to d.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1868 of file memberdef.cpp.

1869{
1872}
virtual QCString docFile() const =0
virtual int docLine() const =0
void setDocumentation(const QCString &doc, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE) override
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition stringutil.h:72

References DefinitionMixin< MemberDefMutable >::docFile(), DefinitionMixin< MemberDefMutable >::docLine(), m_isLinkableCached, DefinitionMixin< Base >::setDocumentation(), and stripWhiteSpace().

◆ setDocumentedEnumValues()

void MemberDefImpl::setDocumentedEnumValues ( bool value)
overridevirtual

Implements MemberDefMutable.

Definition at line 5963 of file memberdef.cpp.

5964{
5965 m_docEnumValues=value;
5966}

References m_docEnumValues.

◆ setEnumBaseType()

void MemberDefImpl::setEnumBaseType ( const QCString & type)
overridevirtual

Implements MemberDefMutable.

Definition at line 6087 of file memberdef.cpp.

6088{
6089 m_enumBaseType = type;
6090}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5956 of file memberdef.cpp.

5957{
5958 m_classDef = cd;
5961}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

void MemberDefImpl::setEnumScope ( MemberDef * md,
bool livesInsideEnum = FALSE )
overridevirtual

Implements MemberDefMutable.

Definition at line 4449 of file memberdef.cpp.

4450{
4451 m_enumScope=md;
4453 if (md->getGroupDef())
4454 {
4455 m_group = md->getGroupDef();
4456 m_grouppri = md->getGroupPri();
4461 }
4462}
virtual bool getGroupHasDocs() const =0
virtual GroupDef * getGroupDef()=0
virtual int getGroupStartLine() const =0
virtual Grouping::GroupPri_t getGroupPri() const =0
virtual QCString getGroupFileName() const =0
bool livesInsideEnum() const override

References MemberDef::getGroupDef(), MemberDef::getGroupFileName(), MemberDef::getGroupHasDocs(), MemberDef::getGroupPri(), MemberDef::getGroupStartLine(), livesInsideEnum(), m_enumScope, m_group, m_groupFileName, m_groupHasDocs, m_grouppri, m_groupStartLine, m_isLinkableCached, and m_livesInsideEnum.

◆ setExplicitExternal()

void MemberDefImpl::setExplicitExternal ( bool b,
const QCString & df,
int line,
int column )
overridevirtual

Implements MemberDefMutable.

Definition at line 5986 of file memberdef.cpp.

5987{
5988 m_explExt=b;
5989 if (b)
5990 {
5991 setDeclFile(df,line,column);
5992 }
5993 else
5994 {
5995 setDefFile(df,line,column);
5996 }
5997}
void setDefFile(const QCString &df, int defLine, int defColumn) override
void setDeclFile(const QCString &df, int line, int column) override

References m_explExt, setDeclFile(), and DefinitionMixin< MemberDefMutable >::setDefFile().

◆ setFileDef()

void MemberDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5850 of file memberdef.cpp.

5851{
5852 m_fileDef=fd;
5856}

References m_fileDef, m_isConstructorCached, m_isDestructorCached, and m_isLinkableCached.

Referenced by _writeMultiLineInitializer().

◆ setFormalTemplateArguments()

void MemberDefImpl::setFormalTemplateArguments ( const ArgumentList & al)
overridevirtual

Implements MemberDefMutable.

Definition at line 6037 of file memberdef.cpp.

6038{
6040}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 6021 of file memberdef.cpp.

6022{
6023 m_annMemb=m;
6024}

References m_annMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6016 of file memberdef.cpp.

6017{
6018 m_annScope=b;
6019}

References m_annScope.

◆ setGroupAlias()

void MemberDefImpl::setGroupAlias ( const MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6047 of file memberdef.cpp.

6048{
6049 m_groupAlias = md;
6050}

References m_groupAlias.

◆ setGroupDef()

void MemberDefImpl::setGroupDef ( GroupDef * gd,
Grouping::GroupPri_t pri,
const QCString & fileName,
int startLine,
bool hasDocs,
MemberDef * member = nullptr )
overridevirtual

Implements MemberDefMutable.

Definition at line 4435 of file memberdef.cpp.

4438{
4439 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4440 m_group=gd;
4441 m_grouppri=pri;
4442 m_groupFileName=fileName;
4443 m_groupStartLine=startLine;
4444 m_groupHasDocs=hasDocs;
4445 m_groupMember=member;
4447}

References m_group, m_groupFileName, m_groupHasDocs, m_groupMember, m_grouppri, m_groupStartLine, and m_isLinkableCached.

◆ setHidden()

void MemberDefImpl::setHidden ( bool b)
overridevirtual

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1886 of file memberdef.cpp.

1887{
1890}
void setHidden(bool b) override

References m_isLinkableCached, and DefinitionMixin< Base >::setHidden().

◆ setInbodyDocumentation()

void MemberDefImpl::setInbodyDocumentation ( const QCString & d,
const QCString & docFile,
int docLine )
overridevirtual

Set the documentation that was found inside the body of an item. If there was already some documentation set, the new documentation will be appended.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1880 of file memberdef.cpp.

1881{
1884}
virtual int inbodyLine() const =0
virtual QCString inbodyFile() const =0
void setInbodyDocumentation(const QCString &doc, const QCString &docFile, int docLine) override

References DefinitionMixin< MemberDefMutable >::inbodyFile(), DefinitionMixin< MemberDefMutable >::inbodyLine(), m_isLinkableCached, and DefinitionMixin< Base >::setInbodyDocumentation().

◆ setInheritsDocsFrom()

void MemberDefImpl::setInheritsDocsFrom ( const MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5941 of file memberdef.cpp.

5942{
5943 m_docProvider = md;
5944}

References m_docProvider.

◆ setInitializer()

void MemberDefImpl::setInitializer ( const QCString & i)
overridevirtual

Implements MemberDefMutable.

Definition at line 4543 of file memberdef.cpp.

4544{
4545 size_t indent=0;
4547 int l=static_cast<int>(m_initializer.length());
4548 int p=l-1;
4549 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4550 m_initializer=m_initializer.left(p+1);
4551 m_initLines=m_initializer.contains('\n');
4552 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4553}
const QCString & initializer() const override
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6670

References detab(), initializer(), m_initializer, and m_initLines.

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5906 of file memberdef.cpp.

5907{
5908 if (lines!=-1)
5909 {
5910 m_userInitLines=lines;
5911 }
5912}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6062 of file memberdef.cpp.

6063{
6064 m_memDec=md;
6065}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6057 of file memberdef.cpp.

6058{
6059 m_memDef=md;
6060}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4378 of file memberdef.cpp.

4379{
4380 m_memberGroup = grp;
4381}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 6006 of file memberdef.cpp.

6007{
6008 m_grpId=id;
6009}
virtual QCString id() const =0

References DefinitionMixin< MemberDefMutable >::id(), and m_grpId.

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5869 of file memberdef.cpp.

5870{
5871 m_memSpec=s;
5872}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5839 of file memberdef.cpp.

5840{
5841 m_mtype=t;
5843}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5858 of file memberdef.cpp.

5859{
5860 m_moduleDef=mod;
5861}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4472 of file memberdef.cpp.

4473{
4474 m_nspace=nd;
4475 setOuterScope(nd);
4476}

References m_nspace, and DefinitionMixin< MemberDefMutable >::setOuterScope().

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5863 of file memberdef.cpp.

5864{
5865 m_prot=p;
5867}

References m_isLinkableCached, and m_prot.

◆ setPrototype()

void MemberDefImpl::setPrototype ( bool p,
const QCString & df,
int line,
int column )
overridevirtual

Implements MemberDefMutable.

Definition at line 5973 of file memberdef.cpp.

5974{
5975 m_proto=p;
5976 if (p)
5977 {
5978 setDeclFile(df,line,column);
5979 }
5980 else
5981 {
5982 setDefFile(df,line,column);
5983 }
5984}

References m_proto, setDeclFile(), and DefinitionMixin< MemberDefMutable >::setDefFile().

◆ setReadAccessor()

void MemberDefImpl::setReadAccessor ( const QCString & r)
overridevirtual

Implements MemberDefMutable.

Definition at line 5914 of file memberdef.cpp.

5915{
5916 m_read=r;
5917}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6449 of file memberdef.cpp.

6450{
6451 m_redefineCount=count;
6452}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1573 of file memberdef.cpp.

1574{
1575 m_redefines = md;
1576}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5951 of file memberdef.cpp.

5952{
5953 m_relatedAlso=cd;
5954}

References m_relatedAlso.

◆ setRequiresClause()

void MemberDefImpl::setRequiresClause ( const QCString & req)
overridevirtual

Implements MemberDefMutable.

Definition at line 6097 of file memberdef.cpp.

6098{
6099 m_requiresClause = req;
6100}

References m_requiresClause.

◆ setSectionList()

void MemberDefImpl::setSectionList ( const Definition * container,
const MemberList * sl )
overridevirtual

Implements MemberDefMutable.

Definition at line 4608 of file memberdef.cpp.

4609{
4610 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4611 m_sectionMap.emplace(container,sl);
4612}

References m_sectionMap.

◆ setTagInfo()

void MemberDefImpl::setTagInfo ( const TagInfo * i)
overridevirtual

Implements MemberDefMutable.

Definition at line 5039 of file memberdef.cpp.

5040{
5041 if (ti)
5042 {
5043 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5044 m_anc=ti->anchor;
5045 setReference(ti->tagName);
5047 }
5048}
void setReference(const QCString &r) override
QCString stripExtension(const QCString &fName)
Definition util.cpp:4885

References TagInfo::anchor, TagInfo::fileName, m_anc, m_explicitOutputFileBase, DefinitionMixin< MemberDefMutable >::setReference(), stripExtension(), and TagInfo::tagName.

◆ setTemplateMaster()

void MemberDefImpl::setTemplateMaster ( const MemberDef * mt)
overridevirtual

Implements MemberDefMutable.

Definition at line 6031 of file memberdef.cpp.

6032{
6035}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5924 of file memberdef.cpp.

5925{
5926 m_tspec=b;
5927}

References m_tspec.

◆ setType()

void MemberDefImpl::setType ( const QCString & t)
overridevirtual

Implements MemberDefMutable.

Definition at line 4940 of file memberdef.cpp.

4941{
4942 m_type = t;
4943}

References m_type.

◆ setTypeConstraints()

void MemberDefImpl::setTypeConstraints ( const ArgumentList & al)
overridevirtual

Implements MemberDefMutable.

Definition at line 4935 of file memberdef.cpp.

4936{
4937 m_typeConstraints = al;
4938}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5874 of file memberdef.cpp.

5875{
5876 m_vhdlSpec=s;
5877}

References m_vhdlSpec.

◆ setWriteAccessor()

void MemberDefImpl::setWriteAccessor ( const QCString & w)
overridevirtual

Implements MemberDefMutable.

Definition at line 5919 of file memberdef.cpp.

5920{
5921 m_write=w;
5922}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1639 of file memberdef.cpp.

1640{
1641 QCString n = name();
1642 QCString s = getScopeString();
1643
1644 if (!s.isEmpty())
1645 {
1646 n.prepend(s+"::");
1647 }
1648 else if (isStatic() && getFileDef())
1649 {
1650 n.prepend(getFileDef()->name()+":");
1651 }
1652 if (isCallable())
1653 {
1654 n.append(argsString());
1655 }
1656 return n;
1657}
bool isCallable() const override
QCString getScopeString() const override

References QCString::append(), argsString(), getFileDef(), getScopeString(), isCallable(), QCString::isEmpty(), isStatic(), DefinitionMixin< MemberDefMutable >::name(), and QCString::prepend().

◆ templateArguments()

const ArgumentList & MemberDefImpl::templateArguments ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5689 of file memberdef.cpp.

5690{
5691 return m_tArgList;
5692}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5770 of file memberdef.cpp.

5771{
5772 return m_templateMaster;
5773}

References m_templateMaster.

Referenced by _computeLinkableInProject(), getOutputFileBase(), and getReference().

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6376 of file memberdef.cpp.

6377{
6378 return m_typeConstraints;
6379}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5082 of file memberdef.cpp.

5083{
5084 return m_type;
5085}

References m_type.

Referenced by _computeIsDestructor(), warnIfUndocumentedParams(), and writeTagFile().

◆ virtualness()

Specifier MemberDefImpl::virtualness ( int count = 0) const
overridevirtual

Implements MemberDef.

Definition at line 4614 of file memberdef.cpp.

4615{
4616 if (count>25)
4617 {
4619 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4620 return Specifier::Normal;
4621 }
4622 Specifier v = m_virt;
4623 const MemberDef *rmd = reimplements();
4624 while (rmd && v==Specifier::Normal)
4625 {
4626 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4627 rmd = rmd->reimplements();
4628 }
4629 return v;
4630}
virtual const MemberDef * reimplements() const =0

References DefinitionMixin< MemberDefMutable >::getDefFileName(), DefinitionMixin< MemberDefMutable >::getDefLine(), m_virt, DefinitionMixin< MemberDefMutable >::name(), MemberDef::reimplements(), reimplements(), MemberDef::virtualness(), and warn.

Referenced by getLabels().

◆ visibleInIndex()

bool MemberDefImpl::visibleInIndex ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4207 of file memberdef.cpp.

4208{
4209 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4210 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4211 return (!isAnonymous() &&
4212 (!hideUndocMembers || hasDocumentation()) &&
4213 (!isStatic() || extractStatic) &&
4214 isLinkable()
4215 );
4216}

References Config_getBool, hasDocumentation(), DefinitionMixin< MemberDefMutable >::isAnonymous(), isLinkable(), and isStatic().

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4135 of file memberdef.cpp.

4136{
4137 /*
4138 * Removed bug_303020:
4139 * if (m_memberGroup) return;
4140 */
4141 const ClassDef *cd = getClassDef();
4142 const NamespaceDef *nd = getNamespaceDef();
4143 const FileDef *fd = getFileDef();
4144 const GroupDef *gd = getGroupDef();
4145 const Definition *d=nullptr;
4146 QCString t;
4147 if (cd)
4148 {
4149 t=cd->compoundTypeString();
4150 d=cd;
4151 }
4152 else if (nd)
4153 {
4154 t=nd->compoundTypeString();
4155 d=nd;
4156 }
4157 else if (gd)
4158 {
4159 t="group";
4160 d=gd;
4161 }
4162 else
4163 {
4164 t="file";
4165 d=fd;
4166 }
4167 bool extractAll = Config_getBool(EXTRACT_ALL);
4168
4169 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4170 // qPrint(name()),
4171 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4172 if ((!hasUserDocumentation() && !extractAll) &&
4173 !isFriendClass() &&
4174 name().find('@')==-1 && d && d->name().find('@')==-1 &&
4177 !isReference() && !isDeleted()
4178 )
4179 {
4180 SrcLangExt lang = getLanguage();
4181 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4182 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4184 substitute(d->name(),"::",sep));
4185 }
4186 else if (!hasDetailedDescription())
4187 {
4189 }
4190
4191 // if it is an enum, we check that its members are documented
4192 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4193 {
4194 for (const auto &fmd : enumFieldList())
4195 {
4196 if (!fmd->isLinkableInProject())
4197 {
4198 SrcLangExt lang = getLanguage();
4199 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4200 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4201 qualifiedName(),sep,fmd->name());
4202 }
4203 }
4204 }
4205}
virtual QCString compoundTypeString() const =0
Returns the type of compound as a string.
void warnIfUndocumentedParams() const override
QCString memberTypeName() const override
bool hasUserDocumentation() const override
bool _isAnonymousBitField() const
bool isDeleted() const override
virtual QCString compoundTypeString() const =0
#define warn_undoc(file, line, fmt,...)
Definition message.h:102

References _isAnonymousBitField(), argsString(), ClassDef::compoundTypeString(), NamespaceDef::compoundTypeString(), Config_getBool, enumFieldList(), QCString::find(), getClassDef(), DefinitionMixin< MemberDefMutable >::getDefFileName(), DefinitionMixin< MemberDefMutable >::getDefLine(), getFileDef(), getGroupDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), getNamespaceDef(), hasDetailedDescription(), hasUserDocumentation(), isDeleted(), isEnumerate(), isFriendClass(), isReference(), m_prot, memberTypeName(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), protectionLevelVisible(), qualifiedName(), substitute(), TRUE, warn, warn_undoc, and warnIfUndocumentedParams().

Referenced by writeDeclaration().

◆ warnIfUndocumentedParams()

void MemberDefImpl::warnIfUndocumentedParams ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4297 of file memberdef.cpp.

4298{
4299 QCString returnType = typeString();
4300 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4301 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=-1;
4302
4303 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4304 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4305 {
4306 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4307 if (!defArgList.trailingReturnType().isEmpty())
4308 {
4309 QCString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4310 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4311 }
4312 }
4313 if (!Config_getBool(EXTRACT_ALL) &&
4314 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4315 Config_getBool(WARN_NO_PARAMDOC) &&
4316 isFunction() &&
4317 !isDeleted() &&
4318 !isReference() &&
4320 {
4322 {
4324 "parameters of member {} are not documented",
4325 qualifiedName());
4326 }
4328 hasDocumentation() && !returnType.isEmpty() &&
4329 !( // not one of the cases where nothing is returned
4330 isVoidReturn || // void return type
4331 isFortranSubroutine || // fortran subroutine
4332 isConstructor() || // a constructor
4333 isDestructor() || // or a destructor
4334 isFriend() // or a friend
4335 )
4336 )
4337 {
4339 "return type of member {} is not documented",
4340 qualifiedName());
4341 }
4342 }
4343 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4345 (isVoidReturn || // void return type
4346 isFortranSubroutine || // fortran subroutine
4347 isConstructor() || // a constructor
4348 isDestructor())) // or destructor
4349 {
4350 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4351 qualifiedName());
4352 }
4353}
QCString trailingReturnType() const
Definition arguments.h:114
static bool suppressDocWarnings
Definition doxygen.h:131
bool isDocsForDefinition() const override
bool endsWith(const char *s) const
Definition qcstring.h:524
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112

References argumentList(), Config_getBool, declArgumentList(), DefinitionMixin< MemberDefMutable >::docFile(), DefinitionMixin< MemberDefMutable >::docLine(), QCString::endsWith(), QCString::find(), DefinitionMixin< MemberDefMutable >::getLanguage(), hasDocumentation(), isConstructor(), isDeleted(), isDestructor(), isDocsForDefinition(), QCString::isEmpty(), isFriend(), isFunction(), isReference(), m_hasDocumentedParams, m_hasDocumentedReturnType, qualifiedName(), stripTrailingReturn(), Doxygen::suppressDocWarnings, ArgumentList::trailingReturnType(), typeString(), and warn_doc_error.

Referenced by warnIfUndocumented(), and writeDocumentation().

◆ writeDeclaration()

void MemberDefImpl::writeDeclaration ( OutputList & ol,
const ClassDef * cd,
const NamespaceDef * nd,
const FileDef * fd,
const GroupDef * gd,
const ModuleDef * mod,
bool inGroup,
int indentLevel,
const ClassDef * inheritFrom = nullptr,
const QCString & inheritId = QCString() ) const
overridevirtual

init.isEmpty() && initLines==0 && // one line initializer

Implements MemberDef.

Definition at line 2220 of file memberdef.cpp.

2223{
2224 //printf("> %s MemberDefImpl::writeDeclaration() inGroup=%d inheritId=%s\n",qPrint(qualifiedName()),inGroup,qPrint(inheritId));
2225
2226 // hide enum value, since they appear already as part of the enum, unless they
2227 // are explicitly grouped.
2228 if (!inGroup && m_mtype==MemberType::EnumValue) return;
2229
2230 const Definition *d=nullptr;
2231 ASSERT (cd!=nullptr || nd!=nullptr || fd!=nullptr || gd!=nullptr || mod!=nullptr); // member should belong to something
2232 if (cd) d=cd;
2233 else if (nd) d=nd;
2234 else if (fd) d=fd;
2235 else d=gd;
2236 if (d==gd || d==mod) // see bug 753608
2237 {
2238 if (getClassDef()) d = getClassDef();
2239 else if (getNamespaceDef()) d = getNamespaceDef();
2240 else if (getFileDef()) d = getFileDef();
2241 }
2242 else if (d==fd) // see issue #9850, namespace member can be shown in file scope as well
2243 {
2244 if (getNamespaceDef()) d = getNamespaceDef();
2245 }
2246 if (d==nullptr)
2247 {
2248 err("No context could be derived for member '{}'\n",name());
2249 return; // should not happen
2250 }
2251
2252 QCString cname = d->name();
2253 QCString cdname = d->displayName();
2254 QCString cfname = getOutputFileBase();
2255
2256 // search for the last anonymous scope in the member type
2257 ClassDef *annoClassDef=getClassDefOfAnonymousType();
2258
2260
2261 // start a new member declaration
2262 bool isAnonType = annoClassDef || m_annMemb || m_annEnumType;
2266 ol.startMemberItem(annoClassDef ? QCString() : anchor(), anonType, inheritId);
2267
2268
2269 // If there is no detailed description we need to write the anchor here.
2270 bool detailsVisible = hasDetailedDescription();
2271 bool writeAnchor = (inGroup || getGroupDef()==nullptr) && // only write anchors for member that have no details and are
2272 !detailsVisible && !m_annMemb && // rendered inside the group page or are not grouped at all
2273 inheritId.isEmpty();
2274
2275 if (writeAnchor)
2276 {
2277 QCString doxyArgs=argsString();
2278 QCString doxyName=name();
2279 if (!cname.isEmpty())
2280 {
2282 }
2283 ol.startDoxyAnchor(cfname,cname,anchor(),doxyName,doxyArgs);
2284 ol.addLabel(cfname,anchor());
2285 }
2286
2287 if (!detailsVisible)
2288 {
2289 ol.pushGeneratorState();
2293 ol.docify("\n");
2294 ol.popGeneratorState();
2295 }
2296
2297 if (annoClassDef || m_annMemb)
2298 {
2299 for (int j=0;j<indentLevel;j++)
2300 {
2302 }
2303 }
2304
2305 // *** write template lists
2306 if (m_tArgList.hasParameters() && getLanguage()==SrcLangExt::Cpp)
2307 {
2308 if (!isAnonType) ol.startMemberTemplateParams();
2310 if (!isAnonType) ol.endMemberTemplateParams(anchor(),inheritId);
2311 }
2312
2313
2314 // *** write type
2315 QCString ltype(m_type);
2316 if (isTypedef() && getLanguage() != SrcLangExt::Slice)
2317 {
2318 ltype.prepend("typedef ");
2319 }
2320 if (isTypeAlias())
2321 {
2322 ltype="using";
2323 }
2324 // strip 'friend' keyword from ltype
2325 ltype.stripPrefix("friend ");
2326 static const reg::Ex r(R"(@\d+)");
2327 reg::Match match;
2328 std::string stype = ltype.str();
2329 bool endAnonScopeNeeded=FALSE;
2330 if (reg::search(stype,match,r)) // member has an anonymous type
2331 {
2332 int i = static_cast<int>(match.position());
2333 int l = static_cast<int>(match.length());
2334 //printf("annoClassDef=%p annMemb=%p scopeName='%s' anonymous='%s'\n",
2335 // annoClassDef,annMemb,qPrint(cname),qPrint(ltype.mid(i,l)));
2336
2337 if (annoClassDef) // type is an anonymous compound
2338 {
2339 int ir=i+l;
2340 //printf("<<<<<<<<<<<<<<\n");
2341 ol.startAnonTypeScope(indentLevel);
2342 if (ltype.startsWith("typedef")) ol.docify("typedef ");
2343 annoClassDef->writeDeclaration(ol,m_annMemb,inGroup,indentLevel+1,inheritedFrom,inheritId);
2344 //printf(">>>>>>>>>>>>>> startMemberItem(2)\n");
2346 ol.startMemberItem(anchor(),anonType,inheritId);
2347 for (int j=0;j< indentLevel;j++)
2348 {
2350 }
2351 QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace();
2352 //printf(">>>>>> ltype='%s' varName='%s'\n",qPrint(ltype),qPrint(varName));
2353 ol.docify("}");
2354 if (varName.isEmpty() && isAnonymous())
2355 {
2356 ol.docify(";");
2357 }
2358 else if (!varName.isEmpty() && (varName.at(0)=='*' || varName.at(0)=='&'))
2359 {
2360 ol.docify(" ");
2361 ol.docify(varName);
2362 }
2363 endAnonScopeNeeded=TRUE;
2364 }
2365 else
2366 {
2367 if (getAnonymousEnumType()) // type is an anonymous enum
2368 {
2369 linkifyText(TextGeneratorOLImpl(ol), // out
2370 d, // scope
2371 getBodyDef(), // fileScope
2372 this, // self
2373 ltype.left(i), // text
2374 FALSE // autoBreak
2375 );
2376 getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd,mod);
2377 //ol+=*getAnonymousEnumType()->enumDecl();
2378 linkifyText(TextGeneratorOLImpl(ol),d,getFileDef(),this,ltype.right(ltype.length()-i-l),TRUE);
2379 }
2380 else
2381 {
2382 ltype = ltype.left(i) + " { ... } " + removeAnonymousScopes(ltype.right(ltype.length()-i-l));
2383 linkifyText(TextGeneratorOLImpl(ol), // out
2384 d, // scope
2385 getBodyDef(), // fileScope
2386 this, // self
2387 ltype, // text
2388 FALSE // autoBreak
2389 );
2390 }
2391 }
2392 }
2393 else if (ltype=="@") // rename type from enum values
2394 {
2395 ltype="";
2396 }
2397 else
2398 {
2399 if (isObjCMethod())
2400 {
2401 ltype.prepend("(");
2402 ltype.append(")");
2403 }
2404 linkifyText(TextGeneratorOLImpl(ol), // out
2405 d, // scope
2406 getBodyDef(), // fileScope
2407 this, // self
2408 ltype, // text
2409 FALSE // autoBreak
2410 );
2411 }
2412 bool htmlOn = ol.isEnabled(OutputType::Html);
2413 if (htmlOn && !ltype.isEmpty())
2414 {
2416 }
2417 if (!ltype.isEmpty()) ol.docify(" ");
2418 if (htmlOn)
2419 {
2421 }
2422
2423 if (m_annMemb)
2424 {
2425 ol.pushGeneratorState();
2428 ol.popGeneratorState();
2429 }
2430 else
2431 {
2432 ol.insertMemberAlign(m_tArgList.hasParameters());
2433 }
2434
2435 // *** write name
2436 if (!isAnonymous() && !_isAnonymousBitField()) // hide anonymous stuff
2437 {
2438 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2439 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2440 MemberDefMutable *annMemb = toMemberDefMutable(m_annMemb);
2441 bool visibleIfPrivate = (protectionLevelVisible(protection()) ||
2443 (m_prot==Protection::Private &&
2444 (m_virt!=Specifier::Normal || isOverride() || isFinal()) &&
2445 extractPrivateVirtual && hasDocumentation()
2446 ));
2447 //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d hasDocumentation=%d\n",qPrint(name()),gd,getGroupDef(),inGroup,isLinkable(),hasDocumentation());
2448 if (!name().isEmpty() && // name valid
2449 (hasDetailedDescription() || isReference()) && // has docs
2450 visibleIfPrivate &&
2451 !(isStatic() && getClassDef()==nullptr && !extractStatic) // hidden due to static-ness
2452 )
2453 {
2454 if (annMemb)
2455 {
2456 //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
2457 annMemb->writeLink(ol,
2458 annMemb->getClassDef(),
2459 annMemb->getNamespaceDef(),
2460 annMemb->getFileDef(),
2461 annMemb->getGroupDef(),
2462 annMemb->getModuleDef());
2463 }
2464 else
2465 {
2466 //printf("writeLink %s->%d\n",qPrint(name),hasDocumentation());
2467 const ClassDef *rcd = cd;
2468 if (isReference() && getClassDef()) rcd = getClassDef();
2469 writeLink(ol,rcd,nd,fd,gd,mod);
2470 }
2471 }
2472 else if (isDocumentedFriendClass())
2473 // if the member is an undocumented friend declaration for some class,
2474 // then maybe we can link to the class
2475 {
2476 writeLink(ol,getClass(name()),nullptr,nullptr,nullptr,nullptr);
2477 }
2478 else
2479 // there is a brief member description and brief member
2480 // descriptions are enabled or there is no detailed description.
2481 {
2482 const ClassDef *rcd = cd;
2483 if (isReference() && getClassDef()) rcd = getClassDef();
2484 writeLink(ol,rcd,nd,fd,gd,mod,TRUE);
2485 }
2486 }
2487
2488 // *** write arguments
2489 if (!argsString().isEmpty() && !isObjCMethod())
2490 {
2491 if (!isDefine() && !isTypedef()) ol.writeString(" ");
2492 linkifyText(TextGeneratorOLImpl(ol), // out
2493 d, // scope
2494 getBodyDef(), // fileScope
2495 this, // self
2496 isDefine() ?
2497 substitute(argsString(),",",", ") :
2498 isTypedef() ?
2499 substitute(argsString(),")(",") (") :
2501 m_annMemb!=nullptr, // autoBreak
2502 TRUE, // external
2503 FALSE, // keepSpaces
2504 indentLevel
2505 );
2506 }
2507
2508 // *** write bitfields
2509 if (!m_bitfields.isEmpty()) // add bitfields
2510 {
2511 linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_bitfields);
2512 }
2513 else if (hasOneLineInitializer()
2514 //!init.isEmpty() && initLines==0 && // one line initializer
2515 //((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
2516 ) // add initializer
2517 {
2518 if (isTypeAlias()) // using statement
2519 {
2520 ol.writeString(" = ");
2521 linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_initializer.simplifyWhiteSpace());
2522 }
2523 else if (!isDefine())
2524 {
2525 //ol.writeString(" = ");
2526 ol.writeString(" ");
2527 linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_initializer.simplifyWhiteSpace());
2528 }
2529 else
2530 {
2532 linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),this,m_initializer);
2533 }
2534 }
2535
2536
2538 {
2539 ol.startTypewriter();
2540 ol.docify(" [implementation]");
2541 ol.endTypewriter();
2542 }
2543
2544 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2545
2546 if (isProperty() && (isSettable() || isGettable() ||
2549 {
2550 ol.writeLatexSpacing();
2551 ol.startTypewriter();
2552 ol.docify(" [");
2553 StringVector sl;
2554
2555 if (isGettable()) sl.emplace_back("get");
2556 if (isProtectedGettable()) sl.emplace_back("protected get");
2557 if (isSettable()) sl.emplace_back("set");
2558 if (isProtectedSettable()) sl.emplace_back("protected set");
2559 if (extractPrivate)
2560 {
2561 if (isPrivateGettable()) sl.emplace_back("private get");
2562 if (isPrivateSettable()) sl.emplace_back("private set");
2563 }
2564 bool first=true;
2565 for (const auto &s : sl)
2566 {
2567 if (!first)
2568 {
2569 ol.docify(", ");
2570 }
2571 first=false;
2572 ol.docify(s);
2573 }
2574 ol.docify("]");
2575 ol.endTypewriter();
2576 }
2577
2578 if (isEvent() && (isAddable() || isRemovable() || isRaisable()))
2579 {
2580 ol.writeLatexSpacing();
2581 ol.startTypewriter();
2582 ol.docify(" [");
2583 StringVector sl;
2584 if (isAddable()) sl.emplace_back("add");
2585 if (isRemovable()) sl.emplace_back("remove");
2586 if (isRaisable()) sl.emplace_back("raise");
2587 bool first=true;
2588 for (const auto &s : sl)
2589 {
2590 if (!first)
2591 {
2592 ol.docify(", ");
2593 }
2594 first=false;
2595 ol.docify(s);
2596 }
2597 ol.docify("]");
2598 ol.endTypewriter();
2599 }
2600
2601 if (writeAnchor)
2602 {
2603 ol.endDoxyAnchor(cfname,anchor());
2604 }
2605
2606 //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
2607 // qPrint(name()),annoClassDef,annEnumType);
2608 ol.endMemberItem(anonType);
2609 if (endAnonScopeNeeded)
2610 {
2611 ol.endAnonTypeScope(indentLevel);
2612 }
2613
2614 // write brief description
2615 if (!briefDescription().isEmpty() &&
2616 Config_getBool(BRIEF_MEMBER_DESC)
2617 )
2618 {
2619 auto parser { createDocParser() };
2620 auto ast { validatingParseDoc(*parser.get(),
2621 briefFile(),
2622 briefLine(),
2624 this,
2626 DocOptions()
2627 .setIndexWords(inheritedFrom==nullptr)
2628 .setSingleLine(true))
2629 };
2630 if (!ast->isEmpty())
2631 {
2632 ol.startMemberDescription(anchor(),inheritId);
2633 ol.writeDoc(ast.get(),getOuterScope()?getOuterScope():d,this);
2634 if (detailsVisible) // add More.. link only when both brief and details are visible
2635 {
2636 if (!isAnonymous()) // hide anonymous stuff
2637 {
2638 ol.pushGeneratorState();
2640 ol.docify(" ");
2641 MemberDefMutable *annMemb = toMemberDefMutable(m_annMemb);
2642 if (annMemb)
2643 {
2644 ol.startTextLink(annMemb->getOutputFileBase(),annMemb->anchor());
2646 ol.endTextLink();
2647 }
2648 ol.popGeneratorState();
2649 }
2650 }
2651 // for RTF we need to add an extra empty paragraph
2652 ol.pushGeneratorState();
2654 ol.startParagraph();
2655 ol.endParagraph();
2656 ol.popGeneratorState();
2658 }
2659 }
2660
2661 ol.endMemberDeclaration(anchor(),inheritId);
2662
2664 //printf("< %s MemberDefImpl::writeDeclaration() inGroup=%d\n",qPrint(qualifiedName()),inGroup);
2665}
virtual void writeDeclaration(OutputList &ol, const MemberDef *md, bool inGroup, int indentLevel, const ClassDef *inheritedFrom, const QCString &inheritId) const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual void writeEnumDeclaration(OutputList &typeDecl, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod) const =0
virtual const FileDef * getFileDef() const =0
virtual const ModuleDef * getModuleDef() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual void writeLink(OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *md, bool onlyText=FALSE) const =0
void warnIfUndocumented() const override
bool isDefine() const override
ClassDef * getClassDefOfAnonymousType() const override
QCString excpString() const override
void _writeTemplatePrefix(OutputList &ol, const Definition *def, const ArgumentList &al, bool writeReqClause=true) const
const MemberDef * getAnonymousEnumType() const override
bool hasOneLineInitializer() const override
bool isEvent() const override
void writeLink(OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, bool onlyText=FALSE) const override
void writeDoc(const IDocNodeAST *ast, const Definition *ctx, const MemberDef *md, int sectionLevel=-1)
Definition outputlist.h:383
bool isEnabled(OutputType o)
void startMemberDeclaration()
Definition outputlist.h:569
void endMemberTemplateParams(const QCString &anchor, const QCString &inheritId)
Definition outputlist.h:499
void writeLatexSpacing()
Definition outputlist.h:545
void enable(OutputType o)
void endMemberDescription()
Definition outputlist.h:567
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
Definition outputlist.h:565
void startAnonTypeScope(int i1)
Definition outputlist.h:489
void endTextLink()
Definition outputlist.h:444
void endMemberItem(OutputGenerator::MemberItemType type)
Definition outputlist.h:495
void pushGeneratorState()
void insertMemberAlign(bool templ=FALSE)
Definition outputlist.h:517
void popGeneratorState()
void endAnonTypeScope(int i1)
Definition outputlist.h:491
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId)
Definition outputlist.h:571
void startMemberItem(const QCString &anchor, OutputGenerator::MemberItemType type, const QCString &id=QCString())
Definition outputlist.h:493
void writeNonBreakableSpace(int num)
Definition outputlist.h:626
void startTextLink(const QCString &file, const QCString &anchor)
Definition outputlist.h:442
void startMemberTemplateParams()
Definition outputlist.h:497
virtual QCString trMore()=0
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, const DocOptions &options)
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55
static QCString combineArgsAndException(QCString args, QCString exception)

References _isAnonymousBitField(), _writeTemplatePrefix(), OutputList::addLabel(), Definition::anchor(), anchor(), OutputGenerator::AnonymousEnd, OutputGenerator::AnonymousStart, QCString::append(), argsString(), ASSERT, QCString::at(), briefDescription(), DefinitionMixin< MemberDefMutable >::briefFile(), DefinitionMixin< MemberDefMutable >::briefLine(), combineArgsAndException(), Config_getBool, createDocParser(), OutputList::disable(), OutputList::disableAllBut(), Definition::displayName(), Docbook, OutputList::docify(), OutputList::enable(), OutputList::endAnonTypeScope(), OutputList::endDoxyAnchor(), OutputList::endMemberDeclaration(), OutputList::endMemberDescription(), OutputList::endMemberItem(), OutputList::endMemberTemplateParams(), OutputList::endParagraph(), OutputList::endTextLink(), OutputList::endTypewriter(), EnumValue, err, excpString(), FALSE, Friend, getAnonymousEnumType(), DefinitionMixin< MemberDefMutable >::getBodyDef(), getClass(), MemberDef::getClassDef(), getClassDef(), getClassDefOfAnonymousType(), MemberDef::getFileDef(), getFileDef(), MemberDef::getGroupDef(), getGroupDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), MemberDef::getModuleDef(), MemberDef::getNamespaceDef(), getNamespaceDef(), DefinitionMixin< MemberDefMutable >::getOuterScope(), Definition::getOutputFileBase(), getOutputFileBase(), hasDetailedDescription(), hasDocumentation(), hasOneLineInitializer(), Html, OutputList::insertMemberAlign(), isAddable(), DefinitionMixin< MemberDefMutable >::isAnonymous(), isDefine(), isDocumentedFriendClass(), QCString::isEmpty(), OutputList::isEnabled(), isEvent(), isFinal(), isGettable(), isImplementation(), isObjCMethod(), isObjCProperty(), isOverride(), isPrivateGettable(), isPrivateSettable(), isProperty(), isProtectedGettable(), isProtectedSettable(), isRaisable(), isReference(), isRemovable(), isSettable(), isStatic(), isTypeAlias(), isTypedef(), Latex, QCString::left(), QCString::length(), linkifyText(), m_annEnumType, m_annMemb, m_bitfields, m_initializer, m_mtype, m_prot, m_tArgList, m_type, m_virt, Man, Definition::name(), DefinitionMixin< MemberDefMutable >::name(), OutputGenerator::Normal, OutputList::parseText(), OutputList::popGeneratorState(), QCString::prepend(), protection(), protectionLevelVisible(), OutputList::pushGeneratorState(), removeAnonymousScopes(), QCString::right(), RTF, reg::search(), OutputList::startAnonTypeScope(), OutputList::startDoxyAnchor(), OutputList::startMemberDeclaration(), OutputList::startMemberDescription(), OutputList::startMemberItem(), OutputList::startMemberTemplateParams(), OutputList::startParagraph(), QCString::startsWith(), OutputList::startTextLink(), OutputList::startTypewriter(), QCString::str(), QCString::stripPrefix(), QCString::stripWhiteSpace(), substitute(), OutputGenerator::Templated, theTranslator, toMemberDefMutable(), TRUE, validatingParseDoc(), warnIfUndocumented(), ClassDef::writeDeclaration(), OutputList::writeDoc(), MemberDef::writeEnumDeclaration(), OutputList::writeLatexSpacing(), MemberDef::writeLink(), writeLink(), OutputList::writeNonBreakableSpace(), and OutputList::writeString().

◆ writeDocumentation()

void MemberDefImpl::writeDocumentation ( const MemberList * ml,
int memCount,
int memTotal,
OutputList & ol,
const QCString & scName,
const Definition * container,
bool inGroup,
bool showEnumValues = FALSE,
bool showInline = FALSE ) const
overridevirtual

Writes the "detailed documentation" section of this member to all active output formats.

Implements MemberDefMutable.

Definition at line 3471 of file memberdef.cpp.

3480{
3481 // if this member is in a group find the real scope name.
3482 bool hasParameterList = FALSE;
3483
3484 //printf("MemberDefImpl::writeDocumentation(): name='%s' hasDocs='%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
3485 // qPrint(name()),hasDocs,container->definitionType(),inGroup,hasDetailedDescription());
3486
3487 //if ( !hasDocs ) return;
3488 //if (isEnumValue() && !showEnumValues) return;
3489
3490 SrcLangExt lang = getLanguage();
3491 //printf("member=%s lang=%d\n",qPrint(name()),lang);
3492 bool optVhdl = lang==SrcLangExt::VHDL;
3493 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
3494
3495 QCString scopeName = scName;
3496 QCString memAnchor = anchor();
3497 QCString ciname = container->displayName();
3498 const Definition *scopedContainer = container; // see bug 753608
3499 if (container->definitionType()==TypeGroup)
3500 {
3501 if (getClassDef()) { scopeName=getClassDef()->displayName(); scopedContainer=getClassDef(); }
3502 else if (getNamespaceDef()) { scopeName=getNamespaceDef()->displayName(); scopedContainer=getNamespaceDef(); }
3503 else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); }
3504 ciname = (toGroupDef(container))->groupTitle();
3505 }
3506 else if (container->definitionType()==TypeFile && getNamespaceDef() && getNamespaceDef()->isLinkable())
3507 { // member is in a namespace, but is written as part of the file documentation
3508 // as well, so we need to make sure its anchor is unique (it is not really used).
3509 memAnchor.prepend("file_");
3510 }
3511
3512 QCString cname = container->name();
3513 QCString cfname = getOutputFileBase();
3514
3515 // get member name
3516 QCString doxyName=name();
3517 // prepend scope if there is any. TODO: make this optional for C only docs
3518 if (!scopeName.isEmpty())
3519 {
3520 doxyName.prepend(scopeName+sep);
3521 }
3522 QCString doxyArgs=argsString();
3523
3524 QCString ldef = definition();
3525 QCString title = name();
3526 //printf("member '%s' def='%s'\n",qPrint(name()),qPrint(ldef));
3527 if (isEnumerate())
3528 {
3529 if (title.at(0)=='@')
3530 {
3531 ldef = title = "anonymous enum";
3532 if (!m_enumBaseType.isEmpty())
3533 {
3534 ldef+=" : "+m_enumBaseType;
3535 }
3536 }
3537 else
3538 {
3539 if (lang==SrcLangExt::Cpp)
3540 {
3541 if (isEnumStruct()) ldef.prepend("struct ");
3542 else if (isStrong()) ldef.prepend("class ");
3543 }
3544 ldef.prepend("enum ");
3545 if (isSliceLocal())
3546 {
3547 ldef.prepend("local ");
3548 }
3549 }
3550 }
3551 else if (isEnumValue())
3552 {
3553 if (ldef.at(0)=='@')
3554 {
3555 ldef=ldef.mid(2);
3556 }
3557 }
3558 else if (isFunction() && !isObjCMethod())
3559 {
3560 title += "()";
3561 }
3562 if (lang == SrcLangExt::Slice)
3563 {
3564 // Remove the container scope from the member name.
3565 QCString prefix = scName + sep;
3566 int pos = ldef.findRev(prefix.data());
3567 if(pos != -1)
3568 {
3569 ldef.remove(pos, prefix.length());
3570 }
3571 }
3572 ldef.stripPrefix("constexpr ");
3573 ldef.stripPrefix("consteval ");
3574 ldef.stripPrefix("constinit ");
3575 ldef.stripPrefix("static ");
3576
3577 //----------------------------------------
3578
3579 ol.pushGeneratorState();
3580
3581 bool htmlEndLabelTable=FALSE;
3582 StringVector sl = getLabels(scopedContainer);
3583
3584 static const reg::Ex r(R"(@\d+)");
3585 reg::Match match;
3586 std::string sdef = ldef.str();
3587 if ((isVariable() || isTypedef()) && reg::search(sdef,match,r))
3588 {
3589 // find enum type and insert it in the definition
3590 bool found=false;
3591 for (const auto &vmd : *ml)
3592 {
3593 if (vmd->isEnumerate() && match.str()==vmd->name())
3594 {
3595 ol.startDoxyAnchor(cfname, cname, memAnchor, doxyName, doxyArgs);
3596 ol.startMemberDoc(ciname,name(),memAnchor,name(),memCount,memTotal,showInline);
3597 ol.addLabel(cfname, memAnchor);
3598 QCString prefix = match.prefix().str();
3599 QCString suffix = match.suffix().str();
3600 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,prefix);
3601 vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef(),getModuleDef());
3602 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,suffix);
3603
3604 found=true;
3605 break;
3606 }
3607 }
3608 if (!found) // anonymous compound
3609 {
3610 ClassDef *annoClassDef=getClassDefOfAnonymousType();
3611 QCString typeName;
3612 if (annoClassDef) typeName=annoClassDef->compoundTypeString();
3613 ol.startDoxyAnchor(cfname, cname, memAnchor, doxyName, doxyArgs);
3614 ol.startMemberDoc(ciname,name(),memAnchor,"["+typeName+"]",memCount,memTotal,showInline);
3615 ol.addLabel(cfname, memAnchor);
3616 // search for the last anonymous compound name in the definition
3617
3619 if (reg::search(sdef,match,reAnonymous))
3620 {
3621 QCString prefix = match.prefix().str();
3622 QCString suffix = match.suffix().str();
3623 ol.docify(prefix);
3624 ol.docify(" { ... } ");
3625 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,removeAnonymousScopes(suffix));
3626 }
3627 else
3628 {
3629 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,ldef);
3630 }
3631 }
3632 }
3633 else // not an enum value or anonymous compound
3634 {
3635 ol.startDoxyAnchor(cfname, cname, memAnchor, doxyName, doxyArgs);
3636 ol.startMemberDoc(ciname,name(),memAnchor,title,memCount,memTotal,showInline);
3637 ol.addLabel(cfname, memAnchor);
3638
3639 if (!m_metaData.isEmpty() && getLanguage()==SrcLangExt::Slice)
3640 {
3642 ol.docify(m_metaData);
3644 }
3645
3646 const ClassDef *cd=getClassDef();
3647 const NamespaceDef *nd=getNamespaceDef();
3648 if (!m_defTmpArgLists.empty() && lang==SrcLangExt::Cpp)
3649 // definition has explicit template parameter declarations
3650 {
3651 for (const ArgumentList &tal : m_defTmpArgLists)
3652 {
3653 if (!tal.empty())
3654 {
3656 _writeTemplatePrefix(ol,scopedContainer,tal);
3658 }
3659 }
3660 }
3661 else // definition gets it template parameters from its class
3662 // (since no definition was found)
3663 {
3664 if (cd && lang==SrcLangExt::Cpp && !isTemplateSpecialization())
3665 {
3666 for (const ArgumentList &tal : cd->getTemplateParameterLists())
3667 {
3668 if (!tal.empty())
3669 {
3671 _writeTemplatePrefix(ol,scopedContainer,tal,false);
3673 }
3674 }
3675 }
3676 if (m_tArgList.hasParameters() && lang==SrcLangExt::Cpp) // function template prefix
3677 {
3679 _writeTemplatePrefix(ol,scopedContainer,m_tArgList);
3681 }
3682 }
3683
3684 if (!sl.empty())
3685 {
3686 ol.pushGeneratorState();
3687 ol.disableAll();
3689 ol.writeString("<table class=\"mlabels\">\n");
3690 ol.writeString(" <tr>\n");
3691 ol.writeString(" <td class=\"mlabels-left\">\n");
3692 ol.popGeneratorState();
3693 htmlEndLabelTable=TRUE;
3694 }
3695
3697 if (cd && cd->isObjectiveC())
3698 {
3699 // strip scope name
3700 int ep = ldef.find("::");
3701 if (ep!=-1)
3702 {
3703 int sp=ldef.findRev(' ',ep);
3704 if (sp!=-1)
3705 {
3706 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3707 } else {
3708 ldef=ldef.mid(ep+2);
3709 }
3710 }
3711 // strip keywords
3712 int dp = ldef.find(':');
3713 if (dp!=-1)
3714 {
3715 ldef=ldef.left(dp+1);
3716 }
3717 int dl=static_cast<int>(ldef.length());
3718 //printf("start >%s<\n",qPrint(ldef));
3719 int i=dl-1;
3720 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3721 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3722 if (i>0)
3723 {
3724 // insert branches around the type
3725 ldef="("+ldef.left(i+1)+")"+ldef.mid(i+1);
3726 }
3727 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3728 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3729 }
3730
3731 if (optVhdl)
3732 {
3733 hasParameterList=VhdlDocGen::writeVHDLTypeDocumentation(this,scopedContainer,ol);
3734 }
3735 else if (lang==SrcLangExt::Slice)
3736 {
3737 // Eliminate the self-reference.
3738 int pos = ldef.findRev(' ');
3739 if (pos<0) pos=0;
3740 if (pos>0)
3741 {
3742 linkifyText(TextGeneratorOLImpl(ol),
3743 scopedContainer,
3744 getBodyDef(),
3745 this,
3746 ldef.left(pos)
3747 );
3748 }
3749 ol.docify(ldef.mid(pos));
3750 const Definition *scope = cd;
3751 if (scope==nullptr) scope = nd;
3752 hasParameterList=writeDefArgumentList(ol,scope,this);
3753 }
3754 else
3755 {
3756 linkifyText(TextGeneratorOLImpl(ol),
3757 scopedContainer,
3758 getBodyDef(),
3759 this,
3760 substitute(ldef,"::",sep)
3761 );
3762 const Definition *scope = cd;
3763 if (scope==nullptr) scope = nd;
3764 hasParameterList=writeDefArgumentList(ol,scope,this);
3765 }
3766
3767 if (hasOneLineInitializer()) // add initializer
3768 {
3769 if (isTypeAlias())
3770 {
3771 ol.docify(" = ");
3772 QCString init = m_initializer.simplifyWhiteSpace();
3773 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,init);
3774 }
3775 else if (!isDefine())
3776 {
3777 ol.docify(" ");
3778 QCString init = m_initializer.simplifyWhiteSpace();
3779 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,init);
3780 }
3781 else
3782 {
3784 linkifyText(TextGeneratorOLImpl(ol),scopedContainer,getBodyDef(),this,m_initializer);
3785 }
3786 }
3787 if (!excpString().isEmpty()) // add exception list
3788 {
3789 writeExceptionList(ol,cd,this);
3790 hasParameterList=true; // call endParameterList below
3791 }
3792 }
3793
3794 ol.pushGeneratorState();
3796 if (!sl.empty())
3797 {
3798 ol.startLabels();
3799 size_t count=0;
3800 for (const auto &s : sl)
3801 {
3802 count++;
3803 ol.writeLabel(s,count==sl.size());
3804 }
3805 ol.endLabels();
3806 }
3807 ol.popGeneratorState();
3808
3809 if (hasParameterList)
3810 {
3811 ol.endParameterList();
3812 ol.endMemberDoc(TRUE);
3813 }
3814 else
3815 {
3816 ol.endMemberDocName();
3817 ol.endMemberDoc(FALSE);
3818 }
3819
3820 // for HTML write the labels here
3821 ol.pushGeneratorState();
3822 ol.disableAll();
3824 if (htmlEndLabelTable)
3825 {
3826 ol.writeString(" </td>\n");
3827 ol.writeString(" <td class=\"mlabels-right\">\n");
3828 ol.startLabels();
3829 size_t count=0;
3830 for (const auto &s : sl)
3831 {
3832 count++;
3833 ol.writeLabel(s,count==sl.size());
3834 }
3835 ol.endLabels();
3836 ol.writeString(" </td>\n");
3837 ol.writeString(" </tr>\n");
3838 ol.writeString("</table>\n");
3839 }
3840 ol.writeString("</div>");
3841 ol.popGeneratorState();
3842
3843
3844 ol.endDoxyAnchor(cfname,memAnchor);
3845 ol.startIndent();
3846
3847 _writeGroupInclude(ol,inGroup);
3848
3849 /* write multi-line initializer (if any) */
3851
3852 /* write brief description */
3853 QCString brief = briefDescription();
3854 if (!brief.isEmpty() &&
3855 (Config_getBool(REPEAT_BRIEF) ||
3856 !Config_getBool(BRIEF_MEMBER_DESC)
3857 )
3858 )
3859 {
3860 ol.startParagraph();
3862 briefLine(),
3863 scopedContainer,
3864 this,
3865 brief,
3866 DocOptions()
3867 .setSingleLine(true));
3868 ol.endParagraph();
3869 }
3870
3871 /* write detailed description */
3872 QCString detailed = documentation();
3873 if (!detailed.isEmpty() ||
3874 !inbodyDocumentation().isEmpty())
3875 {
3876 // write vhdl inline code with or without option INLINE_SOURCE
3877 if (optVhdl && VhdlDocGen::isMisc(this))
3878 {
3879 VhdlDocGen::writeSource(this,ol,cname);
3880 return;
3881 }
3882 else
3883 {
3884 ol.generateDoc(docFile(),
3885 docLine(),
3886 scopedContainer,
3887 this,
3888 detailed+"\n",
3889 DocOptions()
3890 .setIndexWords(true));
3891 }
3892
3893 if (!inbodyDocumentation().isEmpty())
3894 {
3896 inbodyLine(),
3897 scopedContainer,
3898 this,
3899 inbodyDocumentation()+"\n",
3900 DocOptions()
3901 .setIndexWords(true));
3902 }
3903 }
3904 else if (!brief.isEmpty() && (Config_getBool(REPEAT_BRIEF) || !Config_getBool(BRIEF_MEMBER_DESC)))
3905 {
3906 if (!inbodyDocumentation().isEmpty())
3907 {
3909 inbodyLine(),
3910 scopedContainer,
3911 this,
3912 inbodyDocumentation()+"\n",
3913 DocOptions()
3914 .setIndexWords(true));
3915 }
3916 }
3917
3918
3919 //printf("***** defArgList=%p name=%s docs=%s hasDocs=%d\n",
3920 // defArgList,
3921 // defArgList?defArgList->hasDocumentation():-1);
3922 const ArgumentList &docArgList = m_templateMaster ?
3923 m_templateMaster->argumentList() :
3925 ol.generateDoc(docFile(),
3926 docLine(),
3927 scopedContainer,
3928 this, // memberDef
3929 inlineArgListToDoc(docArgList), // docStr
3930 DocOptions()
3931 .setIndexWords(true));
3932
3933 const ArgumentList &docTemplateArgList = m_templateMaster ?
3934 m_templateMaster->templateArguments() :
3935 m_tArgList;
3936 ol.generateDoc(docFile(),
3937 docLine(),
3938 scopedContainer,
3939 this, // memberDef
3940 inlineTemplateArgListToDoc(docTemplateArgList), // docStr
3941 DocOptions()
3942 .setIndexWords(true));
3943
3944 _writeEnumValues(ol,scopedContainer,cfname,ciname,cname);
3948 _writeExamples(ol);
3950 QCString scopeStr = getScopeString();
3951 writeSourceDef(ol);
3952 writeInlineCode(ol,scopeStr);
3953 if (hasReferencesRelation()) writeSourceRefs(ol,scopeStr);
3954 if (hasReferencedByRelation()) writeSourceReffedBy(ol,scopeStr);
3955 _writeCallGraph(ol);
3957
3958 ol.endIndent();
3959
3960 // enable LaTeX again
3961 //if (Config_getBool(EXTRACT_ALL) && !hasDocs) ol.enable(OutputType::Latex);
3962 ol.popGeneratorState();
3963
3965}
constexpr auto prefix
Definition anchor.cpp:44
virtual ArgumentLists getTemplateParameterLists() const =0
Returns the template parameter lists that form the template declaration of this class.
virtual QCString inbodyDocumentation() const =0
void writeSourceDef(OutputList &ol) const override
QCString inbodyFile() const override
void writeSourceRefs(OutputList &ol, const QCString &scopeName) const override
QCString briefFile() const override
void writeSourceReffedBy(OutputList &ol, const QCString &scopeName) const override
void writeInlineCode(OutputList &ol, const QCString &scopeName) const override
void _writeCallerGraph(OutputList &ol) const
void _writeEnumValues(OutputList &ol, const Definition *container, const QCString &cfname, const QCString &ciname, const QCString &cname) const
void _writeTypeConstraints(OutputList &ol) const
void _writeExamples(OutputList &ol) const
void _writeReimplementedBy(OutputList &ol) const
StringVector getLabels(const Definition *container) const override
void _writeCategoryRelation(OutputList &ol) const
bool isTemplateSpecialization() const override
void _writeMultiLineInitializer(OutputList &ol, const QCString &scopeName) const
void _writeReimplements(OutputList &ol) const
void _writeGroupInclude(OutputList &ol, bool inGroup) const
bool isVariable() const override
void _writeCallGraph(OutputList &ol) const
void endIndent()
Definition outputlist.h:584
void startMemberDoc(const QCString &clName, const QCString &memName, const QCString &anchor, const QCString &title, int memCount, int memTotal, bool showInline)
Definition outputlist.h:531
void startMemberDocName(bool align)
Definition outputlist.h:680
void endMemberDocName()
Definition outputlist.h:682
void endMemberDoc(bool hasArgs)
Definition outputlist.h:535
void startIndent()
Definition outputlist.h:582
void disableAll()
void endMemberDocPrefixItem()
Definition outputlist.h:678
void endLabels()
Definition outputlist.h:742
void endParameterList()
Definition outputlist.h:702
void writeLabel(const QCString &l, bool isLast)
Definition outputlist.h:740
void startLabels()
Definition outputlist.h:738
void startMemberDocPrefixItem()
Definition outputlist.h:676
QCString & remove(size_t index, size_t len)
Definition qcstring.h:442
bool stripPrefix(const QCString &prefix)
Definition qcstring.h:213
static bool writeVHDLTypeDocumentation(const MemberDef *mdef, const Definition *d, OutputList &ol)
static void writeSource(const MemberDef *mdef, OutputList &ol, const QCString &cname)
static bool isMisc(const MemberDef *mdef)
GroupDef * toGroupDef(Definition *d)
static void writeExceptionList(OutputList &ol, const ClassDef *cd, const MemberDef *md)
static bool writeDefArgumentList(OutputList &ol, const Definition *scope, const MemberDef *md)
QCString inlineTemplateArgListToDoc(const ArgumentList &al)
Definition util.cpp:1171
QCString inlineArgListToDoc(const ArgumentList &al)
Definition util.cpp:1153

References _writeCallerGraph(), _writeCallGraph(), _writeCategoryRelation(), _writeEnumValues(), _writeExamples(), _writeGroupInclude(), _writeMultiLineInitializer(), _writeReimplementedBy(), _writeReimplements(), _writeTemplatePrefix(), _writeTypeConstraints(), OutputList::addLabel(), anchor(), argsString(), QCString::at(), briefDescription(), DefinitionMixin< MemberDefMutable >::briefFile(), DefinitionMixin< MemberDefMutable >::briefLine(), ClassDef::compoundTypeString(), Config_getBool, definition(), Definition::definitionType(), OutputList::disable(), OutputList::disableAll(), Definition::displayName(), DefinitionMixin< MemberDefMutable >::docFile(), OutputList::docify(), DefinitionMixin< MemberDefMutable >::docLine(), documentation(), ArgumentList::empty(), OutputList::enable(), OutputList::endDoxyAnchor(), OutputList::endIndent(), OutputList::endLabels(), OutputList::endMemberDoc(), OutputList::endMemberDocName(), OutputList::endMemberDocPrefixItem(), OutputList::endParagraph(), OutputList::endParameterList(), excpString(), FALSE, QCString::find(), QCString::findRev(), OutputList::generateDoc(), DefinitionMixin< MemberDefMutable >::getBodyDef(), getClassDef(), getClassDefOfAnonymousType(), getFileDef(), getGroupDef(), getLabels(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), getModuleDef(), getNamespaceDef(), getOutputFileBase(), getScopeString(), ClassDef::getTemplateParameterLists(), hasMultiLineInitializer(), hasOneLineInitializer(), hasReferencedByRelation(), hasReferencesRelation(), Html, DefinitionMixin< MemberDefMutable >::inbodyDocumentation(), DefinitionMixin< MemberDefMutable >::inbodyFile(), DefinitionMixin< MemberDefMutable >::inbodyLine(), init(), inlineArgListToDoc(), inlineTemplateArgListToDoc(), isDefine(), QCString::isEmpty(), isEnumerate(), isEnumStruct(), isEnumValue(), isFunction(), isId(), isLinkable(), VhdlDocGen::isMisc(), isObjCMethod(), ClassDef::isObjectiveC(), isSliceLocal(), isStatic(), isStrong(), isTemplateSpecialization(), isTypeAlias(), isTypedef(), isVariable(), QCString::left(), QCString::length(), linkifyText(), m_defArgList, m_defTmpArgLists, m_enumBaseType, m_initializer, m_metaData, m_tArgList, m_templateMaster, QCString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), OutputList::popGeneratorState(), prefix, QCString::prepend(), OutputList::pushGeneratorState(), reAnonymous, QCString::remove(), removeAnonymousScopes(), reg::search(), OutputList::startDoxyAnchor(), OutputList::startIndent(), OutputList::startLabels(), OutputList::startMemberDoc(), OutputList::startMemberDocName(), OutputList::startMemberDocPrefixItem(), OutputList::startParagraph(), QCString::str(), QCString::stripPrefix(), substitute(), toGroupDef(), TRUE, Definition::TypeFile, Definition::TypeGroup, warnIfUndocumentedParams(), writeDefArgumentList(), writeExceptionList(), DefinitionMixin< MemberDefMutable >::writeInlineCode(), OutputList::writeLabel(), OutputList::writeNonBreakableSpace(), VhdlDocGen::writeSource(), DefinitionMixin< MemberDefMutable >::writeSourceDef(), DefinitionMixin< MemberDefMutable >::writeSourceReffedBy(), DefinitionMixin< MemberDefMutable >::writeSourceRefs(), OutputList::writeString(), and VhdlDocGen::writeVHDLTypeDocumentation().

◆ writeEnumDeclaration()

void MemberDefImpl::writeEnumDeclaration ( OutputList & typeDecl,
const ClassDef * cd,
const NamespaceDef * nd,
const FileDef * fd,
const GroupDef * gd,
const ModuleDef * mod ) const
overridevirtual

Implements MemberDef.

Definition at line 4800 of file memberdef.cpp.

4802{
4803 int enumMemCount=0;
4804
4805 uint32_t numVisibleEnumValues=0;
4806 for (const auto &fmd : m_enumFields)
4807 {
4808 if (fmd->isBriefSectionVisible()) numVisibleEnumValues++;
4809 }
4810 if (numVisibleEnumValues==0 && !isBriefSectionVisible())
4811 {
4812 return;
4813 }
4814
4815 QCString n = name();
4816 int i=n.findRev("::");
4817 if (i!=-1) n=n.right(n.length()-i-2); // strip scope (TODO: is this needed?)
4818 if (n[0]!='@') // not an anonymous enum
4819 {
4821 {
4822 //_writeTagData(compoundType);
4823 writeLink(typeDecl,cd,nd,fd,gd,mod);
4824 }
4825 else
4826 {
4827 typeDecl.startBold();
4828 typeDecl.docify(n);
4829 typeDecl.endBold();
4830 }
4831 typeDecl.writeChar(' ');
4832 }
4833 if (!m_enumBaseType.isEmpty())
4834 {
4835 typeDecl.writeChar(':');
4836 typeDecl.writeChar(' ');
4837 typeDecl.docify(m_enumBaseType);
4838 typeDecl.writeChar(' ');
4839 }
4840
4841 uint32_t enumValuesPerLine = static_cast<uint32_t>(Config_getInt(ENUM_VALUES_PER_LINE));
4842 if (numVisibleEnumValues>0 && enumValuesPerLine>0)
4843 {
4844 typeDecl.docify("{ ");
4845
4846 auto it = m_enumFields.begin();
4847 if (it!=m_enumFields.end())
4848 {
4849 const MemberDef *fmd=*it;
4850 bool fmdVisible = fmd->isBriefSectionVisible();
4851 bool first=true;
4852 while (fmd)
4853 {
4854 if (fmdVisible)
4855 {
4856 if (!first)
4857 {
4858 typeDecl.writeString(", ");
4859 }
4860 /* in html we start a new line after a number of items */
4861 if (numVisibleEnumValues>enumValuesPerLine
4862 && (enumMemCount%enumValuesPerLine)==0
4863 )
4864 {
4865 typeDecl.pushGeneratorState();
4867 typeDecl.enable(OutputType::Latex);
4868 typeDecl.enable(OutputType::Docbook);
4869 typeDecl.lineBreak();
4870 typeDecl.disable(OutputType::Latex);
4871 typeDecl.disable(OutputType::Docbook);
4872 typeDecl.writeString("&#160;&#160;");
4873 typeDecl.popGeneratorState();
4874 }
4875
4876 if (fmd->hasDocumentation()) // enum value has docs
4877 {
4878 fmd->writeLink(typeDecl,cd,nd,fd,gd,mod);
4879 }
4880 else // no docs for this enum value
4881 {
4882 typeDecl.startBold();
4883 typeDecl.docify(fmd->name());
4884 typeDecl.endBold();
4885 }
4886 if (fmd->hasOneLineInitializer()) // enum value has initializer
4887 {
4888 //typeDecl.writeString(" = ");
4889 typeDecl.writeString(" ");
4890 typeDecl.parseText(fmd->initializer());
4891 }
4892 first=false;
4893 }
4894
4895 bool prevVisible = fmdVisible;
4896 ++it;
4897 if (it!=m_enumFields.end())
4898 {
4899 fmd=*it;
4900 }
4901 else
4902 {
4903 fmd=nullptr;
4904 }
4905 if (prevVisible)
4906 {
4907 typeDecl.disable(OutputType::Man);
4908 typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
4909 typeDecl.enable(OutputType::Man);
4910 enumMemCount++;
4911 }
4912 }
4913 if (numVisibleEnumValues>enumValuesPerLine)
4914 {
4915 typeDecl.pushGeneratorState();
4917 typeDecl.lineBreak();
4918 typeDecl.popGeneratorState();
4919 }
4920 }
4921 typeDecl.docify(" }");
4922 }
4923}
virtual bool hasDocumentation() const =0
virtual bool hasOneLineInitializer() const =0
virtual bool isBriefSectionVisible() const =0
virtual const QCString & initializer() const =0
bool isBriefSectionVisible() const override
void writeChar(char c)
Definition outputlist.h:529

References Config_getInt, OutputList::disable(), OutputList::disableAllBut(), Docbook, OutputList::docify(), OutputList::enable(), OutputList::endBold(), QCString::findRev(), Definition::hasDocumentation(), hasDocumentedEnumValues(), MemberDef::hasOneLineInitializer(), Html, MemberDef::initializer(), MemberDef::isBriefSectionVisible(), isBriefSectionVisible(), isLinkableInProject(), Latex, QCString::length(), OutputList::lineBreak(), m_enumBaseType, m_enumFields, Man, Definition::name(), DefinitionMixin< MemberDefMutable >::name(), OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), QCString::right(), OutputList::startBold(), OutputList::writeChar(), MemberDef::writeLink(), writeLink(), and OutputList::writeString().

◆ writeLink()

void MemberDefImpl::writeLink ( OutputList & ol,
const ClassDef * cd,
const NamespaceDef * nd,
const FileDef * fd,
const GroupDef * gd,
const ModuleDef * mod,
bool onlyText = FALSE ) const
overridevirtual

Implements MemberDef.

Definition at line 1921 of file memberdef.cpp.

1924{
1925 SrcLangExt lang = getLanguage();
1926 bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
1927 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
1928 QCString n = name();
1929 const ClassDef *classDef = getClassDef();
1930 const NamespaceDef *nspace = getNamespaceDef();
1931 if (!hideScopeNames)
1932 {
1933 if (m_enumScope && m_livesInsideEnum && getGroupDef()!=nullptr)
1934 {
1935 n.prepend(m_enumScope->displayName()+sep);
1936 }
1937 if (classDef && (gd || mod) && !isRelated())
1938 {
1939 n.prepend(classDef->displayName()+sep);
1940 }
1941 else if (nspace && (gd || fd || mod))
1942 {
1943 n.prepend(nspace->displayName()+sep);
1944 }
1945 }
1946
1947 if (isObjCMethod())
1948 {
1949 if (isStatic()) ol.docify("+ "); else ol.docify("- ");
1950 }
1951 if (!onlyText && (isLinkable() || hasDetailedDescription())) // write link
1952 {
1953 if (m_mtype==MemberType::EnumValue && getGroupDef()==nullptr && // enum value is not grouped
1954 getEnumScope() && getEnumScope()->getGroupDef()) // but its container is
1955 {
1956 const GroupDef *enumValGroup = getEnumScope()->getGroupDef();
1957 ol.writeObjectLink(enumValGroup->getReference(),
1958 enumValGroup->getOutputFileBase(),
1959 anchor(),n);
1960 }
1961 else
1962 {
1964 }
1965 }
1966 else // write only text
1967 {
1968 ol.startBold();
1969 ol.docify(n);
1970 ol.endBold();
1971 }
1972}

References anchor(), Config_getBool, Definition::displayName(), OutputList::docify(), OutputList::endBold(), EnumValue, getClassDef(), getEnumScope(), MemberDef::getGroupDef(), getGroupDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), getNamespaceDef(), Definition::getOutputFileBase(), getOutputFileBase(), Definition::getReference(), getReference(), hasDetailedDescription(), isLinkable(), isObjCMethod(), isRelated(), isStatic(), m_enumScope, m_livesInsideEnum, m_mtype, DefinitionMixin< MemberDefMutable >::name(), QCString::prepend(), OutputList::startBold(), TRUE, and OutputList::writeObjectLink().

Referenced by writeDeclaration(), and writeEnumDeclaration().

◆ writeMemberDocSimple()

void MemberDefImpl::writeMemberDocSimple ( OutputList & ol,
const Definition * container ) const
overridevirtual

Implements MemberDefMutable.

Definition at line 3997 of file memberdef.cpp.

3998{
3999 Definition *scope = getOuterScope();
4000 QCString doxyName = name();
4001 QCString doxyArgs = argsString();
4002 QCString memAnchor = anchor();
4003 QCString cfname = getOutputFileBase();
4004 QCString cname;
4005 if (scope) cname = scope->name();
4006 if (doxyName.at(0)=='@')
4007 {
4008 doxyName="__unnamed__";
4009 }
4010
4011 ClassDef *cd = m_accessorClass;
4012 //printf("===> %s::anonymous: %s\n",qPrint(name()),cd?qPrint(cd->name()):"<none>");
4013
4014 if (container && container->definitionType()==Definition::TypeClass &&
4015 !(toClassDef(container))->isJavaEnum())
4016 {
4018 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4019 ol.addLabel(cfname,memAnchor);
4020
4021 QCString ts = fieldType();
4022
4023 if (isFunctionPtr())
4024 ts = m_type + m_args;
4025
4026 if (cd) // cd points to an anonymous struct pointed to by this member
4027 // so we add a link to it from the type column.
4028 {
4029 int i=0;
4030 const char *prefixes[] = { "struct ","union ","class ", nullptr };
4031 const char **p = prefixes;
4032 while (*p)
4033 {
4034 int l=qstrlen(*p);
4035 if (ts.left(l)==*p)
4036 {
4037 ol.writeString(*p);
4038 i=l;
4039 }
4040 p++;
4041 }
4043 cd->getOutputFileBase(),
4044 cd->anchor(),ts.mid(i));
4045 }
4046 else // use standard auto linking
4047 {
4048 linkifyText(TextGeneratorOLImpl(ol), // out
4049 scope, // scope
4050 getBodyDef(), // fileScope
4051 this, // self
4052 ts // text
4053 );
4054 }
4055 ol.endDoxyAnchor(cfname,memAnchor);
4057 }
4058
4060 ol.docify(doxyName);
4061 if (isVariable() && !argsString().isEmpty() && !isObjCMethod() && !isFunctionPtr())
4062 {
4063 linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,argsString());
4064 }
4065 if (!m_bitfields.isEmpty()) // add bitfields
4066 {
4067 linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,m_bitfields);
4068 }
4069 if (hasOneLineInitializer() && !isDefine())
4070 {
4071 ol.writeString(" ");
4072 linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,m_initializer.simplifyWhiteSpace());
4073 }
4075
4077
4078 QCString brief = briefDescription();
4079 QCString detailed = documentation();
4080
4081 /* write brief description */
4082 if (!brief.isEmpty())
4083 {
4085 briefLine(),
4086 getOuterScope()?getOuterScope():container,this,
4087 brief,
4088 DocOptions()
4089 .setSingleLine(true));
4090 }
4091
4092 /* write detailed description */
4093 if (!detailed.isEmpty())
4094 {
4095 if (!brief.isEmpty())
4096 {
4098 ol.lineBreak();
4100 }
4101 ol.generateDoc(docFile(),
4102 docLine(),
4103 getOuterScope()?getOuterScope():container,this,
4104 detailed+"\n",
4105 DocOptions());
4106 }
4107
4108 ol.endInlineMemberDoc();
4109}
QCString fieldType() const override
bool isFunctionPtr() const override
void endInlineMemberType()
Definition outputlist.h:728
void startInlineMemberType()
Definition outputlist.h:726
void startInlineMemberDoc()
Definition outputlist.h:734
void endInlineMemberDoc()
Definition outputlist.h:736
void startInlineMemberName()
Definition outputlist.h:730
void endInlineMemberName()
Definition outputlist.h:732
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
Definition qcstring.h:58

References OutputList::addLabel(), Definition::anchor(), anchor(), argsString(), QCString::at(), briefDescription(), DefinitionMixin< MemberDefMutable >::briefFile(), DefinitionMixin< MemberDefMutable >::briefLine(), Definition::definitionType(), OutputList::disable(), DefinitionMixin< MemberDefMutable >::docFile(), OutputList::docify(), DefinitionMixin< MemberDefMutable >::docLine(), documentation(), OutputList::enable(), OutputList::endDoxyAnchor(), OutputList::endInlineMemberDoc(), OutputList::endInlineMemberName(), OutputList::endInlineMemberType(), fieldType(), OutputList::generateDoc(), DefinitionMixin< MemberDefMutable >::getBodyDef(), DefinitionMixin< MemberDefMutable >::getOuterScope(), Definition::getOutputFileBase(), getOutputFileBase(), Definition::getReference(), hasOneLineInitializer(), Html, isDefine(), QCString::isEmpty(), isFunctionPtr(), isObjCMethod(), isVariable(), QCString::left(), OutputList::lineBreak(), linkifyText(), m_accessorClass, m_args, m_bitfields, m_initializer, m_type, QCString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), qstrlen(), OutputList::startDoxyAnchor(), OutputList::startInlineMemberDoc(), OutputList::startInlineMemberName(), OutputList::startInlineMemberType(), toClassDef(), Definition::TypeClass, OutputList::writeObjectLink(), and OutputList::writeString().

◆ writeTagFile()

void MemberDefImpl::writeTagFile ( TextStream & tagFile,
bool useQualifiedName,
bool showNamespaceMembers ) const
overridevirtual

Implements MemberDefMutable.

Definition at line 4632 of file memberdef.cpp.

4633{
4634 if (!isLinkableInProject()) return;
4635 if (!showNamespaceMembers && getNamespaceDef()) return;
4636 tagFile << " <member kind=\"";
4637 switch (m_mtype)
4638 {
4639 case MemberType::Define: tagFile << "define"; break;
4640 case MemberType::EnumValue: tagFile << "enumvalue"; break;
4641 case MemberType::Property: tagFile << "property"; break;
4642 case MemberType::Event: tagFile << "event"; break;
4643 case MemberType::Variable: tagFile << "variable"; break;
4644 case MemberType::Typedef: tagFile << "typedef"; break;
4645 case MemberType::Enumeration: tagFile << "enumeration"; break;
4646 case MemberType::Function: tagFile << "function"; break;
4647 case MemberType::Signal: tagFile << "signal"; break;
4648 case MemberType::Friend: tagFile << "friend"; break;
4649 case MemberType::DCOP: tagFile << "dcop"; break;
4650 case MemberType::Slot: tagFile << "slot"; break;
4651 case MemberType::Interface: tagFile << "interface"; break;
4652 case MemberType::Service: tagFile << "service"; break;
4653 case MemberType::Sequence: tagFile << "sequence"; break;
4654 case MemberType::Dictionary: tagFile << "dictionary"; break;
4655 }
4656 if (m_prot!=Protection::Public)
4657 {
4658 tagFile << "\" protection=\"";
4659 if (m_prot==Protection::Protected) tagFile << "protected";
4660 else if (m_prot==Protection::Package) tagFile << "package";
4661 else /* Private */ tagFile << "private";
4662 }
4663 if (m_virt!=Specifier::Normal)
4664 {
4665 tagFile << "\" virtualness=\"";
4666 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4667 else /* Pure */ tagFile << "pure";
4668 }
4669 if (isStatic())
4670 {
4671 tagFile << "\" static=\"yes";
4672 }
4673 tagFile << "\">\n";
4674 if (typeString()!=QCString("@"))
4675 {
4676 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4677 }
4678 QCString fn = getOutputFileBase();
4680 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4681 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4682 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4683 QCString idStr = id();
4684 if (!idStr.isEmpty())
4685 {
4686 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4687 }
4688 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4689 if (isStrong())
4690 {
4691 for (const auto &fmd : m_enumFields)
4692 {
4693 if (!fmd->isReference())
4694 {
4695 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4696 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4697 idStr = fmd->id();
4698 if (!idStr.isEmpty())
4699 {
4700 tagFile << "\" clangid=\"" << convertToXML(idStr);
4701 }
4702 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4703 }
4704 }
4705 }
4706 writeDocAnchorsToTagFile(tagFile);
4707 tagFile << " </member>\n";
4708}
void writeDocAnchorsToTagFile(TextStream &fs) const override
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3854
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4863

References addHtmlExtensionIfMissing(), anchor(), argsString(), convertToXML(), DCOP, Define, Dictionary, Enumeration, EnumValue, Event, Friend, Function, getNamespaceDef(), getOutputFileBase(), DefinitionMixin< MemberDefMutable >::id(), Interface, QCString::isEmpty(), isLinkableInProject(), isStatic(), isStrong(), m_enumFields, m_mtype, m_prot, m_virt, DefinitionMixin< MemberDefMutable >::name(), Property, qualifiedName(), Sequence, Service, Signal, Slot, Typedef, typeString(), Variable, and DefinitionMixin< MemberDefMutable >::writeDocAnchorsToTagFile().

Member Data Documentation

◆ m_accessorClass

ClassDef* MemberDefImpl::m_accessorClass = nullptr
private

Definition at line 418 of file memberdef.cpp.

Referenced by accessorClass(), deepCopy(), init(), setAccessorType(), and writeMemberDocSimple().

◆ m_accessorType

QCString MemberDefImpl::m_accessorType
private

Definition at line 417 of file memberdef.cpp.

Referenced by deepCopy(), fieldType(), and setAccessorType().

◆ m_anc

QCString MemberDefImpl::m_anc
private

Definition at line 421 of file memberdef.cpp.

Referenced by anchor(), deepCopy(), setAnchor(), and setTagInfo().

◆ m_annEnumType

const MemberDef* MemberDefImpl::m_annEnumType = nullptr
private

◆ m_annMemb

MemberDef* MemberDefImpl::m_annMemb = nullptr
private

◆ m_annScope

bool MemberDefImpl::m_annScope = false
private

◆ m_args

QCString MemberDefImpl::m_args
private

◆ m_bitfields

QCString MemberDefImpl::m_bitfields
private

◆ m_cachedAnonymousType

ClassDef* MemberDefImpl::m_cachedAnonymousType = nullptr
mutableprivate

Definition at line 455 of file memberdef.cpp.

Referenced by deepCopy(), getClassDefOfAnonymousType(), and init().

◆ m_cachedResolvedType

QCString MemberDefImpl::m_cachedResolvedType
private

Definition at line 473 of file memberdef.cpp.

Referenced by cacheTypedefVal(), deepCopy(), and getCachedResolvedTypedef().

◆ m_cachedTypedefTemplSpec

QCString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 472 of file memberdef.cpp.

Referenced by cacheTypedefVal(), deepCopy(), and getCachedTypedefTemplSpec().

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 471 of file memberdef.cpp.

Referenced by cacheTypedefVal(), deepCopy(), getCachedTypedefVal(), and init().

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

Definition at line 511 of file memberdef.cpp.

Referenced by _writeCategoryRelation(), category(), deepCopy(), and setCategory().

◆ m_categoryRelation

const MemberDef* MemberDefImpl::m_categoryRelation = nullptr
private

◆ m_classDef

ClassDef* MemberDefImpl::m_classDef = nullptr
private

◆ m_decl

QCString MemberDefImpl::m_decl
private

Definition at line 424 of file memberdef.cpp.

Referenced by declaration(), deepCopy(), and init().

◆ m_declArgList

◆ m_declColumn

int MemberDefImpl::m_declColumn = -1
private

Definition at line 515 of file memberdef.cpp.

Referenced by deepCopy(), getDeclColumn(), and setDeclFile().

◆ m_declFileName

QCString MemberDefImpl::m_declFileName
private

Definition at line 513 of file memberdef.cpp.

Referenced by deepCopy(), getDeclFileName(), and setDeclFile().

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

Definition at line 514 of file memberdef.cpp.

Referenced by deepCopy(), getDeclLine(), and setDeclFile().

◆ m_def

QCString MemberDefImpl::m_def
private

Definition at line 420 of file memberdef.cpp.

Referenced by createTemplateInstanceMember(), deepCopy(), definition(), and setDefinition().

◆ m_defArgList

◆ m_defTmpArgLists

ArgumentLists MemberDefImpl::m_defTmpArgLists
private

◆ m_detailedDescriptionCachedValue

bool MemberDefImpl::m_detailedDescriptionCachedValue = false
mutableprivate

Definition at line 497 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_docEnumValues

bool MemberDefImpl::m_docEnumValues = false
private

◆ m_docProvider

const MemberDef* MemberDefImpl::m_docProvider = nullptr
private

Definition at line 476 of file memberdef.cpp.

Referenced by deepCopy(), inheritsDocsFrom(), init(), and setInheritsDocsFrom().

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 508 of file memberdef.cpp.

Referenced by deepCopy(), init(), isDocsForDefinition(), and setDocsForDefinition().

◆ m_enumBaseType

QCString MemberDefImpl::m_enumBaseType
private

◆ m_enumFields

MemberVector MemberDefImpl::m_enumFields
private

◆ m_enumScope

const MemberDef* MemberDefImpl::m_enumScope = nullptr
private

◆ m_examples

ExampleList MemberDefImpl::m_examples
private

Definition at line 414 of file memberdef.cpp.

Referenced by _writeExamples(), addExample(), deepCopy(), getExamples(), and hasExamples().

◆ m_exception

QCString MemberDefImpl::m_exception
private

Definition at line 429 of file memberdef.cpp.

Referenced by createTemplateInstanceMember(), deepCopy(), excpString(), and init().

◆ m_explExt

bool MemberDefImpl::m_explExt = false
private

Definition at line 505 of file memberdef.cpp.

Referenced by deepCopy(), init(), isExternal(), and setExplicitExternal().

◆ m_explicitOutputFileBase

QCString MemberDefImpl::m_explicitOutputFileBase
private

Definition at line 479 of file memberdef.cpp.

Referenced by deepCopy(), getOutputFileBase(), and setTagInfo().

◆ m_extraTypeChars

QCString MemberDefImpl::m_extraTypeChars
private

Definition at line 431 of file memberdef.cpp.

Referenced by deepCopy(), extraTypeChars(), and init().

◆ m_fileDef

FileDef* MemberDefImpl::m_fileDef = nullptr
private

Definition at line 398 of file memberdef.cpp.

Referenced by deepCopy(), getFileDef(), getFileDef(), init(), moveTo(), and setFileDef().

◆ m_formalTemplateArguments

std::optional<ArgumentList> MemberDefImpl::m_formalTemplateArguments
private

Definition at line 449 of file memberdef.cpp.

Referenced by deepCopy(), formalTemplateArguments(), and setFormalTemplateArguments().

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

Definition at line 464 of file memberdef.cpp.

Referenced by deepCopy(), getGroupDef(), getGroupDef(), init(), setEnumScope(), and setGroupDef().

◆ m_groupAlias

const MemberDef* MemberDefImpl::m_groupAlias = nullptr
private

Definition at line 461 of file memberdef.cpp.

Referenced by anchor(), deepCopy(), getGroupAlias(), init(), and setGroupAlias().

◆ m_groupFileName

QCString MemberDefImpl::m_groupFileName
private

Definition at line 466 of file memberdef.cpp.

Referenced by deepCopy(), getGroupFileName(), setEnumScope(), and setGroupDef().

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 507 of file memberdef.cpp.

Referenced by deepCopy(), getGroupHasDocs(), setEnumScope(), and setGroupDef().

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

Definition at line 468 of file memberdef.cpp.

Referenced by anchor(), deepCopy(), init(), and setGroupDef().

◆ m_grouppri

Grouping::GroupPri_t MemberDefImpl::m_grouppri = Grouping::GROUPING_AUTO_DEF
private

Definition at line 465 of file memberdef.cpp.

Referenced by deepCopy(), getGroupPri(), setEnumScope(), and setGroupDef().

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 467 of file memberdef.cpp.

Referenced by deepCopy(), getGroupStartLine(), setEnumScope(), and setGroupDef().

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

Definition at line 462 of file memberdef.cpp.

Referenced by deepCopy(), getMemberGroupId(), init(), and setMemberGroupId().

◆ m_hasCallerGraph

bool MemberDefImpl::m_hasCallerGraph = false
private

◆ m_hasCallGraph

bool MemberDefImpl::m_hasCallGraph = false
private

Definition at line 499 of file memberdef.cpp.

Referenced by _hasVisibleCallGraph(), deepCopy(), hasCallGraph(), init(), and overrideCallGraph().

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 496 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 487 of file memberdef.cpp.

Referenced by deepCopy(), detectUndocumentedParams(), init(), and warnIfUndocumentedParams().

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 488 of file memberdef.cpp.

Referenced by deepCopy(), detectUndocumentedParams(), init(), and warnIfUndocumentedParams().

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 504 of file memberdef.cpp.

Referenced by deepCopy(), hasEnumValues(), init(), and overrideEnumValues().

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

Definition at line 503 of file memberdef.cpp.

Referenced by deepCopy(), hasInlineSource(), init(), and overrideInlineSource().

◆ m_hasReferencedByRelation

bool MemberDefImpl::m_hasReferencedByRelation = false
private

◆ m_hasReferencesRelation

bool MemberDefImpl::m_hasReferencesRelation = false
private

Definition at line 502 of file memberdef.cpp.

Referenced by deepCopy(), hasReferencesRelation(), init(), and overrideReferencesRelation().

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

Definition at line 485 of file memberdef.cpp.

Referenced by deepCopy(), init(), isImplementation(), and makeImplementationDetail().

◆ m_initializer

◆ m_initLines

int MemberDefImpl::m_initLines = 0
private

◆ m_isConstructorCached

uint8_t MemberDefImpl::m_isConstructorCached
private

◆ m_isDestructorCached

uint8_t MemberDefImpl::m_isDestructorCached
private

Definition at line 395 of file memberdef.cpp.

Referenced by _computeIsDestructor(), isDestructor(), MemberDefImpl(), and setFileDef().

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

Definition at line 489 of file memberdef.cpp.

Referenced by _computeIsConstructor(), _computeIsDestructor(), deepCopy(), and init().

◆ m_isLinkableCached

◆ m_isTypedefValCached

bool MemberDefImpl::m_isTypedefValCached = false
private

◆ m_livesInsideEnum

bool MemberDefImpl::m_livesInsideEnum = false
private

Definition at line 403 of file memberdef.cpp.

Referenced by deepCopy(), init(), livesInsideEnum(), setEnumScope(), and writeLink().

◆ m_maxInitLines

int MemberDefImpl::m_maxInitLines = 0
private

Definition at line 439 of file memberdef.cpp.

Referenced by deepCopy(), hasMultiLineInitializer(), hasOneLineInitializer(), and init().

◆ m_memberGroup

MemberGroup* MemberDefImpl::m_memberGroup = nullptr
private

Definition at line 463 of file memberdef.cpp.

Referenced by deepCopy(), getMemberGroup(), init(), and setMemberGroup().

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 411 of file memberdef.cpp.

Referenced by deepCopy(), init(), memberDeclaration(), and setMemberDeclaration().

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 410 of file memberdef.cpp.

Referenced by deepCopy(), init(), memberDefinition(), and setMemberDefinition().

◆ m_memSpec

◆ m_metaData

QCString MemberDefImpl::m_metaData
private

Definition at line 453 of file memberdef.cpp.

Referenced by deepCopy(), init(), and writeDocumentation().

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

Definition at line 400 of file memberdef.cpp.

Referenced by deepCopy(), getModuleDef(), init(), moveTo(), and setModuleDef().

◆ m_mtype

◆ m_nspace

NamespaceDef* MemberDefImpl::m_nspace = nullptr
private

Definition at line 399 of file memberdef.cpp.

Referenced by deepCopy(), getNamespaceDef(), getNamespaceDef(), init(), moveTo(), and setNamespace().

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 516 of file memberdef.cpp.

Referenced by deepCopy(), incrementFlowKeyWordCount(), and numberOfFlowKeyWords().

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

Definition at line 492 of file memberdef.cpp.

Referenced by deepCopy(), init(), isPrototype(), and setPrototype().

◆ m_qualifiers

StringVector MemberDefImpl::m_qualifiers
private

◆ m_read

QCString MemberDefImpl::m_read
private

Definition at line 427 of file memberdef.cpp.

Referenced by deepCopy(), getReadAccessor(), and setReadAccessor().

◆ m_redefineCount

int MemberDefImpl::m_redefineCount = 0
private

Definition at line 517 of file memberdef.cpp.

Referenced by redefineCount(), setAnchor(), and setRedefineCount().

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 408 of file memberdef.cpp.

Referenced by deepCopy(), insertReimplementedBy(), isReimplementedBy(), and reimplementedBy().

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

Definition at line 407 of file memberdef.cpp.

Referenced by deepCopy(), init(), reimplements(), and setReimplements().

◆ m_related

Relationship MemberDefImpl::m_related = Relationship::Member
private

◆ m_relatedAlso

ClassDef* MemberDefImpl::m_relatedAlso = nullptr
private

Definition at line 412 of file memberdef.cpp.

Referenced by deepCopy(), init(), relatedAlso(), and setRelatedAlso().

◆ m_requiresClause

QCString MemberDefImpl::m_requiresClause
private

◆ m_sectionMap

std::map<const Definition *,const MemberList *> MemberDefImpl::m_sectionMap
private

Definition at line 459 of file memberdef.cpp.

Referenced by deepCopy(), getSectionList(), and setSectionList().

◆ m_stat

bool MemberDefImpl::m_stat = false
private

◆ m_tArgList

◆ m_templateMaster

◆ m_tspec

bool MemberDefImpl::m_tspec = false
private

Definition at line 506 of file memberdef.cpp.

Referenced by deepCopy(), init(), isTemplateSpecialization(), and setTemplateSpecialization().

◆ m_type

◆ m_typeConstraints

ArgumentList MemberDefImpl::m_typeConstraints
private

◆ m_userInitLines

int MemberDefImpl::m_userInitLines = 0
private

◆ m_vhdlSpec

VhdlSpecifier MemberDefImpl::m_vhdlSpec
private

Definition at line 437 of file memberdef.cpp.

Referenced by deepCopy(), getVhdlSpecifiers(), init(), and setVhdlSpecifiers().

◆ m_virt

◆ m_write

QCString MemberDefImpl::m_write
private

Definition at line 428 of file memberdef.cpp.

Referenced by deepCopy(), getWriteAccessor(), and setWriteAccessor().


The documentation for this class was generated from the following file: