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 (const Definition *) override
void addRequirementReferences (const Definition *) 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 RequirementRefsrequirementReferences () 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 setRequirementReferences (const RequirementRefs &rqli) 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
bool hasRequirementRefs () const override
void writeRequirementRefs (OutputList &ol) 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 1437 of file memberdef.cpp.

1442{
1443 //printf("MemberDefImpl::MemberDef(%s)\n",qPrint(na));
1444 init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
1448}
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 4719 of file memberdef.cpp.

4720{
4721 m_isConstructorCached=1; // FALSE
4722 if (getClassDef())
4723 {
4724 if (m_isDMember) // for D
4725 {
4726 m_isConstructorCached = name()=="this" ? 2 : 1;
4727 return;
4728 }
4729 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4730 {
4731 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4732 return;
4733 }
4734 else if (name()=="__init__" &&
4735 getLanguage()==SrcLangExt::Python) // for Python
4736 {
4737 m_isConstructorCached = 2; // TRUE
4738 return;
4739 }
4740 else // for other languages
4741 {
4742 QCString locName = getClassDef()->localName();
4743 int i=locName.find('<');
4744 if (i==-1) // not a template class
4745 {
4746 m_isConstructorCached = name()==locName ? 2 : 1;
4747 }
4748 else
4749 {
4750 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4751 }
4752 return;
4753 }
4754 }
4755}
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 4769 of file memberdef.cpp.

4770{
4771 bool isDestructor = false;
4772 if (m_isDMember) // for D
4773 {
4774 isDestructor = name()=="~this";
4775 }
4776 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4777 {
4778 isDestructor = name()=="__destruct";
4779 }
4780 else if (name()=="__del__" &&
4781 getLanguage()==SrcLangExt::Python) // for Python
4782 {
4783 isDestructor = true;
4784 }
4785 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4786 {
4787 isDestructor = typeString()=="final";
4788 }
4789 else // other languages
4790 {
4791 isDestructor =
4792 (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
4793 && name().find("operator")==-1;
4794 }
4796}
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 1790 of file memberdef.cpp.

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

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 3058 of file memberdef.cpp.

3059{
3060 const MemberVector &bml=reimplementedBy();
3061 size_t count=0;
3062 for (const auto &bmd : bml)
3063 {
3064 const ClassDef *bcd=bmd->getClassDef();
3065 // count the members that directly inherit from md and for
3066 // which the member and class are visible in the docs.
3067 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
3068 {
3069 count++;
3070 }
3071 }
3072 return count;
3073}
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 5746 of file memberdef.cpp.

5747{
5748 bool enabled = m_hasCallerGraph &&
5749 (isFunction() || isSlot() || isSignal()) &&
5750 Config_getBool(HAVE_DOT);
5751 if (enabled)
5752 {
5753 bool trivial = DotCallGraph::isTrivial(this,TRUE);
5754 return !trivial;
5755 }
5756 return FALSE;
5757}
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 5728 of file memberdef.cpp.

5729{
5730 bool enabled = m_hasCallGraph &&
5731 (isFunction() || isSlot() || isSignal()) &&
5732 Config_getBool(HAVE_DOT);
5733 if (enabled)
5734 {
5735 bool trivial = DotCallGraph::isTrivial(this,FALSE);
5736 return !trivial;
5737 }
5738 return FALSE;
5739}

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 2216 of file memberdef.cpp.

2217{
2218 return !m_bitfields.isEmpty() && name().startsWith("__pad"); // anonymous bitfield
2219}
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 2985 of file memberdef.cpp.

2986{
2987 const MemberDef *bmd=reimplements();
2988 const ClassDef *bcd=nullptr;
2989 if (bmd && (bcd=bmd->getClassDef()))
2990 {
2991 // write class that contains a member that is reimplemented by this one
2992 if (bcd->isLinkable())
2993 {
2994 return true;
2995 }
2996 }
2997 return false;
2998}
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 2963 of file memberdef.cpp.

2964{
2966 {
2967 DotCallGraph callerGraph(this, TRUE);
2968 if (callerGraph.isTooBig())
2969 {
2970 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2971 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2972 }
2973 else if (!callerGraph.isTrivial())
2974 {
2975 msg("Generating caller graph for function {}\n",qualifiedName());
2977 ol.startCallGraph();
2979 ol.endCallGraph(callerGraph);
2980 ol.enableAll();
2981 }
2982 }
2983}
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 2940 of file memberdef.cpp.

2941{
2942 // write call graph
2944 {
2945 DotCallGraph callGraph(this,FALSE);
2946 if (callGraph.isTooBig())
2947 {
2948 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2949 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2950 }
2951 else if (!callGraph.isTrivial())
2952 {
2953 msg("Generating call graph for function {}\n",qualifiedName());
2955 ol.startCallGraph();
2957 ol.endCallGraph(callGraph);
2958 ol.enableAll();
2959 }
2960 }
2961}
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 3134 of file memberdef.cpp.

3135{
3136 if (getClassDef()) // this should be a member of a class/category
3137 {
3138 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3139 // qPrint(name()),
3140 // m_category ? qPrint(m_category->name()) : "<none>",
3141 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3142 // qPrint(m_classDef->name()),
3143 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3144 // );
3145 QCString text;
3146 QCString ref;
3147 QCString file;
3148 QCString anc;
3149 QCString name;
3150 int i=-1;
3151 if (m_categoryRelation && m_categoryRelation->isLinkable())
3152 {
3153 if (m_category)
3154 {
3155 // this member is in a normal class and implements method categoryRelation from category
3156 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3158 name = m_category->displayName();
3159 }
3160 else if (getClassDef()->categoryOf())
3161 {
3162 // this member is part of a category so link to the corresponding class member of the class we extend
3163 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3164 text = theTranslator->trExtendsClass();
3166 }
3167 i=text.find("@0");
3168 if (i!=-1)
3169 {
3170 const MemberDef *md = m_categoryRelation;
3171 ref = md->getReference();
3172 file = md->getOutputFileBase();
3173 anc = md->anchor();
3174 }
3175 }
3176 if (i!=-1 && !name.isEmpty())
3177 {
3178 ol.startParagraph();
3179 ol.parseText(text.left(i));
3180 ol.writeObjectLink(ref,file,anc,name);
3181 ol.parseText(text.mid(i+2));
3182 ol.endParagraph();
3183 }
3184 }
3185}
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 3208 of file memberdef.cpp.

3211{
3212 // For enum, we also write the documented enum values
3213 if (isEnumerate())
3214 {
3215 bool first=true;
3216 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3217 bool hasInits = false;
3218 if (hasEnumValues())
3219 {
3220 for (const auto &fmd : enumFieldList())
3221 {
3222 if (fmd->isLinkable())
3223 {
3224 if (!fmd->initializer().isEmpty())
3225 {
3226 hasInits = true;
3227 break;
3228 }
3229 }
3230 }
3231 }
3232 for (const auto &fmd : enumFieldList())
3233 {
3234 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3235 if (fmd->isLinkable())
3236 {
3237 if (first)
3238 {
3240 first=false;
3241 }
3242
3243 ol.startDescTableRow();
3244 ol.addIndexItem(fmd->name(),ciname);
3245 ol.addIndexItem(ciname,fmd->name());
3246
3248 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3249 ol.addLabel(cfname,fmd->anchor());
3250 ol.docify(fmd->name());
3252 ol.writeString(" ");
3253 ol.enableAll();
3254 ol.endDoxyAnchor(cfname,fmd->anchor());
3255 ol.endDescTableTitle();
3256 if (hasInits)
3257 {
3258 ol.startDescTableInit();
3259 if (!fmd->initializer().isEmpty())
3260 {
3261 QCString initStr = fmd->initializer().stripWhiteSpace();
3262 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3264 ol.writeString("(");
3265 ol.enableAll();
3266 ol.docify(initStr);
3268 ol.writeString(")");
3269 ol.enableAll();
3270 }
3271 ol.endDescTableInit();
3272 }
3273 ol.startDescTableData();
3274
3275 bool hasBrief = !fmd->briefDescription().isEmpty();
3276 bool hasDetails = !fmd->documentation().isEmpty();
3277
3278 if (hasBrief)
3279 {
3280 ol.generateDoc(fmd->briefFile(),
3281 fmd->briefLine(),
3282 getOuterScope()?getOuterScope():container,
3283 fmd,
3284 fmd->briefDescription(),
3285 DocOptions()
3286 .setIndexWords(true));
3287 }
3288 if (hasDetails)
3289 {
3290 ol.generateDoc(fmd->docFile(),
3291 fmd->docLine(),
3292 getOuterScope()?getOuterScope():container,
3293 fmd,
3294 fmd->documentation()+"\n",
3295 DocOptions()
3296 .setIndexWords(true));
3297 }
3298 ol.endDescTableData();
3299 ol.endDescTableRow();
3300 }
3301 }
3302 if (!first)
3303 {
3304 ol.endDescTable();
3305 }
3306 }
3307}
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 3187 of file memberdef.cpp.

3188{
3189 // write the list of examples that use this member
3190 if (hasExamples())
3191 {
3192 ol.startExamples();
3193 ol.startDescForItem();
3195 ol.endDescForItem();
3196 ol.endExamples();
3197 }
3198}
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:1157

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 3387 of file memberdef.cpp.

3388{
3389 // only write out the include file if this is not part of a class or file
3390 // definition
3391 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3392 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3393 const FileDef *fd = getFileDef();
3394 QCString nm;
3395 if (inGroup && fd && showGroupedMembInc)
3396 {
3397 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3398 {
3400 }
3401 else
3402 {
3403 nm = fd->name();
3404 }
3405 }
3406 if (!nm.isEmpty())
3407 {
3408 ol.startParagraph();
3409 ol.startTypewriter();
3410 SrcLangExt lang = getLanguage();
3411 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3412 if (isIDLorJava)
3413 {
3414 ol.docify("import ");
3415 }
3416 else
3417 {
3418 ol.docify("#include ");
3419 }
3420
3421 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3422
3423 if (fd->isLinkable())
3424 {
3425 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3426 }
3427 else
3428 {
3429 ol.docify(nm);
3430 }
3431
3432 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3433
3434 ol.endTypewriter();
3435 ol.endParagraph();
3436 }
3437}
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 3439 of file memberdef.cpp.

3440{
3441 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3442 ol.startBold();
3445 else
3447 ol.endBold();
3448 QCString langCorrected = getDefFileExtension();
3450 if (srcLangExt == SrcLangExt::Lex)
3451 {
3452 langCorrected = ".doxygen_lex_c";
3453 srcLangExt = SrcLangExt::Cpp;
3454 }
3455 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3456 intf->resetCodeParserState();
3457 auto &codeOL = ol.codeGenerators();
3458 codeOL.startCodeFragment("DoxyCode");
3459 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3460 CodeParserOptions()
3462 .setInlineFragment(true)
3463 .setMemberDef(this)
3464 .setShowLineNumbers(false)
3465 .setSearchCtx(this)
3466 );
3467 codeOL.endCodeFragment("DoxyCode");
3468}
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:5191

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 3075 of file memberdef.cpp.

3076{
3077 const MemberVector &bml=reimplementedBy();
3078 size_t count = _countReimplementedBy();
3079 if (count>0)
3080 {
3081 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3082 {
3083 size_t cnt=0;
3084 auto it = bml.begin();
3085 // find the entryIndex-th documented entry in the inheritance list.
3086 const MemberDef *bmd = nullptr;
3087 const ClassDef *bcd = nullptr;
3088 while (it!=bml.end())
3089 {
3090 bmd = *it;
3091 bcd = bmd->getClassDef();
3092 if ( bmd->isLinkable() && bcd->isLinkable())
3093 {
3094 if (cnt==entryIndex) break;
3095 cnt++;
3096 }
3097 ++it;
3098 }
3099
3100 if (bcd && bmd) // write link for marker
3101 {
3102 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3103 // bmd->anchor(),bcd->name());
3105 bmd->anchor(),bcd->displayName());
3106
3107 if (bmd->isLinkableInProject() )
3108 {
3109 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3110 }
3111 }
3112 };
3113
3114 QCString reimplInLine;
3115 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3116 {
3117 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3118 }
3119 else
3120 {
3121 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3122 }
3123
3124 // write the list of classes that overwrite this member
3125 ol.startParagraph();
3126 writeMarkerList(ol,
3127 reimplInLine.str(),
3128 count,
3129 replaceFunc);
3130 ol.endParagraph();
3131 }
3132}
@ 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:1106

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 2999 of file memberdef.cpp.

3000{
3001 const MemberDef *bmd=reimplements();
3002 const ClassDef *bcd=nullptr;
3003 if (bmd && (bcd=bmd->getClassDef()))
3004 {
3005 // write class that contains a member that is reimplemented by this one
3006 if (bcd->isLinkable())
3007 {
3008 ol.startParagraph();
3009 QCString reimplFromLine;
3010 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
3011 {
3012 reimplFromLine = theTranslator->trReimplementedFromList(1);
3013 }
3014 else
3015 {
3016 reimplFromLine = theTranslator->trImplementedFromList(1);
3017 }
3018 int markerPos = reimplFromLine.find("@0");
3019 if (markerPos!=-1) // should always pass this.
3020 {
3021 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
3022 if (bmd->isLinkable()) // replace marker with link
3023 {
3024 //Definition *bd=bmd->group;
3025 //if (bd==0) bd=bcd;
3027 bmd->anchor(),bcd->displayName());
3028
3029 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3030 // bmd->anchor(),bcd->name());
3031 if ( bmd->isLinkableInProject() )
3032 {
3033 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3034 }
3035 }
3036 else
3037 {
3039 QCString(),bcd->displayName());
3040 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3041 {
3042 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3043 }
3044 }
3045 ol.parseText(reimplFromLine.right(
3046 reimplFromLine.length()-markerPos-2)); // text right from marker
3047
3048 }
3049 else
3050 {
3051 err("translation error: no marker in trReimplementsFromList()\n");
3052 }
3053 ol.endParagraph();
3054 }
3055 }
3056}
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 2165 of file memberdef.cpp.

2167{
2168 ol.docify("template<");
2169 for (auto it = al.begin(); it!=al.end();)
2170 {
2171 Argument a = *it;
2172 linkifyText(TextGeneratorOLImpl(ol), // out
2173 def, // scope
2174 getFileDef(), // fileScope
2175 this, // self
2176 a.type, // text
2177 FALSE // autoBreak
2178 );
2179 if (!a.name.isEmpty())
2180 {
2181 ol.docify(" ");
2182 ol.docify(a.name);
2183 }
2184 if (!a.defval.isEmpty())
2185 {
2186 ol.docify(" = ");
2187 ol.docify(a.defval);
2188 }
2189 ++it;
2190 if (it!=al.end()) ol.docify(", ");
2191 }
2192 ol.docify("> ");
2193 if (writeReqClause && !m_requiresClause.isEmpty())
2194 {
2195 ol.lineBreak();
2196 ol.docify("requires ");
2197 linkifyText(TextGeneratorOLImpl(ol), // out
2198 def, // scope
2199 getFileDef(), // fileScope
2200 this, // self
2201 m_requiresClause, // text
2202 FALSE // autoBreak
2203 );
2204 }
2205}
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 3200 of file memberdef.cpp.

3201{
3202 if (m_typeConstraints.hasParameters())
3203 {
3205 }
3206}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5439

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ accessorClass()

ClassDef * MemberDefImpl::accessorClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4960 of file memberdef.cpp.

4961{
4962 return m_accessorClass;
4963}
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 1629 of file memberdef.cpp.

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

References anchor(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4559 of file memberdef.cpp.

4560{
4561 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4562 SrcLangExt lang = getLanguage();
4563 if (!isLinkableInProject()) return;
4564 QCString memLabel;
4565 if (optimizeOutputForC)
4566 {
4567 memLabel=theTranslator->trGlobal(TRUE,TRUE);
4568 }
4569 else if (lang==SrcLangExt::Fortran)
4570 {
4572 }
4573 else
4574 {
4575 memLabel=theTranslator->trMember(TRUE,TRUE);
4576 }
4577 QCString memName = name();
4578 Definition *pd=getOuterScope();
4579 QCString pdName = pd->definitionType()==Definition::TypeClass ?
4580 (toClassDef(pd))->displayName() : pd->name();
4581 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4582 QCString memArgs;
4583 if (!isRelated())
4584 {
4585 if (isObjCMethod())
4586 {
4587 memName = "[" + pd->name() + " " + name() + "]";
4588 }
4589 else
4590 {
4591 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4592 memArgs = argsString();
4593 }
4594 }
4595 const RefItemVector &xrefItems = xrefListItems();
4596 if (sep!="::")
4597 {
4598 memName = substitute(memName,"::",sep);
4599 }
4600 addRefItem(xrefItems,
4601 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4602 memLabel,
4603 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4604}
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:4805
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5897

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 5898 of file memberdef.cpp.

5899{
5900 for (const auto &sx : qualifiers)
5901 {
5902 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5903 if (!alreadyAdded)
5904 {
5905 m_qualifiers.push_back(sx);
5906 }
5907 }
5908}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4606 of file memberdef.cpp.

4607{
4609}
static RequirementManager & instance()
void addRequirementRefsForSymbol(const Definition *symbol)

References RequirementManager::addRequirementRefsForSymbol(), and RequirementManager::instance().

◆ anchor()

QCString MemberDefImpl::anchor ( ) const
overridevirtual

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

Implements Definition.

Definition at line 1767 of file memberdef.cpp.

1768{
1769 QCString result=m_anc;
1770 if (m_groupAlias) return m_groupAlias->anchor();
1771 if (m_templateMaster) return m_templateMaster->anchor();
1772 if (m_enumScope && m_enumScope!=this) // avoid recursion for C#'s public enum E { E, F }
1773 {
1774 result.prepend(m_enumScope->anchor());
1775 }
1776 if (getGroupDef())
1777 {
1778 if (m_groupMember)
1779 {
1780 result=m_groupMember->anchor();
1781 }
1782 else if (getReference().isEmpty())
1783 {
1784 result.prepend("g");
1785 }
1786 }
1787 return result;
1788}
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 5640 of file memberdef.cpp.

5641{
5642 return m_defArgList;
5643}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5106 of file memberdef.cpp.

5107{
5108 return m_bitfields;
5109}

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 6349 of file memberdef.cpp.

6350{
6351 if (m_templateMaster)
6352 {
6353 return m_templateMaster->briefDescription(abbr);
6354 }
6355 else
6356 {
6358 }
6359}
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 6116 of file memberdef.cpp.

6117{
6120 m_cachedTypedefTemplSpec=templSpec;
6121 m_cachedResolvedType=resolvedType;
6122 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6123}
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 6076 of file memberdef.cpp.

6077{
6078 return m_category;
6079}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6086 of file memberdef.cpp.

6087{
6088 return m_categoryRelation;
6089}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6429 of file memberdef.cpp.

6430{
6431 switch (memberType())
6432 {
6449 }
6451}
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 6125 of file memberdef.cpp.

6126{
6127 {
6128 const ArgumentList &srcAl = bmd->argumentList();
6129 ArgumentList &dstAl = m_defArgList;
6130 auto srcIt = srcAl.begin();
6131 auto dstIt = dstAl.begin();
6132 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6133 {
6134 Argument &argDst = *dstIt;
6135 const Argument &argSrc = *srcIt;
6136 argDst.name = argSrc.name;
6137 argDst.docs = argSrc.docs;
6138 ++srcIt;
6139 ++dstIt;
6140 }
6141 }
6142
6143 {
6144 const ArgumentList &srcAl = bmd->declArgumentList();
6145 ArgumentList &dstAl = m_declArgList;
6146 auto srcIt = srcAl.begin();
6147 auto dstIt = dstAl.begin();
6148
6149 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6150 {
6151 Argument &argDst = *dstIt;
6152 const Argument &argSrc = *srcIt;
6153 argDst.name = argSrc.name;
6154 argDst.docs = argSrc.docs;
6155 ++srcIt;
6156 ++dstIt;
6157 }
6158 }
6159}
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 4480 of file memberdef.cpp.

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

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 5076 of file memberdef.cpp.

5077{
5078 return m_decl;
5079}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5645 of file memberdef.cpp.

5646{
5647 return m_declArgList;
5648}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1450 of file memberdef.cpp.

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

5082{
5083 return m_def;
5084}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5703 of file memberdef.cpp.

5704{
5705 return m_defTmpArgLists;
5706}

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 4236 of file memberdef.cpp.

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

3313{
3314 QCString ldef = definition();
3315 QCString title = name();
3316 if (isEnumerate())
3317 {
3318 if (isAnonymous())
3319 {
3320 ldef = title = "anonymous enum";
3321 if (!m_enumBaseType.isEmpty())
3322 {
3323 ldef+=" : "+m_enumBaseType;
3324 }
3325 }
3326 else
3327 {
3328 ldef.prepend("enum ");
3329 if (isSliceLocal())
3330 {
3331 ldef.prepend("local ");
3332 }
3333 }
3334 }
3335 else if (isEnumValue())
3336 {
3337 if (isAnonymous())
3338 {
3339 ldef=ldef.mid(2);
3340 }
3341 }
3342
3343 std::string sdef = ldef.str();
3344 reg::Match match;
3345 if (reg::search(sdef,match,reAnonymous))
3346 {
3347 ldef = match.prefix().str() + " { ... } " + removeAnonymousScopes(match.suffix().str());
3348 }
3349
3350 const ClassDef *cd=getClassDef();
3351 if (cd && cd->isObjectiveC())
3352 {
3353 // strip scope name
3354 int ep = ldef.find("::");
3355 if (ep!=-1)
3356 {
3357 int sp=ldef.findRev(' ',ep);
3358 if (sp!=-1)
3359 {
3360 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3361 }
3362 }
3363 // strip keywords
3364 int dp = ldef.find(':');
3365 if (dp!=-1)
3366 {
3367 ldef=ldef.left(dp+1);
3368 }
3369 int l=static_cast<int>(ldef.length());
3370 //printf("start >%s<\n",qPrint(ldef));
3371 int i=l-1;
3372 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3373 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3374 if (i>0)
3375 {
3376 // insert branches around the type
3377 ldef = "("+ldef.left(i+1)+")"+ldef.mid(i+1);
3378 }
3379 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3380 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3381 }
3382 SrcLangExt lang = getLanguage();
3383 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
3384 return substitute(ldef,"::",sep);
3385}
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 6187 of file memberdef.cpp.

6188{
6189 return DefinitionMixin::name();
6190}

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 6361 of file memberdef.cpp.

6362{
6363 if (m_templateMaster)
6364 {
6365 return m_templateMaster->documentation();
6366 }
6367 else
6368 {
6370 }
6371}
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 6101 of file memberdef.cpp.

6102{
6103 return m_enumBaseType;
6104}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5625 of file memberdef.cpp.

5626{
5627 return m_enumFields;
5628}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5101 of file memberdef.cpp.

5102{
5103 return m_exception;
5104}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5086 of file memberdef.cpp.

5087{
5088 return m_extraTypeChars;
5089}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3988 of file memberdef.cpp.

3989{
3990 QCString type = m_accessorType;
3991 if (type.isEmpty())
3992 {
3993 type = m_type;
3994 }
3995
3996 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3997 return simplifyTypeForTable(type);
3998}
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 4965 of file memberdef.cpp.

4966{
4970}
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 5784 of file memberdef.cpp.

5785{
5787}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6035 of file memberdef.cpp.

6036{
6037 return m_annMemb;
6038}

References m_annMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5718 of file memberdef.cpp.

5719{
5720 return m_annScope;
5721}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5580 of file memberdef.cpp.

5581{
5582 return m_annEnumType;
5583}

References m_annEnumType.

Referenced by writeDeclaration().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5804 of file memberdef.cpp.

5805{
5806 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5807 return m_cachedResolvedType;
5808}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5799 of file memberdef.cpp.

5800{
5802}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5794 of file memberdef.cpp.

5795{
5796 return m_cachedTypedefValue;
5797}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5136 of file memberdef.cpp.

5137{
5138 return m_classDef;
5139}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5141 of file memberdef.cpp.

5142{
5144}
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 1980 of file memberdef.cpp.

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

5841{
5842 return m_declColumn;
5843}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5830 of file memberdef.cpp.

5831{
5832 return m_declFileName;
5833}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5835 of file memberdef.cpp.

5836{
5837 return m_declLine;
5838}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2125 of file memberdef.cpp.

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

5591{
5592 return m_enumScope;
5593}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5630 of file memberdef.cpp.

5631{
5632 return m_examples;
5633}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5151 of file memberdef.cpp.

5152{
5153 return m_fileDef;
5154}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5825 of file memberdef.cpp.

5826{
5827 return m_groupAlias;
5828}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5181 of file memberdef.cpp.

5182{
5183 return m_group;
5184}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5196 of file memberdef.cpp.

5197{
5198 return m_groupFileName;
5199}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5206 of file memberdef.cpp.

5207{
5208 return m_groupHasDocs;
5209}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5191 of file memberdef.cpp.

5192{
5193 return m_grouppri;
5194}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5201 of file memberdef.cpp.

5202{
5203 return m_groupStartLine;
5204}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2803 of file memberdef.cpp.

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

5714{
5715 return m_memberGroup;
5716}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5708 of file memberdef.cpp.

5709{
5710 return m_grpId;
5711}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5121 of file memberdef.cpp.

5122{
5123 return m_memSpec;
5124}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5186 of file memberdef.cpp.

5187{
5188 return m_moduleDef;
5189}

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 5161 of file memberdef.cpp.

5162{
5163 return m_nspace;
5164}

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 1660 of file memberdef.cpp.

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

5894{
5895 return m_qualifiers;
5896}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5166 of file memberdef.cpp.

5167{
5168 return m_read;
5169}

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 1728 of file memberdef.cpp.

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

4387{
4388 QCString result;
4389 if (isStrong()) result=name();
4390 else if (getClassDef()) result=getClassDef()->displayName();
4391 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4392 return result;
4393}

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 4611 of file memberdef.cpp.

4612{
4613 auto it = m_sectionMap.find(container);
4614 return it!=m_sectionMap.end() ? it->second : nullptr;
4615}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5126 of file memberdef.cpp.

5127{
5128 return m_vhdlSpec;
5129}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5171 of file memberdef.cpp.

5172{
5173 return m_write;
5174}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5741 of file memberdef.cpp.

5742{
5743 return m_hasCallerGraph;
5744}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5723 of file memberdef.cpp.

5724{
5725 return m_hasCallGraph;
5726}

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 // requirement references
2752
2753 if (!hideUndocMembers) // if HIDE_UNDOC_MEMBERS is NO we also show the detailed section
2754 // if there is only some generated info
2755 {
2756 docFilter = docFilter || docInfo;
2757 }
2758
2759 // this is not a global static or global statics should be extracted
2760 bool staticFilter = getClassDef()!=nullptr || !isStatic() || extractStatic;
2761
2762 // a module does not contain details for members, so either the namespace or file should be linkable
2763 bool moduleFilter = getModuleDef()==nullptr || (getFileDef() && getFileDef()->isLinkable()) ||
2765
2766 // only include members that are non-private unless EXTRACT_PRIVATE is
2767 // set to YES or the member is part of a group
2768 bool privateFilter = protectionLevelVisible(protection()) || m_mtype==MemberType::Friend ||
2769 (m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual);
2770
2771 // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
2772 // is true
2773 bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend());
2774
2776 (docFilter && staticFilter && moduleFilter && privateFilter && friendCompoundFilter && !isHidden());
2777 //printf("docFilter=%d docInfo=%d staticFilter=%d privateFilter=%d friendCompoundFilter=%d !isHidden()=%d",
2778 // docFilter,docInfo,staticFilter,privateFilter,friendCompoundFilter,!isHidden());
2780 }
2781 //printf("<hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2783}
bool hasRequirementRefs() const override
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 >::hasRequirementRefs(), 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 4373 of file memberdef.cpp.

4374{
4376 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4377 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4378}
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 5575 of file memberdef.cpp.

5576{
5577 return m_docEnumValues;
5578}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5774 of file memberdef.cpp.

5775{
5776 return m_hasEnumValues;
5777}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1635 of file memberdef.cpp.

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

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5769 of file memberdef.cpp.

5770{
5771 return m_hasInlineSource;
5772}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4534 of file memberdef.cpp.

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

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 4523 of file memberdef.cpp.

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

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 5759 of file memberdef.cpp.

5760{
5762}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5764 of file memberdef.cpp.

5765{
5767}

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 6373 of file memberdef.cpp.

6374{
6375 if (m_templateMaster)
6376 {
6377 return m_templateMaster->hasUserDocumentation();
6378 }
6379 else
6380 {
6382 }
6383}
bool hasUserDocumentation() const override

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6175 of file memberdef.cpp.

6176{
6178}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5820 of file memberdef.cpp.

5821{
5822 return m_docProvider;
5823}

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 1327 of file memberdef.cpp.

1333{
1334 m_classDef=nullptr;
1335 m_fileDef=nullptr;
1336 m_moduleDef=nullptr;
1337 m_redefines=nullptr;
1338 m_relatedAlso=nullptr;
1339 m_accessorClass=nullptr;
1340 m_nspace=nullptr;
1341 m_memDef=nullptr;
1342 m_memDec=nullptr;
1343 m_group=nullptr;
1344 m_grpId=-1;
1345 m_enumScope=nullptr;
1347 m_hasCallGraph = Config_getBool(CALL_GRAPH);
1348 m_hasCallerGraph = Config_getBool(CALLER_GRAPH);
1349 m_hasReferencedByRelation = Config_getBool(REFERENCED_BY_RELATION);
1350 m_hasReferencesRelation = Config_getBool(REFERENCES_RELATION);
1351 m_hasEnumValues = Config_getBool(SHOW_ENUM_VALUES);
1352 m_hasInlineSource = Config_getBool(INLINE_SOURCES);
1353 m_initLines=0;
1354 m_type=t;
1355 if (mt==MemberType::Typedef) m_type.stripPrefix("typedef ");
1356 // type.stripPrefix("struct ");
1357 // type.stripPrefix("class " );
1358 // type.stripPrefix("union " );
1360 m_args=a;
1362 if (m_type.isEmpty()) m_decl=d->name()+m_args; else m_decl=m_type+" "+d->name()+m_args;
1363
1364 m_memberGroup=nullptr;
1365 m_virt=v;
1366 m_prot=p;
1367 m_related=r;
1368 m_stat=s;
1369 m_mtype=mt;
1370 m_exception=e;
1371 m_proto=FALSE;
1373 m_memSpec=TypeSpecifier();
1375 m_annMemb=nullptr;
1376 m_annEnumType=nullptr;
1377 m_groupAlias=nullptr;
1379 m_tspec=FALSE;
1380 m_cachedAnonymousType=nullptr;
1381 m_maxInitLines=Config_getInt(MAX_INITIALIZER_LINES);
1382 m_userInitLines=-1;
1384 // copy function template arguments (if any)
1385 m_tArgList = tal;
1386 //printf("new member al=%p\n",al);
1387 // copy function definition arguments (if any)
1388 m_defArgList = al;
1389 // convert function declaration arguments (if any)
1390 if (!m_args.isEmpty())
1391 {
1393 //printf("setDeclArgList %s to %s const=%d\n",qPrint(args),
1394 // qPrint(argListToString(declArgList)),declArgList->constSpecifier);
1395 }
1396 m_metaData = meta;
1397 m_templateMaster = nullptr;
1400 m_cachedTypedefValue = nullptr;
1402 m_groupMember = nullptr;
1405 m_docProvider = nullptr;
1406 m_isDMember = d->getDefFileName().lower().endsWith(".d");
1407}
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 5111 of file memberdef.cpp.

5112{
5113 return m_initializer;
5114}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5116 of file memberdef.cpp.

5117{
5118 return m_initLines;
5119}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1624 of file memberdef.cpp.

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

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1579 of file memberdef.cpp.

1580{
1581 if (m_templateMaster)
1582 {
1583 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef *>(m_templateMaster));
1584 if (mdm)
1585 {
1586 mdm->insertReimplementedBy(md);
1587 }
1588 }
1589 if (!m_redefinedBy.contains(md))
1590 {
1591 m_redefinedBy.inSort(md);
1592 }
1593}
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 6169 of file memberdef.cpp.

6170{
6173}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6061 of file memberdef.cpp.

6062{
6064}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5411 of file memberdef.cpp.

5412{
5413 return m_memSpec.isAbstract();
5414}

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5361 of file memberdef.cpp.

5362{
5363 return m_memSpec.isAddable();
5364}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5436 of file memberdef.cpp.

5437{
5438 return m_memSpec.isAssign();
5439}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5493 of file memberdef.cpp.

5494{
5495 return m_memSpec.isAttribute();
5496}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5508 of file memberdef.cpp.

5509{
5510 return m_memSpec.isBound();
5511}

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 2032 of file memberdef.cpp.

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

5560{
5561 return isFunction() ||
5562 isSlot() ||
5563 isSignal() ||
5564 isConstructor() ||
5565 isDestructor() ||
5566 isObjCMethod() ||
5567 isFriend();
5568}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5615 of file memberdef.cpp.

5616{
5617 return m_memSpec.isConstEval();
5618}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5610 of file memberdef.cpp.

5611{
5612 return m_memSpec.isConstExpr();
5613}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5620 of file memberdef.cpp.

5621{
5622 return m_memSpec.isConstInit();
5623}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5513 of file memberdef.cpp.

5514{
5515 return m_memSpec.isConstrained();
5516}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4757 of file memberdef.cpp.

4758{
4759 if (m_isConstructorCached==0)
4760 {
4761 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4762 that->_computeIsConstructor();
4763 }
4765 return m_isConstructorCached==2;
4766
4767}
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 5431 of file memberdef.cpp.

5432{
5433 return m_memSpec.isCopy();
5434}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5018 of file memberdef.cpp.

5019{
5020 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return TRUE;
5021 return FALSE;
5022}
bool isProperty() const override

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

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5281 of file memberdef.cpp.

5282{
5283 return m_mtype==MemberType::DCOP;
5284}

References DCOP, and m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5478 of file memberdef.cpp.

5479{
5480 return m_memSpec.isDefault();
5481}

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5271 of file memberdef.cpp.

5272{
5274}

References Define, and m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5483 of file memberdef.cpp.

5484{
5485 return m_memSpec.isDelete();
5486}

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4368 of file memberdef.cpp.

4369{
4370 return m_defArgList.isDeleted();
4371}

References m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4798 of file memberdef.cpp.

4799{
4800 if (m_isDestructorCached==0)
4801 {
4802 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4803 that->_computeIsDestructor();
4804 }
4806 return m_isDestructorCached==2;
4807}
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 2785 of file memberdef.cpp.

2786{
2787 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2788 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2789 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2790 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2791 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2792 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2793 getClassDef()!=nullptr && getClassDef()->isSimple();
2794
2795 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2796 !isReference();
2797 bool result = visible || simpleFilter;
2798 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2799 // qPrint(name()),result,groupFilter,fileFilter);
2800 return result;
2801}
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 5256 of file memberdef.cpp.

5257{
5259}

References Dictionary, and m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5585 of file memberdef.cpp.

5586{
5587 return m_docsForDefinition;
5588}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4358 of file memberdef.cpp.

4359{
4360 ClassDef *fcd=nullptr;
4361 QCString baseName=name();
4362 int i=baseName.find('<');
4363 if (i!=-1) baseName=baseName.left(i);
4364 return (isFriendClass() &&
4365 (fcd=getClass(baseName)) && fcd->isLinkable());
4366}
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 5456 of file memberdef.cpp.

5457{
5458 return m_memSpec.isEnumStruct();
5459}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5241 of file memberdef.cpp.

5242{
5244}

References EnumValue, and m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5291 of file memberdef.cpp.

5292{
5293 return m_mtype==MemberType::Event;
5294}

References Event, and m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5316 of file memberdef.cpp.

5317{
5318 return m_memSpec.isExplicit();
5319}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5549 of file memberdef.cpp.

5550{
5551 return m_explExt;
5552}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5386 of file memberdef.cpp.

5387{
5388 return m_memSpec.isFinal();
5389}

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5301 of file memberdef.cpp.

5302{
5303 return m_related == Relationship::Foreign;
5304}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6400 of file memberdef.cpp.

6401{
6402 return (isFriend() &&
6403 (m_type=="friend class" || m_type=="friend struct" ||
6404 m_type=="friend union"));
6405}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6390 of file memberdef.cpp.

6391{
6392 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6393 bool isFriendToHide = hideFriendCompounds &&
6394 (m_type=="friend class" ||
6395 m_type=="friend struct" ||
6396 m_type=="friend union");
6397 return isFriendToHide;
6398}
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 6413 of file memberdef.cpp.

6414{
6415 return isFunction() || isSlot() || isSignal();
6416}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5266 of file memberdef.cpp.

5267{
5268 return m_mtype==MemberType::Variable && QCString(argsString()).find(")(")!=-1;
5269}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5331 of file memberdef.cpp.

5332{
5333 return m_memSpec.isGettable();
5334}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5544 of file memberdef.cpp.

5545{
5546 return m_implOnly;
5547}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5406 of file memberdef.cpp.

5407{
5408 return m_memSpec.isInitonly();
5409}

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5311 of file memberdef.cpp.

5312{
5313 return m_memSpec.isInline();
5314}

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 1904 of file memberdef.cpp.

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

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 1893 of file memberdef.cpp.

1894{
1895 if (m_isLinkableCached==0)
1896 {
1897 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1899 }
1901 return m_isLinkableCached==2;
1902}
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 5533 of file memberdef.cpp.

5534{
5535 return m_memSpec.isMaybeAmbiguous();
5536}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5528 of file memberdef.cpp.

5529{
5530 return m_memSpec.isMaybeDefault();
5531}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5523 of file memberdef.cpp.

5524{
5525 return m_memSpec.isMaybeVoid();
5526}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5321 of file memberdef.cpp.

5322{
5323 return m_memSpec.isMutable();
5324}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5391 of file memberdef.cpp.

5392{
5393 return m_memSpec.isNew();
5394}

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5605 of file memberdef.cpp.

5606{
5607 return m_memSpec.isNoDiscard();
5608}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5488 of file memberdef.cpp.

5489{
5490 return m_memSpec.isNoExcept();
5491}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5426 of file memberdef.cpp.

5427{
5428 return m_memSpec.isNonAtomic();
5429}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6408 of file memberdef.cpp.

6409{
6410 return !(isFriend() && isFriendToHide());
6411}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5006 of file memberdef.cpp.

5007{
5008 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return TRUE;
5009 return FALSE;
5010}

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 5012 of file memberdef.cpp.

5013{
5014 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return TRUE;
5015 return FALSE;
5016}

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

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5416 of file memberdef.cpp.

5417{
5418 return m_memSpec.isOptional();
5419}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5401 of file memberdef.cpp.

5402{
5403 return m_memSpec.isOverride();
5404}

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5336 of file memberdef.cpp.

5337{
5338 return m_memSpec.isPrivateGettable();
5339}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5351 of file memberdef.cpp.

5352{
5353 return m_memSpec.isPrivateSettable();
5354}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5286 of file memberdef.cpp.

5287{
5289}

References m_mtype, and Property.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5341 of file memberdef.cpp.

5342{
5343 return m_memSpec.isProtectedGettable();
5344}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5356 of file memberdef.cpp.

5357{
5358 return m_memSpec.isProtectedSettable();
5359}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5635 of file memberdef.cpp.

5636{
5637 return m_proto;
5638}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5538 of file memberdef.cpp.

5539{
5540 return m_memSpec.isPublished();
5541}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5371 of file memberdef.cpp.

5372{
5373 return m_memSpec.isRaisable();
5374}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5376 of file memberdef.cpp.

5377{
5378 return m_memSpec.isReadable();
5379}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5503 of file memberdef.cpp.

5504{
5505 return m_memSpec.isReadonly();
5506}

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 6423 of file memberdef.cpp.

6424{
6426 (m_templateMaster && m_templateMaster->isReference());
6427}
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 1605 of file memberdef.cpp.

1606{
1607 if (cd)
1608 {
1609 for (const auto &md : m_redefinedBy)
1610 {
1611 const ClassDef *mcd = md->getClassDef();
1612 if (mcd)
1613 {
1614 if (cd==mcd || cd->isBaseClass(mcd,TRUE))
1615 {
1616 return TRUE;
1617 }
1618 }
1619 }
1620 }
1621 return FALSE;
1622}
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 5296 of file memberdef.cpp.

5297{
5298 return m_related == Relationship::Related;
5299}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6418 of file memberdef.cpp.

6419{
6420 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6421}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5366 of file memberdef.cpp.

5367{
5368 return m_memSpec.isRemovable();
5369}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5421 of file memberdef.cpp.

5422{
5423 return m_memSpec.isRequired();
5424}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5441 of file memberdef.cpp.

5442{
5443 return m_memSpec.isRetain();
5444}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5396 of file memberdef.cpp.

5397{
5398 return m_memSpec.isSealed();
5399}

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5251 of file memberdef.cpp.

5252{
5254}

References m_mtype, and Sequence.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5346 of file memberdef.cpp.

5347{
5348 return m_memSpec.isSettable();
5349}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5221 of file memberdef.cpp.

5222{
5224}

References m_mtype, and Signal.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5600 of file memberdef.cpp.

5601{
5602 return m_memSpec.isLocal();
5603}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5226 of file memberdef.cpp.

5227{
5228 return m_mtype==MemberType::Slot;
5229}

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 5451 of file memberdef.cpp.

5452{
5453 return m_memSpec.isStrong();
5454}

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5461 of file memberdef.cpp.

5462{
5464 m_enumScope &&
5465 m_enumScope->isStrong();
5466}

References EnumValue, m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5554 of file memberdef.cpp.

5555{
5556 return m_tspec;
5557}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5326 of file memberdef.cpp.

5327{
5328 return m_memSpec.isThreadLocal();
5329}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5518 of file memberdef.cpp.

5519{
5520 return m_memSpec.isTransient();
5521}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5473 of file memberdef.cpp.

5474{
5475 return m_memSpec.isAlias();
5476}

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5246 of file memberdef.cpp.

5247{
5249}

References m_mtype, and Typedef.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5789 of file memberdef.cpp.

5790{
5791 return m_isTypedefValCached;
5792}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5498 of file memberdef.cpp.

5499{
5500 return m_memSpec.isProperty();
5501}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5468 of file memberdef.cpp.

5469{
5470 return m_memSpec.isUnretained();
5471}

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5231 of file memberdef.cpp.

5232{
5234}

References m_mtype, and Variable.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5446 of file memberdef.cpp.

5447{
5448 return m_memSpec.isWeak();
5449}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5381 of file memberdef.cpp.

5382{
5383 return m_memSpec.isWritable();
5384}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5595 of file memberdef.cpp.

5596{
5597 return m_livesInsideEnum;
5598}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5944 of file memberdef.cpp.

5945{
5946 m_related = Relationship::Foreign;
5948}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6020 of file memberdef.cpp.

6021{
6023}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5938 of file memberdef.cpp.

5939{
5940 m_related = Relationship::Related;
5942}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5815 of file memberdef.cpp.

5816{
5817 return m_memDec;
5818}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5810 of file memberdef.cpp.

5811{
5812 return m_memDef;
5813}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5216 of file memberdef.cpp.

5217{
5218 return m_mtype;
5219}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4114 of file memberdef.cpp.

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

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 5888 of file memberdef.cpp.

5889{
5890 m_memSpec.merge(s);
5891}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4934 of file memberdef.cpp.

4935{
4936 m_defArgList = *al;
4937}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4939 of file memberdef.cpp.

4940{
4941 m_declArgList = *al;
4942}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1550 of file memberdef.cpp.

1551{
1552 setOuterScope(scope);
1554 {
1555 m_classDef = toClassDef(scope);
1556 }
1557 else if (scope->definitionType()==Definition::TypeFile)
1558 {
1559 m_fileDef = toFileDef(scope);
1560 }
1561 else if (scope->definitionType()==Definition::TypeModule)
1562 {
1563 m_moduleDef = toModuleDef(scope);
1564 }
1565 else if (scope->definitionType()==Definition::TypeNamespace)
1566 {
1567 m_nspace = toNamespaceDef(scope);
1568 }
1571}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1967
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 6180 of file memberdef.cpp.

6181{
6182 return m_numberOfFlowKW;
6183}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5059 of file memberdef.cpp.

5060{
5061 QCString qm;
5062 if (showStatic)
5063 {
5064 if (isStatic()) qm="+ "; else qm="- ";
5065 }
5066 qm+=name();
5067 if (!localLink) // link to method of same class
5068 {
5069 qm+=" (";
5070 qm+=getClassDef()->name();
5071 qm+=")";
5072 }
5073 return qm;
5074}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4978 of file memberdef.cpp.

4979{
4982}
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 4972 of file memberdef.cpp.

4973{
4976}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4996 of file memberdef.cpp.

4997{
4999}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 5001 of file memberdef.cpp.

5002{
5004}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4984 of file memberdef.cpp.

4985{
4988}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4990 of file memberdef.cpp.

4991{
4994}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5211 of file memberdef.cpp.

5212{
5213 return m_prot;
5214}

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 5024 of file memberdef.cpp.

5025{
5026 if (isObjCMethod())
5027 {
5028 QCString qm;
5029 if (isStatic()) qm="+"; else qm="-";
5030 qm+="[";
5031 qm+=getClassDef()->name()+" ";
5032 qm+=name();
5033 qm+="]";
5034 return qm;
5035 }
5036 else if (m_enumScope && m_enumScope->isStrong())
5037 {
5038 return m_enumScope->qualifiedName()+
5040 localName();
5041 }
5042 else
5043 {
5045 }
5046}
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 6453 of file memberdef.cpp.

6454{
6455 return m_redefineCount;
6456}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1600 of file memberdef.cpp.

1601{
1602 return m_redefinedBy;
1603}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1595 of file memberdef.cpp.

1596{
1597 return m_redefines;
1598}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5570 of file memberdef.cpp.

5571{
5572 return m_relatedAlso;
5573}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6111 of file memberdef.cpp.

6112{
6113 return m_requiresClause;
6114}

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 5650 of file memberdef.cpp.

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

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 4954 of file memberdef.cpp.

4955{
4956 m_accessorClass = cd;
4957 m_accessorType = t;
4958}

References m_accessorClass, and m_accessorType.

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4395 of file memberdef.cpp.

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

5978{
5979 m_annEnumType = md;
5980}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5955 of file memberdef.cpp.

5956{
5957 m_args = as;
5958}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5910 of file memberdef.cpp.

5911{
5912 m_bitfields = QCString(s).simplifyWhiteSpace();
5913}

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 1875 of file memberdef.cpp.

1876{
1879}
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 6081 of file memberdef.cpp.

6082{
6083 m_category = def;
6084}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6091 of file memberdef.cpp.

6092{
6093 m_categoryRelation = md;
6094}

References m_categoryRelation.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 6008 of file memberdef.cpp.

6009{
6010 m_declFileName = df;
6011 m_declLine = line;
6012 m_declColumn = column;
6013}

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 5854 of file memberdef.cpp.

5855{
5856 m_def=d;
5857}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1917 of file memberdef.cpp.

1918{
1919 m_defTmpArgLists = lists;
1920}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6051 of file memberdef.cpp.

6052{
6054}

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 1869 of file memberdef.cpp.

1870{
1873}
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 5972 of file memberdef.cpp.

5973{
5974 m_docEnumValues=value;
5975}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6096 of file memberdef.cpp.

6097{
6098 m_enumBaseType = type;
6099}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5965 of file memberdef.cpp.

5966{
5967 m_classDef = cd;
5970}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4451 of file memberdef.cpp.

4452{
4453 m_enumScope=md;
4455 if (md->getGroupDef())
4456 {
4457 m_group = md->getGroupDef();
4458 m_grouppri = md->getGroupPri();
4463 }
4464}
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 5995 of file memberdef.cpp.

5996{
5997 m_explExt=b;
5998 if (b)
5999 {
6000 setDeclFile(df,line,column);
6001 }
6002 else
6003 {
6004 setDefFile(df,line,column);
6005 }
6006}
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 5859 of file memberdef.cpp.

5860{
5861 m_fileDef=fd;
5865}

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 6046 of file memberdef.cpp.

6047{
6049}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 6030 of file memberdef.cpp.

6031{
6032 m_annMemb=m;
6033}

References m_annMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6025 of file memberdef.cpp.

6026{
6027 m_annScope=b;
6028}

References m_annScope.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6056 of file memberdef.cpp.

6057{
6058 m_groupAlias = md;
6059}

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 4437 of file memberdef.cpp.

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

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 1887 of file memberdef.cpp.

1888{
1891}
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 1881 of file memberdef.cpp.

1882{
1885}
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 5950 of file memberdef.cpp.

5951{
5952 m_docProvider = md;
5953}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4545 of file memberdef.cpp.

4546{
4547 size_t indent=0;
4549 int l=static_cast<int>(m_initializer.length());
4550 int p=l-1;
4551 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4552 m_initializer=m_initializer.left(p+1);
4553 m_initLines=m_initializer.contains('\n');
4555
4556 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4557}
const QCString & initializer() const override
void stripIndentationVerbatim(QCString &doc, const int indentationLevel, bool skipFirstLine)
Definition util.cpp:6038
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6720

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

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5915 of file memberdef.cpp.

5916{
5917 if (lines!=-1)
5918 {
5919 m_userInitLines=lines;
5920 }
5921}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6071 of file memberdef.cpp.

6072{
6073 m_memDec=md;
6074}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6066 of file memberdef.cpp.

6067{
6068 m_memDef=md;
6069}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4381 of file memberdef.cpp.

4382{
4383 m_memberGroup = grp;
4384}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 6015 of file memberdef.cpp.

6016{
6017 m_grpId=id;
6018}
virtual QCString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5878 of file memberdef.cpp.

5879{
5880 m_memSpec=s;
5881}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5848 of file memberdef.cpp.

5849{
5850 m_mtype=t;
5852}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5867 of file memberdef.cpp.

5868{
5869 m_moduleDef=mod;
5870}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4474 of file memberdef.cpp.

4475{
4476 m_nspace=nd;
4477 setOuterScope(nd);
4478}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5872 of file memberdef.cpp.

5873{
5874 m_prot=p;
5876}

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 5982 of file memberdef.cpp.

5983{
5984 m_proto=p;
5985 if (p)
5986 {
5987 setDeclFile(df,line,column);
5988 }
5989 else
5990 {
5991 setDefFile(df,line,column);
5992 }
5993}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5923 of file memberdef.cpp.

5924{
5925 m_read=r;
5926}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6458 of file memberdef.cpp.

6459{
6460 m_redefineCount=count;
6461}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1574 of file memberdef.cpp.

1575{
1576 m_redefines = md;
1577}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5960 of file memberdef.cpp.

5961{
5962 m_relatedAlso=cd;
5963}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6106 of file memberdef.cpp.

6107{
6108 m_requiresClause = req;
6109}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4617 of file memberdef.cpp.

4618{
4619 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4620 m_sectionMap.emplace(container,sl);
4621}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 5048 of file memberdef.cpp.

5049{
5050 if (ti)
5051 {
5052 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5053 m_anc=ti->anchor;
5054 setReference(ti->tagName);
5056 }
5057}
void setReference(const QCString &r) override
QCString stripExtension(const QCString &fName)
Definition util.cpp:4924

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 6040 of file memberdef.cpp.

6041{
6044}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5933 of file memberdef.cpp.

5934{
5935 m_tspec=b;
5936}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4949 of file memberdef.cpp.

4950{
4951 m_type = t;
4952}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4944 of file memberdef.cpp.

4945{
4946 m_typeConstraints = al;
4947}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5883 of file memberdef.cpp.

5884{
5885 m_vhdlSpec=s;
5886}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5928 of file memberdef.cpp.

5929{
5930 m_write=w;
5931}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1640 of file memberdef.cpp.

1641{
1642 QCString n = name();
1643 QCString s = getScopeString();
1644
1645 if (!s.isEmpty())
1646 {
1647 n.prepend(s+"::");
1648 }
1649 else if (isStatic() && getFileDef())
1650 {
1651 n.prepend(getFileDef()->name()+":");
1652 }
1653 if (isCallable())
1654 {
1655 n.append(argsString());
1656 }
1657 return n;
1658}
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 5698 of file memberdef.cpp.

5699{
5700 return m_tArgList;
5701}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5779 of file memberdef.cpp.

5780{
5781 return m_templateMaster;
5782}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6385 of file memberdef.cpp.

6386{
6387 return m_typeConstraints;
6388}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5091 of file memberdef.cpp.

5092{
5093 return m_type;
5094}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4623 of file memberdef.cpp.

4624{
4625 if (count>25)
4626 {
4628 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4629 return Specifier::Normal;
4630 }
4631 Specifier v = m_virt;
4632 const MemberDef *rmd = reimplements();
4633 while (rmd && v==Specifier::Normal)
4634 {
4635 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4636 rmd = rmd->reimplements();
4637 }
4638 return v;
4639}
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 4210 of file memberdef.cpp.

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

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4138 of file memberdef.cpp.

4139{
4140 /*
4141 * Removed bug_303020:
4142 * if (m_memberGroup) return;
4143 */
4144 const ClassDef *cd = getClassDef();
4145 const NamespaceDef *nd = getNamespaceDef();
4146 const FileDef *fd = getFileDef();
4147 const GroupDef *gd = getGroupDef();
4148 const Definition *d=nullptr;
4149 QCString t;
4150 if (cd)
4151 {
4152 t=cd->compoundTypeString();
4153 d=cd;
4154 }
4155 else if (nd)
4156 {
4157 t=nd->compoundTypeString();
4158 d=nd;
4159 }
4160 else if (gd)
4161 {
4162 t="group";
4163 d=gd;
4164 }
4165 else
4166 {
4167 t="file";
4168 d=fd;
4169 }
4170 bool extractAll = Config_getBool(EXTRACT_ALL);
4171
4172 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4173 // qPrint(name()),
4174 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4175 if ((!hasUserDocumentation() && !extractAll) &&
4176 !isFriendClass() &&
4177 name().find('@')==-1 && d && d->name().find('@')==-1 &&
4180 !isReference() && !isDeleted()
4181 )
4182 {
4183 SrcLangExt lang = getLanguage();
4184 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4185 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4187 substitute(d->name(),"::",sep));
4188 }
4189 else if (!hasDetailedDescription())
4190 {
4192 }
4193
4194 // if it is an enum, we check that its members are documented
4195 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4196 {
4197 for (const auto &fmd : enumFieldList())
4198 {
4199 if (!fmd->isLinkableInProject())
4200 {
4201 SrcLangExt lang = getLanguage();
4202 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4203 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4204 qualifiedName(),sep,fmd->name());
4205 }
4206 }
4207 }
4208}
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 4300 of file memberdef.cpp.

4301{
4302 QCString returnType = typeString();
4303 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4304 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=-1;
4305
4306 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4307 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4308 {
4309 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4310 if (!defArgList.trailingReturnType().isEmpty())
4311 {
4312 QCString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4313 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4314 }
4315 }
4316 if (!Config_getBool(EXTRACT_ALL) &&
4317 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4318 Config_getBool(WARN_NO_PARAMDOC) &&
4319 isFunction() &&
4320 !isDeleted() &&
4321 !isReference() &&
4323 {
4325 {
4327 "parameters of member {} are not documented",
4328 qualifiedName());
4329 }
4331 hasDocumentation() && !returnType.isEmpty() &&
4332 !( // not one of the cases where nothing is returned
4333 isVoidReturn || // void return type
4334 isFortranSubroutine || // fortran subroutine
4335 isConstructor() || // a constructor
4336 isDestructor() || // or a destructor
4337 isFriend() // or a friend
4338 )
4339 )
4340 {
4342 "return type of member {} is not documented",
4343 qualifiedName());
4344 }
4345 }
4346 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4348 (isVoidReturn || // void return type
4349 isFortranSubroutine || // fortran subroutine
4350 isConstructor() || // a constructor
4351 isDestructor())) // or destructor
4352 {
4353 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4354 qualifiedName());
4355 }
4356}
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 2221 of file memberdef.cpp.

2224{
2225 //printf("> %s MemberDefImpl::writeDeclaration() inGroup=%d inheritId=%s\n",qPrint(qualifiedName()),inGroup,qPrint(inheritId));
2226
2227 // hide enum value, since they appear already as part of the enum, unless they
2228 // are explicitly grouped.
2229 if (!inGroup && m_mtype==MemberType::EnumValue) return;
2230
2231 const Definition *d=nullptr;
2232 ASSERT (cd!=nullptr || nd!=nullptr || fd!=nullptr || gd!=nullptr || mod!=nullptr); // member should belong to something
2233 if (cd) d=cd;
2234 else if (nd) d=nd;
2235 else if (fd) d=fd;
2236 else d=gd;
2237 if (d==gd || d==mod) // see bug 753608
2238 {
2239 if (getClassDef()) d = getClassDef();
2240 else if (getNamespaceDef()) d = getNamespaceDef();
2241 else if (getFileDef()) d = getFileDef();
2242 }
2243 else if (d==fd) // see issue #9850, namespace member can be shown in file scope as well
2244 {
2245 if (getNamespaceDef()) d = getNamespaceDef();
2246 }
2247 if (d==nullptr)
2248 {
2249 err("No context could be derived for member '{}'\n",name());
2250 return; // should not happen
2251 }
2252
2253 QCString cname = d->name();
2254 QCString cdname = d->displayName();
2255 QCString cfname = getOutputFileBase();
2256
2257 // search for the last anonymous scope in the member type
2258 ClassDef *annoClassDef=getClassDefOfAnonymousType();
2259
2261
2262 // start a new member declaration
2263 bool isAnonType = annoClassDef || m_annMemb || m_annEnumType;
2267 ol.startMemberItem(annoClassDef ? QCString() : anchor(), anonType, inheritId);
2268
2269
2270 // If there is no detailed description we need to write the anchor here.
2271 bool detailsVisible = hasDetailedDescription();
2272 bool writeAnchor = (inGroup || getGroupDef()==nullptr) && // only write anchors for member that have no details and are
2273 !detailsVisible && !m_annMemb && // rendered inside the group page or are not grouped at all
2274 inheritId.isEmpty();
2275
2276 if (writeAnchor)
2277 {
2278 QCString doxyArgs=argsString();
2279 QCString doxyName=name();
2280 if (!cname.isEmpty())
2281 {
2283 }
2284 ol.startDoxyAnchor(cfname,cname,anchor(),doxyName,doxyArgs);
2285 ol.addLabel(cfname,anchor());
2286 }
2287
2288 if (!detailsVisible)
2289 {
2290 ol.pushGeneratorState();
2294 ol.docify("\n");
2295 ol.popGeneratorState();
2296 }
2297
2298 if (annoClassDef || m_annMemb)
2299 {
2300 for (int j=0;j<indentLevel;j++)
2301 {
2303 }
2304 }
2305
2306 // *** write template lists
2307 if (m_tArgList.hasParameters() && getLanguage()==SrcLangExt::Cpp)
2308 {
2309 if (!isAnonType) ol.startMemberTemplateParams();
2311 if (!isAnonType) ol.endMemberTemplateParams(anchor(),inheritId);
2312 }
2313
2314
2315 // *** write type
2316 QCString ltype(m_type);
2317 if (isTypedef() && getLanguage() != SrcLangExt::Slice)
2318 {
2319 ltype.prepend("typedef ");
2320 }
2321 if (isTypeAlias())
2322 {
2323 ltype="using";
2324 }
2325 // strip 'friend' keyword from ltype
2326 ltype.stripPrefix("friend ");
2327 static const reg::Ex r(R"(@\d+)");
2328 reg::Match match;
2329 std::string stype = ltype.str();
2330 bool endAnonScopeNeeded=FALSE;
2331 if (reg::search(stype,match,r)) // member has an anonymous type
2332 {
2333 int i = static_cast<int>(match.position());
2334 int l = static_cast<int>(match.length());
2335 //printf("annoClassDef=%p annMemb=%p scopeName='%s' anonymous='%s'\n",
2336 // annoClassDef,annMemb,qPrint(cname),qPrint(ltype.mid(i,l)));
2337
2338 if (annoClassDef) // type is an anonymous compound
2339 {
2340 int ir=i+l;
2341 //printf("<<<<<<<<<<<<<<\n");
2342 ol.startAnonTypeScope(indentLevel);
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(), 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 3473 of file memberdef.cpp.

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

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(), DefinitionMixin< MemberDefMutable >::hasRequirementRefs(), 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(), DefinitionMixin< MemberDefMutable >::writeRequirementRefs(), 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 4809 of file memberdef.cpp.

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

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

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 4000 of file memberdef.cpp.

4001{
4002 Definition *scope = getOuterScope();
4003 QCString doxyName = name();
4004 QCString doxyArgs = argsString();
4005 QCString memAnchor = anchor();
4006 QCString cfname = getOutputFileBase();
4007 QCString cname;
4008 if (scope) cname = scope->name();
4009 if (doxyName.at(0)=='@')
4010 {
4011 doxyName="__unnamed__";
4012 }
4013
4014 ClassDef *cd = m_accessorClass;
4015 //printf("===> %s::anonymous: %s\n",qPrint(name()),cd?qPrint(cd->name()):"<none>");
4016
4017 if (container && container->definitionType()==Definition::TypeClass &&
4018 !(toClassDef(container))->isJavaEnum())
4019 {
4021 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4022 ol.addLabel(cfname,memAnchor);
4023
4024 QCString ts = fieldType();
4025
4026 if (isFunctionPtr())
4027 ts = m_type + m_args;
4028
4029 if (cd) // cd points to an anonymous struct pointed to by this member
4030 // so we add a link to it from the type column.
4031 {
4032 int i=0;
4033 const char *prefixes[] = { "struct ","union ","class ", nullptr };
4034 const char **p = prefixes;
4035 while (*p)
4036 {
4037 int l=qstrlen(*p);
4038 if (ts.left(l)==*p)
4039 {
4040 ol.writeString(*p);
4041 i=l;
4042 }
4043 p++;
4044 }
4046 cd->getOutputFileBase(),
4047 cd->anchor(),ts.mid(i));
4048 }
4049 else // use standard auto linking
4050 {
4051 linkifyText(TextGeneratorOLImpl(ol), // out
4052 scope, // scope
4053 getBodyDef(), // fileScope
4054 this, // self
4055 ts // text
4056 );
4057 }
4058 ol.endDoxyAnchor(cfname,memAnchor);
4060 }
4061
4063 ol.docify(doxyName);
4064 if (isVariable() && !argsString().isEmpty() && !isObjCMethod() && !isFunctionPtr())
4065 {
4066 linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,argsString());
4067 }
4068 if (!m_bitfields.isEmpty()) // add bitfields
4069 {
4070 linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,m_bitfields);
4071 }
4072 if (hasOneLineInitializer() && !isDefine())
4073 {
4074 ol.writeString(" ");
4075 linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),this,m_initializer.simplifyWhiteSpace());
4076 }
4078
4080
4081 QCString brief = briefDescription();
4082 QCString detailed = documentation();
4083
4084 /* write brief description */
4085 if (!brief.isEmpty())
4086 {
4088 briefLine(),
4089 getOuterScope()?getOuterScope():container,this,
4090 brief,
4091 DocOptions()
4092 .setSingleLine(true));
4093 }
4094
4095 /* write detailed description */
4096 if (!detailed.isEmpty())
4097 {
4098 if (!brief.isEmpty())
4099 {
4101 ol.lineBreak();
4103 }
4104 ol.generateDoc(docFile(),
4105 docLine(),
4106 getOuterScope()?getOuterScope():container,this,
4107 detailed+"\n",
4108 DocOptions());
4109 }
4110
4111 ol.endInlineMemberDoc();
4112}
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 4641 of file memberdef.cpp.

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

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 419 of file memberdef.cpp.

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

◆ m_accessorType

QCString MemberDefImpl::m_accessorType
private

Definition at line 418 of file memberdef.cpp.

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

◆ m_anc

QCString MemberDefImpl::m_anc
private

Definition at line 422 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 456 of file memberdef.cpp.

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

◆ m_cachedResolvedType

QCString MemberDefImpl::m_cachedResolvedType
private

Definition at line 474 of file memberdef.cpp.

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

◆ m_cachedTypedefTemplSpec

QCString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 473 of file memberdef.cpp.

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

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 472 of file memberdef.cpp.

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

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

Definition at line 512 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 425 of file memberdef.cpp.

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

◆ m_declArgList

◆ m_declColumn

int MemberDefImpl::m_declColumn = -1
private

Definition at line 516 of file memberdef.cpp.

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

◆ m_declFileName

QCString MemberDefImpl::m_declFileName
private

Definition at line 514 of file memberdef.cpp.

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

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

Definition at line 515 of file memberdef.cpp.

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

◆ m_def

QCString MemberDefImpl::m_def
private

Definition at line 421 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 498 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 477 of file memberdef.cpp.

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

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 509 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 415 of file memberdef.cpp.

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

◆ m_exception

QCString MemberDefImpl::m_exception
private

Definition at line 430 of file memberdef.cpp.

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

◆ m_explExt

bool MemberDefImpl::m_explExt = false
private

Definition at line 506 of file memberdef.cpp.

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

◆ m_explicitOutputFileBase

QCString MemberDefImpl::m_explicitOutputFileBase
private

Definition at line 480 of file memberdef.cpp.

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

◆ m_extraTypeChars

QCString MemberDefImpl::m_extraTypeChars
private

Definition at line 432 of file memberdef.cpp.

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

◆ m_fileDef

FileDef* MemberDefImpl::m_fileDef = nullptr
private

Definition at line 399 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 450 of file memberdef.cpp.

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

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

Definition at line 465 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 462 of file memberdef.cpp.

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

◆ m_groupFileName

QCString MemberDefImpl::m_groupFileName
private

Definition at line 467 of file memberdef.cpp.

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

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 508 of file memberdef.cpp.

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

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

Definition at line 469 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 466 of file memberdef.cpp.

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

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 468 of file memberdef.cpp.

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

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

Definition at line 463 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 500 of file memberdef.cpp.

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

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 497 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 488 of file memberdef.cpp.

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

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 489 of file memberdef.cpp.

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

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 505 of file memberdef.cpp.

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

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

Definition at line 504 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 503 of file memberdef.cpp.

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

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

Definition at line 486 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 396 of file memberdef.cpp.

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

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

Definition at line 490 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 404 of file memberdef.cpp.

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

◆ m_maxInitLines

int MemberDefImpl::m_maxInitLines = 0
private

Definition at line 440 of file memberdef.cpp.

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

◆ m_memberGroup

MemberGroup* MemberDefImpl::m_memberGroup = nullptr
private

Definition at line 464 of file memberdef.cpp.

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

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 412 of file memberdef.cpp.

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

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 411 of file memberdef.cpp.

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

◆ m_memSpec

◆ m_metaData

QCString MemberDefImpl::m_metaData
private

Definition at line 454 of file memberdef.cpp.

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

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

Definition at line 401 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 400 of file memberdef.cpp.

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

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 517 of file memberdef.cpp.

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

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

Definition at line 493 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 428 of file memberdef.cpp.

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

◆ m_redefineCount

int MemberDefImpl::m_redefineCount = 0
private

Definition at line 518 of file memberdef.cpp.

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

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 409 of file memberdef.cpp.

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

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

Definition at line 408 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 413 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 460 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 507 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 438 of file memberdef.cpp.

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

◆ m_virt

◆ m_write

QCString MemberDefImpl::m_write
private

Definition at line 429 of file memberdef.cpp.

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


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