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

Public Member Functions

 MemberDefImpl (const QCString &defFileName, int defLine, int defColumn, const QCString &type, const QCString &name, const QCString &args, const QCString &excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList &tal, const ArgumentList &al, const QCString &metaData)
 ~MemberDefImpl () override=default
DefType definitionType () const override
MemberDefresolveAlias () override
const MemberDefresolveAlias () const override
CodeSymbolType codeSymbolType () const override
std::unique_ptr< MemberDefdeepCopy () const override
void moveTo (Definition *) override
QCString getOutputFileBase () const override
QCString getReference () const override
QCString anchor () const override
QCString declaration () const override
QCString definition () const override
QCString typeString () const override
QCString argsString () const override
QCString excpString () const override
QCString bitfieldString () const override
QCString extraTypeChars () const override
const QCStringinitializer () const override
int initializerLines () const override
TypeSpecifier getMemberSpecifiers () const override
VhdlSpecifier getVhdlSpecifiers () const override
const MemberListgetSectionList (const Definition *) const override
QCString displayDefinition () const override
const ClassDefgetClassDef () const override
ClassDefgetClassDef () override
const FileDefgetFileDef () const override
FileDefgetFileDef () override
const NamespaceDefgetNamespaceDef () const override
NamespaceDefgetNamespaceDef () override
const GroupDefgetGroupDef () const override
GroupDefgetGroupDef () override
const ModuleDefgetModuleDef () const override
ClassDefaccessorClass () const override
QCString getReadAccessor () const override
QCString getWriteAccessor () const override
Grouping::GroupPri_t getGroupPri () const override
QCString getGroupFileName () const override
int getGroupStartLine () const override
bool getGroupHasDocs () const override
QCString qualifiedName () const override
QCString objCMethodName (bool localLink, bool showStatic) const override
Protection protection () const override
Specifier virtualness (int count=0) const override
MemberType memberType () const override
QCString memberTypeName () const override
bool isSignal () const override
bool isSlot () const override
bool isVariable () const override
bool isEnumerate () const override
bool isEnumValue () const override
bool isTypedef () const override
bool isSequence () const override
bool isDictionary () const override
bool isFunction () const override
bool isFunctionPtr () const override
bool isDefine () const override
bool isFriend () const override
bool isDCOP () const override
bool isProperty () const override
bool isEvent () const override
bool isRelated () const override
bool isForeign () const override
bool isStatic () const override
bool isInline () const override
bool isExplicit () const override
bool isMutable () const override
bool isThreadLocal () const override
bool isGettable () const override
bool isPrivateGettable () const override
bool isProtectedGettable () const override
bool isSettable () const override
bool isPrivateSettable () const override
bool isProtectedSettable () const override
bool isReadable () const override
bool isWritable () const override
bool isAddable () const override
bool isRemovable () const override
bool isRaisable () const override
bool isFinal () const override
bool isAbstract () const override
bool isOverride () const override
bool isInitonly () const override
bool isOptional () const override
bool isRequired () const override
bool isNonAtomic () const override
bool isCopy () const override
bool isAssign () const override
bool isRetain () const override
bool isWeak () const override
bool isStrong () const override
bool isEnumStruct () const override
bool isUnretained () const override
bool isNew () const override
bool isSealed () const override
bool isImplementation () const override
bool isExternal () const override
bool isTypeAlias () const override
bool isDefault () const override
bool isDelete () const override
bool isNoExcept () const override
bool isAttribute () const override
bool isUNOProperty () const override
bool isReadonly () const override
bool isBound () const override
bool isConstrained () const override
bool isTransient () const override
bool isMaybeVoid () const override
bool isMaybeDefault () const override
bool isMaybeAmbiguous () const override
bool isPublished () const override
bool isTemplateSpecialization () const override
bool isObjCMethod () const override
bool isObjCProperty () const override
bool isCSharpProperty () const override
bool isConstructor () const override
bool isDestructor () const override
bool hasOneLineInitializer () const override
bool hasMultiLineInitializer () const override
bool isCallable () const override
bool isStrongEnumValue () const override
bool livesInsideEnum () const override
bool isSliceLocal () const override
bool isNoDiscard () const override
bool isConstExpr () const override
bool isConstEval () const override
bool isConstInit () const override
int numberOfFlowKeyWords () const override
bool isFriendToHide () const override
bool isNotFriend () const override
bool isFunctionOrSignalSlot () const override
bool isRelatedOrFriend () const override
bool isLinkableInProject () const override
bool isLinkable () const override
bool hasDocumentation () const override
bool hasUserDocumentation () const override
bool isDeleted () const override
bool isBriefSectionVisible () const override
bool isDetailedSectionVisible (MemberListContainer container) const override
bool hasDetailedDescription () const override
bool isFriendClass () const override
bool isDocumentedFriendClass () const override
const MemberDefreimplements () const override
const MemberVectorreimplementedBy () const override
bool isReimplementedBy (const ClassDef *cd) const override
ClassDefrelatedAlso () const override
bool hasDocumentedEnumValues () const override
const MemberDefgetAnonymousEnumType () const override
bool isDocsForDefinition () const override
const MemberDefgetEnumScope () const override
const MemberVectorenumFieldList () const override
void setEnumBaseType (const QCString &type) override
QCString enumBaseType () const override
bool hasExamples () const override
const ExampleListgetExamples () const override
bool isPrototype () const override
const ArgumentListargumentList () const override
const ArgumentListdeclArgumentList () const override
const ArgumentListtemplateArguments () const override
const ArgumentListsdefinitionTemplateParameterLists () const override
std::optional< ArgumentListformalTemplateArguments () const override
int getMemberGroupId () const override
MemberGroupgetMemberGroup () const override
bool fromAnonymousScope () const override
MemberDeffromAnonymousMember () const override
bool hasCallGraph () const override
bool hasCallerGraph () const override
bool hasReferencesRelation () const override
bool hasReferencedByRelation () const override
bool hasEnumValues () const override
bool hasInlineSource () const override
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 1439 of file memberdef.cpp.

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

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

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

Referenced by isConstructor().

◆ _computeIsDestructor()

void MemberDefImpl::_computeIsDestructor ( )
private

Definition at line 4753 of file memberdef.cpp.

4754{
4755 bool isDestructor = false;
4756 if (m_isDMember) // for D
4757 {
4758 isDestructor = name()=="~this";
4759 }
4760 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4761 {
4762 isDestructor = name()=="__destruct";
4763 }
4764 else if (name()=="__del__" &&
4765 getLanguage()==SrcLangExt::Python) // for Python
4766 {
4767 isDestructor = true;
4768 }
4769 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4770 {
4771 isDestructor = typeString()=="final";
4772 }
4773 else // other languages
4774 {
4775 isDestructor =
4776 (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
4777 && name().find("operator")==-1;
4778 }
4780}
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 1792 of file memberdef.cpp.

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

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

Referenced by isLinkableInProject().

◆ _countReimplementedBy()

size_t MemberDefImpl::_countReimplementedBy ( ) const
private

Definition at line 3052 of file memberdef.cpp.

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

5736{
5737 bool enabled = m_hasCallerGraph &&
5738 (isFunction() || isSlot() || isSignal()) &&
5739 Config_getBool(HAVE_DOT);
5740 if (enabled)
5741 {
5742 bool trivial = DotCallGraph::isTrivial(this,TRUE);
5743 return !trivial;
5744 }
5745 return FALSE;
5746}
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 5717 of file memberdef.cpp.

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

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

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

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

Referenced by warnIfUndocumented(), and writeDeclaration().

◆ _isReimplements()

bool MemberDefImpl::_isReimplements ( ) const
private

Definition at line 2979 of file memberdef.cpp.

2980{
2981 const MemberDef *bmd=reimplements();
2982 const ClassDef *bcd=nullptr;
2983 if (bmd && (bcd=bmd->getClassDef()))
2984 {
2985 // write class that contains a member that is reimplemented by this one
2986 if (bcd->isLinkable())
2987 {
2988 return true;
2989 }
2990 }
2991 return false;
2992}
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 2957 of file memberdef.cpp.

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

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

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

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

Referenced by writeDocumentation().

◆ _writeEnumValues()

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

Definition at line 3202 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeExamples()

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

Definition at line 3181 of file memberdef.cpp.

3182{
3183 // write the list of examples that use this member
3184 if (hasExamples())
3185 {
3186 ol.startExamples();
3187 ol.startDescForItem();
3189 ol.endDescForItem();
3190 ol.endExamples();
3191 }
3192}
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 3381 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeMultiLineInitializer()

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

Definition at line 3433 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeReimplementedBy()

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

Definition at line 3069 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeReimplements()

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

Definition at line 2993 of file memberdef.cpp.

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

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

Referenced by writeDocumentation().

◆ _writeTagData()

void MemberDefImpl::_writeTagData ( const DefType ) const
private

◆ _writeTemplatePrefix()

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

Definition at line 2179 of file memberdef.cpp.

2181{
2182 ol.docify("template<");
2183 LinkifyTextOptions options;
2184 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2185 for (auto it = al.begin(); it!=al.end();)
2186 {
2187 Argument a = *it;
2188 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
2189 if (!a.name.isEmpty())
2190 {
2191 ol.docify(" ");
2192 ol.docify(a.name);
2193 }
2194 if (!a.defval.isEmpty())
2195 {
2196 ol.docify(" = ");
2197 ol.docify(a.defval);
2198 }
2199 ++it;
2200 if (it!=al.end()) ol.docify(", ");
2201 }
2202 ol.docify("> ");
2203 if (writeReqClause && !m_requiresClause.isEmpty())
2204 {
2205 ol.lineBreak();
2206 ol.docify("requires ");
2207 linkifyText(TextGeneratorOLImpl(ol), // out
2208 m_requiresClause, // text
2209 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2210 }
2211}
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 3194 of file memberdef.cpp.

3195{
3196 if (m_typeConstraints.hasParameters())
3197 {
3199 }
3200}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5469

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ accessorClass()

ClassDef * MemberDefImpl::accessorClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4944 of file memberdef.cpp.

4945{
4946 return m_accessorClass;
4947}
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 1631 of file memberdef.cpp.

1632{
1633 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1634 return m_examples.inSort(Example(anchor,nameStr,file));
1635}
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:422
virtual QCString trGlobal(bool first_capital, bool singular)=0
virtual QCString trSubprogram(bool first_capital, bool singular)=0
virtual QCString trMember(bool first_capital, bool singular)=0
ClassDef * toClassDef(Definition *d)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
void addRefItem(const RefItemVector &sli, const QCString &key, const QCString &prefix, const QCString &name, const QCString &title, const QCString &args, const Definition *scope)
Definition util.cpp:4835
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5905

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

5888{
5889 for (const auto &sx : qualifiers)
5890 {
5891 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5892 if (!alreadyAdded)
5893 {
5894 m_qualifiers.push_back(sx);
5895 }
5896 }
5897}
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 1769 of file memberdef.cpp.

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

5630{
5631 return m_defArgList;
5632}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5090 of file memberdef.cpp.

5091{
5092 return m_bitfields;
5093}

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

6377{
6378 if (m_templateMaster)
6379 {
6380 return m_templateMaster->briefDescription(abbr);
6381 }
6382 else
6383 {
6385 }
6386}
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 6105 of file memberdef.cpp.

6106{
6109 m_cachedTypedefTemplSpec=templSpec;
6110 m_cachedResolvedType=resolvedType;
6111 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6112}
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 6065 of file memberdef.cpp.

6066{
6067 return m_category;
6068}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6075 of file memberdef.cpp.

6076{
6077 return m_categoryRelation;
6078}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6456 of file memberdef.cpp.

6457{
6458 switch (memberType())
6459 {
6476 }
6478}
MemberType memberType() const override
@ Enumeration
Definition types.h:557
@ EnumValue
Definition types.h:558
@ Dictionary
Definition types.h:568
@ Interface
Definition types.h:565
@ Sequence
Definition types.h:567
@ Variable
Definition types.h:555
@ Property
Definition types.h:563
@ Typedef
Definition types.h:556
@ Function
Definition types.h:554
@ Service
Definition types.h:566

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

◆ copyArgumentNames()

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

Implements MemberDefMutable.

Definition at line 6114 of file memberdef.cpp.

6115{
6116 {
6117 const ArgumentList &srcAl = bmd->argumentList();
6118 ArgumentList &dstAl = m_defArgList;
6119 auto srcIt = srcAl.begin();
6120 auto dstIt = dstAl.begin();
6121 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6122 {
6123 Argument &argDst = *dstIt;
6124 const Argument &argSrc = *srcIt;
6125 if (!argSrc.name.isEmpty())
6126 {
6127 argDst.name = argSrc.name;
6128 }
6129 argDst.docs = argSrc.docs;
6130 ++srcIt;
6131 ++dstIt;
6132 }
6133 }
6134
6135 {
6136 const ArgumentList &srcAl = bmd->declArgumentList();
6137 ArgumentList &dstAl = m_declArgList;
6138 auto srcIt = srcAl.begin();
6139 auto dstIt = dstAl.begin();
6140
6141 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6142 {
6143 Argument &argDst = *dstIt;
6144 const Argument &argSrc = *srcIt;
6145 if (!argSrc.name.isEmpty())
6146 {
6147 argDst.name = argSrc.name;
6148 }
6149 argDst.docs = argSrc.docs;
6150 ++srcIt;
6151 ++dstIt;
6152 }
6153 }
6154}
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:4376

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

5061{
5062 return m_decl;
5063}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5634 of file memberdef.cpp.

5635{
5636 return m_declArgList;
5637}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1452 of file memberdef.cpp.

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

5066{
5067 return m_def;
5068}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5692 of file memberdef.cpp.

5693{
5694 return m_defTmpArgLists;
5695}

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

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

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

◆ displayName()

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

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

Implements Definition.

Definition at line 6182 of file memberdef.cpp.

6183{
6184 return DefinitionMixin::name();
6185}

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

6389{
6390 if (m_templateMaster)
6391 {
6392 return m_templateMaster->documentation();
6393 }
6394 else
6395 {
6397 }
6398}
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 6090 of file memberdef.cpp.

6091{
6092 return m_enumBaseType;
6093}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5614 of file memberdef.cpp.

5615{
5616 return m_enumFields;
5617}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5085 of file memberdef.cpp.

5086{
5087 return m_exception;
5088}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5070 of file memberdef.cpp.

5071{
5072 return m_extraTypeChars;
5073}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3974 of file memberdef.cpp.

3975{
3976 QCString type = m_accessorType;
3977 if (type.isEmpty())
3978 {
3979 type = m_type;
3980 }
3981
3982 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3983 return simplifyTypeForTable(type);
3984}
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 4949 of file memberdef.cpp.

4950{
4954}
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 5773 of file memberdef.cpp.

5774{
5776}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6024 of file memberdef.cpp.

6025{
6026 return m_annMemb;
6027}

References m_annMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5707 of file memberdef.cpp.

5708{
5709 return m_annScope;
5710}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5569 of file memberdef.cpp.

5570{
5571 return m_annEnumType;
5572}

References m_annEnumType.

Referenced by writeDeclaration().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5793 of file memberdef.cpp.

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

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5788 of file memberdef.cpp.

5789{
5791}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5783 of file memberdef.cpp.

5784{
5785 return m_cachedTypedefValue;
5786}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5125 of file memberdef.cpp.

5126{
5127 return m_classDef;
5128}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5130 of file memberdef.cpp.

5131{
5133}
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 1987 of file memberdef.cpp.

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

5830{
5831 return m_declColumn;
5832}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5819 of file memberdef.cpp.

5820{
5821 return m_declFileName;
5822}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5824 of file memberdef.cpp.

5825{
5826 return m_declLine;
5827}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2132 of file memberdef.cpp.

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

5580{
5581 return m_enumScope;
5582}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5619 of file memberdef.cpp.

5620{
5621 return m_examples;
5622}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5140 of file memberdef.cpp.

5141{
5142 return m_fileDef;
5143}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5814 of file memberdef.cpp.

5815{
5816 return m_groupAlias;
5817}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5170 of file memberdef.cpp.

5171{
5172 return m_group;
5173}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5185 of file memberdef.cpp.

5186{
5187 return m_groupFileName;
5188}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5195 of file memberdef.cpp.

5196{
5197 return m_groupHasDocs;
5198}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5180 of file memberdef.cpp.

5181{
5182 return m_grouppri;
5183}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5190 of file memberdef.cpp.

5191{
5192 return m_groupStartLine;
5193}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2797 of file memberdef.cpp.

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

5703{
5704 return m_memberGroup;
5705}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5697 of file memberdef.cpp.

5698{
5699 return m_grpId;
5700}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5110 of file memberdef.cpp.

5111{
5112 return m_memSpec;
5113}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5175 of file memberdef.cpp.

5176{
5177 return m_moduleDef;
5178}

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

5151{
5152 return m_nspace;
5153}

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

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

5883{
5884 return m_qualifiers;
5885}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5155 of file memberdef.cpp.

5156{
5157 return m_read;
5158}

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

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

5116{
5117 return m_vhdlSpec;
5118}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5160 of file memberdef.cpp.

5161{
5162 return m_write;
5163}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5730 of file memberdef.cpp.

5731{
5732 return m_hasCallerGraph;
5733}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5712 of file memberdef.cpp.

5713{
5714 return m_hasCallGraph;
5715}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2663 of file memberdef.cpp.

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

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

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

◆ hasDocumentation()

bool MemberDefImpl::hasDocumentation ( ) const
overridevirtual

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

See also
hasUserDocumentation()

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 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 Enumeration, DefinitionMixin< Base >::hasDocumentation(), m_defArgList, m_docEnumValues, m_mtype, and m_tArgList.

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

◆ hasDocumentedEnumValues()

bool MemberDefImpl::hasDocumentedEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5564 of file memberdef.cpp.

5565{
5566 return m_docEnumValues;
5567}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5763 of file memberdef.cpp.

5764{
5765 return m_hasEnumValues;
5766}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1637 of file memberdef.cpp.

1638{
1639 return !m_examples.empty();
1640}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5758 of file memberdef.cpp.

5759{
5760 return m_hasInlineSource;
5761}

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 Define, m_defArgList, m_initializer, m_initLines, m_maxInitLines, m_mtype, and m_userInitLines.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasOneLineInitializer()

bool MemberDefImpl::hasOneLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 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 Define, m_defArgList, m_initializer, m_initLines, m_maxInitLines, m_mtype, and m_userInitLines.

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

◆ hasReferencedByRelation()

bool MemberDefImpl::hasReferencedByRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5748 of file memberdef.cpp.

5749{
5751}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5753 of file memberdef.cpp.

5754{
5756}

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

6401{
6402 if (m_templateMaster)
6403 {
6404 return m_templateMaster->hasUserDocumentation();
6405 }
6406 else
6407 {
6409 }
6410}
bool hasUserDocumentation() const override

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6170 of file memberdef.cpp.

6171{
6173}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5809 of file memberdef.cpp.

5810{
5811 return m_docProvider;
5812}

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

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

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

Referenced by MemberDefImpl(), and writeDocumentation().

◆ initializer()

const QCString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5095 of file memberdef.cpp.

5096{
5097 return m_initializer;
5098}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5100 of file memberdef.cpp.

5101{
5102 return m_initLines;
5103}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1626 of file memberdef.cpp.

1627{
1628 m_enumFields.push_back(md);
1629}

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1581 of file memberdef.cpp.

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

6165{
6168}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6050 of file memberdef.cpp.

6051{
6053}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5400 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5350 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5425 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5482 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5497 of file memberdef.cpp.

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

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

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

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

Referenced by writeEnumDeclaration().

◆ isCallable()

bool MemberDefImpl::isCallable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5548 of file memberdef.cpp.

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

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5604 of file memberdef.cpp.

5605{
5606 return m_memSpec.isConstEval();
5607}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5599 of file memberdef.cpp.

5600{
5601 return m_memSpec.isConstExpr();
5602}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5609 of file memberdef.cpp.

5610{
5611 return m_memSpec.isConstInit();
5612}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5502 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4741 of file memberdef.cpp.

4742{
4743 if (m_isConstructorCached==0)
4744 {
4745 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4746 that->_computeIsConstructor();
4747 }
4749 return m_isConstructorCached==2;
4750
4751}
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 5420 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5002 of file memberdef.cpp.

5003{
5004 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return TRUE;
5005 return FALSE;
5006}
bool isProperty() const override

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

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5270 of file memberdef.cpp.

5271{
5272 return m_mtype==MemberType::DCOP;
5273}

References DCOP, and m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5467 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5260 of file memberdef.cpp.

5261{
5263}

References Define, and m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5472 of file memberdef.cpp.

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

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

4783{
4784 if (m_isDestructorCached==0)
4785 {
4786 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4787 that->_computeIsDestructor();
4788 }
4790 return m_isDestructorCached==2;
4791}
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 2779 of file memberdef.cpp.

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

5246{
5248}

References Dictionary, and m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5574 of file memberdef.cpp.

5575{
5576 return m_docsForDefinition;
5577}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5105 of file memberdef.cpp.

5106{
5107 return m_docTransferDone;
5108}
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

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5445 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5230 of file memberdef.cpp.

5231{
5233}

References EnumValue, and m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5280 of file memberdef.cpp.

5281{
5282 return m_mtype==MemberType::Event;
5283}

References Event, and m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5305 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5538 of file memberdef.cpp.

5539{
5540 return m_explExt;
5541}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5375 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5290 of file memberdef.cpp.

5291{
5292 return m_related == Relationship::Foreign;
5293}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6427 of file memberdef.cpp.

6428{
6429 return (isFriend() &&
6430 (m_type=="friend class" || m_type=="friend struct" ||
6431 m_type=="friend union"));
6432}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6417 of file memberdef.cpp.

6418{
6419 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6420 bool isFriendToHide = hideFriendCompounds &&
6421 (m_type=="friend class" ||
6422 m_type=="friend struct" ||
6423 m_type=="friend union");
6424 return isFriendToHide;
6425}
bool isFriendToHide() const override

References Config_getBool, isFriendToHide(), and m_type.

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

◆ isFunction()

bool MemberDefImpl::isFunction ( ) const
overridevirtual

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6440 of file memberdef.cpp.

6441{
6442 return isFunction() || isSlot() || isSignal();
6443}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5255 of file memberdef.cpp.

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

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5320 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5533 of file memberdef.cpp.

5534{
5535 return m_implOnly;
5536}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5395 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5300 of file memberdef.cpp.

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

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

1912{
1913 if (m_templateMaster)
1914 {
1915 return m_templateMaster->isLinkable();
1916 }
1917 else
1918 {
1919 return isLinkableInProject() || isReference();
1920 }
1921}

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

1901{
1902 if (m_isLinkableCached==0)
1903 {
1904 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1906 }
1908 return m_isLinkableCached==2;
1909}
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 5522 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5517 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5512 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5310 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5380 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5594 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5477 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5415 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6435 of file memberdef.cpp.

6436{
6437 return !(isFriend() && isFriendToHide());
6438}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4990 of file memberdef.cpp.

4991{
4992 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return TRUE;
4993 return FALSE;
4994}

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

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

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

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5405 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5390 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5325 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5340 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5275 of file memberdef.cpp.

5276{
5278}

References m_mtype, and Property.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5330 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5345 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5624 of file memberdef.cpp.

5625{
5626 return m_proto;
5627}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5527 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5360 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5365 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5492 of file memberdef.cpp.

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

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

6451{
6453 (m_templateMaster && m_templateMaster->isReference());
6454}
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 1607 of file memberdef.cpp.

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

5286{
5287 return m_related == Relationship::Related;
5288}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6445 of file memberdef.cpp.

6446{
6447 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6448}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5355 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5410 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5430 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5385 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5240 of file memberdef.cpp.

5241{
5243}

References m_mtype, and Sequence.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5335 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5210 of file memberdef.cpp.

5211{
5213}

References m_mtype, and Signal.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5589 of file memberdef.cpp.

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

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5215 of file memberdef.cpp.

5216{
5217 return m_mtype==MemberType::Slot;
5218}

References m_mtype, and Slot.

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

◆ isStatic()

bool MemberDefImpl::isStatic ( ) const
overridevirtual

◆ isStrong()

bool MemberDefImpl::isStrong ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5440 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5450 of file memberdef.cpp.

5451{
5453 m_enumScope &&
5454 m_enumScope->isStrong();
5455}

References EnumValue, m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5543 of file memberdef.cpp.

5544{
5545 return m_tspec;
5546}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5315 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5507 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5462 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5235 of file memberdef.cpp.

5236{
5238}

References m_mtype, and Typedef.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5778 of file memberdef.cpp.

5779{
5780 return m_isTypedefValCached;
5781}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5487 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5457 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5220 of file memberdef.cpp.

5221{
5223}

References m_mtype, and Variable.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5435 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5370 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5584 of file memberdef.cpp.

5585{
5586 return m_livesInsideEnum;
5587}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5933 of file memberdef.cpp.

5934{
5935 m_related = Relationship::Foreign;
5937}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6009 of file memberdef.cpp.

6010{
6012}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5927 of file memberdef.cpp.

5928{
5929 m_related = Relationship::Related;
5931}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5804 of file memberdef.cpp.

5805{
5806 return m_memDec;
5807}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5799 of file memberdef.cpp.

5800{
5801 return m_memDef;
5802}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5205 of file memberdef.cpp.

5206{
5207 return m_mtype;
5208}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4098 of file memberdef.cpp.

4099{
4100 switch (m_mtype)
4101 {
4102 case MemberType::Define: return "macro definition";
4103 case MemberType::Function: return "function";
4104 case MemberType::Variable: return "variable";
4105 case MemberType::Typedef: return "typedef";
4106 case MemberType::Enumeration: return "enumeration";
4107 case MemberType::EnumValue: return "enumvalue";
4108 case MemberType::Signal: return "signal";
4109 case MemberType::Slot: return "slot";
4110 case MemberType::Friend: return "friend";
4111 case MemberType::DCOP: return "dcop";
4112 case MemberType::Property: return "property";
4113 case MemberType::Event: return "event";
4114 case MemberType::Interface: return "interface";
4115 case MemberType::Service: return "service";
4116 case MemberType::Sequence: return "sequence";
4117 case MemberType::Dictionary: return "dictionary";
4118 default: return "unknown";
4119 }
4120}

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

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5877 of file memberdef.cpp.

5878{
5879 m_memSpec.merge(s);
5880}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4918 of file memberdef.cpp.

4919{
4920 m_defArgList = *al;
4921}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4923 of file memberdef.cpp.

4924{
4925 m_declArgList = *al;
4926}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1552 of file memberdef.cpp.

1553{
1554 setOuterScope(scope);
1556 {
1557 m_classDef = toClassDef(scope);
1558 }
1559 else if (scope->definitionType()==Definition::TypeFile)
1560 {
1561 m_fileDef = toFileDef(scope);
1562 }
1563 else if (scope->definitionType()==Definition::TypeModule)
1564 {
1565 m_moduleDef = toModuleDef(scope);
1566 }
1567 else if (scope->definitionType()==Definition::TypeNamespace)
1568 {
1569 m_nspace = toNamespaceDef(scope);
1570 }
1573}
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 6175 of file memberdef.cpp.

6176{
6177 return m_numberOfFlowKW;
6178}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5043 of file memberdef.cpp.

5044{
5045 QCString qm;
5046 if (showStatic)
5047 {
5048 if (isStatic()) qm="+ "; else qm="- ";
5049 }
5050 qm+=name();
5051 if (!localLink) // link to method of same class
5052 {
5053 qm+=" (";
5054 qm+=getClassDef()->name();
5055 qm+=")";
5056 }
5057 return qm;
5058}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4962 of file memberdef.cpp.

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

4957{
4960}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4980 of file memberdef.cpp.

4981{
4983}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4985 of file memberdef.cpp.

4986{
4988}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4968 of file memberdef.cpp.

4969{
4972}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4974 of file memberdef.cpp.

4975{
4978}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5200 of file memberdef.cpp.

5201{
5202 return m_prot;
5203}

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

5009{
5010 if (isObjCMethod())
5011 {
5012 QCString qm;
5013 if (isStatic()) qm="+"; else qm="-";
5014 qm+="[";
5015 qm+=getClassDef()->name()+" ";
5016 qm+=name();
5017 qm+="]";
5018 return qm;
5019 }
5020 else if (m_enumScope && m_enumScope->isStrong())
5021 {
5022 return m_enumScope->qualifiedName()+
5024 localName();
5025 }
5026 else
5027 {
5029 }
5030}
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 6480 of file memberdef.cpp.

6481{
6482 return m_redefineCount;
6483}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1602 of file memberdef.cpp.

1603{
1604 return m_redefinedBy;
1605}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1597 of file memberdef.cpp.

1598{
1599 return m_redefines;
1600}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5559 of file memberdef.cpp.

5560{
5561 return m_relatedAlso;
5562}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6100 of file memberdef.cpp.

6101{
6102 return m_requiresClause;
6103}

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

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

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

4939{
4940 m_accessorClass = cd;
4941 m_accessorType = t;
4942}

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:396
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
#define qsnprintf
Definition qcstring.h:49

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

◆ setAnonymousEnumType()

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

Implements MemberDefMutable.

Definition at line 5966 of file memberdef.cpp.

5967{
5968 m_annEnumType = md;
5969}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5944 of file memberdef.cpp.

5945{
5946 m_args = as;
5947}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5899 of file memberdef.cpp.

5900{
5901 m_bitfields = QCString(s).simplifyWhiteSpace();
5902}

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

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

6071{
6072 m_category = def;
6073}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6080 of file memberdef.cpp.

6081{
6082 m_categoryRelation = md;
6083}

References m_categoryRelation.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5997 of file memberdef.cpp.

5998{
5999 m_declFileName = df;
6000 m_declLine = line;
6001 m_declColumn = column;
6002}

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

5844{
5845 m_def=d;
5846}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1924 of file memberdef.cpp.

1925{
1926 m_defTmpArgLists = lists;
1927}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6040 of file memberdef.cpp.

6041{
6043}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1883 of file memberdef.cpp.

1884{
1885 m_docTransferDone = true;
1886}

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

1872{
1875}
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 5961 of file memberdef.cpp.

5962{
5963 m_docEnumValues=value;
5964}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6085 of file memberdef.cpp.

6086{
6087 m_enumBaseType = type;
6088}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5954 of file memberdef.cpp.

5955{
5956 m_classDef = cd;
5959}

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

5985{
5986 m_explExt=b;
5987 if (b)
5988 {
5989 setDeclFile(df,line,column);
5990 }
5991 else
5992 {
5993 setDefFile(df,line,column);
5994 }
5995}
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 5848 of file memberdef.cpp.

5849{
5850 m_fileDef=fd;
5854}

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

6036{
6038}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 6019 of file memberdef.cpp.

6020{
6021 m_annMemb=m;
6022}

References m_annMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6014 of file memberdef.cpp.

6015{
6016 m_annScope=b;
6017}

References m_annScope.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6045 of file memberdef.cpp.

6046{
6047 m_groupAlias = md;
6048}

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

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

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

5940{
5941 m_docProvider = md;
5942}

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:6046
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6728

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

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5904 of file memberdef.cpp.

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

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6060 of file memberdef.cpp.

6061{
6062 m_memDec=md;
6063}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6055 of file memberdef.cpp.

6056{
6057 m_memDef=md;
6058}

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

6005{
6006 m_grpId=id;
6007}
virtual QCString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5867 of file memberdef.cpp.

5868{
5869 m_memSpec=s;
5870}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5837 of file memberdef.cpp.

5838{
5839 m_mtype=t;
5841}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5856 of file memberdef.cpp.

5857{
5858 m_moduleDef=mod;
5859}

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

5862{
5863 m_prot=p;
5865}

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

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

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5912 of file memberdef.cpp.

5913{
5914 m_read=r;
5915}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6485 of file memberdef.cpp.

6486{
6487 m_redefineCount=count;
6488}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1576 of file memberdef.cpp.

1577{
1578 m_redefines = md;
1579}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5949 of file memberdef.cpp.

5950{
5951 m_relatedAlso=cd;
5952}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6095 of file memberdef.cpp.

6096{
6097 m_requiresClause = req;
6098}

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

5033{
5034 if (ti)
5035 {
5036 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5037 m_anc=ti->anchor;
5038 setReference(ti->tagName);
5040 }
5041}
void setReference(const QCString &r) override
QCString stripExtension(const QCString &fName)
Definition util.cpp:4954

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

6030{
6033}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5922 of file memberdef.cpp.

5923{
5924 m_tspec=b;
5925}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4933 of file memberdef.cpp.

4934{
4935 m_type = t;
4936}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4928 of file memberdef.cpp.

4929{
4930 m_typeConstraints = al;
4931}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5872 of file memberdef.cpp.

5873{
5874 m_vhdlSpec=s;
5875}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5917 of file memberdef.cpp.

5918{
5919 m_write=w;
5920}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1642 of file memberdef.cpp.

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

5688{
5689 return m_tArgList;
5690}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5768 of file memberdef.cpp.

5769{
5770 return m_templateMaster;
5771}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6412 of file memberdef.cpp.

6413{
6414 return m_typeConstraints;
6415}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5075 of file memberdef.cpp.

5076{
5077 return m_type;
5078}

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:524
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112

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

Referenced by warnIfUndocumented(), and writeDocumentation().

◆ writeDeclaration()

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

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

Implements MemberDef.

Definition at line 2227 of file memberdef.cpp.

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

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

◆ writeDocumentation()

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

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

Implements MemberDefMutable.

Definition at line 3467 of file memberdef.cpp.

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

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

◆ writeEnumDeclaration()

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

Implements MemberDef.

Definition at line 4793 of file memberdef.cpp.

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

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

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

Referenced by writeDeclaration(), and writeEnumDeclaration().

◆ writeMemberDocSimple()

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

Implements MemberDefMutable.

Definition at line 3986 of file memberdef.cpp.

3987{
3988 Definition *scope = getOuterScope();
3989 QCString doxyName = name();
3990 QCString doxyArgs = argsString();
3991 QCString memAnchor = anchor();
3992 QCString cfname = getOutputFileBase();
3993 QCString cname;
3994 if (scope) cname = scope->name();
3995 if (doxyName.at(0)=='@')
3996 {
3997 doxyName="__unnamed__";
3998 }
3999
4000 ClassDef *cd = m_accessorClass;
4001 //printf("===> %s::anonymous: %s\n",qPrint(name()),cd?qPrint(cd->name()):"<none>");
4002
4003 LinkifyTextOptions options;
4004 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
4005
4006 if (container && container->definitionType()==Definition::TypeClass &&
4007 !(toClassDef(container))->isJavaEnum())
4008 {
4010 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4011 ol.addLabel(cfname,memAnchor);
4012
4013 QCString ts = fieldType();
4014
4015 if (isFunctionPtr())
4016 ts = m_type + m_args;
4017
4018 if (cd) // cd points to an anonymous struct pointed to by this member
4019 // so we add a link to it from the type column.
4020 {
4021 int i=0;
4022 const char *prefixes[] = { "struct ","union ","class ", nullptr };
4023 const char **p = prefixes;
4024 while (*p)
4025 {
4026 int l=qstrlen(*p);
4027 if (ts.left(l)==*p)
4028 {
4029 ol.writeString(*p);
4030 i=l;
4031 }
4032 p++;
4033 }
4035 cd->getOutputFileBase(),
4036 cd->anchor(),ts.mid(i));
4037 }
4038 else // use standard auto linking
4039 {
4040 linkifyText(TextGeneratorOLImpl(ol),ts,options);
4041 }
4042 ol.endDoxyAnchor(cfname,memAnchor);
4044 }
4045
4047 ol.docify(doxyName);
4048 if (isVariable() && !argsString().isEmpty() && !isObjCMethod() && !isFunctionPtr())
4049 {
4050 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
4051 }
4052 if (!m_bitfields.isEmpty()) // add bitfields
4053 {
4054 linkifyText(TextGeneratorOLImpl(ol),m_bitfields,options);
4055 }
4056 if (hasOneLineInitializer() && !isDefine())
4057 {
4058 ol.writeString(" ");
4059 linkifyText(TextGeneratorOLImpl(ol),m_initializer.simplifyWhiteSpace(),options);
4060 }
4062
4064
4065 QCString brief = briefDescription();
4066 QCString detailed = documentation();
4067
4068 /* write brief description */
4069 if (!brief.isEmpty())
4070 {
4072 briefLine(),
4073 getOuterScope()?getOuterScope():container,this,
4074 brief,
4075 DocOptions()
4076 .setSingleLine(true));
4077 }
4078
4079 /* write detailed description */
4080 if (!detailed.isEmpty())
4081 {
4082 if (!brief.isEmpty())
4083 {
4085 ol.lineBreak();
4087 }
4088 ol.generateDoc(docFile(),
4089 docLine(),
4090 getOuterScope()?getOuterScope():container,this,
4091 detailed+"\n",
4092 DocOptions());
4093 }
4094
4095 ol.endInlineMemberDoc();
4096}
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 switch (m_mtype)
4631 {
4632 case MemberType::Define: tagFile << "define"; break;
4633 case MemberType::EnumValue: tagFile << "enumvalue"; break;
4634 case MemberType::Property: tagFile << "property"; break;
4635 case MemberType::Event: tagFile << "event"; break;
4636 case MemberType::Variable: tagFile << "variable"; break;
4637 case MemberType::Typedef: tagFile << "typedef"; break;
4638 case MemberType::Enumeration: tagFile << "enumeration"; break;
4639 case MemberType::Function: tagFile << "function"; break;
4640 case MemberType::Signal: tagFile << "signal"; break;
4641 case MemberType::Friend: tagFile << "friend"; break;
4642 case MemberType::DCOP: tagFile << "dcop"; break;
4643 case MemberType::Slot: tagFile << "slot"; break;
4644 case MemberType::Interface: tagFile << "interface"; break;
4645 case MemberType::Service: tagFile << "service"; break;
4646 case MemberType::Sequence: tagFile << "sequence"; break;
4647 case MemberType::Dictionary: tagFile << "dictionary"; break;
4648 }
4649 if (m_prot!=Protection::Public)
4650 {
4651 tagFile << "\" protection=\"";
4652 if (m_prot==Protection::Protected) tagFile << "protected";
4653 else if (m_prot==Protection::Package) tagFile << "package";
4654 else /* Private */ tagFile << "private";
4655 }
4656 if (m_virt!=Specifier::Normal)
4657 {
4658 tagFile << "\" virtualness=\"";
4659 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4660 else /* Pure */ tagFile << "pure";
4661 }
4662 if (isStatic())
4663 {
4664 tagFile << "\" static=\"yes";
4665 }
4666 tagFile << "\">\n";
4667 if (typeString()!=QCString("@"))
4668 {
4669 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4670 }
4671 QCString fn = getOutputFileBase();
4673 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4674 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4675 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4676 QCString idStr = id();
4677 if (!idStr.isEmpty())
4678 {
4679 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4680 }
4681 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4682 if (isStrong())
4683 {
4684 for (const auto &fmd : m_enumFields)
4685 {
4686 if (!fmd->isReference())
4687 {
4688 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4689 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4690 idStr = fmd->id();
4691 if (!idStr.isEmpty())
4692 {
4693 tagFile << "\" clangid=\"" << convertToXML(idStr);
4694 }
4695 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4696 }
4697 }
4698 }
4699 writeDocAnchorsToTagFile(tagFile);
4700 tagFile << " </member>\n";
4701}
void writeDocAnchorsToTagFile(TextStream &fs) const override
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3923
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4932

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

Member Data Documentation

◆ m_accessorClass

ClassDef* MemberDefImpl::m_accessorClass = nullptr
private

Definition at line 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: