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

1439{
1440 //printf("MemberDefImpl::MemberDef(%s)\n",qPrint(na));
1441 init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
1445}
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:567

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

4694{
4695 m_isConstructorCached=1; // FALSE
4696 if (getClassDef())
4697 {
4698 if (m_isDMember) // for D
4699 {
4700 m_isConstructorCached = name()=="this" ? 2 : 1;
4701 return;
4702 }
4703 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4704 {
4705 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4706 return;
4707 }
4708 else if (name()=="__init__" &&
4709 getLanguage()==SrcLangExt::Python) // for Python
4710 {
4711 m_isConstructorCached = 2; // TRUE
4712 return;
4713 }
4714 else // for other languages
4715 {
4716 QCString locName = getClassDef()->localName();
4717 int i=locName.find('<');
4718 if (i==-1) // not a template class
4719 {
4720 m_isConstructorCached = name()==locName ? 2 : 1;
4721 }
4722 else
4723 {
4724 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4725 }
4726 return;
4727 }
4728 }
4729}
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 4743 of file memberdef.cpp.

4744{
4745 bool isDestructor = false;
4746 if (m_isDMember) // for D
4747 {
4748 isDestructor = name()=="~this";
4749 }
4750 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4751 {
4752 isDestructor = name()=="__destruct";
4753 }
4754 else if (name()=="__del__" &&
4755 getLanguage()==SrcLangExt::Python) // for Python
4756 {
4757 isDestructor = true;
4758 }
4759 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4760 {
4761 isDestructor = typeString()=="final";
4762 }
4763 else // other languages
4764 {
4765 isDestructor =
4766 (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
4767 && name().find("operator")==-1;
4768 }
4770}
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 1787 of file memberdef.cpp.

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

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

3043{
3044 const MemberVector &bml=reimplementedBy();
3045 size_t count=0;
3046 for (const auto &bmd : bml)
3047 {
3048 const ClassDef *bcd=bmd->getClassDef();
3049 // count the members that directly inherit from md and for
3050 // which the member and class are visible in the docs.
3051 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
3052 {
3053 count++;
3054 }
3055 }
3056 return count;
3057}
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 5720 of file memberdef.cpp.

5721{
5722 bool enabled = m_hasCallerGraph &&
5723 (isFunction() || isSlot() || isSignal()) &&
5724 Config_getBool(HAVE_DOT);
5725 if (enabled)
5726 {
5727 bool trivial = DotCallGraph::isTrivial(this,TRUE);
5728 return !trivial;
5729 }
5730 return FALSE;
5731}
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 5702 of file memberdef.cpp.

5703{
5704 bool enabled = m_hasCallGraph &&
5705 (isFunction() || isSlot() || isSignal()) &&
5706 Config_getBool(HAVE_DOT);
5707 if (enabled)
5708 {
5709 bool trivial = DotCallGraph::isTrivial(this,FALSE);
5710 return !trivial;
5711 }
5712 return FALSE;
5713}

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

2213{
2214 return !m_bitfields.isEmpty() && name().startsWith("__pad"); // anonymous bitfield
2215}
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 2969 of file memberdef.cpp.

2970{
2971 const MemberDef *bmd=reimplements();
2972 const ClassDef *bcd=nullptr;
2973 if (bmd && (bcd=bmd->getClassDef()))
2974 {
2975 // write class that contains a member that is reimplemented by this one
2976 if (bcd->isLinkable())
2977 {
2978 return true;
2979 }
2980 }
2981 return false;
2982}
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 2947 of file memberdef.cpp.

2948{
2950 {
2951 DotCallGraph callerGraph(this, TRUE);
2952 if (callerGraph.isTooBig())
2953 {
2954 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2955 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2956 }
2957 else if (!callerGraph.isTrivial())
2958 {
2959 msg("Generating caller graph for function {}\n",qualifiedName());
2961 ol.startCallGraph();
2963 ol.endCallGraph(callerGraph);
2964 ol.enableAll();
2965 }
2966 }
2967}
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 2924 of file memberdef.cpp.

2925{
2926 // write call graph
2928 {
2929 DotCallGraph callGraph(this,FALSE);
2930 if (callGraph.isTooBig())
2931 {
2932 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2933 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2934 }
2935 else if (!callGraph.isTrivial())
2936 {
2937 msg("Generating call graph for function {}\n",qualifiedName());
2939 ol.startCallGraph();
2941 ol.endCallGraph(callGraph);
2942 ol.enableAll();
2943 }
2944 }
2945}
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 3118 of file memberdef.cpp.

3119{
3120 if (getClassDef()) // this should be a member of a class/category
3121 {
3122 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3123 // qPrint(name()),
3124 // m_category ? qPrint(m_category->name()) : "<none>",
3125 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3126 // qPrint(m_classDef->name()),
3127 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3128 // );
3129 QCString text;
3130 QCString ref;
3131 QCString file;
3132 QCString anc;
3133 QCString name;
3134 int i=-1;
3135 if (m_categoryRelation && m_categoryRelation->isLinkable())
3136 {
3137 if (m_category)
3138 {
3139 // this member is in a normal class and implements method categoryRelation from category
3140 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3142 name = m_category->displayName();
3143 }
3144 else if (getClassDef()->categoryOf())
3145 {
3146 // this member is part of a category so link to the corresponding class member of the class we extend
3147 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3148 text = theTranslator->trExtendsClass();
3150 }
3151 i=text.find("@0");
3152 if (i!=-1)
3153 {
3154 const MemberDef *md = m_categoryRelation;
3155 ref = md->getReference();
3156 file = md->getOutputFileBase();
3157 anc = md->anchor();
3158 }
3159 }
3160 if (i!=-1 && !name.isEmpty())
3161 {
3162 ol.startParagraph();
3163 ol.parseText(text.left(i));
3164 ol.writeObjectLink(ref,file,anc,name);
3165 ol.parseText(text.mid(i+2));
3166 ol.endParagraph();
3167 }
3168 }
3169}
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 3192 of file memberdef.cpp.

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

3172{
3173 // write the list of examples that use this member
3174 if (hasExamples())
3175 {
3176 ol.startExamples();
3177 ol.startDescForItem();
3179 ol.endDescForItem();
3180 ol.endExamples();
3181 }
3182}
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:1175

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

3372{
3373 // only write out the include file if this is not part of a class or file
3374 // definition
3375 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3376 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3377 const FileDef *fd = getFileDef();
3378 QCString nm;
3379 if (inGroup && fd && showGroupedMembInc)
3380 {
3381 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3382 {
3384 }
3385 else
3386 {
3387 nm = fd->name();
3388 }
3389 }
3390 if (!nm.isEmpty())
3391 {
3392 ol.startParagraph();
3393 ol.startTypewriter();
3394 SrcLangExt lang = getLanguage();
3395 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3396 if (isIDLorJava)
3397 {
3398 ol.docify("import ");
3399 }
3400 else
3401 {
3402 ol.docify("#include ");
3403 }
3404
3405 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3406
3407 if (fd->isLinkable())
3408 {
3409 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3410 }
3411 else
3412 {
3413 ol.docify(nm);
3414 }
3415
3416 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3417
3418 ol.endTypewriter();
3419 ol.endParagraph();
3420 }
3421}
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:329

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

3424{
3425 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3426 ol.startBold();
3429 else
3431 ol.endBold();
3432 QCString langCorrected = getDefFileExtension();
3434 if (srcLangExt == SrcLangExt::Lex)
3435 {
3436 langCorrected = ".doxygen_lex_c";
3437 srcLangExt = SrcLangExt::Cpp;
3438 }
3439 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3440 intf->resetCodeParserState();
3441 auto &codeOL = ol.codeGenerators();
3442 codeOL.startCodeFragment("DoxyCode");
3443 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3444 CodeParserOptions()
3446 .setInlineFragment(true)
3447 .setMemberDef(this)
3448 .setShowLineNumbers(false)
3449 .setSearchCtx(this)
3450 );
3451 codeOL.endCodeFragment("DoxyCode");
3452}
QCString getDefFileExtension() const override
static ParserManager * parserManager
Definition doxygen.h:128
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:5214

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

3060{
3061 const MemberVector &bml=reimplementedBy();
3062 size_t count = _countReimplementedBy();
3063 if (count>0)
3064 {
3065 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3066 {
3067 size_t cnt=0;
3068 auto it = bml.begin();
3069 // find the entryIndex-th documented entry in the inheritance list.
3070 const MemberDef *bmd = nullptr;
3071 const ClassDef *bcd = nullptr;
3072 while (it!=bml.end())
3073 {
3074 bmd = *it;
3075 bcd = bmd->getClassDef();
3076 if ( bmd->isLinkable() && bcd->isLinkable())
3077 {
3078 if (cnt==entryIndex) break;
3079 cnt++;
3080 }
3081 ++it;
3082 }
3083
3084 if (bcd && bmd) // write link for marker
3085 {
3086 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3087 // bmd->anchor(),bcd->name());
3089 bmd->anchor(),bcd->displayName());
3090
3091 if (bmd->isLinkableInProject() )
3092 {
3093 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3094 }
3095 }
3096 };
3097
3098 QCString reimplInLine;
3099 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3100 {
3101 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3102 }
3103 else
3104 {
3105 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3106 }
3107
3108 // write the list of classes that overwrite this member
3109 ol.startParagraph();
3110 writeMarkerList(ol,
3111 reimplInLine.str(),
3112 count,
3113 replaceFunc);
3114 ol.endParagraph();
3115 }
3116}
@ 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:259
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1124

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

2984{
2985 const MemberDef *bmd=reimplements();
2986 const ClassDef *bcd=nullptr;
2987 if (bmd && (bcd=bmd->getClassDef()))
2988 {
2989 // write class that contains a member that is reimplemented by this one
2990 if (bcd->isLinkable())
2991 {
2992 ol.startParagraph();
2993 QCString reimplFromLine;
2994 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
2995 {
2996 reimplFromLine = theTranslator->trReimplementedFromList(1);
2997 }
2998 else
2999 {
3000 reimplFromLine = theTranslator->trImplementedFromList(1);
3001 }
3002 int markerPos = reimplFromLine.find("@0");
3003 if (markerPos!=-1) // should always pass this.
3004 {
3005 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
3006 if (bmd->isLinkable()) // replace marker with link
3007 {
3008 //Definition *bd=bmd->group;
3009 //if (bd==0) bd=bcd;
3011 bmd->anchor(),bcd->displayName());
3012
3013 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3014 // bmd->anchor(),bcd->name());
3015 if ( bmd->isLinkableInProject() )
3016 {
3017 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3018 }
3019 }
3020 else
3021 {
3023 QCString(),bcd->displayName());
3024 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3025 {
3026 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3027 }
3028 }
3029 ol.parseText(reimplFromLine.right(
3030 reimplFromLine.length()-markerPos-2)); // text right from marker
3031
3032 }
3033 else
3034 {
3035 err("translation error: no marker in trReimplementsFromList()\n");
3036 }
3037 ol.endParagraph();
3038 }
3039 }
3040}
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 2169 of file memberdef.cpp.

2171{
2172 ol.docify("template<");
2173 LinkifyTextOptions options;
2174 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2175 for (auto it = al.begin(); it!=al.end();)
2176 {
2177 Argument a = *it;
2178 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
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 m_requiresClause, // text
2199 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2200 }
2201}
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
LinkifyTextOptions & setScope(const Definition *scope)
Definition util.h:110
LinkifyTextOptions & setSelf(const Definition *self)
Definition util.h:116
LinkifyTextOptions & setFileScope(const FileDef *fileScope)
Definition util.h:113
void linkifyText(const TextGeneratorIntf &out, const QCString &text, const LinkifyTextOptions &options)
Definition util.cpp:893

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

Referenced by writeDeclaration(), and writeDocumentation().

◆ _writeTypeConstraints()

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

Definition at line 3184 of file memberdef.cpp.

3185{
3186 if (m_typeConstraints.hasParameters())
3187 {
3189 }
3190}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5462

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ accessorClass()

ClassDef * MemberDefImpl::accessorClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4934 of file memberdef.cpp.

4935{
4936 return m_accessorClass;
4937}
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 1626 of file memberdef.cpp.

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

References anchor(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4533 of file memberdef.cpp.

4534{
4535 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4536 SrcLangExt lang = getLanguage();
4537 if (!isLinkableInProject()) return;
4538 QCString memLabel;
4539 if (optimizeOutputForC)
4540 {
4541 memLabel=theTranslator->trGlobal(TRUE,TRUE);
4542 }
4543 else if (lang==SrcLangExt::Fortran)
4544 {
4546 }
4547 else
4548 {
4549 memLabel=theTranslator->trMember(TRUE,TRUE);
4550 }
4551 QCString memName = name();
4552 Definition *pd=getOuterScope();
4553 QCString pdName = pd->definitionType()==Definition::TypeClass ?
4554 (toClassDef(pd))->displayName() : pd->name();
4555 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4556 QCString memArgs;
4557 if (!isRelated())
4558 {
4559 if (isObjCMethod())
4560 {
4561 memName = "[" + pd->name() + " " + name() + "]";
4562 }
4563 else
4564 {
4565 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4566 memArgs = argsString();
4567 }
4568 }
4569 const RefItemVector &xrefItems = xrefListItems();
4570 if (sep!="::")
4571 {
4572 memName = substitute(memName,"::",sep);
4573 }
4574 addRefItem(xrefItems,
4575 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4576 memLabel,
4577 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4578}
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:4828
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5920

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

5873{
5874 for (const auto &sx : qualifiers)
5875 {
5876 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5877 if (!alreadyAdded)
5878 {
5879 m_qualifiers.push_back(sx);
5880 }
5881 }
5882}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4580 of file memberdef.cpp.

4581{
4583}
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 1764 of file memberdef.cpp.

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

5615{
5616 return m_defArgList;
5617}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5080 of file memberdef.cpp.

5081{
5082 return m_bitfields;
5083}

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

6330{
6331 if (m_templateMaster)
6332 {
6333 return m_templateMaster->briefDescription(abbr);
6334 }
6335 else
6336 {
6338 }
6339}
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 6090 of file memberdef.cpp.

6091{
6094 m_cachedTypedefTemplSpec=templSpec;
6095 m_cachedResolvedType=resolvedType;
6096 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6097}
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 6050 of file memberdef.cpp.

6051{
6052 return m_category;
6053}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6060 of file memberdef.cpp.

6061{
6062 return m_categoryRelation;
6063}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6409 of file memberdef.cpp.

6410{
6411 switch (memberType())
6412 {
6429 }
6431}
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 6099 of file memberdef.cpp.

6100{
6101 {
6102 const ArgumentList &srcAl = bmd->argumentList();
6103 ArgumentList &dstAl = m_defArgList;
6104 auto srcIt = srcAl.begin();
6105 auto dstIt = dstAl.begin();
6106 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6107 {
6108 Argument &argDst = *dstIt;
6109 const Argument &argSrc = *srcIt;
6110 if (!argSrc.name.isEmpty())
6111 {
6112 argDst.name = argSrc.name;
6113 }
6114 argDst.docs = argSrc.docs;
6115 ++srcIt;
6116 ++dstIt;
6117 }
6118 }
6119
6120 {
6121 const ArgumentList &srcAl = bmd->declArgumentList();
6122 ArgumentList &dstAl = m_declArgList;
6123 auto srcIt = srcAl.begin();
6124 auto dstIt = dstAl.begin();
6125
6126 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6127 {
6128 Argument &argDst = *dstIt;
6129 const Argument &argSrc = *srcIt;
6130 if (!argSrc.name.isEmpty())
6131 {
6132 argDst.name = argSrc.name;
6133 }
6134 argDst.docs = argSrc.docs;
6135 ++srcIt;
6136 ++dstIt;
6137 }
6138 }
6139}
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(), QCString::isEmpty(), 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 4454 of file memberdef.cpp.

4456{
4457 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4458 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4459 if (!m_defArgList.empty())
4460 {
4461 // replace formal arguments with actuals
4462 for (Argument &arg : *actualArgList)
4463 {
4464 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4465 }
4466 actualArgList->setTrailingReturnType(
4467 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4468 }
4469
4470 QCString methodName=name();
4471 if (methodName.startsWith("operator ")) // conversion operator
4472 {
4473 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4474 }
4475
4476 auto imd = createMemberDef(
4478 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4479 methodName,
4480 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4483 ArgumentList(), ArgumentList(), ""
4484 );
4485 auto mmd = toMemberDefMutable(imd.get());
4486 mmd->moveArgumentList(std::move(actualArgList));
4487 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4488 mmd->setBodyDef(getBodyDef());
4489 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4490 mmd->setFormalTemplateArguments(formalArgs);
4491
4492 // TODO: init other member variables (if needed).
4493 // TODO: reimplemented info
4494 return imd;
4495}
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:4369

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

5051{
5052 return m_decl;
5053}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5619 of file memberdef.cpp.

5620{
5621 return m_declArgList;
5622}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1447 of file memberdef.cpp.

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

5056{
5057 return m_def;
5058}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5677 of file memberdef.cpp.

5678{
5679 return m_defTmpArgLists;
5680}

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

4211{
4212 //printf("%s:detectUndocumentedParams(%d,%d)\n",qPrint(name()),hasParamCommand,hasReturnCommand);
4213 bool isPython = getLanguage()==SrcLangExt::Python;
4214
4215 // this function is called while parsing the documentation. A member can have multiple
4216 // documentation blocks, which could be handled by multiple threads, hence this guard.
4217 std::lock_guard<std::mutex> lock(g_detectUndocumentedParamsMutex);
4218
4219 if (!m_hasDocumentedParams && hasParamCommand)
4220 {
4221 //printf("%s:hasDocumentedParams=TRUE;\n",qPrint(name()));
4222 m_hasDocumentedParams = true;
4223 }
4224 else if (!m_hasDocumentedParams)
4225 {
4226 const ArgumentList &al = argumentList();
4227 const ArgumentList &declAl = declArgumentList();
4228 bool allDoc=TRUE; // no parameter => all parameters are documented
4229 if ( // member has parameters
4230 al.hasParameters() // with at least one parameter (that is not void)
4231 )
4232 {
4233 // see if all parameters have documentation
4234 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4235 {
4236 const Argument &a = *it;
4237 if (!a.name.isEmpty() && a.type!="void" && a.name!="..." &&
4238 !(isPython && (a.name=="self" || a.name=="cls"))
4239 )
4240 {
4241 allDoc = !a.docs.isEmpty();
4242 }
4243 //printf("a.type=%s a.name=%s doc=%s\n",
4244 // qPrint(a.type),qPrint(a.name),qPrint(a.docs));
4245 }
4246 if (!allDoc && declAl.empty()) // try declaration arguments as well
4247 {
4248 allDoc=true;
4249 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4250 {
4251 const Argument &a = *it;
4252 if (!a.name.isEmpty() && a.type!="void" && a.name!="..." &&
4253 !(isPython && (a.name=="self" || a.name=="cls"))
4254 )
4255 {
4256 allDoc = !a.docs.isEmpty();
4257 }
4258 //printf("a.name=%s doc=%s\n",qPrint(a.name),qPrint(a.docs));
4259 }
4260 }
4261 }
4262 if (allDoc)
4263 {
4264 //printf("%s:hasDocumentedParams=TRUE;\n",qPrint(name()));
4265 m_hasDocumentedParams = true;
4266 }
4267 }
4268
4269 //printf("Member %s hasDocumentedReturnType=%d hasReturnCommand=%d\n",
4270 // qPrint(name()),m_hasDocumentedReturnType,hasReturnCommand);
4272}
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 3296 of file memberdef.cpp.

3297{
3298 QCString ldef = definition();
3299 QCString title = name();
3300 if (isEnumerate())
3301 {
3302 if (isAnonymous())
3303 {
3304 ldef = title = "anonymous enum";
3305 if (!m_enumBaseType.isEmpty())
3306 {
3307 ldef+=" : "+m_enumBaseType;
3308 }
3309 }
3310 else
3311 {
3312 ldef.prepend("enum ");
3313 if (isSliceLocal())
3314 {
3315 ldef.prepend("local ");
3316 }
3317 }
3318 }
3319 else if (isEnumValue())
3320 {
3321 if (isAnonymous())
3322 {
3323 ldef=ldef.mid(2);
3324 }
3325 }
3326
3327 std::string sdef = ldef.str();
3328 reg::Match match;
3329 if (reg::search(sdef,match,reAnonymous))
3330 {
3331 ldef = match.prefix().str() + " { ... } " + removeAnonymousScopes(match.suffix().str());
3332 }
3333
3334 const ClassDef *cd=getClassDef();
3335 if (cd && cd->isObjectiveC())
3336 {
3337 // strip scope name
3338 int ep = ldef.find("::");
3339 if (ep!=-1)
3340 {
3341 int sp=ldef.findRev(' ',ep);
3342 if (sp!=-1)
3343 {
3344 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3345 }
3346 }
3347 // strip keywords
3348 int dp = ldef.find(':');
3349 if (dp!=-1)
3350 {
3351 ldef=ldef.left(dp+1);
3352 }
3353 int l=static_cast<int>(ldef.length());
3354 //printf("start >%s<\n",qPrint(ldef));
3355 int i=l-1;
3356 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3357 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3358 if (i>0)
3359 {
3360 // insert branches around the type
3361 ldef = "("+ldef.left(i+1)+")"+ldef.mid(i+1);
3362 }
3363 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3364 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3365 }
3366 SrcLangExt lang = getLanguage();
3367 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
3368 return substitute(ldef,"::",sep);
3369}
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:161
bool isId(int c)
Definition util.h:256

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

6168{
6169 return DefinitionMixin::name();
6170}

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

6342{
6343 if (m_templateMaster)
6344 {
6345 return m_templateMaster->documentation();
6346 }
6347 else
6348 {
6350 }
6351}
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 6075 of file memberdef.cpp.

6076{
6077 return m_enumBaseType;
6078}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5599 of file memberdef.cpp.

5600{
5601 return m_enumFields;
5602}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5075 of file memberdef.cpp.

5076{
5077 return m_exception;
5078}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5060 of file memberdef.cpp.

5061{
5062 return m_extraTypeChars;
5063}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3964 of file memberdef.cpp.

3965{
3966 QCString type = m_accessorType;
3967 if (type.isEmpty())
3968 {
3969 type = m_type;
3970 }
3971
3972 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3973 return simplifyTypeForTable(type);
3974}
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 4939 of file memberdef.cpp.

4940{
4944}
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 5758 of file memberdef.cpp.

5759{
5761}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6009 of file memberdef.cpp.

6010{
6011 return m_annMemb;
6012}

References m_annMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5692 of file memberdef.cpp.

5693{
5694 return m_annScope;
5695}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5554 of file memberdef.cpp.

5555{
5556 return m_annEnumType;
5557}

References m_annEnumType.

Referenced by writeDeclaration().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5778 of file memberdef.cpp.

5779{
5780 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5781 return m_cachedResolvedType;
5782}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5773 of file memberdef.cpp.

5774{
5776}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5768 of file memberdef.cpp.

5769{
5770 return m_cachedTypedefValue;
5771}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5110 of file memberdef.cpp.

5111{
5112 return m_classDef;
5113}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5115 of file memberdef.cpp.

5116{
5118}
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 1977 of file memberdef.cpp.

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

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

5815{
5816 return m_declColumn;
5817}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5804 of file memberdef.cpp.

5805{
5806 return m_declFileName;
5807}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5809 of file memberdef.cpp.

5810{
5811 return m_declLine;
5812}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2122 of file memberdef.cpp.

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

5565{
5566 return m_enumScope;
5567}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5604 of file memberdef.cpp.

5605{
5606 return m_examples;
5607}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5125 of file memberdef.cpp.

5126{
5127 return m_fileDef;
5128}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5799 of file memberdef.cpp.

5800{
5801 return m_groupAlias;
5802}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5155 of file memberdef.cpp.

5156{
5157 return m_group;
5158}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5170 of file memberdef.cpp.

5171{
5172 return m_groupFileName;
5173}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5180 of file memberdef.cpp.

5181{
5182 return m_groupHasDocs;
5183}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5165 of file memberdef.cpp.

5166{
5167 return m_grouppri;
5168}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5175 of file memberdef.cpp.

5176{
5177 return m_groupStartLine;
5178}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2787 of file memberdef.cpp.

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

5688{
5689 return m_memberGroup;
5690}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5682 of file memberdef.cpp.

5683{
5684 return m_grpId;
5685}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5095 of file memberdef.cpp.

5096{
5097 return m_memSpec;
5098}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5160 of file memberdef.cpp.

5161{
5162 return m_moduleDef;
5163}

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

5136{
5137 return m_nspace;
5138}

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

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

5868{
5869 return m_qualifiers;
5870}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5140 of file memberdef.cpp.

5141{
5142 return m_read;
5143}

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

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

4361{
4362 QCString result;
4363 if (isStrong()) result=name();
4364 else if (getClassDef()) result=getClassDef()->displayName();
4365 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4366 return result;
4367}

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

4586{
4587 auto it = m_sectionMap.find(container);
4588 return it!=m_sectionMap.end() ? it->second : nullptr;
4589}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5100 of file memberdef.cpp.

5101{
5102 return m_vhdlSpec;
5103}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5145 of file memberdef.cpp.

5146{
5147 return m_write;
5148}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5715 of file memberdef.cpp.

5716{
5717 return m_hasCallerGraph;
5718}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5697 of file memberdef.cpp.

5698{
5699 return m_hasCallGraph;
5700}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2653 of file memberdef.cpp.

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

4348{
4350 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4351 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4352}
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 5549 of file memberdef.cpp.

5550{
5551 return m_docEnumValues;
5552}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5748 of file memberdef.cpp.

5749{
5750 return m_hasEnumValues;
5751}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1632 of file memberdef.cpp.

1633{
1634 return !m_examples.empty();
1635}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5743 of file memberdef.cpp.

5744{
5745 return m_hasInlineSource;
5746}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4508 of file memberdef.cpp.

4509{
4510 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4511 // initLines,userInitLines,maxInitLines);
4512 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4513 return (m_initLines>0 || (!m_initializer.isEmpty() && isFuncLikeMacro)) &&
4514 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4515 || m_initLines<m_userInitLines // explicitly enabled
4516 );
4517}

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

4498{
4499 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4500 // qPrint(name()),qPrint(m_initializer),m_initLines,
4501 // m_maxInitLines,m_userInitLines);
4502 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4503 return !m_initializer.isEmpty() && m_initLines==0 && // one line initializer
4504 !isFuncLikeMacro &&
4505 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4506}

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

5734{
5736}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5738 of file memberdef.cpp.

5739{
5741}

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

6354{
6355 if (m_templateMaster)
6356 {
6357 return m_templateMaster->hasUserDocumentation();
6358 }
6359 else
6360 {
6362 }
6363}
bool hasUserDocumentation() const override

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6155 of file memberdef.cpp.

6156{
6158}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5794 of file memberdef.cpp.

5795{
5796 return m_docProvider;
5797}

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

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

5086{
5087 return m_initializer;
5088}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5090 of file memberdef.cpp.

5091{
5092 return m_initLines;
5093}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1621 of file memberdef.cpp.

1622{
1623 m_enumFields.push_back(md);
1624}

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1576 of file memberdef.cpp.

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

6150{
6153}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6035 of file memberdef.cpp.

6036{
6038}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5385 of file memberdef.cpp.

5386{
5387 return m_memSpec.isAbstract();
5388}

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5335 of file memberdef.cpp.

5336{
5337 return m_memSpec.isAddable();
5338}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5410 of file memberdef.cpp.

5411{
5412 return m_memSpec.isAssign();
5413}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5467 of file memberdef.cpp.

5468{
5469 return m_memSpec.isAttribute();
5470}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5482 of file memberdef.cpp.

5483{
5484 return m_memSpec.isBound();
5485}

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

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

5534{
5535 return isFunction() ||
5536 isSlot() ||
5537 isSignal() ||
5538 isConstructor() ||
5539 isDestructor() ||
5540 isObjCMethod() ||
5541 isFriend();
5542}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5589 of file memberdef.cpp.

5590{
5591 return m_memSpec.isConstEval();
5592}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5584 of file memberdef.cpp.

5585{
5586 return m_memSpec.isConstExpr();
5587}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5594 of file memberdef.cpp.

5595{
5596 return m_memSpec.isConstInit();
5597}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5487 of file memberdef.cpp.

5488{
5489 return m_memSpec.isConstrained();
5490}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4731 of file memberdef.cpp.

4732{
4733 if (m_isConstructorCached==0)
4734 {
4735 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4736 that->_computeIsConstructor();
4737 }
4739 return m_isConstructorCached==2;
4740
4741}
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 5405 of file memberdef.cpp.

5406{
5407 return m_memSpec.isCopy();
5408}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4992 of file memberdef.cpp.

4993{
4994 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return TRUE;
4995 return FALSE;
4996}
bool isProperty() const override

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

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5255 of file memberdef.cpp.

5256{
5257 return m_mtype==MemberType::DCOP;
5258}

References DCOP, and m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5452 of file memberdef.cpp.

5453{
5454 return m_memSpec.isDefault();
5455}

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5245 of file memberdef.cpp.

5246{
5248}

References Define, and m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5457 of file memberdef.cpp.

5458{
5459 return m_memSpec.isDelete();
5460}

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4342 of file memberdef.cpp.

4343{
4344 return m_defArgList.isDeleted();
4345}

References m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4772 of file memberdef.cpp.

4773{
4774 if (m_isDestructorCached==0)
4775 {
4776 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4777 that->_computeIsDestructor();
4778 }
4780 return m_isDestructorCached==2;
4781}
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 2769 of file memberdef.cpp.

2770{
2771 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2772 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2773 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2774 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2775 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2776 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2777 getClassDef()!=nullptr && getClassDef()->isSimple();
2778
2779 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2780 !isReference();
2781 bool result = visible || simpleFilter;
2782 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2783 // qPrint(name()),result,groupFilter,fileFilter);
2784 return result;
2785}
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 5230 of file memberdef.cpp.

5231{
5233}

References Dictionary, and m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5559 of file memberdef.cpp.

5560{
5561 return m_docsForDefinition;
5562}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4332 of file memberdef.cpp.

4333{
4334 ClassDef *fcd=nullptr;
4335 QCString baseName=name();
4336 int i=baseName.find('<');
4337 if (i!=-1) baseName=baseName.left(i);
4338 return (isFriendClass() &&
4339 (fcd=getClass(baseName)) && fcd->isLinkable());
4340}
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 5430 of file memberdef.cpp.

5431{
5432 return m_memSpec.isEnumStruct();
5433}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5215 of file memberdef.cpp.

5216{
5218}

References EnumValue, and m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5265 of file memberdef.cpp.

5266{
5267 return m_mtype==MemberType::Event;
5268}

References Event, and m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5290 of file memberdef.cpp.

5291{
5292 return m_memSpec.isExplicit();
5293}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5523 of file memberdef.cpp.

5524{
5525 return m_explExt;
5526}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5360 of file memberdef.cpp.

5361{
5362 return m_memSpec.isFinal();
5363}

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5275 of file memberdef.cpp.

5276{
5277 return m_related == Relationship::Foreign;
5278}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6380 of file memberdef.cpp.

6381{
6382 return (isFriend() &&
6383 (m_type=="friend class" || m_type=="friend struct" ||
6384 m_type=="friend union"));
6385}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6370 of file memberdef.cpp.

6371{
6372 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6373 bool isFriendToHide = hideFriendCompounds &&
6374 (m_type=="friend class" ||
6375 m_type=="friend struct" ||
6376 m_type=="friend union");
6377 return isFriendToHide;
6378}
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 6393 of file memberdef.cpp.

6394{
6395 return isFunction() || isSlot() || isSignal();
6396}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5240 of file memberdef.cpp.

5241{
5242 return m_mtype==MemberType::Variable && QCString(argsString()).find(")(")!=-1;
5243}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5305 of file memberdef.cpp.

5306{
5307 return m_memSpec.isGettable();
5308}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5518 of file memberdef.cpp.

5519{
5520 return m_implOnly;
5521}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5380 of file memberdef.cpp.

5381{
5382 return m_memSpec.isInitonly();
5383}

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5285 of file memberdef.cpp.

5286{
5287 return m_memSpec.isInline();
5288}

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

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

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

1891{
1892 if (m_isLinkableCached==0)
1893 {
1894 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1896 }
1898 return m_isLinkableCached==2;
1899}
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 5507 of file memberdef.cpp.

5508{
5509 return m_memSpec.isMaybeAmbiguous();
5510}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5502 of file memberdef.cpp.

5503{
5504 return m_memSpec.isMaybeDefault();
5505}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5497 of file memberdef.cpp.

5498{
5499 return m_memSpec.isMaybeVoid();
5500}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5295 of file memberdef.cpp.

5296{
5297 return m_memSpec.isMutable();
5298}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5365 of file memberdef.cpp.

5366{
5367 return m_memSpec.isNew();
5368}

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5579 of file memberdef.cpp.

5580{
5581 return m_memSpec.isNoDiscard();
5582}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5462 of file memberdef.cpp.

5463{
5464 return m_memSpec.isNoExcept();
5465}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5400 of file memberdef.cpp.

5401{
5402 return m_memSpec.isNonAtomic();
5403}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6388 of file memberdef.cpp.

6389{
6390 return !(isFriend() && isFriendToHide());
6391}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4980 of file memberdef.cpp.

4981{
4982 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return TRUE;
4983 return FALSE;
4984}

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

4987{
4988 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return TRUE;
4989 return FALSE;
4990}

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

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5390 of file memberdef.cpp.

5391{
5392 return m_memSpec.isOptional();
5393}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5375 of file memberdef.cpp.

5376{
5377 return m_memSpec.isOverride();
5378}

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5310 of file memberdef.cpp.

5311{
5312 return m_memSpec.isPrivateGettable();
5313}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5325 of file memberdef.cpp.

5326{
5327 return m_memSpec.isPrivateSettable();
5328}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5260 of file memberdef.cpp.

5261{
5263}

References m_mtype, and Property.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5315 of file memberdef.cpp.

5316{
5317 return m_memSpec.isProtectedGettable();
5318}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5330 of file memberdef.cpp.

5331{
5332 return m_memSpec.isProtectedSettable();
5333}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5609 of file memberdef.cpp.

5610{
5611 return m_proto;
5612}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5512 of file memberdef.cpp.

5513{
5514 return m_memSpec.isPublished();
5515}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5345 of file memberdef.cpp.

5346{
5347 return m_memSpec.isRaisable();
5348}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5350 of file memberdef.cpp.

5351{
5352 return m_memSpec.isReadable();
5353}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5477 of file memberdef.cpp.

5478{
5479 return m_memSpec.isReadonly();
5480}

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

6404{
6406 (m_templateMaster && m_templateMaster->isReference());
6407}
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 1602 of file memberdef.cpp.

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

5271{
5272 return m_related == Relationship::Related;
5273}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6398 of file memberdef.cpp.

6399{
6400 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6401}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5340 of file memberdef.cpp.

5341{
5342 return m_memSpec.isRemovable();
5343}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5395 of file memberdef.cpp.

5396{
5397 return m_memSpec.isRequired();
5398}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5415 of file memberdef.cpp.

5416{
5417 return m_memSpec.isRetain();
5418}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5370 of file memberdef.cpp.

5371{
5372 return m_memSpec.isSealed();
5373}

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5225 of file memberdef.cpp.

5226{
5228}

References m_mtype, and Sequence.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5320 of file memberdef.cpp.

5321{
5322 return m_memSpec.isSettable();
5323}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5195 of file memberdef.cpp.

5196{
5198}

References m_mtype, and Signal.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5574 of file memberdef.cpp.

5575{
5576 return m_memSpec.isLocal();
5577}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5200 of file memberdef.cpp.

5201{
5202 return m_mtype==MemberType::Slot;
5203}

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

5426{
5427 return m_memSpec.isStrong();
5428}

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5435 of file memberdef.cpp.

5436{
5438 m_enumScope &&
5439 m_enumScope->isStrong();
5440}

References EnumValue, m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5528 of file memberdef.cpp.

5529{
5530 return m_tspec;
5531}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5300 of file memberdef.cpp.

5301{
5302 return m_memSpec.isThreadLocal();
5303}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5492 of file memberdef.cpp.

5493{
5494 return m_memSpec.isTransient();
5495}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5447 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5220 of file memberdef.cpp.

5221{
5223}

References m_mtype, and Typedef.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5763 of file memberdef.cpp.

5764{
5765 return m_isTypedefValCached;
5766}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5472 of file memberdef.cpp.

5473{
5474 return m_memSpec.isProperty();
5475}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5442 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5205 of file memberdef.cpp.

5206{
5208}

References m_mtype, and Variable.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5420 of file memberdef.cpp.

5421{
5422 return m_memSpec.isWeak();
5423}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5355 of file memberdef.cpp.

5356{
5357 return m_memSpec.isWritable();
5358}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5569 of file memberdef.cpp.

5570{
5571 return m_livesInsideEnum;
5572}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5918 of file memberdef.cpp.

5919{
5920 m_related = Relationship::Foreign;
5922}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5994 of file memberdef.cpp.

5995{
5997}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5912 of file memberdef.cpp.

5913{
5914 m_related = Relationship::Related;
5916}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5789 of file memberdef.cpp.

5790{
5791 return m_memDec;
5792}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5784 of file memberdef.cpp.

5785{
5786 return m_memDef;
5787}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5190 of file memberdef.cpp.

5191{
5192 return m_mtype;
5193}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4088 of file memberdef.cpp.

4089{
4090 switch (m_mtype)
4091 {
4092 case MemberType::Define: return "macro definition";
4093 case MemberType::Function: return "function";
4094 case MemberType::Variable: return "variable";
4095 case MemberType::Typedef: return "typedef";
4096 case MemberType::Enumeration: return "enumeration";
4097 case MemberType::EnumValue: return "enumvalue";
4098 case MemberType::Signal: return "signal";
4099 case MemberType::Slot: return "slot";
4100 case MemberType::Friend: return "friend";
4101 case MemberType::DCOP: return "dcop";
4102 case MemberType::Property: return "property";
4103 case MemberType::Event: return "event";
4104 case MemberType::Interface: return "interface";
4105 case MemberType::Service: return "service";
4106 case MemberType::Sequence: return "sequence";
4107 case MemberType::Dictionary: return "dictionary";
4108 default: return "unknown";
4109 }
4110}

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

5863{
5864 m_memSpec.merge(s);
5865}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4908 of file memberdef.cpp.

4909{
4910 m_defArgList = *al;
4911}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4913 of file memberdef.cpp.

4914{
4915 m_declArgList = *al;
4916}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1547 of file memberdef.cpp.

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

6161{
6162 return m_numberOfFlowKW;
6163}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5033 of file memberdef.cpp.

5034{
5035 QCString qm;
5036 if (showStatic)
5037 {
5038 if (isStatic()) qm="+ "; else qm="- ";
5039 }
5040 qm+=name();
5041 if (!localLink) // link to method of same class
5042 {
5043 qm+=" (";
5044 qm+=getClassDef()->name();
5045 qm+=")";
5046 }
5047 return qm;
5048}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4952 of file memberdef.cpp.

4953{
4956}
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 4946 of file memberdef.cpp.

4947{
4950}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4970 of file memberdef.cpp.

4971{
4973}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4975 of file memberdef.cpp.

4976{
4978}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4958 of file memberdef.cpp.

4959{
4962}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4964 of file memberdef.cpp.

4965{
4968}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5185 of file memberdef.cpp.

5186{
5187 return m_prot;
5188}

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

4999{
5000 if (isObjCMethod())
5001 {
5002 QCString qm;
5003 if (isStatic()) qm="+"; else qm="-";
5004 qm+="[";
5005 qm+=getClassDef()->name()+" ";
5006 qm+=name();
5007 qm+="]";
5008 return qm;
5009 }
5010 else if (m_enumScope && m_enumScope->isStrong())
5011 {
5012 return m_enumScope->qualifiedName()+
5014 localName();
5015 }
5016 else
5017 {
5019 }
5020}
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 6433 of file memberdef.cpp.

6434{
6435 return m_redefineCount;
6436}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1597 of file memberdef.cpp.

1598{
1599 return m_redefinedBy;
1600}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1592 of file memberdef.cpp.

1593{
1594 return m_redefines;
1595}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5544 of file memberdef.cpp.

5545{
5546 return m_relatedAlso;
5547}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6085 of file memberdef.cpp.

6086{
6087 return m_requiresClause;
6088}

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

5625{
5626 ArgumentList &decAl = m_declArgList;
5627 ArgumentList &defAl = m_defArgList;
5628 const ArgumentList &decAlSrc = md->declArgumentList();
5629 const ArgumentList &defAlSrc = md->argumentList();
5630 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5631 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5632 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5633 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5634 {
5635 Argument &decA = *decIt;
5636 Argument &defA = *defIt;
5637 const Argument &decAS = *decSrc;
5638 const Argument &defAS = *defSrc;
5639 if (decA.name.isEmpty())
5640 {
5641 if (!defA.name.isEmpty())
5642 {
5643 decA.name = defA.name;
5644 }
5645 else if (!decAS.name.isEmpty())
5646 {
5647 decA.name = decAS.name;
5648 }
5649 else if (!defAS.name.isEmpty())
5650 {
5651 decA.name = defAS.name;
5652 }
5653 }
5654 if (defA.name.isEmpty())
5655 {
5656 if (!decA.name.isEmpty())
5657 {
5658 defA.name = decA.name;
5659 }
5660 else if (!decAS.name.isEmpty())
5661 {
5662 defA.name = decAS.name;
5663 }
5664 else if (!defAS.name.isEmpty())
5665 {
5666 defA.name = defAS.name;
5667 }
5668 }
5669 }
5670}

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

4929{
4930 m_accessorClass = cd;
4931 m_accessorType = t;
4932}

References m_accessorClass, and m_accessorType.

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4369 of file memberdef.cpp.

4370{
4371 QCString memAnchor = name();
4372 if (!m_args.isEmpty()) memAnchor+=m_args;
4373 if (m_memSpec.isAlias()) // this is for backward compatibility
4374 {
4375 memAnchor.prepend(" = "+m_initializer);
4376 }
4377 memAnchor.prepend(definition()); // actually the method name is now included
4378 // twice, which is silly, but we keep it this way for backward
4379 // compatibility.
4380
4381 // include number of template arguments as well,
4382 // to distinguish between two template
4383 // specializations that only differ in the template parameters.
4384 if (m_tArgList.hasParameters())
4385 {
4386 char buf[20];
4387 qsnprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4388 buf[19]='\0';
4389 memAnchor.prepend(buf);
4390 }
4391 if (!m_requiresClause.isEmpty())
4392 {
4393 memAnchor+=" "+m_requiresClause;
4394 }
4395 if (m_redefineCount>0)
4396 {
4397 char buf[20];
4398 qsnprintf(buf,20,":%d",m_redefineCount);
4399 buf[19]='\0';
4400 memAnchor.append(buf);
4401 }
4402
4403 // convert to md5 hash
4404 uint8_t md5_sig[16];
4405 char sigStr[33];
4406 MD5Buffer(memAnchor.data(),static_cast<unsigned int>(memAnchor.length()),md5_sig);
4407 MD5SigToString(md5_sig,sigStr);
4408 m_anc = QCString("a")+sigStr;
4409}
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 5951 of file memberdef.cpp.

5952{
5953 m_annEnumType = md;
5954}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5929 of file memberdef.cpp.

5930{
5931 m_args = as;
5932}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5884 of file memberdef.cpp.

5885{
5886 m_bitfields = QCString(s).simplifyWhiteSpace();
5887}

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

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

6056{
6057 m_category = def;
6058}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6065 of file memberdef.cpp.

6066{
6067 m_categoryRelation = md;
6068}

References m_categoryRelation.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5982 of file memberdef.cpp.

5983{
5984 m_declFileName = df;
5985 m_declLine = line;
5986 m_declColumn = column;
5987}

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

5829{
5830 m_def=d;
5831}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1914 of file memberdef.cpp.

1915{
1916 m_defTmpArgLists = lists;
1917}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6025 of file memberdef.cpp.

6026{
6028}

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

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

5947{
5948 m_docEnumValues=value;
5949}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6070 of file memberdef.cpp.

6071{
6072 m_enumBaseType = type;
6073}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5939 of file memberdef.cpp.

5940{
5941 m_classDef = cd;
5944}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4425 of file memberdef.cpp.

4426{
4427 m_enumScope=md;
4429 if (md->getGroupDef())
4430 {
4431 m_group = md->getGroupDef();
4432 m_grouppri = md->getGroupPri();
4437 }
4438}
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 5969 of file memberdef.cpp.

5970{
5971 m_explExt=b;
5972 if (b)
5973 {
5974 setDeclFile(df,line,column);
5975 }
5976 else
5977 {
5978 setDefFile(df,line,column);
5979 }
5980}
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 5833 of file memberdef.cpp.

5834{
5835 m_fileDef=fd;
5839}

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

6021{
6023}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 6004 of file memberdef.cpp.

6005{
6006 m_annMemb=m;
6007}

References m_annMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5999 of file memberdef.cpp.

6000{
6001 m_annScope=b;
6002}

References m_annScope.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6030 of file memberdef.cpp.

6031{
6032 m_groupAlias = md;
6033}

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

4414{
4415 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4416 m_group=gd;
4417 m_grouppri=pri;
4418 m_groupFileName=fileName;
4419 m_groupStartLine=startLine;
4420 m_groupHasDocs=hasDocs;
4421 m_groupMember=member;
4423}

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

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

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

5925{
5926 m_docProvider = md;
5927}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4519 of file memberdef.cpp.

4520{
4521 size_t indent=0;
4523 int l=static_cast<int>(m_initializer.length());
4524 int p=l-1;
4525 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4526 m_initializer=m_initializer.left(p+1);
4527 m_initLines=m_initializer.contains('\n');
4529
4530 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4531}
const QCString & initializer() const override
void stripIndentationVerbatim(QCString &doc, const int indentationLevel, bool skipFirstLine)
Definition util.cpp:6061
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6743

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

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5889 of file memberdef.cpp.

5890{
5891 if (lines!=-1)
5892 {
5893 m_userInitLines=lines;
5894 }
5895}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6045 of file memberdef.cpp.

6046{
6047 m_memDec=md;
6048}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6040 of file memberdef.cpp.

6041{
6042 m_memDef=md;
6043}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4355 of file memberdef.cpp.

4356{
4357 m_memberGroup = grp;
4358}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 5989 of file memberdef.cpp.

5990{
5991 m_grpId=id;
5992}
virtual QCString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5852 of file memberdef.cpp.

5853{
5854 m_memSpec=s;
5855}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5822 of file memberdef.cpp.

5823{
5824 m_mtype=t;
5826}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5841 of file memberdef.cpp.

5842{
5843 m_moduleDef=mod;
5844}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4448 of file memberdef.cpp.

4449{
4450 m_nspace=nd;
4451 setOuterScope(nd);
4452}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5846 of file memberdef.cpp.

5847{
5848 m_prot=p;
5850}

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

5957{
5958 m_proto=p;
5959 if (p)
5960 {
5961 setDeclFile(df,line,column);
5962 }
5963 else
5964 {
5965 setDefFile(df,line,column);
5966 }
5967}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5897 of file memberdef.cpp.

5898{
5899 m_read=r;
5900}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6438 of file memberdef.cpp.

6439{
6440 m_redefineCount=count;
6441}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1571 of file memberdef.cpp.

1572{
1573 m_redefines = md;
1574}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5934 of file memberdef.cpp.

5935{
5936 m_relatedAlso=cd;
5937}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6080 of file memberdef.cpp.

6081{
6082 m_requiresClause = req;
6083}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4591 of file memberdef.cpp.

4592{
4593 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4594 m_sectionMap.emplace(container,sl);
4595}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 5022 of file memberdef.cpp.

5023{
5024 if (ti)
5025 {
5026 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5027 m_anc=ti->anchor;
5028 setReference(ti->tagName);
5030 }
5031}
void setReference(const QCString &r) override
QCString stripExtension(const QCString &fName)
Definition util.cpp:4947

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

6015{
6018}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5907 of file memberdef.cpp.

5908{
5909 m_tspec=b;
5910}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4923 of file memberdef.cpp.

4924{
4925 m_type = t;
4926}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4918 of file memberdef.cpp.

4919{
4920 m_typeConstraints = al;
4921}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5857 of file memberdef.cpp.

5858{
5859 m_vhdlSpec=s;
5860}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5902 of file memberdef.cpp.

5903{
5904 m_write=w;
5905}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1637 of file memberdef.cpp.

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

5673{
5674 return m_tArgList;
5675}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5753 of file memberdef.cpp.

5754{
5755 return m_templateMaster;
5756}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6365 of file memberdef.cpp.

6366{
6367 return m_typeConstraints;
6368}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5065 of file memberdef.cpp.

5066{
5067 return m_type;
5068}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4597 of file memberdef.cpp.

4598{
4599 if (count>25)
4600 {
4602 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4603 return Specifier::Normal;
4604 }
4605 Specifier v = m_virt;
4606 const MemberDef *rmd = reimplements();
4607 while (rmd && v==Specifier::Normal)
4608 {
4609 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4610 rmd = rmd->reimplements();
4611 }
4612 return v;
4613}
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 4184 of file memberdef.cpp.

4185{
4186 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4187 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4188 return (!isAnonymous() &&
4189 (!hideUndocMembers || hasDocumentation()) &&
4190 (!isStatic() || extractStatic) &&
4191 isLinkable()
4192 );
4193}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4112 of file memberdef.cpp.

4113{
4114 /*
4115 * Removed bug_303020:
4116 * if (m_memberGroup) return;
4117 */
4118 const ClassDef *cd = getClassDef();
4119 const NamespaceDef *nd = getNamespaceDef();
4120 const FileDef *fd = getFileDef();
4121 const GroupDef *gd = getGroupDef();
4122 const Definition *d=nullptr;
4123 QCString t;
4124 if (cd)
4125 {
4126 t=cd->compoundTypeString();
4127 d=cd;
4128 }
4129 else if (nd)
4130 {
4131 t=nd->compoundTypeString();
4132 d=nd;
4133 }
4134 else if (gd)
4135 {
4136 t="group";
4137 d=gd;
4138 }
4139 else
4140 {
4141 t="file";
4142 d=fd;
4143 }
4144 bool extractAll = Config_getBool(EXTRACT_ALL);
4145
4146 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4147 // qPrint(name()),
4148 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4149 if ((!hasUserDocumentation() && !extractAll) &&
4150 !isFriendClass() &&
4151 name().find('@')==-1 && d && d->name().find('@')==-1 &&
4154 !isReference() && !isDeleted()
4155 )
4156 {
4157 SrcLangExt lang = getLanguage();
4158 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4159 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4161 substitute(d->name(),"::",sep));
4162 }
4163 else if (!hasDetailedDescription())
4164 {
4166 }
4167
4168 // if it is an enum, we check that its members are documented
4169 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4170 {
4171 for (const auto &fmd : enumFieldList())
4172 {
4173 if (!fmd->isLinkableInProject())
4174 {
4175 SrcLangExt lang = getLanguage();
4176 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4177 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4178 qualifiedName(),sep,fmd->name());
4179 }
4180 }
4181 }
4182}
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 4274 of file memberdef.cpp.

4275{
4276 QCString returnType = typeString();
4277 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4278 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=-1;
4279
4280 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4281 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4282 {
4283 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4284 if (!defArgList.trailingReturnType().isEmpty())
4285 {
4286 QCString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4287 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4288 }
4289 }
4290 if (!Config_getBool(EXTRACT_ALL) &&
4291 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4292 Config_getBool(WARN_NO_PARAMDOC) &&
4293 isFunction() &&
4294 !isDeleted() &&
4295 !isReference() &&
4297 {
4299 {
4301 "parameters of member {} are not documented",
4302 qualifiedName());
4303 }
4305 hasDocumentation() && !returnType.isEmpty() &&
4306 !( // not one of the cases where nothing is returned
4307 isVoidReturn || // void return type
4308 isFortranSubroutine || // fortran subroutine
4309 isConstructor() || // a constructor
4310 isDestructor() || // or a destructor
4311 isFriend() // or a friend
4312 )
4313 )
4314 {
4316 "return type of member {} is not documented",
4317 qualifiedName());
4318 }
4319 }
4320 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4322 (isVoidReturn || // void return type
4323 isFortranSubroutine || // fortran subroutine
4324 isConstructor() || // a constructor
4325 isDestructor())) // or destructor
4326 {
4327 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4328 qualifiedName());
4329 }
4330}
QCString trailingReturnType() const
Definition arguments.h:114
static bool suppressDocWarnings
Definition doxygen.h:129
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 2217 of file memberdef.cpp.

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

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

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(), LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), 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 4783 of file memberdef.cpp.

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

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

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

3977{
3978 Definition *scope = getOuterScope();
3979 QCString doxyName = name();
3980 QCString doxyArgs = argsString();
3981 QCString memAnchor = anchor();
3982 QCString cfname = getOutputFileBase();
3983 QCString cname;
3984 if (scope) cname = scope->name();
3985 if (doxyName.at(0)=='@')
3986 {
3987 doxyName="__unnamed__";
3988 }
3989
3990 ClassDef *cd = m_accessorClass;
3991 //printf("===> %s::anonymous: %s\n",qPrint(name()),cd?qPrint(cd->name()):"<none>");
3992
3993 LinkifyTextOptions options;
3994 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
3995
3996 if (container && container->definitionType()==Definition::TypeClass &&
3997 !(toClassDef(container))->isJavaEnum())
3998 {
4000 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4001 ol.addLabel(cfname,memAnchor);
4002
4003 QCString ts = fieldType();
4004
4005 if (isFunctionPtr())
4006 ts = m_type + m_args;
4007
4008 if (cd) // cd points to an anonymous struct pointed to by this member
4009 // so we add a link to it from the type column.
4010 {
4011 int i=0;
4012 const char *prefixes[] = { "struct ","union ","class ", nullptr };
4013 const char **p = prefixes;
4014 while (*p)
4015 {
4016 int l=qstrlen(*p);
4017 if (ts.left(l)==*p)
4018 {
4019 ol.writeString(*p);
4020 i=l;
4021 }
4022 p++;
4023 }
4025 cd->getOutputFileBase(),
4026 cd->anchor(),ts.mid(i));
4027 }
4028 else // use standard auto linking
4029 {
4030 linkifyText(TextGeneratorOLImpl(ol),ts,options);
4031 }
4032 ol.endDoxyAnchor(cfname,memAnchor);
4034 }
4035
4037 ol.docify(doxyName);
4038 if (isVariable() && !argsString().isEmpty() && !isObjCMethod() && !isFunctionPtr())
4039 {
4040 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
4041 }
4042 if (!m_bitfields.isEmpty()) // add bitfields
4043 {
4044 linkifyText(TextGeneratorOLImpl(ol),m_bitfields,options);
4045 }
4046 if (hasOneLineInitializer() && !isDefine())
4047 {
4048 ol.writeString(" ");
4049 linkifyText(TextGeneratorOLImpl(ol),m_initializer.simplifyWhiteSpace(),options);
4050 }
4052
4054
4055 QCString brief = briefDescription();
4056 QCString detailed = documentation();
4057
4058 /* write brief description */
4059 if (!brief.isEmpty())
4060 {
4062 briefLine(),
4063 getOuterScope()?getOuterScope():container,this,
4064 brief,
4065 DocOptions()
4066 .setSingleLine(true));
4067 }
4068
4069 /* write detailed description */
4070 if (!detailed.isEmpty())
4071 {
4072 if (!brief.isEmpty())
4073 {
4075 ol.lineBreak();
4077 }
4078 ol.generateDoc(docFile(),
4079 docLine(),
4080 getOuterScope()?getOuterScope():container,this,
4081 detailed+"\n",
4082 DocOptions());
4083 }
4084
4085 ol.endInlineMemberDoc();
4086}
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_defArgList, m_initializer, m_type, QCString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), qstrlen(), LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), 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 4615 of file memberdef.cpp.

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

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: