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

Public Member Functions

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

Private Member Functions

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

Private Attributes

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

Additional Inherited Members

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

Detailed Description

Definition at line 53 of file memberdef.cpp.

Constructor & Destructor Documentation

◆ MemberDefImpl()

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

Creates a new member definition.

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

Definition at line 1437 of file memberdef.cpp.

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

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

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

◆ ~MemberDefImpl()

MemberDefImpl::~MemberDefImpl ( )
overridedefault

References MemberDefImpl().

Member Function Documentation

◆ _computeIsConstructor()

void MemberDefImpl::_computeIsConstructor ( )
private

Definition at line 4738 of file memberdef.cpp.

4739{
4740 m_isConstructorCached=1; // FALSE
4741 if (getClassDef())
4742 {
4743 if (m_isDMember) // for D
4744 {
4745 m_isConstructorCached = name()=="this" ? 2 : 1;
4746 return;
4747 }
4748 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4749 {
4750 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4751 return;
4752 }
4753 else if (name()=="__init__" &&
4754 getLanguage()==SrcLangExt::Python) // for Python
4755 {
4756 m_isConstructorCached = 2; // TRUE
4757 return;
4758 }
4759 else // for other languages
4760 {
4761 QCString locName = getClassDef()->localName();
4762 int i=locName.find('<');
4763 if (i==-1) // not a template class
4764 {
4765 m_isConstructorCached = name()==locName ? 2 : 1;
4766 }
4767 else
4768 {
4769 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4770 }
4771 return;
4772 }
4773 }
4774}
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 4788 of file memberdef.cpp.

4789{
4790 bool isDestructor = false;
4791 if (m_isDMember) // for D
4792 {
4793 isDestructor = name()=="~this";
4794 }
4795 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4796 {
4797 isDestructor = name()=="__destruct";
4798 }
4799 else if (name()=="__del__" &&
4800 getLanguage()==SrcLangExt::Python) // for Python
4801 {
4802 isDestructor = true;
4803 }
4804 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4805 {
4806 isDestructor = typeString()=="final";
4807 }
4808 else // other languages
4809 {
4810 isDestructor =
4811 (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
4812 && name().find("operator")==-1;
4813 }
4815}
bool isDestructor() const override
QCString typeString() const override

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

Referenced by isDestructor().

◆ _computeLinkableInProject()

void MemberDefImpl::_computeLinkableInProject ( )
private

Definition at line 1790 of file memberdef.cpp.

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

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

3078{
3079 const MemberVector &bml=reimplementedBy();
3080 size_t count=0;
3081 for (const auto &bmd : bml)
3082 {
3083 const ClassDef *bcd=bmd->getClassDef();
3084 // count the members that directly inherit from md and for
3085 // which the member and class are visible in the docs.
3086 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
3087 {
3088 count++;
3089 }
3090 }
3091 return count;
3092}
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 5765 of file memberdef.cpp.

5766{
5767 bool enabled = m_hasCallerGraph &&
5768 (isFunction() || isSlot() || isSignal()) &&
5769 Config_getBool(HAVE_DOT);
5770 if (enabled)
5771 {
5772 bool trivial = DotCallGraph::isTrivial(this,TRUE);
5773 return !trivial;
5774 }
5775 return FALSE;
5776}
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 5747 of file memberdef.cpp.

5748{
5749 bool enabled = m_hasCallGraph &&
5750 (isFunction() || isSlot() || isSignal()) &&
5751 Config_getBool(HAVE_DOT);
5752 if (enabled)
5753 {
5754 bool trivial = DotCallGraph::isTrivial(this,FALSE);
5755 return !trivial;
5756 }
5757 return FALSE;
5758}

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

2228{
2229 return !m_bitfields.isEmpty() && name().startsWith("__pad"); // anonymous bitfield
2230}
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 3004 of file memberdef.cpp.

3005{
3006 const MemberDef *bmd=reimplements();
3007 const ClassDef *bcd=nullptr;
3008 if (bmd && (bcd=bmd->getClassDef()))
3009 {
3010 // write class that contains a member that is reimplemented by this one
3011 if (bcd->isLinkable())
3012 {
3013 return true;
3014 }
3015 }
3016 return false;
3017}
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 2982 of file memberdef.cpp.

2983{
2985 {
2986 DotCallGraph callerGraph(this, TRUE);
2987 if (callerGraph.isTooBig())
2988 {
2989 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2990 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2991 }
2992 else if (!callerGraph.isTrivial())
2993 {
2994 msg("Generating caller graph for function {}\n",qualifiedName());
2996 ol.startCallGraph();
2998 ol.endCallGraph(callerGraph);
2999 ol.enableAll();
3000 }
3001 }
3002}
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 2959 of file memberdef.cpp.

2960{
2961 // write call graph
2963 {
2964 DotCallGraph callGraph(this,FALSE);
2965 if (callGraph.isTooBig())
2966 {
2967 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2968 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2969 }
2970 else if (!callGraph.isTrivial())
2971 {
2972 msg("Generating call graph for function {}\n",qualifiedName());
2974 ol.startCallGraph();
2976 ol.endCallGraph(callGraph);
2977 ol.enableAll();
2978 }
2979 }
2980}
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 3153 of file memberdef.cpp.

3154{
3155 if (getClassDef()) // this should be a member of a class/category
3156 {
3157 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3158 // qPrint(name()),
3159 // m_category ? qPrint(m_category->name()) : "<none>",
3160 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3161 // qPrint(m_classDef->name()),
3162 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3163 // );
3164 QCString text;
3165 QCString ref;
3166 QCString file;
3167 QCString anc;
3168 QCString name;
3169 int i=-1;
3170 if (m_categoryRelation && m_categoryRelation->isLinkable())
3171 {
3172 if (m_category)
3173 {
3174 // this member is in a normal class and implements method categoryRelation from category
3175 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3177 name = m_category->displayName();
3178 }
3179 else if (getClassDef()->categoryOf())
3180 {
3181 // this member is part of a category so link to the corresponding class member of the class we extend
3182 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3183 text = theTranslator->trExtendsClass();
3185 }
3186 i=text.find("@0");
3187 if (i!=-1)
3188 {
3189 const MemberDef *md = m_categoryRelation;
3190 ref = md->getReference();
3191 file = md->getOutputFileBase();
3192 anc = md->anchor();
3193 }
3194 }
3195 if (i!=-1 && !name.isEmpty())
3196 {
3197 ol.startParagraph();
3198 ol.parseText(text.left(i));
3199 ol.writeObjectLink(ref,file,anc,name);
3200 ol.parseText(text.mid(i+2));
3201 ol.endParagraph();
3202 }
3203 }
3204}
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 3227 of file memberdef.cpp.

3230{
3231 // For enum, we also write the documented enum values
3232 if (isEnumerate())
3233 {
3234 bool first=true;
3235 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3236 bool hasInits = false;
3237 if (hasEnumValues())
3238 {
3239 for (const auto &fmd : enumFieldList())
3240 {
3241 if (fmd->isLinkable())
3242 {
3243 if (!fmd->initializer().isEmpty())
3244 {
3245 hasInits = true;
3246 break;
3247 }
3248 }
3249 }
3250 }
3251 for (const auto &fmd : enumFieldList())
3252 {
3253 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3254 if (fmd->isLinkable())
3255 {
3256 if (first)
3257 {
3259 first=false;
3260 }
3261
3262 ol.startDescTableRow();
3263 ol.addIndexItem(fmd->name(),ciname);
3264 ol.addIndexItem(ciname,fmd->name());
3265
3267 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3268 ol.addLabel(cfname,fmd->anchor());
3269 ol.docify(fmd->name());
3271 ol.writeString(" ");
3272 ol.enableAll();
3273 ol.endDoxyAnchor(cfname,fmd->anchor());
3274 ol.endDescTableTitle();
3275 if (hasInits)
3276 {
3277 ol.startDescTableInit();
3278 if (!fmd->initializer().isEmpty())
3279 {
3280 QCString initStr = fmd->initializer().stripWhiteSpace();
3281 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3283 ol.writeString("(");
3284 ol.enableAll();
3285 ol.docify(initStr);
3287 ol.writeString(")");
3288 ol.enableAll();
3289 }
3290 ol.endDescTableInit();
3291 }
3292 ol.startDescTableData();
3293
3294 bool hasBrief = !fmd->briefDescription().isEmpty();
3295 bool hasDetails = !fmd->documentation().isEmpty();
3296
3297 if (hasBrief)
3298 {
3299 ol.generateDoc(fmd->briefFile(),
3300 fmd->briefLine(),
3301 getOuterScope()?getOuterScope():container,
3302 fmd,
3303 fmd->briefDescription(),
3304 DocOptions()
3305 .setIndexWords(true));
3306 }
3307 if (hasDetails)
3308 {
3309 ol.generateDoc(fmd->docFile(),
3310 fmd->docLine(),
3311 getOuterScope()?getOuterScope():container,
3312 fmd,
3313 fmd->documentation()+"\n",
3314 DocOptions()
3315 .setIndexWords(true));
3316 }
3317 ol.endDescTableData();
3318 ol.endDescTableRow();
3319 }
3320 }
3321 if (!first)
3322 {
3323 ol.endDescTable();
3324 }
3325 }
3326}
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 3206 of file memberdef.cpp.

3207{
3208 // write the list of examples that use this member
3209 if (hasExamples())
3210 {
3211 ol.startExamples();
3212 ol.startDescForItem();
3214 ol.endDescForItem();
3215 ol.endExamples();
3216 }
3217}
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:1160

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

3407{
3408 // only write out the include file if this is not part of a class or file
3409 // definition
3410 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3411 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3412 const FileDef *fd = getFileDef();
3413 QCString nm;
3414 if (inGroup && fd && showGroupedMembInc)
3415 {
3416 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3417 {
3419 }
3420 else
3421 {
3422 nm = fd->name();
3423 }
3424 }
3425 if (!nm.isEmpty())
3426 {
3427 ol.startParagraph();
3428 ol.startTypewriter();
3429 SrcLangExt lang = getLanguage();
3430 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3431 if (isIDLorJava)
3432 {
3433 ol.docify("import ");
3434 }
3435 else
3436 {
3437 ol.docify("#include ");
3438 }
3439
3440 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3441
3442 if (fd->isLinkable())
3443 {
3444 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3445 }
3446 else
3447 {
3448 ol.docify(nm);
3449 }
3450
3451 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3452
3453 ol.endTypewriter();
3454 ol.endParagraph();
3455 }
3456}
virtual QCString absFilePath() const =0
void startTypewriter()
Definition outputlist.h:449
void endTypewriter()
Definition outputlist.h:451
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
#define Config_getList(name)
Definition config.h:38
SrcLangExt
Definition types.h:207
QCString stripFromIncludePath(const QCString &path)
Definition util.cpp:330

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

Referenced by writeDocumentation().

◆ _writeMultiLineInitializer()

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

Definition at line 3458 of file memberdef.cpp.

3459{
3460 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3461 ol.startBold();
3464 else
3466 ol.endBold();
3467 QCString langCorrected = getDefFileExtension();
3469 if (srcLangExt == SrcLangExt::Lex)
3470 {
3471 langCorrected = ".doxygen_lex_c";
3472 srcLangExt = SrcLangExt::Cpp;
3473 }
3474 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3475 intf->resetCodeParserState();
3476 auto &codeOL = ol.codeGenerators();
3477 codeOL.startCodeFragment("DoxyCode");
3478 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3479 CodeParserOptions()
3481 .setInlineFragment(true)
3482 .setMemberDef(this)
3483 .setShowLineNumbers(false)
3484 .setSearchCtx(this)
3485 );
3486 codeOL.endCodeFragment("DoxyCode");
3487}
QCString getDefFileExtension() const override
static ParserManager * parserManager
Definition doxygen.h:130
void setFileDef(FileDef *fd) override
QCString m_initializer
void startCodeFragment(const QCString &style)
Definition outputlist.h:279
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
void startBold()
Definition outputlist.h:561
void endBold()
Definition outputlist.h:563
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:254
virtual QCString trDefineValue()=0
virtual QCString trInitialValue()=0
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5194

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

3095{
3096 const MemberVector &bml=reimplementedBy();
3097 size_t count = _countReimplementedBy();
3098 if (count>0)
3099 {
3100 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3101 {
3102 size_t cnt=0;
3103 auto it = bml.begin();
3104 // find the entryIndex-th documented entry in the inheritance list.
3105 const MemberDef *bmd = nullptr;
3106 const ClassDef *bcd = nullptr;
3107 while (it!=bml.end())
3108 {
3109 bmd = *it;
3110 bcd = bmd->getClassDef();
3111 if ( bmd->isLinkable() && bcd->isLinkable())
3112 {
3113 if (cnt==entryIndex) break;
3114 cnt++;
3115 }
3116 ++it;
3117 }
3118
3119 if (bcd && bmd) // write link for marker
3120 {
3121 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3122 // bmd->anchor(),bcd->name());
3124 bmd->anchor(),bcd->displayName());
3125
3126 if (bmd->isLinkableInProject() )
3127 {
3128 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3129 }
3130 }
3131 };
3132
3133 QCString reimplInLine;
3134 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3135 {
3136 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3137 }
3138 else
3139 {
3140 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3141 }
3142
3143 // write the list of classes that overwrite this member
3144 ol.startParagraph();
3145 writeMarkerList(ol,
3146 reimplInLine.str(),
3147 count,
3148 replaceFunc);
3149 ol.endParagraph();
3150 }
3151}
@ Interface
Definition classdef.h:112
size_t _countReimplementedBy() const
iterator end() noexcept
Definition memberlist.h:56
iterator begin() noexcept
Definition memberlist.h:54
const std::string & str() const
Definition qcstring.h:552
virtual QCString trReimplementedInList(int numEntries)=0
virtual QCString trImplementedInList(int numEntries)=0
void writePageRef(OutputList &ol, const QCString &cn, const QCString &mn)
Definition util.cpp:260
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1109

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

3019{
3020 const MemberDef *bmd=reimplements();
3021 const ClassDef *bcd=nullptr;
3022 if (bmd && (bcd=bmd->getClassDef()))
3023 {
3024 // write class that contains a member that is reimplemented by this one
3025 if (bcd->isLinkable())
3026 {
3027 ol.startParagraph();
3028 QCString reimplFromLine;
3029 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
3030 {
3031 reimplFromLine = theTranslator->trReimplementedFromList(1);
3032 }
3033 else
3034 {
3035 reimplFromLine = theTranslator->trImplementedFromList(1);
3036 }
3037 int markerPos = reimplFromLine.find("@0");
3038 if (markerPos!=-1) // should always pass this.
3039 {
3040 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
3041 if (bmd->isLinkable()) // replace marker with link
3042 {
3043 //Definition *bd=bmd->group;
3044 //if (bd==0) bd=bcd;
3046 bmd->anchor(),bcd->displayName());
3047
3048 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3049 // bmd->anchor(),bcd->name());
3050 if ( bmd->isLinkableInProject() )
3051 {
3052 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3053 }
3054 }
3055 else
3056 {
3058 QCString(),bcd->displayName());
3059 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3060 {
3061 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3062 }
3063 }
3064 ol.parseText(reimplFromLine.right(
3065 reimplFromLine.length()-markerPos-2)); // text right from marker
3066
3067 }
3068 else
3069 {
3070 err("translation error: no marker in trReimplementsFromList()\n");
3071 }
3072 ol.endParagraph();
3073 }
3074 }
3075}
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 2172 of file memberdef.cpp.

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

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

Referenced by writeDeclaration(), and writeDocumentation().

◆ _writeTypeConstraints()

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

Definition at line 3219 of file memberdef.cpp.

3220{
3221 if (m_typeConstraints.hasParameters())
3222 {
3224 }
3225}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5442

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ accessorClass()

ClassDef * MemberDefImpl::accessorClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4979 of file memberdef.cpp.

4980{
4981 return m_accessorClass;
4982}
ClassDef * m_accessorClass

References m_accessorClass.

◆ addExample()

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

Implements MemberDefMutable.

Definition at line 1629 of file memberdef.cpp.

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

References anchor(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4578 of file memberdef.cpp.

4579{
4580 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4581 SrcLangExt lang = getLanguage();
4582 if (!isLinkableInProject()) return;
4583 QCString memLabel;
4584 if (optimizeOutputForC)
4585 {
4586 memLabel=theTranslator->trGlobal(TRUE,TRUE);
4587 }
4588 else if (lang==SrcLangExt::Fortran)
4589 {
4591 }
4592 else
4593 {
4594 memLabel=theTranslator->trMember(TRUE,TRUE);
4595 }
4596 QCString memName = name();
4597 Definition *pd=getOuterScope();
4598 QCString pdName = pd->definitionType()==Definition::TypeClass ?
4599 (toClassDef(pd))->displayName() : pd->name();
4600 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4601 QCString memArgs;
4602 if (!isRelated())
4603 {
4604 if (isObjCMethod())
4605 {
4606 memName = "[" + pd->name() + " " + name() + "]";
4607 }
4608 else
4609 {
4610 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4611 memArgs = argsString();
4612 }
4613 }
4614 const RefItemVector &xrefItems = xrefListItems();
4615 if (sep!="::")
4616 {
4617 memName = substitute(memName,"::",sep);
4618 }
4619 addRefItem(xrefItems,
4620 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4621 memLabel,
4622 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4623}
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:4808
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5900

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

5918{
5919 for (const auto &sx : qualifiers)
5920 {
5921 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5922 if (!alreadyAdded)
5923 {
5924 m_qualifiers.push_back(sx);
5925 }
5926 }
5927}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4625 of file memberdef.cpp.

4626{
4628}
static RequirementManager & instance()
void addRequirementRefsForSymbol(const Definition *symbol)

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

◆ anchor()

QCString MemberDefImpl::anchor ( ) const
overridevirtual

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

Implements Definition.

Definition at line 1767 of file memberdef.cpp.

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

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

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

◆ argsString()

QCString MemberDefImpl::argsString ( ) const
overridevirtual

◆ argumentList()

const ArgumentList & MemberDefImpl::argumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5659 of file memberdef.cpp.

5660{
5661 return m_defArgList;
5662}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5125 of file memberdef.cpp.

5126{
5127 return m_bitfields;
5128}

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

6369{
6370 if (m_templateMaster)
6371 {
6372 return m_templateMaster->briefDescription(abbr);
6373 }
6374 else
6375 {
6377 }
6378}
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 6135 of file memberdef.cpp.

6136{
6139 m_cachedTypedefTemplSpec=templSpec;
6140 m_cachedResolvedType=resolvedType;
6141 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6142}
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 6095 of file memberdef.cpp.

6096{
6097 return m_category;
6098}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6105 of file memberdef.cpp.

6106{
6107 return m_categoryRelation;
6108}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6448 of file memberdef.cpp.

6449{
6450 switch (memberType())
6451 {
6468 }
6470}
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 6144 of file memberdef.cpp.

6145{
6146 {
6147 const ArgumentList &srcAl = bmd->argumentList();
6148 ArgumentList &dstAl = m_defArgList;
6149 auto srcIt = srcAl.begin();
6150 auto dstIt = dstAl.begin();
6151 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6152 {
6153 Argument &argDst = *dstIt;
6154 const Argument &argSrc = *srcIt;
6155 argDst.name = argSrc.name;
6156 argDst.docs = argSrc.docs;
6157 ++srcIt;
6158 ++dstIt;
6159 }
6160 }
6161
6162 {
6163 const ArgumentList &srcAl = bmd->declArgumentList();
6164 ArgumentList &dstAl = m_declArgList;
6165 auto srcIt = srcAl.begin();
6166 auto dstIt = dstAl.begin();
6167
6168 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6169 {
6170 Argument &argDst = *dstIt;
6171 const Argument &argSrc = *srcIt;
6172 argDst.name = argSrc.name;
6173 argDst.docs = argSrc.docs;
6174 ++srcIt;
6175 ++dstIt;
6176 }
6177 }
6178}
virtual const ArgumentList & argumentList() const =0
virtual const ArgumentList & declArgumentList() const =0
ArgumentList m_declArgList
QCString docs
Definition arguments.h:47

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

◆ createTemplateInstanceMember()

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

Implements MemberDef.

Definition at line 4499 of file memberdef.cpp.

4501{
4502 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4503 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4504 if (!m_defArgList.empty())
4505 {
4506 // replace formal arguments with actuals
4507 for (Argument &arg : *actualArgList)
4508 {
4509 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4510 }
4511 actualArgList->setTrailingReturnType(
4512 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4513 }
4514
4515 QCString methodName=name();
4516 if (methodName.startsWith("operator ")) // conversion operator
4517 {
4518 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4519 }
4520
4521 auto imd = createMemberDef(
4523 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4524 methodName,
4525 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4528 ArgumentList(), ArgumentList(), ""
4529 );
4530 auto mmd = toMemberDefMutable(imd.get());
4531 mmd->moveArgumentList(std::move(actualArgList));
4532 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4533 mmd->setBodyDef(getBodyDef());
4534 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4535 mmd->setFormalTemplateArguments(formalArgs);
4536
4537 // TODO: init other member variables (if needed).
4538 // TODO: reimplemented info
4539 return imd;
4540}
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:4349

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

5096{
5097 return m_decl;
5098}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5664 of file memberdef.cpp.

5665{
5666 return m_declArgList;
5667}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1450 of file memberdef.cpp.

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

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

◆ definition()

QCString MemberDefImpl::definition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5100 of file memberdef.cpp.

5101{
5102 return m_def;
5103}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5722 of file memberdef.cpp.

5723{
5724 return m_defTmpArgLists;
5725}

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

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

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

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

6207{
6208 return DefinitionMixin::name();
6209}

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

6381{
6382 if (m_templateMaster)
6383 {
6384 return m_templateMaster->documentation();
6385 }
6386 else
6387 {
6389 }
6390}
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 6120 of file memberdef.cpp.

6121{
6122 return m_enumBaseType;
6123}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5644 of file memberdef.cpp.

5645{
5646 return m_enumFields;
5647}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5120 of file memberdef.cpp.

5121{
5122 return m_exception;
5123}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5105 of file memberdef.cpp.

5106{
5107 return m_extraTypeChars;
5108}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4007 of file memberdef.cpp.

4008{
4009 QCString type = m_accessorType;
4010 if (type.isEmpty())
4011 {
4012 type = m_type;
4013 }
4014
4015 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
4016 return simplifyTypeForTable(type);
4017}
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 4984 of file memberdef.cpp.

4985{
4989}
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 5803 of file memberdef.cpp.

5804{
5806}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6054 of file memberdef.cpp.

6055{
6056 return m_annMemb;
6057}

References m_annMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5737 of file memberdef.cpp.

5738{
5739 return m_annScope;
5740}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5599 of file memberdef.cpp.

5600{
5601 return m_annEnumType;
5602}

References m_annEnumType.

Referenced by writeDeclaration().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5823 of file memberdef.cpp.

5824{
5825 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5826 return m_cachedResolvedType;
5827}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5818 of file memberdef.cpp.

5819{
5821}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5813 of file memberdef.cpp.

5814{
5815 return m_cachedTypedefValue;
5816}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5155 of file memberdef.cpp.

5156{
5157 return m_classDef;
5158}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5160 of file memberdef.cpp.

5161{
5163}
ClassDefMutable * toClassDefMutable(Definition *d)

References m_classDef, and toClassDefMutable().

◆ getClassDefOfAnonymousType()

ClassDef * MemberDefImpl::getClassDefOfAnonymousType ( ) const
overridevirtual

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

Implements MemberDef.

Definition at line 1980 of file memberdef.cpp.

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

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

Referenced by writeDeclaration(), and writeDocumentation().

◆ getDeclColumn()

int MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5859 of file memberdef.cpp.

5860{
5861 return m_declColumn;
5862}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5849 of file memberdef.cpp.

5850{
5851 return m_declFileName;
5852}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5854 of file memberdef.cpp.

5855{
5856 return m_declLine;
5857}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2125 of file memberdef.cpp.

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

5610{
5611 return m_enumScope;
5612}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5649 of file memberdef.cpp.

5650{
5651 return m_examples;
5652}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5170 of file memberdef.cpp.

5171{
5172 return m_fileDef;
5173}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5844 of file memberdef.cpp.

5845{
5846 return m_groupAlias;
5847}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5200 of file memberdef.cpp.

5201{
5202 return m_group;
5203}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5215 of file memberdef.cpp.

5216{
5217 return m_groupFileName;
5218}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5225 of file memberdef.cpp.

5226{
5227 return m_groupHasDocs;
5228}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5210 of file memberdef.cpp.

5211{
5212 return m_grouppri;
5213}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5220 of file memberdef.cpp.

5221{
5222 return m_groupStartLine;
5223}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2822 of file memberdef.cpp.

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

5733{
5734 return m_memberGroup;
5735}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5727 of file memberdef.cpp.

5728{
5729 return m_grpId;
5730}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5140 of file memberdef.cpp.

5141{
5142 return m_memSpec;
5143}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5205 of file memberdef.cpp.

5206{
5207 return m_moduleDef;
5208}

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

5181{
5182 return m_nspace;
5183}

References m_nspace.

◆ getOutputFileBase()

QCString MemberDefImpl::getOutputFileBase ( ) const
overridevirtual

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

Implements Definition.

Definition at line 1660 of file memberdef.cpp.

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

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

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

◆ getQualifiers()

StringVector MemberDefImpl::getQualifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5912 of file memberdef.cpp.

5913{
5914 return m_qualifiers;
5915}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5185 of file memberdef.cpp.

5186{
5187 return m_read;
5188}

References m_read.

◆ getReference()

QCString MemberDefImpl::getReference ( ) const
overridevirtual

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

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1728 of file memberdef.cpp.

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

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

Referenced by anchor(), and writeLink().

◆ getScopeString()

QCString MemberDefImpl::getScopeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4405 of file memberdef.cpp.

4406{
4407 QCString result;
4408 if (isStrong()) result=name();
4409 else if (getClassDef()) result=getClassDef()->displayName();
4410 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4411 return result;
4412}

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

4631{
4632 auto it = m_sectionMap.find(container);
4633 return it!=m_sectionMap.end() ? it->second : nullptr;
4634}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5145 of file memberdef.cpp.

5146{
5147 return m_vhdlSpec;
5148}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5190 of file memberdef.cpp.

5191{
5192 return m_write;
5193}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5760 of file memberdef.cpp.

5761{
5762 return m_hasCallerGraph;
5763}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5742 of file memberdef.cpp.

5743{
5744 return m_hasCallGraph;
5745}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2688 of file memberdef.cpp.

2689{
2690 std::lock_guard<std::mutex> lock(g_hasDetailedDescriptionMutex);
2691 //printf(">hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2693 {
2694 bool extractAll = Config_getBool(EXTRACT_ALL);
2695 bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
2696 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2697 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2698 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2699 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2700 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2701 bool inlineSources = hasInlineSource();
2702
2703 // the member has detailed documentation because the user added some comments
2704 bool docFilter =
2705 // extract all is enabled
2706 extractAll ||
2707 // has detailed docs
2708 !documentation().isEmpty() ||
2709 // has inbody docs
2711 // is an enum with values that are documented
2713 // is documented enum value
2714 (m_mtype==MemberType::EnumValue && !briefDescription().isEmpty()) ||
2715 // has brief description that is part of the detailed description
2716 (!briefDescription().isEmpty() && // has brief docs
2717 (alwaysDetailedSec && // they are visible in
2718 (repeatBrief || // detailed section or
2719 !briefMemberDesc // they are explicitly not
2720 ) // shown in brief section
2721 )
2722 ) ||
2723 // has one or more documented arguments
2725 m_templateMaster->argumentList().hasDocumentation() :
2726 m_defArgList.hasDocumentation()) ||
2728 m_templateMaster->templateArguments().hasTemplateDocumentation() :
2729 m_tArgList.hasTemplateDocumentation()) ||
2730 // user-specified qualifiers
2731 !m_qualifiers.empty();
2732
2733 // generate function guard
2734 // ================== =======
2735 // _writeGroupInclude -> ignored in calculation
2736 // multiLineInitializer() -> hasMultiLineInitializer()
2737 // _writeReimplements -> _isReimplements()
2738 // _writeReimplementedBy -> _countReimplementedBy()>0
2739 // _writeExamples -> hasExamples()
2740 // _writeTypeConstraints -> m_typeConstraints.hasParameters()
2741 // writeSourceDef -> !getSourceFileBase().isEmpty();
2742 // writeInlineCode -> hasInlineSource() && hasSources()
2743 // writeSourceRefs -> hasReferencesRelation() && hasSourceRefs()
2744 // writeSourceReffedBy -> hasReferencedByRelation() && hasSourceReffedBy()
2745 // _writeCallGraph -> _hasVisibleCallGraph()
2746 // _writeCallerGraph -> _hasVisibleCallerGraph()
2747
2748 // the member has detailed documentation because there is some generated info
2749 bool docInfo =
2750 // has a multi-line initialization block
2752 // reimplements / reimplemented by
2754 // examples
2755 hasExamples() ||
2756 // type constraints
2757 m_typeConstraints.hasParameters() ||
2758 // has source definition
2760 // has inline sources
2761 (inlineSources && hasSources()) ||
2762 // has references
2765 // call graph
2767 // caller graph
2769 // requirement references
2771
2772 if (!hideUndocMembers) // if HIDE_UNDOC_MEMBERS is NO we also show the detailed section
2773 // if there is only some generated info
2774 {
2775 docFilter = docFilter || docInfo;
2776 }
2777
2778 // this is not a global static or global statics should be extracted
2779 bool staticFilter = getClassDef()!=nullptr || !isStatic() || extractStatic;
2780
2781 // a module does not contain details for members, so either the namespace or file should be linkable
2782 bool moduleFilter = getModuleDef()==nullptr || (getFileDef() && getFileDef()->isLinkable()) ||
2784
2785 // only include members that are non-private unless EXTRACT_PRIVATE is
2786 // set to YES or the member is part of a group
2787 bool privateFilter = protectionLevelVisible(protection()) || m_mtype==MemberType::Friend ||
2788 (m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual);
2789
2790 // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
2791 // is true
2792 bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend());
2793
2795 (docFilter && staticFilter && moduleFilter && privateFilter && friendCompoundFilter && !isHidden());
2796 //printf("docFilter=%d docInfo=%d staticFilter=%d privateFilter=%d friendCompoundFilter=%d !isHidden()=%d",
2797 // docFilter,docInfo,staticFilter,privateFilter,friendCompoundFilter,!isHidden());
2799 }
2800 //printf("<hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2802}
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 4392 of file memberdef.cpp.

4393{
4395 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4396 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4397}
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 5594 of file memberdef.cpp.

5595{
5596 return m_docEnumValues;
5597}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5793 of file memberdef.cpp.

5794{
5795 return m_hasEnumValues;
5796}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1635 of file memberdef.cpp.

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

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5788 of file memberdef.cpp.

5789{
5790 return m_hasInlineSource;
5791}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4553 of file memberdef.cpp.

4554{
4555 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4556 // initLines,userInitLines,maxInitLines);
4557 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4558 return (m_initLines>0 || (!m_initializer.isEmpty() && isFuncLikeMacro)) &&
4559 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4560 || m_initLines<m_userInitLines // explicitly enabled
4561 );
4562}

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

4543{
4544 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4545 // qPrint(name()),qPrint(m_initializer),m_initLines,
4546 // m_maxInitLines,m_userInitLines);
4547 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4548 return !m_initializer.isEmpty() && m_initLines==0 && // one line initializer
4549 !isFuncLikeMacro &&
4550 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4551}

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

5779{
5781}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5783 of file memberdef.cpp.

5784{
5786}

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

6393{
6394 if (m_templateMaster)
6395 {
6396 return m_templateMaster->hasUserDocumentation();
6397 }
6398 else
6399 {
6401 }
6402}
bool hasUserDocumentation() const override

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6194 of file memberdef.cpp.

6195{
6197}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5839 of file memberdef.cpp.

5840{
5841 return m_docProvider;
5842}

References m_docProvider.

◆ init()

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

Definition at line 1327 of file memberdef.cpp.

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

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

Referenced by MemberDefImpl(), and writeDocumentation().

◆ initializer()

const QCString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5130 of file memberdef.cpp.

5131{
5132 return m_initializer;
5133}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5135 of file memberdef.cpp.

5136{
5137 return m_initLines;
5138}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1624 of file memberdef.cpp.

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

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1579 of file memberdef.cpp.

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

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

◆ invalidateCachedArgumentTypes()

void MemberDefImpl::invalidateCachedArgumentTypes ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6188 of file memberdef.cpp.

6189{
6192}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6080 of file memberdef.cpp.

6081{
6083}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5430 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5380 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5455 of file memberdef.cpp.

5456{
5457 return m_memSpec.isAssign();
5458}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5512 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5527 of file memberdef.cpp.

5528{
5529 return m_memSpec.isBound();
5530}

References m_memSpec.

Referenced by getLabels().

◆ isBriefSectionVisible()

bool MemberDefImpl::isBriefSectionVisible ( ) const
overridevirtual

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

Implements MemberDef.

Definition at line 2032 of file memberdef.cpp.

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

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

Referenced by writeEnumDeclaration().

◆ isCallable()

bool MemberDefImpl::isCallable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5578 of file memberdef.cpp.

5579{
5580 return isFunction() ||
5581 isSlot() ||
5582 isSignal() ||
5583 isConstructor() ||
5584 isDestructor() ||
5585 isObjCMethod() ||
5586 isFriend();
5587}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5634 of file memberdef.cpp.

5635{
5636 return m_memSpec.isConstEval();
5637}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5629 of file memberdef.cpp.

5630{
5631 return m_memSpec.isConstExpr();
5632}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5639 of file memberdef.cpp.

5640{
5641 return m_memSpec.isConstInit();
5642}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5532 of file memberdef.cpp.

5533{
5534 return m_memSpec.isConstrained();
5535}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4776 of file memberdef.cpp.

4777{
4778 if (m_isConstructorCached==0)
4779 {
4780 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4781 that->_computeIsConstructor();
4782 }
4784 return m_isConstructorCached==2;
4785
4786}
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 5450 of file memberdef.cpp.

5451{
5452 return m_memSpec.isCopy();
5453}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5037 of file memberdef.cpp.

5038{
5039 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return TRUE;
5040 return FALSE;
5041}
bool isProperty() const override

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

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5300 of file memberdef.cpp.

5301{
5302 return m_mtype==MemberType::DCOP;
5303}

References DCOP, and m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5497 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5290 of file memberdef.cpp.

5291{
5293}

References Define, and m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5502 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4387 of file memberdef.cpp.

4388{
4389 return m_defArgList.isDeleted();
4390}

References m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4817 of file memberdef.cpp.

4818{
4819 if (m_isDestructorCached==0)
4820 {
4821 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4822 that->_computeIsDestructor();
4823 }
4825 return m_isDestructorCached==2;
4826}
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 2804 of file memberdef.cpp.

2805{
2806 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2807 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2808 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2809 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2810 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2811 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2812 getClassDef()!=nullptr && getClassDef()->isSimple();
2813
2814 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2815 !isReference();
2816 bool result = visible || simpleFilter;
2817 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2818 // qPrint(name()),result,groupFilter,fileFilter);
2819 return result;
2820}
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 5275 of file memberdef.cpp.

5276{
5278}

References Dictionary, and m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5604 of file memberdef.cpp.

5605{
5606 return m_docsForDefinition;
5607}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4377 of file memberdef.cpp.

4378{
4379 ClassDef *fcd=nullptr;
4380 QCString baseName=name();
4381 int i=baseName.find('<');
4382 if (i!=-1) baseName=baseName.left(i);
4383 return (isFriendClass() &&
4384 (fcd=getClass(baseName)) && fcd->isLinkable());
4385}
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 5475 of file memberdef.cpp.

5476{
5477 return m_memSpec.isEnumStruct();
5478}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5260 of file memberdef.cpp.

5261{
5263}

References EnumValue, and m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5310 of file memberdef.cpp.

5311{
5312 return m_mtype==MemberType::Event;
5313}

References Event, and m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5335 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5568 of file memberdef.cpp.

5569{
5570 return m_explExt;
5571}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5405 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5320 of file memberdef.cpp.

5321{
5322 return m_related == Relationship::Foreign;
5323}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6419 of file memberdef.cpp.

6420{
6421 return (isFriend() &&
6422 (m_type=="friend class" || m_type=="friend struct" ||
6423 m_type=="friend union"));
6424}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6409 of file memberdef.cpp.

6410{
6411 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6412 bool isFriendToHide = hideFriendCompounds &&
6413 (m_type=="friend class" ||
6414 m_type=="friend struct" ||
6415 m_type=="friend union");
6416 return isFriendToHide;
6417}
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 6432 of file memberdef.cpp.

6433{
6434 return isFunction() || isSlot() || isSignal();
6435}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5285 of file memberdef.cpp.

5286{
5287 return m_mtype==MemberType::Variable && QCString(argsString()).find(")(")!=-1;
5288}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5350 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5563 of file memberdef.cpp.

5564{
5565 return m_implOnly;
5566}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5425 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5330 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isLinkable()

bool MemberDefImpl::isLinkable ( ) const
overridevirtual

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

Implements Definition.

Definition at line 1904 of file memberdef.cpp.

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

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

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

◆ isLinkableInProject()

bool MemberDefImpl::isLinkableInProject ( ) const
overridevirtual

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

Implements Definition.

Definition at line 1893 of file memberdef.cpp.

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

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

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

◆ isMaybeAmbiguous()

bool MemberDefImpl::isMaybeAmbiguous ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5552 of file memberdef.cpp.

5553{
5554 return m_memSpec.isMaybeAmbiguous();
5555}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5547 of file memberdef.cpp.

5548{
5549 return m_memSpec.isMaybeDefault();
5550}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5542 of file memberdef.cpp.

5543{
5544 return m_memSpec.isMaybeVoid();
5545}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5340 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5410 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5624 of file memberdef.cpp.

5625{
5626 return m_memSpec.isNoDiscard();
5627}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5507 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5445 of file memberdef.cpp.

5446{
5447 return m_memSpec.isNonAtomic();
5448}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6427 of file memberdef.cpp.

6428{
6429 return !(isFriend() && isFriendToHide());
6430}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5025 of file memberdef.cpp.

5026{
5027 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return TRUE;
5028 return FALSE;
5029}

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

5032{
5033 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return TRUE;
5034 return FALSE;
5035}

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

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5435 of file memberdef.cpp.

5436{
5437 return m_memSpec.isOptional();
5438}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5420 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5355 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5370 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5305 of file memberdef.cpp.

5306{
5308}

References m_mtype, and Property.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5360 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5375 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5654 of file memberdef.cpp.

5655{
5656 return m_proto;
5657}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5557 of file memberdef.cpp.

5558{
5559 return m_memSpec.isPublished();
5560}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5390 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5395 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5522 of file memberdef.cpp.

5523{
5524 return m_memSpec.isReadonly();
5525}

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

6443{
6445 (m_templateMaster && m_templateMaster->isReference());
6446}
bool isReference() const override

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

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

◆ isReimplementedBy()

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

Implements MemberDef.

Definition at line 1605 of file memberdef.cpp.

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

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

◆ isRelated()

bool MemberDefImpl::isRelated ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5315 of file memberdef.cpp.

5316{
5317 return m_related == Relationship::Related;
5318}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6437 of file memberdef.cpp.

6438{
6439 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6440}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5385 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5440 of file memberdef.cpp.

5441{
5442 return m_memSpec.isRequired();
5443}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5460 of file memberdef.cpp.

5461{
5462 return m_memSpec.isRetain();
5463}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5415 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5270 of file memberdef.cpp.

5271{
5273}

References m_mtype, and Sequence.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5365 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5240 of file memberdef.cpp.

5241{
5243}

References m_mtype, and Signal.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5619 of file memberdef.cpp.

5620{
5621 return m_memSpec.isLocal();
5622}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5245 of file memberdef.cpp.

5246{
5247 return m_mtype==MemberType::Slot;
5248}

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

5471{
5472 return m_memSpec.isStrong();
5473}

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5480 of file memberdef.cpp.

5481{
5483 m_enumScope &&
5484 m_enumScope->isStrong();
5485}

References EnumValue, m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5573 of file memberdef.cpp.

5574{
5575 return m_tspec;
5576}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5345 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5537 of file memberdef.cpp.

5538{
5539 return m_memSpec.isTransient();
5540}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5492 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5265 of file memberdef.cpp.

5266{
5268}

References m_mtype, and Typedef.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5808 of file memberdef.cpp.

5809{
5810 return m_isTypedefValCached;
5811}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5517 of file memberdef.cpp.

5518{
5519 return m_memSpec.isProperty();
5520}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5487 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5250 of file memberdef.cpp.

5251{
5253}

References m_mtype, and Variable.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5465 of file memberdef.cpp.

5466{
5467 return m_memSpec.isWeak();
5468}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5400 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5614 of file memberdef.cpp.

5615{
5616 return m_livesInsideEnum;
5617}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5963 of file memberdef.cpp.

5964{
5965 m_related = Relationship::Foreign;
5967}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6039 of file memberdef.cpp.

6040{
6042}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5957 of file memberdef.cpp.

5958{
5959 m_related = Relationship::Related;
5961}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5834 of file memberdef.cpp.

5835{
5836 return m_memDec;
5837}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5829 of file memberdef.cpp.

5830{
5831 return m_memDef;
5832}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5235 of file memberdef.cpp.

5236{
5237 return m_mtype;
5238}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4133 of file memberdef.cpp.

4134{
4135 switch (m_mtype)
4136 {
4137 case MemberType::Define: return "macro definition";
4138 case MemberType::Function: return "function";
4139 case MemberType::Variable: return "variable";
4140 case MemberType::Typedef: return "typedef";
4141 case MemberType::Enumeration: return "enumeration";
4142 case MemberType::EnumValue: return "enumvalue";
4143 case MemberType::Signal: return "signal";
4144 case MemberType::Slot: return "slot";
4145 case MemberType::Friend: return "friend";
4146 case MemberType::DCOP: return "dcop";
4147 case MemberType::Property: return "property";
4148 case MemberType::Event: return "event";
4149 case MemberType::Interface: return "interface";
4150 case MemberType::Service: return "service";
4151 case MemberType::Sequence: return "sequence";
4152 case MemberType::Dictionary: return "dictionary";
4153 default: return "unknown";
4154 }
4155}

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

5908{
5909 m_memSpec.merge(s);
5910}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4953 of file memberdef.cpp.

4954{
4955 m_defArgList = *al;
4956}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4958 of file memberdef.cpp.

4959{
4960 m_declArgList = *al;
4961}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1550 of file memberdef.cpp.

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

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

◆ numberOfFlowKeyWords()

int MemberDefImpl::numberOfFlowKeyWords ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6199 of file memberdef.cpp.

6200{
6201 return m_numberOfFlowKW;
6202}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5078 of file memberdef.cpp.

5079{
5080 QCString qm;
5081 if (showStatic)
5082 {
5083 if (isStatic()) qm="+ "; else qm="- ";
5084 }
5085 qm+=name();
5086 if (!localLink) // link to method of same class
5087 {
5088 qm+=" (";
5089 qm+=getClassDef()->name();
5090 qm+=")";
5091 }
5092 return qm;
5093}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4997 of file memberdef.cpp.

4998{
5001}
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 4991 of file memberdef.cpp.

4992{
4995}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 5015 of file memberdef.cpp.

5016{
5018}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 5020 of file memberdef.cpp.

5021{
5023}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 5003 of file memberdef.cpp.

5004{
5007}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 5009 of file memberdef.cpp.

5010{
5013}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5230 of file memberdef.cpp.

5231{
5232 return m_prot;
5233}

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

5044{
5045 if (isObjCMethod())
5046 {
5047 QCString qm;
5048 if (isStatic()) qm="+"; else qm="-";
5049 qm+="[";
5050 qm+=getClassDef()->name()+" ";
5051 qm+=name();
5052 qm+="]";
5053 return qm;
5054 }
5055 else if (m_enumScope && m_enumScope->isStrong())
5056 {
5057 return m_enumScope->qualifiedName()+
5059 localName();
5060 }
5061 else
5062 {
5064 }
5065}
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 6472 of file memberdef.cpp.

6473{
6474 return m_redefineCount;
6475}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1600 of file memberdef.cpp.

1601{
1602 return m_redefinedBy;
1603}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1595 of file memberdef.cpp.

1596{
1597 return m_redefines;
1598}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5589 of file memberdef.cpp.

5590{
5591 return m_relatedAlso;
5592}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6130 of file memberdef.cpp.

6131{
6132 return m_requiresClause;
6133}

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

5670{
5671 ArgumentList &decAl = m_declArgList;
5672 ArgumentList &defAl = m_defArgList;
5673 const ArgumentList &decAlSrc = md->declArgumentList();
5674 const ArgumentList &defAlSrc = md->argumentList();
5675 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5676 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5677 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5678 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5679 {
5680 Argument &decA = *decIt;
5681 Argument &defA = *defIt;
5682 const Argument &decAS = *decSrc;
5683 const Argument &defAS = *defSrc;
5684 if (decA.name.isEmpty())
5685 {
5686 if (!defA.name.isEmpty())
5687 {
5688 decA.name = defA.name;
5689 }
5690 else if (!decAS.name.isEmpty())
5691 {
5692 decA.name = decAS.name;
5693 }
5694 else if (!defAS.name.isEmpty())
5695 {
5696 decA.name = defAS.name;
5697 }
5698 }
5699 if (defA.name.isEmpty())
5700 {
5701 if (!decA.name.isEmpty())
5702 {
5703 defA.name = decA.name;
5704 }
5705 else if (!decAS.name.isEmpty())
5706 {
5707 defA.name = decAS.name;
5708 }
5709 else if (!defAS.name.isEmpty())
5710 {
5711 defA.name = defAS.name;
5712 }
5713 }
5714 }
5715}

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

4974{
4975 m_accessorClass = cd;
4976 m_accessorType = t;
4977}

References m_accessorClass, and m_accessorType.

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4414 of file memberdef.cpp.

4415{
4416 QCString memAnchor = name();
4417 if (!m_args.isEmpty()) memAnchor+=m_args;
4418 if (m_memSpec.isAlias()) // this is for backward compatibility
4419 {
4420 memAnchor.prepend(" = "+m_initializer);
4421 }
4422 memAnchor.prepend(definition()); // actually the method name is now included
4423 // twice, which is silly, but we keep it this way for backward
4424 // compatibility.
4425
4426 // include number of template arguments as well,
4427 // to distinguish between two template
4428 // specializations that only differ in the template parameters.
4429 if (m_tArgList.hasParameters())
4430 {
4431 char buf[20];
4432 qsnprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4433 buf[19]='\0';
4434 memAnchor.prepend(buf);
4435 }
4436 if (!m_requiresClause.isEmpty())
4437 {
4438 memAnchor+=" "+m_requiresClause;
4439 }
4440 if (m_redefineCount>0)
4441 {
4442 char buf[20];
4443 qsnprintf(buf,20,":%d",m_redefineCount);
4444 buf[19]='\0';
4445 memAnchor.append(buf);
4446 }
4447
4448 // convert to md5 hash
4449 uint8_t md5_sig[16];
4450 char sigStr[33];
4451 MD5Buffer(memAnchor.data(),static_cast<unsigned int>(memAnchor.length()),md5_sig);
4452 MD5SigToString(md5_sig,sigStr);
4453 m_anc = QCString("a")+sigStr;
4454}
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 5996 of file memberdef.cpp.

5997{
5998 m_annEnumType = md;
5999}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5974 of file memberdef.cpp.

5975{
5976 m_args = as;
5977}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5929 of file memberdef.cpp.

5930{
5931 m_bitfields = QCString(s).simplifyWhiteSpace();
5932}

References m_bitfields, and QCString::simplifyWhiteSpace().

◆ setBriefDescription()

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

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

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1875 of file memberdef.cpp.

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

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

◆ setCategory()

void MemberDefImpl::setCategory ( ClassDef * def)
overridevirtual

Implements MemberDefMutable.

Definition at line 6100 of file memberdef.cpp.

6101{
6102 m_category = def;
6103}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6110 of file memberdef.cpp.

6111{
6112 m_categoryRelation = md;
6113}

References m_categoryRelation.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 6027 of file memberdef.cpp.

6028{
6029 m_declFileName = df;
6030 m_declLine = line;
6031 m_declColumn = column;
6032}

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

5874{
5875 m_def=d;
5876}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1917 of file memberdef.cpp.

1918{
1919 m_defTmpArgLists = lists;
1920}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6070 of file memberdef.cpp.

6071{
6073}

References m_docsForDefinition.

◆ setDocumentation()

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

Sets the documentation of this definition to d.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1869 of file memberdef.cpp.

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

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

◆ setDocumentedEnumValues()

void MemberDefImpl::setDocumentedEnumValues ( bool value)
overridevirtual

Implements MemberDefMutable.

Definition at line 5991 of file memberdef.cpp.

5992{
5993 m_docEnumValues=value;
5994}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6115 of file memberdef.cpp.

6116{
6117 m_enumBaseType = type;
6118}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5984 of file memberdef.cpp.

5985{
5986 m_classDef = cd;
5989}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4470 of file memberdef.cpp.

4471{
4472 m_enumScope=md;
4474 if (md->getGroupDef())
4475 {
4476 m_group = md->getGroupDef();
4477 m_grouppri = md->getGroupPri();
4482 }
4483}
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 6014 of file memberdef.cpp.

6015{
6016 m_explExt=b;
6017 if (b)
6018 {
6019 setDeclFile(df,line,column);
6020 }
6021 else
6022 {
6023 setDefFile(df,line,column);
6024 }
6025}
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 5878 of file memberdef.cpp.

5879{
5880 m_fileDef=fd;
5884}

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

6066{
6068}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 6049 of file memberdef.cpp.

6050{
6051 m_annMemb=m;
6052}

References m_annMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6044 of file memberdef.cpp.

6045{
6046 m_annScope=b;
6047}

References m_annScope.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6075 of file memberdef.cpp.

6076{
6077 m_groupAlias = md;
6078}

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

4459{
4460 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4461 m_group=gd;
4462 m_grouppri=pri;
4463 m_groupFileName=fileName;
4464 m_groupStartLine=startLine;
4465 m_groupHasDocs=hasDocs;
4466 m_groupMember=member;
4468}

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

◆ setHidden()

void MemberDefImpl::setHidden ( bool b)
overridevirtual

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1887 of file memberdef.cpp.

1888{
1891}
void setHidden(bool b) override

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

◆ setInbodyDocumentation()

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

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

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1881 of file memberdef.cpp.

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

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

◆ setInheritsDocsFrom()

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

Implements MemberDefMutable.

Definition at line 5969 of file memberdef.cpp.

5970{
5971 m_docProvider = md;
5972}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4564 of file memberdef.cpp.

4565{
4566 size_t indent=0;
4568 int l=static_cast<int>(m_initializer.length());
4569 int p=l-1;
4570 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4571 m_initializer=m_initializer.left(p+1);
4572 m_initLines=m_initializer.contains('\n');
4574
4575 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4576}
const QCString & initializer() const override
void stripIndentationVerbatim(QCString &doc, const int indentationLevel, bool skipFirstLine)
Definition util.cpp:6041
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6723

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

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5934 of file memberdef.cpp.

5935{
5936 if (lines!=-1)
5937 {
5938 m_userInitLines=lines;
5939 }
5940}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6090 of file memberdef.cpp.

6091{
6092 m_memDec=md;
6093}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6085 of file memberdef.cpp.

6086{
6087 m_memDef=md;
6088}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4400 of file memberdef.cpp.

4401{
4402 m_memberGroup = grp;
4403}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 6034 of file memberdef.cpp.

6035{
6036 m_grpId=id;
6037}
virtual QCString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5897 of file memberdef.cpp.

5898{
5899 m_memSpec=s;
5900}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5867 of file memberdef.cpp.

5868{
5869 m_mtype=t;
5871}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5886 of file memberdef.cpp.

5887{
5888 m_moduleDef=mod;
5889}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4493 of file memberdef.cpp.

4494{
4495 m_nspace=nd;
4496 setOuterScope(nd);
4497}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5891 of file memberdef.cpp.

5892{
5893 m_prot=p;
5895}

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

6002{
6003 m_proto=p;
6004 if (p)
6005 {
6006 setDeclFile(df,line,column);
6007 }
6008 else
6009 {
6010 setDefFile(df,line,column);
6011 }
6012}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5942 of file memberdef.cpp.

5943{
5944 m_read=r;
5945}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6477 of file memberdef.cpp.

6478{
6479 m_redefineCount=count;
6480}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1574 of file memberdef.cpp.

1575{
1576 m_redefines = md;
1577}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5979 of file memberdef.cpp.

5980{
5981 m_relatedAlso=cd;
5982}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6125 of file memberdef.cpp.

6126{
6127 m_requiresClause = req;
6128}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4636 of file memberdef.cpp.

4637{
4638 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4639 m_sectionMap.emplace(container,sl);
4640}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 5067 of file memberdef.cpp.

5068{
5069 if (ti)
5070 {
5071 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5072 m_anc=ti->anchor;
5073 setReference(ti->tagName);
5075 }
5076}
void setReference(const QCString &r) override
QCString stripExtension(const QCString &fName)
Definition util.cpp:4927

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

6060{
6063}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5952 of file memberdef.cpp.

5953{
5954 m_tspec=b;
5955}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4968 of file memberdef.cpp.

4969{
4970 m_type = t;
4971}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4963 of file memberdef.cpp.

4964{
4965 m_typeConstraints = al;
4966}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5902 of file memberdef.cpp.

5903{
5904 m_vhdlSpec=s;
5905}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5947 of file memberdef.cpp.

5948{
5949 m_write=w;
5950}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1640 of file memberdef.cpp.

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

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

◆ templateArguments()

const ArgumentList & MemberDefImpl::templateArguments ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5717 of file memberdef.cpp.

5718{
5719 return m_tArgList;
5720}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5798 of file memberdef.cpp.

5799{
5800 return m_templateMaster;
5801}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6404 of file memberdef.cpp.

6405{
6406 return m_typeConstraints;
6407}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5110 of file memberdef.cpp.

5111{
5112 return m_type;
5113}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4642 of file memberdef.cpp.

4643{
4644 if (count>25)
4645 {
4647 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4648 return Specifier::Normal;
4649 }
4650 Specifier v = m_virt;
4651 const MemberDef *rmd = reimplements();
4652 while (rmd && v==Specifier::Normal)
4653 {
4654 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4655 rmd = rmd->reimplements();
4656 }
4657 return v;
4658}
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 4229 of file memberdef.cpp.

4230{
4231 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4232 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4233 return (!isAnonymous() &&
4234 (!hideUndocMembers || hasDocumentation()) &&
4235 (!isStatic() || extractStatic) &&
4236 isLinkable()
4237 );
4238}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4157 of file memberdef.cpp.

4158{
4159 /*
4160 * Removed bug_303020:
4161 * if (m_memberGroup) return;
4162 */
4163 const ClassDef *cd = getClassDef();
4164 const NamespaceDef *nd = getNamespaceDef();
4165 const FileDef *fd = getFileDef();
4166 const GroupDef *gd = getGroupDef();
4167 const Definition *d=nullptr;
4168 QCString t;
4169 if (cd)
4170 {
4171 t=cd->compoundTypeString();
4172 d=cd;
4173 }
4174 else if (nd)
4175 {
4176 t=nd->compoundTypeString();
4177 d=nd;
4178 }
4179 else if (gd)
4180 {
4181 t="group";
4182 d=gd;
4183 }
4184 else
4185 {
4186 t="file";
4187 d=fd;
4188 }
4189 bool extractAll = Config_getBool(EXTRACT_ALL);
4190
4191 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4192 // qPrint(name()),
4193 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4194 if ((!hasUserDocumentation() && !extractAll) &&
4195 !isFriendClass() &&
4196 name().find('@')==-1 && d && d->name().find('@')==-1 &&
4199 !isReference() && !isDeleted()
4200 )
4201 {
4202 SrcLangExt lang = getLanguage();
4203 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4204 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4206 substitute(d->name(),"::",sep));
4207 }
4208 else if (!hasDetailedDescription())
4209 {
4211 }
4212
4213 // if it is an enum, we check that its members are documented
4214 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4215 {
4216 for (const auto &fmd : enumFieldList())
4217 {
4218 if (!fmd->isLinkableInProject())
4219 {
4220 SrcLangExt lang = getLanguage();
4221 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4222 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4223 qualifiedName(),sep,fmd->name());
4224 }
4225 }
4226 }
4227}
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 4319 of file memberdef.cpp.

4320{
4321 QCString returnType = typeString();
4322 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4323 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=-1;
4324
4325 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4326 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4327 {
4328 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4329 if (!defArgList.trailingReturnType().isEmpty())
4330 {
4331 QCString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4332 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4333 }
4334 }
4335 if (!Config_getBool(EXTRACT_ALL) &&
4336 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4337 Config_getBool(WARN_NO_PARAMDOC) &&
4338 isFunction() &&
4339 !isDeleted() &&
4340 !isReference() &&
4342 {
4344 {
4346 "parameters of member {} are not documented",
4347 qualifiedName());
4348 }
4350 hasDocumentation() && !returnType.isEmpty() &&
4351 !( // not one of the cases where nothing is returned
4352 isVoidReturn || // void return type
4353 isFortranSubroutine || // fortran subroutine
4354 isConstructor() || // a constructor
4355 isDestructor() || // or a destructor
4356 isFriend() // or a friend
4357 )
4358 )
4359 {
4361 "return type of member {} is not documented",
4362 qualifiedName());
4363 }
4364 }
4365 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4367 (isVoidReturn || // void return type
4368 isFortranSubroutine || // fortran subroutine
4369 isConstructor() || // a constructor
4370 isDestructor())) // or destructor
4371 {
4372 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4373 qualifiedName());
4374 }
4375}
QCString trailingReturnType() const
Definition arguments.h:114
static bool suppressDocWarnings
Definition doxygen.h:131
bool isDocsForDefinition() const override
bool endsWith(const char *s) const
Definition qcstring.h:524
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112

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

Referenced by warnIfUndocumented(), and writeDocumentation().

◆ writeDeclaration()

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

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

Implements MemberDef.

Definition at line 2232 of file memberdef.cpp.

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

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

◆ writeDocumentation()

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

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

Implements MemberDefMutable.

Definition at line 3492 of file memberdef.cpp.

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

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

◆ writeEnumDeclaration()

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

Implements MemberDef.

Definition at line 4828 of file memberdef.cpp.

4830{
4831 int enumMemCount=0;
4832
4833 uint32_t numVisibleEnumValues=0;
4834 for (const auto &fmd : m_enumFields)
4835 {
4836 if (fmd->isBriefSectionVisible()) numVisibleEnumValues++;
4837 }
4838 if (numVisibleEnumValues==0 && !isBriefSectionVisible())
4839 {
4840 return;
4841 }
4842
4843 QCString n = name();
4844 int i=n.findRev("::");
4845 if (i!=-1) n=n.right(n.length()-i-2); // strip scope (TODO: is this needed?)
4846 if (n[0]!='@') // not an anonymous enum
4847 {
4849 {
4850 //_writeTagData(compoundType);
4851 writeLink(typeDecl,cd,nd,fd,gd,mod);
4852 }
4853 else
4854 {
4855 typeDecl.startBold();
4856 typeDecl.docify(n);
4857 typeDecl.endBold();
4858 }
4859 typeDecl.writeChar(' ');
4860 }
4861 if (!m_enumBaseType.isEmpty())
4862 {
4863 typeDecl.writeChar(':');
4864 typeDecl.writeChar(' ');
4865 typeDecl.docify(m_enumBaseType);
4866 typeDecl.writeChar(' ');
4867 }
4868
4869 uint32_t enumValuesPerLine = static_cast<uint32_t>(Config_getInt(ENUM_VALUES_PER_LINE));
4870 if (numVisibleEnumValues>0 && enumValuesPerLine>0)
4871 {
4872 typeDecl.docify("{ ");
4873
4874 auto it = m_enumFields.begin();
4875 if (it!=m_enumFields.end())
4876 {
4877 const MemberDef *fmd=*it;
4878 bool fmdVisible = fmd->isBriefSectionVisible();
4879 bool first=true;
4880 while (fmd)
4881 {
4882 if (fmdVisible)
4883 {
4884 if (!first)
4885 {
4886 typeDecl.writeString(", ");
4887 }
4888 /* in html we start a new line after a number of items */
4889 if (numVisibleEnumValues>enumValuesPerLine
4890 && (enumMemCount%enumValuesPerLine)==0
4891 )
4892 {
4893 typeDecl.pushGeneratorState();
4895 typeDecl.enable(OutputType::Latex);
4896 typeDecl.enable(OutputType::Docbook);
4897 typeDecl.lineBreak();
4898 typeDecl.disable(OutputType::Latex);
4899 typeDecl.disable(OutputType::Docbook);
4900 typeDecl.writeString("&#160;&#160;");
4901 typeDecl.popGeneratorState();
4902 }
4903
4904 if (fmd->hasDocumentation()) // enum value has docs
4905 {
4906 fmd->writeLink(typeDecl,cd,nd,fd,gd,mod);
4907 }
4908 else // no docs for this enum value
4909 {
4910 typeDecl.startBold();
4911 typeDecl.docify(fmd->name());
4912 typeDecl.endBold();
4913 }
4914 if (fmd->hasOneLineInitializer()) // enum value has initializer
4915 {
4916 //typeDecl.writeString(" = ");
4917 typeDecl.writeString(" ");
4918 typeDecl.parseText(fmd->initializer());
4919 }
4920 first=false;
4921 }
4922
4923 bool prevVisible = fmdVisible;
4924 ++it;
4925 if (it!=m_enumFields.end())
4926 {
4927 fmd=*it;
4928 }
4929 else
4930 {
4931 fmd=nullptr;
4932 }
4933 if (prevVisible)
4934 {
4935 typeDecl.disable(OutputType::Man);
4936 typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
4937 typeDecl.enable(OutputType::Man);
4938 enumMemCount++;
4939 }
4940 }
4941 if (numVisibleEnumValues>enumValuesPerLine)
4942 {
4943 typeDecl.pushGeneratorState();
4945 typeDecl.lineBreak();
4946 typeDecl.popGeneratorState();
4947 }
4948 }
4949 typeDecl.docify(" }");
4950 }
4951}
virtual bool hasDocumentation() const =0
virtual bool hasOneLineInitializer() const =0
virtual bool isBriefSectionVisible() const =0
virtual const QCString & initializer() const =0
bool isBriefSectionVisible() const override
void writeChar(char c)
Definition outputlist.h:529

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

◆ writeLink()

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

Implements MemberDef.

Definition at line 1922 of file memberdef.cpp.

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

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

Referenced by writeDeclaration(), and writeEnumDeclaration().

◆ writeMemberDocSimple()

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

Implements MemberDefMutable.

Definition at line 4019 of file memberdef.cpp.

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

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

◆ writeTagFile()

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

Implements MemberDefMutable.

Definition at line 4660 of file memberdef.cpp.

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

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: