Doxygen
Loading...
Searching...
No Matches
MemberDefImpl Class Referencefinal
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
bool isDocTransferDone () 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 setDocTransferDone () 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
bool m_docTransferDone = false
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 1450 of file memberdef.cpp.

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

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

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

◆ ~MemberDefImpl()

MemberDefImpl::~MemberDefImpl ( )
overridedefault

References MemberDefImpl().

Member Function Documentation

◆ _computeIsConstructor()

void MemberDefImpl::_computeIsConstructor ( )
private

Definition at line 4692 of file memberdef.cpp.

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

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

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

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

References AUTO_TRACE, AUTO_TRACE_ADD, Config_getBool, 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 3063 of file memberdef.cpp.

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

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

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

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

2234{
2235 return !m_bitfields.isEmpty() && name().startsWith("__pad"); // anonymous bitfield
2236}
QCString m_bitfields
bool startsWith(const char *s) const
Definition qcstring.h:511

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

Referenced by warnIfUndocumented(), and writeDeclaration().

◆ _isReimplements()

bool MemberDefImpl::_isReimplements ( ) const
private

Definition at line 2990 of file memberdef.cpp.

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

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

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

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

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

3193{
3194 // write the list of examples that use this member
3195 if (hasExamples())
3196 {
3197 ol.startExamples();
3198 ol.startDescForItem();
3200 ol.endDescForItem();
3201 ol.endExamples();
3202 }
3203}
ExampleList m_examples
bool hasExamples() const override
void endDescForItem()
Definition outputlist.h:549
void endExamples()
Definition outputlist.h:580
void startExamples()
Definition outputlist.h:578
void startDescForItem()
Definition outputlist.h:547
void writeExamples(OutputList &ol, const ExampleList &list)
Definition util.cpp:1175

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

Referenced by writeDocumentation().

◆ _writeGroupInclude()

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

Definition at line 3392 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeMultiLineInitializer()

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

Definition at line 3444 of file memberdef.cpp.

3445{
3446 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3447 ol.startBold();
3448 if (m_mtype==MemberType::Define)
3450 else
3452 ol.endBold();
3453 QCString langCorrected = getDefFileExtension();
3455 if (srcLangExt == SrcLangExt::Lex)
3456 {
3457 langCorrected = ".doxygen_lex_c";
3458 srcLangExt = SrcLangExt::Cpp;
3459 }
3460 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3461 intf->resetCodeParserState();
3462 auto &codeOL = ol.codeGenerators();
3463 codeOL.startCodeFragment("DoxyCode");
3464 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3465 CodeParserOptions()
3467 .setInlineFragment(true)
3468 .setMemberDef(this)
3469 .setShowLineNumbers(false)
3470 .setSearchCtx(this)
3471 );
3472 codeOL.endCodeFragment("DoxyCode");
3473}
QCString getDefFileExtension() const override
static ParserManager * parserManager
Definition doxygen.h:129
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:5231

References OutputList::codeGenerators(), Config_getBool, 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 3080 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeReimplements()

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

Definition at line 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 ol.startParagraph();
3014 QCString reimplFromLine;
3015 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
3016 {
3017 reimplFromLine = theTranslator->trReimplementedFromList(1);
3018 }
3019 else
3020 {
3021 reimplFromLine = theTranslator->trImplementedFromList(1);
3022 }
3023 int markerPos = reimplFromLine.find("@0");
3024 if (markerPos!=-1) // should always pass this.
3025 {
3026 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
3027 if (bmd->isLinkable()) // replace marker with link
3028 {
3029 //Definition *bd=bmd->group;
3030 //if (bd==0) bd=bcd;
3032 bmd->anchor(),bcd->displayName());
3033
3034 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3035 // bmd->anchor(),bcd->name());
3036 if ( bmd->isLinkableInProject() )
3037 {
3038 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3039 }
3040 }
3041 else
3042 {
3044 QCString(),bcd->displayName());
3045 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3046 {
3047 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3048 }
3049 }
3050 ol.parseText(reimplFromLine.right(
3051 reimplFromLine.length()-markerPos-2)); // text right from marker
3052
3053 }
3054 else
3055 {
3056 err("translation error: no marker in trReimplementsFromList()\n");
3057 }
3058 ol.endParagraph();
3059 }
3060 }
3061}
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e. class/struct/union/...
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:170
QCString right(size_t len) const
Definition qcstring.h:238
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 2190 of file memberdef.cpp.

2192{
2193 ol.docify("template<");
2194 LinkifyTextOptions options;
2195 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2196 for (auto it = al.begin(); it!=al.end();)
2197 {
2198 Argument a = *it;
2199 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
2200 if (!a.name.isEmpty())
2201 {
2202 ol.docify(" ");
2203 ol.docify(a.name);
2204 }
2205 if (!a.defval.isEmpty())
2206 {
2207 ol.docify(" = ");
2208 ol.docify(a.defval);
2209 }
2210 ++it;
2211 if (it!=al.end()) ol.docify(", ");
2212 }
2213 ol.docify("> ");
2214 if (writeReqClause && !m_requiresClause.isEmpty())
2215 {
2216 ol.lineBreak();
2217 ol.docify("requires ");
2218 linkifyText(TextGeneratorOLImpl(ol), // out
2219 m_requiresClause, // text
2220 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2221 }
2222}
iterator end()
Definition arguments.h:94
iterator begin()
Definition arguments.h:93
QCString m_requiresClause
void lineBreak(const QCString &style=QCString())
Definition outputlist.h:559
QCString type
Definition arguments.h:42
QCString name
Definition arguments.h:44
QCString defval
Definition arguments.h:46
LinkifyTextOptions & setScope(const Definition *scope)
Definition util.h:110
LinkifyTextOptions & setSelf(const Definition *self)
Definition util.h:116
LinkifyTextOptions & setFileScope(const FileDef *fileScope)
Definition util.h:113
void linkifyText(const TextGeneratorIntf &out, const QCString &text, const LinkifyTextOptions &options)
Definition util.cpp:893

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

Referenced by writeDeclaration(), and writeDocumentation().

◆ _writeTypeConstraints()

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

Definition at line 3205 of file memberdef.cpp.

3206{
3207 if (m_typeConstraints.hasParameters())
3208 {
3210 }
3211}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5479

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ accessorClass()

ClassDef * MemberDefImpl::accessorClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4933 of file memberdef.cpp.

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

1643{
1644 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1645 return m_examples.inSort(Example(anchor,nameStr,file));
1646}
QCString anchor() const override

References anchor(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4543 of file memberdef.cpp.

4544{
4545 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4546 SrcLangExt lang = getLanguage();
4547 if (!isLinkableInProject()) return;
4548 QCString memLabel;
4549 if (optimizeOutputForC)
4550 {
4551 memLabel=theTranslator->trGlobal(TRUE,TRUE);
4552 }
4553 else if (lang==SrcLangExt::Fortran)
4554 {
4556 }
4557 else
4558 {
4559 memLabel=theTranslator->trMember(TRUE,TRUE);
4560 }
4561 QCString memName = name();
4562 Definition *pd=getOuterScope();
4563 QCString pdName = pd->definitionType()==Definition::TypeClass ?
4564 (toClassDef(pd))->displayName() : pd->name();
4565 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4566 QCString memArgs;
4567 if (!isRelated())
4568 {
4569 if (isObjCMethod())
4570 {
4571 memName = "[" + pd->name() + " " + name() + "]";
4572 }
4573 else
4574 {
4575 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4576 memArgs = argsString();
4577 }
4578 }
4579 const RefItemVector &xrefItems = xrefListItems();
4580 if (sep!="::")
4581 {
4582 memName = substitute(memName,"::",sep);
4583 }
4584 addRefItem(xrefItems,
4585 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4586 memLabel,
4587 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4588}
virtual DefType definitionType() const =0
const RefItemVector & xrefListItems() const override
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
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:426
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:4845
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5915

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

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

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4590 of file memberdef.cpp.

4591{
4593}
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 1780 of file memberdef.cpp.

1781{
1782 QCString result=m_anc;
1783 if (m_groupAlias) return m_groupAlias->anchor();
1784 if (m_templateMaster) return m_templateMaster->anchor();
1785 if (m_enumScope && m_enumScope!=this) // avoid recursion for C#'s public enum E { E, F }
1786 {
1787 result.prepend(m_enumScope->anchor());
1788 }
1789 if (getGroupDef())
1790 {
1791 if (m_groupMember)
1792 {
1793 result=m_groupMember->anchor();
1794 }
1795 else if (getReference().isEmpty())
1796 {
1797 result.prepend("g");
1798 }
1799 }
1800 return result;
1801}
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 5618 of file memberdef.cpp.

5619{
5620 return m_defArgList;
5621}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5079 of file memberdef.cpp.

5080{
5081 return m_bitfields;
5082}

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

6366{
6367 if (m_templateMaster)
6368 {
6369 return m_templateMaster->briefDescription(abbr);
6370 }
6371 else
6372 {
6374 }
6375}
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 6094 of file memberdef.cpp.

6095{
6098 m_cachedTypedefTemplSpec=templSpec;
6099 m_cachedResolvedType=resolvedType;
6100 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6101}
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 6054 of file memberdef.cpp.

6055{
6056 return m_category;
6057}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6064 of file memberdef.cpp.

6065{
6066 return m_categoryRelation;
6067}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6445 of file memberdef.cpp.

6446{
6447 switch (memberType())
6448 {
6449 case MemberType::Define: return CodeSymbolType::Define;
6450 case MemberType::Function: return CodeSymbolType::Function;
6451 case MemberType::Variable: return CodeSymbolType::Variable;
6452 case MemberType::Typedef: return CodeSymbolType::Typedef;
6453 case MemberType::Enumeration: return CodeSymbolType::Enumeration;
6454 case MemberType::EnumValue: return CodeSymbolType::EnumValue;
6455 case MemberType::Signal: return CodeSymbolType::Signal;
6456 case MemberType::Slot: return CodeSymbolType::Slot;
6457 case MemberType::Friend: return CodeSymbolType::Friend;
6458 case MemberType::DCOP: return CodeSymbolType::DCOP;
6459 case MemberType::Property: return CodeSymbolType::Property;
6460 case MemberType::Event: return CodeSymbolType::Event;
6461 case MemberType::Interface: return CodeSymbolType::Interface;
6462 case MemberType::Service: return CodeSymbolType::Service;
6463 case MemberType::Sequence: return CodeSymbolType::Sequence;
6464 case MemberType::Dictionary: return CodeSymbolType::Dictionary;
6465 }
6467}
MemberType memberType() const override

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

6104{
6105 {
6106 const ArgumentList &srcAl = bmd->argumentList();
6107 ArgumentList &dstAl = m_defArgList;
6108 auto srcIt = srcAl.begin();
6109 auto dstIt = dstAl.begin();
6110 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6111 {
6112 Argument &argDst = *dstIt;
6113 const Argument &argSrc = *srcIt;
6114 if (!argSrc.name.isEmpty())
6115 {
6116 argDst.name = argSrc.name;
6117 }
6118 argDst.docs = argSrc.docs;
6119 ++srcIt;
6120 ++dstIt;
6121 }
6122 }
6123
6124 {
6125 const ArgumentList &srcAl = bmd->declArgumentList();
6126 ArgumentList &dstAl = m_declArgList;
6127 auto srcIt = srcAl.begin();
6128 auto dstIt = dstAl.begin();
6129
6130 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6131 {
6132 Argument &argDst = *dstIt;
6133 const Argument &argSrc = *srcIt;
6134 if (!argSrc.name.isEmpty())
6135 {
6136 argDst.name = argSrc.name;
6137 }
6138 argDst.docs = argSrc.docs;
6139 ++srcIt;
6140 ++dstIt;
6141 }
6142 }
6143}
virtual const ArgumentList & argumentList() const =0
virtual const ArgumentList & declArgumentList() const =0
ArgumentList m_declArgList
QCString docs
Definition arguments.h:47

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

◆ createTemplateInstanceMember()

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

Implements MemberDef.

Definition at line 4464 of file memberdef.cpp.

4466{
4467 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4468 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4469 if (!m_defArgList.empty())
4470 {
4471 // replace formal arguments with actuals
4472 for (Argument &arg : *actualArgList)
4473 {
4474 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4475 }
4476 actualArgList->setTrailingReturnType(
4477 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4478 }
4479
4480 QCString methodName=name();
4481 if (methodName.startsWith("operator ")) // conversion operator
4482 {
4483 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4484 }
4485
4486 auto imd = createMemberDef(
4488 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4489 methodName,
4490 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4493 ArgumentList(), ArgumentList(), ""
4494 );
4495 auto mmd = toMemberDefMutable(imd.get());
4496 mmd->moveArgumentList(std::move(actualArgList));
4497 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4498 mmd->setBodyDef(getBodyDef());
4499 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4500 mmd->setFormalTemplateArguments(formalArgs);
4501
4502 // TODO: init other member variables (if needed).
4503 // TODO: reimplemented info
4504 return imd;
4505}
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:4386

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

5050{
5051 return m_decl;
5052}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5623 of file memberdef.cpp.

5624{
5625 return m_declArgList;
5626}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1463 of file memberdef.cpp.

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

5055{
5056 return m_def;
5057}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5681 of file memberdef.cpp.

5682{
5683 return m_defTmpArgLists;
5684}

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

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

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

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

◆ displayName()

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

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

Implements Definition.

Definition at line 6171 of file memberdef.cpp.

6172{
6173 return DefinitionMixin::name();
6174}

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

6378{
6379 if (m_templateMaster)
6380 {
6381 return m_templateMaster->documentation();
6382 }
6383 else
6384 {
6386 }
6387}
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 6079 of file memberdef.cpp.

6080{
6081 return m_enumBaseType;
6082}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5603 of file memberdef.cpp.

5604{
5605 return m_enumFields;
5606}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5074 of file memberdef.cpp.

5075{
5076 return m_exception;
5077}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5059 of file memberdef.cpp.

5060{
5061 return m_extraTypeChars;
5062}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3985 of file memberdef.cpp.

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

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

Referenced by writeMemberDocSimple().

◆ findSectionsInDocumentation()

void MemberDefImpl::findSectionsInDocumentation ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4938 of file memberdef.cpp.

4939{
4943}
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 5762 of file memberdef.cpp.

5763{
5765}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6013 of file memberdef.cpp.

6014{
6015 return m_annMemb;
6016}

References m_annMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5696 of file memberdef.cpp.

5697{
5698 return m_annScope;
5699}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5558 of file memberdef.cpp.

5559{
5560 return m_annEnumType;
5561}

References m_annEnumType.

Referenced by writeDeclaration().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5782 of file memberdef.cpp.

5783{
5784 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5785 return m_cachedResolvedType;
5786}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5777 of file memberdef.cpp.

5778{
5780}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5772 of file memberdef.cpp.

5773{
5774 return m_cachedTypedefValue;
5775}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5114 of file memberdef.cpp.

5115{
5116 return m_classDef;
5117}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5119 of file memberdef.cpp.

5120{
5122}
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 1998 of file memberdef.cpp.

1999{
2000 std::lock_guard<std::mutex> lock(g_cachedAnonymousTypeMutex);
2001 //printf("%s:getClassDefOfAnonymousType() cache=%s\n",qPrint(name()),
2002 // m_cachedAnonymousType?qPrint(m_cachedAnonymousType->name()):"<empty>");
2004
2005 QCString cname;
2006 if (getClassDef()!=nullptr)
2007 {
2008 cname=getClassDef()->name();
2009 }
2010 else if (getNamespaceDef()!=nullptr)
2011 {
2012 cname=getNamespaceDef()->name();
2013 }
2014 QCString ltype(m_type);
2015 // strip 'friend' keyword from ltype
2016 ltype.stripPrefix("friend ");
2017
2018 // search for the last anonymous scope in the member type
2019 ClassDef *annoClassDef=nullptr;
2020
2021 // match expression if it contains at least one @1 marker, e.g.
2022 // 'struct A::@1::@2::B' matches 'A::@1::@2::B' but 'struct A::B' does not match.
2023 std::string stype = ltype.str();
2024 static const reg::Ex r(R"([\w@:]*@\d+[\w@:]*)");
2025 reg::Match match;
2026 if (reg::search(stype,match,r)) // found anonymous scope in type
2027 {
2028 QCString annName = match.str();
2029
2030 // if inside a class or namespace try to prepend the scope name
2031 if (!cname.isEmpty() && annName.left(cname.length()+2)!=cname+"::")
2032 {
2033 QCString ts=stripAnonymousNamespaceScope(cname+"::"+annName);
2034 annoClassDef=getClass(ts);
2035 }
2036 // if not found yet, try without scope name
2037 if (annoClassDef==nullptr)
2038 {
2039 QCString ts=stripAnonymousNamespaceScope(annName);
2040 annoClassDef=getClass(ts);
2041 }
2042 }
2043 m_cachedAnonymousType = annoClassDef;
2044 return annoClassDef;
2045}
ClassDef * getClass(const QCString &n)
static std::mutex g_cachedAnonymousTypeMutex
QCString stripAnonymousNamespaceScope(const QCString &s)
Definition util.cpp:230

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

Referenced by writeDeclaration(), and writeDocumentation().

◆ getDeclColumn()

int MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5818 of file memberdef.cpp.

5819{
5820 return m_declColumn;
5821}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5808 of file memberdef.cpp.

5809{
5810 return m_declFileName;
5811}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5813 of file memberdef.cpp.

5814{
5815 return m_declLine;
5816}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2143 of file memberdef.cpp.

2144{
2145 SrcLangExt lang = getLanguage();
2146 QCString ltype(m_type);
2147 if (lang==SrcLangExt::Cpp && isEnumerate() && isStrong())
2148 {
2149 if (isEnumStruct())
2150 {
2151 ltype+=" struct";
2152 }
2153 else
2154 {
2155 ltype+=" class";
2156 }
2157 }
2158 if (isTypedef() && getLanguage() != SrcLangExt::Slice)
2159 {
2160 ltype.prepend("typedef ");
2161 }
2162 if (isTypeAlias())
2163 {
2164 if (lang==SrcLangExt::Python)
2165 {
2166 ltype="type";
2167 }
2168 else
2169 {
2170 ltype="using";
2171 }
2172 }
2173 // strip 'friend' keyword from ltype
2174 ltype.stripPrefix("friend ");
2175 if (ltype=="@") // rename type from enum values
2176 {
2177 ltype="";
2178 }
2179 else
2180 {
2181 if (isObjCMethod())
2182 {
2183 ltype.prepend("(");
2184 ltype.append(")");
2185 }
2186 }
2187 return ltype;
2188}
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 5568 of file memberdef.cpp.

5569{
5570 return m_enumScope;
5571}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5608 of file memberdef.cpp.

5609{
5610 return m_examples;
5611}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5129 of file memberdef.cpp.

5130{
5131 return m_fileDef;
5132}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5803 of file memberdef.cpp.

5804{
5805 return m_groupAlias;
5806}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5159 of file memberdef.cpp.

5160{
5161 return m_group;
5162}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5174 of file memberdef.cpp.

5175{
5176 return m_groupFileName;
5177}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5184 of file memberdef.cpp.

5185{
5186 return m_groupHasDocs;
5187}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5169 of file memberdef.cpp.

5170{
5171 return m_grouppri;
5172}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5179 of file memberdef.cpp.

5180{
5181 return m_groupStartLine;
5182}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2808 of file memberdef.cpp.

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

5692{
5693 return m_memberGroup;
5694}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5686 of file memberdef.cpp.

5687{
5688 return m_grpId;
5689}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5099 of file memberdef.cpp.

5100{
5101 return m_memSpec;
5102}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5164 of file memberdef.cpp.

5165{
5166 return m_moduleDef;
5167}

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

5140{
5141 return m_nspace;
5142}

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

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

5872{
5873 return m_qualifiers;
5874}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5144 of file memberdef.cpp.

5145{
5146 return m_read;
5147}

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

1742{
1743 QCString ref = DefinitionMixin::getReference();
1744 if (!ref.isEmpty())
1745 {
1746 return ref;
1747 }
1748 const NamespaceDef *nspace = getNamespaceDef();
1749 const FileDef *fileDef = getFileDef();
1750 const ClassDef *classDef = getClassDef();
1751 const ModuleDef *moduleDef = getModuleDef();
1752 const GroupDef *groupDef = getGroupDef();
1753 if (templateMaster())
1754 {
1755 return templateMaster()->getReference();
1756 }
1757 else if (groupDef)
1758 {
1759 return groupDef->getReference();
1760 }
1761 else if (classDef)
1762 {
1763 return classDef->getReference();
1764 }
1765 else if (nspace)
1766 {
1767 return nspace->getReference();
1768 }
1769 else if (moduleDef)
1770 {
1771 return moduleDef->getReference();
1772 }
1773 else if (fileDef)
1774 {
1775 return fileDef->getReference();
1776 }
1777 return "";
1778}
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 4370 of file memberdef.cpp.

4371{
4372 QCString result;
4373 if (isStrong()) result=name();
4374 else if (getClassDef()) result=getClassDef()->displayName();
4375 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4376 return result;
4377}

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

4596{
4597 auto it = m_sectionMap.find(container);
4598 return it!=m_sectionMap.end() ? it->second : nullptr;
4599}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5104 of file memberdef.cpp.

5105{
5106 return m_vhdlSpec;
5107}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5149 of file memberdef.cpp.

5150{
5151 return m_write;
5152}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5719 of file memberdef.cpp.

5720{
5721 return m_hasCallerGraph;
5722}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5701 of file memberdef.cpp.

5702{
5703 return m_hasCallGraph;
5704}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2674 of file memberdef.cpp.

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

4358{
4360 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4361 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4362}
bool hasDocumentation() const override

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

5554{
5555 return m_docEnumValues;
5556}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5752 of file memberdef.cpp.

5753{
5754 return m_hasEnumValues;
5755}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1648 of file memberdef.cpp.

1649{
1650 return !m_examples.empty();
1651}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5747 of file memberdef.cpp.

5748{
5749 return m_hasInlineSource;
5750}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4518 of file memberdef.cpp.

4519{
4520 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4521 // initLines,userInitLines,maxInitLines);
4522 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4523 return (m_initLines>0 || (!m_initializer.isEmpty() && isFuncLikeMacro)) &&
4524 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4525 || m_initLines<m_userInitLines // explicitly enabled
4526 );
4527}

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

4508{
4509 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4510 // qPrint(name()),qPrint(m_initializer),m_initLines,
4511 // m_maxInitLines,m_userInitLines);
4512 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4513 return !m_initializer.isEmpty() && m_initLines==0 && // one line initializer
4514 !isFuncLikeMacro &&
4515 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4516}

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

5738{
5740}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5742 of file memberdef.cpp.

5743{
5745}

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

6390{
6391 if (m_templateMaster)
6392 {
6393 return m_templateMaster->hasUserDocumentation();
6394 }
6395 else
6396 {
6398 }
6399}
bool hasUserDocumentation() const override

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6159 of file memberdef.cpp.

6160{
6162}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5798 of file memberdef.cpp.

5799{
5800 return m_docProvider;
5801}

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

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

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, and UNKNOWN.

Referenced by MemberDefImpl(), and writeDocumentation().

◆ initializer()

const QCString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5084 of file memberdef.cpp.

5085{
5086 return m_initializer;
5087}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5089 of file memberdef.cpp.

5090{
5091 return m_initLines;
5092}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1637 of file memberdef.cpp.

1638{
1639 m_enumFields.push_back(md);
1640}

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1592 of file memberdef.cpp.

1593{
1594 if (m_templateMaster)
1595 {
1596 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef *>(m_templateMaster));
1597 if (mdm)
1598 {
1599 mdm->insertReimplementedBy(md);
1600 }
1601 }
1602 if (!m_redefinedBy.contains(md))
1603 {
1604 m_redefinedBy.inSort(md);
1605 }
1606}
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 6153 of file memberdef.cpp.

6154{
6157}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6039 of file memberdef.cpp.

6040{
6042}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5389 of file memberdef.cpp.

5390{
5391 return m_memSpec.isAbstract();
5392}

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5339 of file memberdef.cpp.

5340{
5341 return m_memSpec.isAddable();
5342}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5414 of file memberdef.cpp.

5415{
5416 return m_memSpec.isAssign();
5417}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5471 of file memberdef.cpp.

5472{
5473 return m_memSpec.isAttribute();
5474}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5486 of file memberdef.cpp.

5487{
5488 return m_memSpec.isBound();
5489}

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

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

References Config_getBool, documentation(), 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 5537 of file memberdef.cpp.

5538{
5539 return isFunction() ||
5540 isSlot() ||
5541 isSignal() ||
5542 isConstructor() ||
5543 isDestructor() ||
5544 isObjCMethod() ||
5545 isFriend();
5546}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5593 of file memberdef.cpp.

5594{
5595 return m_memSpec.isConstEval();
5596}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5588 of file memberdef.cpp.

5589{
5590 return m_memSpec.isConstExpr();
5591}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5598 of file memberdef.cpp.

5599{
5600 return m_memSpec.isConstInit();
5601}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5491 of file memberdef.cpp.

5492{
5493 return m_memSpec.isConstrained();
5494}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4730 of file memberdef.cpp.

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

5410{
5411 return m_memSpec.isCopy();
5412}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4991 of file memberdef.cpp.

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

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

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5259 of file memberdef.cpp.

5260{
5261 return m_mtype==MemberType::DCOP;
5262}

References m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5456 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5249 of file memberdef.cpp.

5250{
5251 return m_mtype==MemberType::Define;
5252}

References m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5461 of file memberdef.cpp.

5462{
5463 return m_memSpec.isDelete();
5464}

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4352 of file memberdef.cpp.

4353{
4354 return m_defArgList.isDeleted();
4355}

References m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4771 of file memberdef.cpp.

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

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

5235{
5236 return m_mtype==MemberType::Dictionary;
5237}

References m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5563 of file memberdef.cpp.

5564{
5565 return m_docsForDefinition;
5566}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5094 of file memberdef.cpp.

5095{
5096 return m_docTransferDone;
5097}
bool m_docTransferDone

References m_docTransferDone.

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4342 of file memberdef.cpp.

4343{
4344 ClassDef *fcd=nullptr;
4345 QCString baseName=name();
4346 int i=baseName.find('<');
4347 if (i!=-1) baseName=baseName.left(i);
4348 return (isFriendClass() &&
4349 (fcd=getClass(baseName)) && fcd->isLinkable());
4350}
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

Implements MemberDef.

Definition at line 5214 of file memberdef.cpp.

5215{
5216 return m_mtype==MemberType::Enumeration;
5217}

References m_mtype.

Referenced by _writeEnumValues(), displayDefinition(), getDeclType(), hasDetailedDescription(), warnIfUndocumented(), and writeDocumentation().

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5434 of file memberdef.cpp.

5435{
5436 return m_memSpec.isEnumStruct();
5437}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5219 of file memberdef.cpp.

5220{
5221 return m_mtype==MemberType::EnumValue;
5222}

References m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5269 of file memberdef.cpp.

5270{
5271 return m_mtype==MemberType::Event;
5272}

References m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5294 of file memberdef.cpp.

5295{
5296 return m_memSpec.isExplicit();
5297}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5527 of file memberdef.cpp.

5528{
5529 return m_explExt;
5530}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5364 of file memberdef.cpp.

5365{
5366 return m_memSpec.isFinal();
5367}

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5279 of file memberdef.cpp.

5280{
5281 return m_related == Relationship::Foreign;
5282}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5254 of file memberdef.cpp.

5255{
5256 return m_mtype==MemberType::Friend;
5257}

References m_mtype.

Referenced by getLabels(), hasDetailedDescription(), isBriefSectionVisible(), isCallable(), isFriendClass(), isNotFriend(), isRelatedOrFriend(), and warnIfUndocumentedParams().

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6416 of file memberdef.cpp.

6417{
6418 return (isFriend() &&
6419 (m_type=="friend class" || m_type=="friend struct" ||
6420 m_type=="friend union"));
6421}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6406 of file memberdef.cpp.

6407{
6408 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6409 bool isFriendToHide = hideFriendCompounds &&
6410 (m_type=="friend class" ||
6411 m_type=="friend struct" ||
6412 m_type=="friend union");
6413 return isFriendToHide;
6414}
bool isFriendToHide() const override

References Config_getBool, isFriendToHide(), and m_type.

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

◆ isFunction()

bool MemberDefImpl::isFunction ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5239 of file memberdef.cpp.

5240{
5241 return m_mtype==MemberType::Function;
5242}

References m_mtype.

Referenced by _hasVisibleCallerGraph(), _hasVisibleCallGraph(), isCallable(), isFunctionOrSignalSlot(), isObjCMethod(), warnIfUndocumentedParams(), and writeDocumentation().

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6429 of file memberdef.cpp.

6430{
6431 return isFunction() || isSlot() || isSignal();
6432}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5244 of file memberdef.cpp.

5245{
5246 return m_mtype==MemberType::Variable && QCString(argsString()).find(")(")!=-1;
5247}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5309 of file memberdef.cpp.

5310{
5311 return m_memSpec.isGettable();
5312}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5522 of file memberdef.cpp.

5523{
5524 return m_implOnly;
5525}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5384 of file memberdef.cpp.

5385{
5386 return m_memSpec.isInitonly();
5387}

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5289 of file memberdef.cpp.

5290{
5291 return m_memSpec.isInline();
5292}

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

1923{
1924 if (m_templateMaster)
1925 {
1926 return m_templateMaster->isLinkable();
1927 }
1928 else
1929 {
1930 return isLinkableInProject() || isReference();
1931 }
1932}

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

1912{
1913 if (m_isLinkableCached==0)
1914 {
1915 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1917 }
1919 return m_isLinkableCached==2;
1920}
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 5511 of file memberdef.cpp.

5512{
5513 return m_memSpec.isMaybeAmbiguous();
5514}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5506 of file memberdef.cpp.

5507{
5508 return m_memSpec.isMaybeDefault();
5509}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5501 of file memberdef.cpp.

5502{
5503 return m_memSpec.isMaybeVoid();
5504}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5299 of file memberdef.cpp.

5300{
5301 return m_memSpec.isMutable();
5302}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5369 of file memberdef.cpp.

5370{
5371 return m_memSpec.isNew();
5372}

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5583 of file memberdef.cpp.

5584{
5585 return m_memSpec.isNoDiscard();
5586}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5466 of file memberdef.cpp.

5467{
5468 return m_memSpec.isNoExcept();
5469}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5404 of file memberdef.cpp.

5405{
5406 return m_memSpec.isNonAtomic();
5407}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6424 of file memberdef.cpp.

6425{
6426 return !(isFriend() && isFriendToHide());
6427}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4979 of file memberdef.cpp.

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

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

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

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

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5394 of file memberdef.cpp.

5395{
5396 return m_memSpec.isOptional();
5397}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5379 of file memberdef.cpp.

5380{
5381 return m_memSpec.isOverride();
5382}

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5314 of file memberdef.cpp.

5315{
5316 return m_memSpec.isPrivateGettable();
5317}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5329 of file memberdef.cpp.

5330{
5331 return m_memSpec.isPrivateSettable();
5332}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5264 of file memberdef.cpp.

5265{
5266 return m_mtype==MemberType::Property;
5267}

References m_mtype.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5319 of file memberdef.cpp.

5320{
5321 return m_memSpec.isProtectedGettable();
5322}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5334 of file memberdef.cpp.

5335{
5336 return m_memSpec.isProtectedSettable();
5337}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5613 of file memberdef.cpp.

5614{
5615 return m_proto;
5616}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5516 of file memberdef.cpp.

5517{
5518 return m_memSpec.isPublished();
5519}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5349 of file memberdef.cpp.

5350{
5351 return m_memSpec.isRaisable();
5352}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5354 of file memberdef.cpp.

5355{
5356 return m_memSpec.isReadable();
5357}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5481 of file memberdef.cpp.

5482{
5483 return m_memSpec.isReadonly();
5484}

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

6440{
6442 (m_templateMaster && m_templateMaster->isReference());
6443}
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 1618 of file memberdef.cpp.

1619{
1620 if (cd)
1621 {
1622 for (const auto &md : m_redefinedBy)
1623 {
1624 const ClassDef *mcd = md->getClassDef();
1625 if (mcd)
1626 {
1627 if (cd==mcd || cd->isBaseClass(mcd,TRUE))
1628 {
1629 return TRUE;
1630 }
1631 }
1632 }
1633 }
1634 return FALSE;
1635}
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 5274 of file memberdef.cpp.

5275{
5276 return m_related == Relationship::Related;
5277}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6434 of file memberdef.cpp.

6435{
6436 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6437}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5344 of file memberdef.cpp.

5345{
5346 return m_memSpec.isRemovable();
5347}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5399 of file memberdef.cpp.

5400{
5401 return m_memSpec.isRequired();
5402}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5419 of file memberdef.cpp.

5420{
5421 return m_memSpec.isRetain();
5422}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5374 of file memberdef.cpp.

5375{
5376 return m_memSpec.isSealed();
5377}

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5229 of file memberdef.cpp.

5230{
5231 return m_mtype==MemberType::Sequence;
5232}

References m_mtype.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5324 of file memberdef.cpp.

5325{
5326 return m_memSpec.isSettable();
5327}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5199 of file memberdef.cpp.

5200{
5201 return m_mtype==MemberType::Signal;
5202}

References m_mtype.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5578 of file memberdef.cpp.

5579{
5580 return m_memSpec.isLocal();
5581}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5204 of file memberdef.cpp.

5205{
5206 return m_mtype==MemberType::Slot;
5207}

References m_mtype.

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

5430{
5431 return m_memSpec.isStrong();
5432}

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5439 of file memberdef.cpp.

5440{
5441 return m_mtype==MemberType::EnumValue &&
5442 m_enumScope &&
5443 m_enumScope->isStrong();
5444}

References m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5532 of file memberdef.cpp.

5533{
5534 return m_tspec;
5535}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5304 of file memberdef.cpp.

5305{
5306 return m_memSpec.isThreadLocal();
5307}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5496 of file memberdef.cpp.

5497{
5498 return m_memSpec.isTransient();
5499}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5451 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5224 of file memberdef.cpp.

5225{
5226 return m_mtype==MemberType::Typedef;
5227}

References m_mtype.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5767 of file memberdef.cpp.

5768{
5769 return m_isTypedefValCached;
5770}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5476 of file memberdef.cpp.

5477{
5478 return m_memSpec.isProperty();
5479}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5446 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5209 of file memberdef.cpp.

5210{
5211 return m_mtype==MemberType::Variable;
5212}

References m_mtype.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5424 of file memberdef.cpp.

5425{
5426 return m_memSpec.isWeak();
5427}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5359 of file memberdef.cpp.

5360{
5361 return m_memSpec.isWritable();
5362}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5573 of file memberdef.cpp.

5574{
5575 return m_livesInsideEnum;
5576}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5922 of file memberdef.cpp.

5923{
5924 m_related = Relationship::Foreign;
5926}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5998 of file memberdef.cpp.

5999{
6001}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5916 of file memberdef.cpp.

5917{
5918 m_related = Relationship::Related;
5920}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5793 of file memberdef.cpp.

5794{
5795 return m_memDec;
5796}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5788 of file memberdef.cpp.

5789{
5790 return m_memDef;
5791}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5194 of file memberdef.cpp.

5195{
5196 return m_mtype;
5197}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4109 of file memberdef.cpp.

4110{
4111 if (m_mtype == MemberType::Define)
4112 {
4113 return "macro definition";
4114 }
4115 else if (m_mtype == MemberType::Enumeration)
4116 {
4117 return "enumeration";
4118 }
4119 return to_string_lower(m_mtype);
4120}
static constexpr const char * to_string_lower(Protection prot) noexcept
Definition types.h:50

References m_mtype, and to_string_lower().

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5866 of file memberdef.cpp.

5867{
5868 m_memSpec.merge(s);
5869}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4907 of file memberdef.cpp.

4908{
4909 m_defArgList = *al;
4910}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4912 of file memberdef.cpp.

4913{
4914 m_declArgList = *al;
4915}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1563 of file memberdef.cpp.

1564{
1565 setOuterScope(scope);
1567 {
1568 m_classDef = toClassDef(scope);
1569 }
1570 else if (scope->definitionType()==Definition::TypeFile)
1571 {
1572 m_fileDef = toFileDef(scope);
1573 }
1574 else if (scope->definitionType()==Definition::TypeModule)
1575 {
1576 m_moduleDef = toModuleDef(scope);
1577 }
1578 else if (scope->definitionType()==Definition::TypeNamespace)
1579 {
1580 m_nspace = toNamespaceDef(scope);
1581 }
1584}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1966
ModuleDef * toModuleDef(Definition *d)
NamespaceDef * toNamespaceDef(Definition *d)

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

◆ numberOfFlowKeyWords()

int MemberDefImpl::numberOfFlowKeyWords ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6164 of file memberdef.cpp.

6165{
6166 return m_numberOfFlowKW;
6167}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5032 of file memberdef.cpp.

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

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4951 of file memberdef.cpp.

4952{
4955}
static bool parseSourcesNeeded
Definition doxygen.h:123

References m_hasCallerGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideCallGraph()

void MemberDefImpl::overrideCallGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4945 of file memberdef.cpp.

4946{
4949}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4969 of file memberdef.cpp.

4970{
4972}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4974 of file memberdef.cpp.

4975{
4977}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4957 of file memberdef.cpp.

4958{
4961}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4963 of file memberdef.cpp.

4964{
4967}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5189 of file memberdef.cpp.

5190{
5191 return m_prot;
5192}

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

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

6470{
6471 return m_redefineCount;
6472}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1613 of file memberdef.cpp.

1614{
1615 return m_redefinedBy;
1616}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1608 of file memberdef.cpp.

1609{
1610 return m_redefines;
1611}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5548 of file memberdef.cpp.

5549{
5550 return m_relatedAlso;
5551}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6089 of file memberdef.cpp.

6090{
6091 return m_requiresClause;
6092}

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

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

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

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

References m_accessorClass, and m_accessorType.

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4379 of file memberdef.cpp.

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

5956{
5957 m_annEnumType = md;
5958}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5933 of file memberdef.cpp.

5934{
5935 m_args = as;
5936}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5888 of file memberdef.cpp.

5889{
5890 m_bitfields = QCString(s).simplifyWhiteSpace();
5891}

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

1889{
1892}
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 6059 of file memberdef.cpp.

6060{
6061 m_category = def;
6062}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6069 of file memberdef.cpp.

6070{
6071 m_categoryRelation = md;
6072}

References m_categoryRelation.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5986 of file memberdef.cpp.

5987{
5988 m_declFileName = df;
5989 m_declLine = line;
5990 m_declColumn = column;
5991}

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

5833{
5834 m_def=d;
5835}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1935 of file memberdef.cpp.

1936{
1937 m_defTmpArgLists = lists;
1938}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6029 of file memberdef.cpp.

6030{
6032}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1894 of file memberdef.cpp.

1895{
1896 m_docTransferDone = true;
1897}

References m_docTransferDone.

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

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

5951{
5952 m_docEnumValues=value;
5953}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6074 of file memberdef.cpp.

6075{
6076 m_enumBaseType = type;
6077}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5943 of file memberdef.cpp.

5944{
5945 m_classDef = cd;
5948}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4435 of file memberdef.cpp.

4436{
4437 m_enumScope=md;
4439 if (md->getGroupDef())
4440 {
4441 m_group = md->getGroupDef();
4442 m_grouppri = md->getGroupPri();
4447 }
4448}
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 5973 of file memberdef.cpp.

5974{
5975 m_explExt=b;
5976 if (b)
5977 {
5978 setDeclFile(df,line,column);
5979 }
5980 else
5981 {
5982 setDefFile(df,line,column);
5983 }
5984}
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 5837 of file memberdef.cpp.

5838{
5839 m_fileDef=fd;
5843}

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

6025{
6027}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 6008 of file memberdef.cpp.

6009{
6010 m_annMemb=m;
6011}

References m_annMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6003 of file memberdef.cpp.

6004{
6005 m_annScope=b;
6006}

References m_annScope.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6034 of file memberdef.cpp.

6035{
6036 m_groupAlias = md;
6037}

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

4424{
4425 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4426 m_group=gd;
4427 m_grouppri=pri;
4428 m_groupFileName=fileName;
4429 m_groupStartLine=startLine;
4430 m_groupHasDocs=hasDocs;
4431 m_groupMember=member;
4433}

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

1906{
1909}
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 1899 of file memberdef.cpp.

1900{
1903}
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 5928 of file memberdef.cpp.

5929{
5930 m_docProvider = md;
5931}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4529 of file memberdef.cpp.

4530{
4531 size_t indent=0;
4533 int l=static_cast<int>(m_initializer.length());
4534 int p=l-1;
4535 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4536 m_initializer=m_initializer.left(p+1);
4537 m_initLines=m_initializer.contains('\n');
4539
4540 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4541}
const QCString & initializer() const override
void stripIndentationVerbatim(QCString &doc, const int indentationLevel, bool skipFirstLine)
Definition util.cpp:6056
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6738

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

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5893 of file memberdef.cpp.

5894{
5895 if (lines!=-1)
5896 {
5897 m_userInitLines=lines;
5898 }
5899}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6049 of file memberdef.cpp.

6050{
6051 m_memDec=md;
6052}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6044 of file memberdef.cpp.

6045{
6046 m_memDef=md;
6047}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4365 of file memberdef.cpp.

4366{
4367 m_memberGroup = grp;
4368}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 5993 of file memberdef.cpp.

5994{
5995 m_grpId=id;
5996}
virtual QCString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5856 of file memberdef.cpp.

5857{
5858 m_memSpec=s;
5859}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5826 of file memberdef.cpp.

5827{
5828 m_mtype=t;
5830}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5845 of file memberdef.cpp.

5846{
5847 m_moduleDef=mod;
5848}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4458 of file memberdef.cpp.

4459{
4460 m_nspace=nd;
4461 setOuterScope(nd);
4462}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5850 of file memberdef.cpp.

5851{
5852 m_prot=p;
5854}

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

5961{
5962 m_proto=p;
5963 if (p)
5964 {
5965 setDeclFile(df,line,column);
5966 }
5967 else
5968 {
5969 setDefFile(df,line,column);
5970 }
5971}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5901 of file memberdef.cpp.

5902{
5903 m_read=r;
5904}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6474 of file memberdef.cpp.

6475{
6476 m_redefineCount=count;
6477}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1587 of file memberdef.cpp.

1588{
1589 m_redefines = md;
1590}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5938 of file memberdef.cpp.

5939{
5940 m_relatedAlso=cd;
5941}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6084 of file memberdef.cpp.

6085{
6086 m_requiresClause = req;
6087}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4601 of file memberdef.cpp.

4602{
4603 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4604 m_sectionMap.emplace(container,sl);
4605}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 5021 of file memberdef.cpp.

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

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

6019{
6022}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5911 of file memberdef.cpp.

5912{
5913 m_tspec=b;
5914}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4922 of file memberdef.cpp.

4923{
4924 m_type = t;
4925}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4917 of file memberdef.cpp.

4918{
4919 m_typeConstraints = al;
4920}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5861 of file memberdef.cpp.

5862{
5863 m_vhdlSpec=s;
5864}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5906 of file memberdef.cpp.

5907{
5908 m_write=w;
5909}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1653 of file memberdef.cpp.

1654{
1655 QCString n = name();
1656 QCString s = getScopeString();
1657
1658 if (!s.isEmpty())
1659 {
1660 n.prepend(s+"::");
1661 }
1662 else if (isStatic() && getFileDef())
1663 {
1664 n.prepend(getFileDef()->name()+":");
1665 }
1666 if (isCallable())
1667 {
1668 n.append(argsString());
1669 }
1670 return n;
1671}
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 5676 of file memberdef.cpp.

5677{
5678 return m_tArgList;
5679}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5757 of file memberdef.cpp.

5758{
5759 return m_templateMaster;
5760}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6401 of file memberdef.cpp.

6402{
6403 return m_typeConstraints;
6404}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5064 of file memberdef.cpp.

5065{
5066 return m_type;
5067}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4607 of file memberdef.cpp.

4608{
4609 if (count>25)
4610 {
4612 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4613 return Specifier::Normal;
4614 }
4615 Specifier v = m_virt;
4616 const MemberDef *rmd = reimplements();
4617 while (rmd && v==Specifier::Normal)
4618 {
4619 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4620 rmd = rmd->reimplements();
4621 }
4622 return v;
4623}
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 4194 of file memberdef.cpp.

4195{
4196 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4197 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4198 return (!isAnonymous() &&
4199 (!hideUndocMembers || hasDocumentation()) &&
4200 (!isStatic() || extractStatic) &&
4201 isLinkable()
4202 );
4203}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4122 of file memberdef.cpp.

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

4285{
4286 QCString returnType = typeString();
4287 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4288 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=-1;
4289
4290 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4291 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4292 {
4293 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4294 if (!defArgList.trailingReturnType().isEmpty())
4295 {
4296 QCString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4297 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4298 }
4299 }
4300 if (!Config_getBool(EXTRACT_ALL) &&
4301 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4302 Config_getBool(WARN_NO_PARAMDOC) &&
4303 isFunction() &&
4304 !isDeleted() &&
4305 !isReference() &&
4307 {
4309 {
4311 "parameters of member {} are not documented",
4312 qualifiedName());
4313 }
4315 hasDocumentation() && !returnType.isEmpty() &&
4316 !( // not one of the cases where nothing is returned
4317 isVoidReturn || // void return type
4318 isFortranSubroutine || // fortran subroutine
4319 isConstructor() || // a constructor
4320 isDestructor() || // or a destructor
4321 isFriend() // or a friend
4322 )
4323 )
4324 {
4326 "return type of member {} is not documented",
4327 qualifiedName());
4328 }
4329 }
4330 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4332 (isVoidReturn || // void return type
4333 isFortranSubroutine || // fortran subroutine
4334 isConstructor() || // a constructor
4335 isDestructor())) // or destructor
4336 {
4337 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4338 qualifiedName());
4339 }
4340}
QCString trailingReturnType() const
Definition arguments.h:114
static bool suppressDocWarnings
Definition doxygen.h:130
bool isDocsForDefinition() const override
bool endsWith(const char *s) const
Definition qcstring.h:528
#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 2238 of file memberdef.cpp.

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

◆ writeDocumentation()

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

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

Implements MemberDefMutable.

Definition at line 3478 of file memberdef.cpp.

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

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

◆ writeEnumDeclaration()

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

Implements MemberDef.

Definition at line 4782 of file memberdef.cpp.

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

1943{
1944 SrcLangExt lang = getLanguage();
1945 bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
1946 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
1947 QCString n = name();
1948 const ClassDef *classDef = getClassDef();
1949 const NamespaceDef *nspace = getNamespaceDef();
1950 if (!hideScopeNames)
1951 {
1952 if (m_enumScope && m_livesInsideEnum && getGroupDef()!=nullptr)
1953 {
1954 n.prepend(m_enumScope->displayName()+sep);
1955 }
1956 if (classDef && (gd || mod) && !isRelated())
1957 {
1958 n.prepend(classDef->displayName()+sep);
1959 }
1960 else if (nspace && (gd || fd || mod))
1961 {
1962 n.prepend(nspace->displayName()+sep);
1963 }
1964 }
1965
1966 if (isObjCMethod())
1967 {
1968 if (isStatic()) ol.docify("+ "); else ol.docify("- ");
1969 }
1970 if (!onlyText && (isLinkable() || hasDetailedDescription())) // write link
1971 {
1972 if (m_mtype==MemberType::EnumValue && getGroupDef()==nullptr && // enum value is not grouped
1973 getEnumScope() && getEnumScope()->getGroupDef()) // but its container is
1974 {
1975 const GroupDef *enumValGroup = getEnumScope()->getGroupDef();
1976 ol.writeObjectLink(enumValGroup->getReference(),
1977 enumValGroup->getOutputFileBase(),
1978 anchor(),n);
1979 }
1980 else
1981 {
1983 }
1984 }
1985 else // write only text
1986 {
1987 ol.startBold();
1988 ol.docify(n);
1989 ol.endBold();
1990 }
1991}

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

Referenced by writeDeclaration(), and writeEnumDeclaration().

◆ writeMemberDocSimple()

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

Implements MemberDefMutable.

Definition at line 3997 of file memberdef.cpp.

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

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

◆ writeTagFile()

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

Implements MemberDefMutable.

Definition at line 4625 of file memberdef.cpp.

4626{
4627 if (!isLinkableInProject()) return;
4628 if (!showNamespaceMembers && getNamespaceDef()) return;
4629 tagFile << " <member kind=\"";
4630 if (m_mtype == MemberType::Enumeration)
4631 {
4632 tagFile << "enumeration";
4633 }
4634 else
4635 {
4636 tagFile << to_string_lower(m_mtype);
4637 }
4638 if (m_prot!=Protection::Public)
4639 {
4640 tagFile << "\" protection=\"";
4641 if (m_prot==Protection::Protected) tagFile << "protected";
4642 else if (m_prot==Protection::Package) tagFile << "package";
4643 else /* Private */ tagFile << "private";
4644 }
4645 if (m_virt!=Specifier::Normal)
4646 {
4647 tagFile << "\" virtualness=\"";
4648 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4649 else /* Pure */ tagFile << "pure";
4650 }
4651 if (isStatic())
4652 {
4653 tagFile << "\" static=\"yes";
4654 }
4655 tagFile << "\">\n";
4656 if (typeString()!=QCString("@"))
4657 {
4658 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4659 }
4660 QCString fn = getOutputFileBase();
4662 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4663 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4664 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4665 QCString idStr = id();
4666 if (!idStr.isEmpty())
4667 {
4668 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4669 }
4670 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4671 if (isStrong())
4672 {
4673 for (const auto &fmd : m_enumFields)
4674 {
4675 if (!fmd->isReference())
4676 {
4677 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4678 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4679 idStr = fmd->id();
4680 if (!idStr.isEmpty())
4681 {
4682 tagFile << "\" clangid=\"" << convertToXML(idStr);
4683 }
4684 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4685 }
4686 }
4687 }
4688 writeDocAnchorsToTagFile(tagFile);
4689 tagFile << " </member>\n";
4690}
void writeDocAnchorsToTagFile(TextStream &fs) const override
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3933
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4942

References addHtmlExtensionIfMissing(), anchor(), argsString(), convertToXML(), getNamespaceDef(), getOutputFileBase(), DefinitionMixin< MemberDefMutable >::id(), QCString::isEmpty(), isLinkableInProject(), isStatic(), isStrong(), m_enumFields, m_mtype, m_prot, m_virt, DefinitionMixin< MemberDefMutable >::name(), qualifiedName(), to_string_lower(), typeString(), and DefinitionMixin< MemberDefMutable >::writeDocAnchorsToTagFile().

Member Data Documentation

◆ m_accessorClass

ClassDef* MemberDefImpl::m_accessorClass = nullptr
private

Definition at line 421 of file memberdef.cpp.

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

◆ m_accessorType

QCString MemberDefImpl::m_accessorType
private

Definition at line 420 of file memberdef.cpp.

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

◆ m_anc

QCString MemberDefImpl::m_anc
private

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

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

◆ m_cachedResolvedType

QCString MemberDefImpl::m_cachedResolvedType
private

Definition at line 477 of file memberdef.cpp.

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

◆ m_cachedTypedefTemplSpec

QCString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 476 of file memberdef.cpp.

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

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 475 of file memberdef.cpp.

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

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

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

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

◆ m_declArgList

◆ m_declColumn

int MemberDefImpl::m_declColumn = -1
private

Definition at line 519 of file memberdef.cpp.

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

◆ m_declFileName

QCString MemberDefImpl::m_declFileName
private

Definition at line 517 of file memberdef.cpp.

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

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

Definition at line 518 of file memberdef.cpp.

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

◆ m_def

QCString MemberDefImpl::m_def
private

Definition at line 423 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 501 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 480 of file memberdef.cpp.

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

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 512 of file memberdef.cpp.

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

◆ m_docTransferDone

bool MemberDefImpl::m_docTransferDone = false
private

Definition at line 438 of file memberdef.cpp.

Referenced by isDocTransferDone(), and setDocTransferDone().

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

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

◆ m_exception

QCString MemberDefImpl::m_exception
private

Definition at line 432 of file memberdef.cpp.

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

◆ m_explExt

bool MemberDefImpl::m_explExt = false
private

Definition at line 509 of file memberdef.cpp.

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

◆ m_explicitOutputFileBase

QCString MemberDefImpl::m_explicitOutputFileBase
private

Definition at line 483 of file memberdef.cpp.

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

◆ m_extraTypeChars

QCString MemberDefImpl::m_extraTypeChars
private

Definition at line 434 of file memberdef.cpp.

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

◆ m_fileDef

FileDef* MemberDefImpl::m_fileDef = nullptr
private

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

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

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

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

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

◆ m_groupFileName

QCString MemberDefImpl::m_groupFileName
private

Definition at line 470 of file memberdef.cpp.

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

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 511 of file memberdef.cpp.

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

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

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

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

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 471 of file memberdef.cpp.

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

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

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

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

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 500 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 491 of file memberdef.cpp.

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

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 492 of file memberdef.cpp.

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

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 508 of file memberdef.cpp.

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

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

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

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

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

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

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

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

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

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

◆ m_maxInitLines

int MemberDefImpl::m_maxInitLines = 0
private

Definition at line 443 of file memberdef.cpp.

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

◆ m_memberGroup

MemberGroup* MemberDefImpl::m_memberGroup = nullptr
private

Definition at line 467 of file memberdef.cpp.

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

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 414 of file memberdef.cpp.

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

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 413 of file memberdef.cpp.

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

◆ m_memSpec

◆ m_metaData

QCString MemberDefImpl::m_metaData
private

Definition at line 457 of file memberdef.cpp.

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

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

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

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

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 520 of file memberdef.cpp.

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

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

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

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

◆ m_redefineCount

int MemberDefImpl::m_redefineCount = 0
private

Definition at line 521 of file memberdef.cpp.

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

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 411 of file memberdef.cpp.

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

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

Definition at line 410 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 415 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 463 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 510 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 441 of file memberdef.cpp.

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

◆ m_virt

◆ m_write

QCString MemberDefImpl::m_write
private

Definition at line 431 of file memberdef.cpp.

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


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