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

Public Member Functions

 MemberDefImpl (const QCString &defFileName, int defLine, int defColumn, const QCString &type, const QCString &name, const QCString &args, const QCString &excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList &tal, const ArgumentList &al, const QCString &metaData)
 ~MemberDefImpl () override=default
DefType definitionType () const override
MemberDefresolveAlias () override
const MemberDefresolveAlias () const override
CodeSymbolType codeSymbolType () const override
std::unique_ptr< MemberDefdeepCopy () const override
void moveTo (Definition *) override
QCString getOutputFileBase () const override
QCString getReference () const override
QCString anchor () const override
QCString declaration () const override
QCString definition () const override
QCString typeString () const override
QCString argsString () const override
QCString excpString () const override
QCString bitfieldString () const override
QCString extraTypeChars () const override
const QCStringinitializer () const override
int initializerLines () const override
TypeSpecifier getMemberSpecifiers () const override
VhdlSpecifier getVhdlSpecifiers () const override
const MemberListgetSectionList (const Definition *) const override
QCString displayDefinition () const override
const ClassDefgetClassDef () const override
ClassDefgetClassDef () override
const FileDefgetFileDef () const override
FileDefgetFileDef () override
const NamespaceDefgetNamespaceDef () const override
NamespaceDefgetNamespaceDef () override
const GroupDefgetGroupDef () const override
GroupDefgetGroupDef () override
const ModuleDefgetModuleDef () const override
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
MemberDeftoAnonymousMember () 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
const 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
QCString anonymousMemberPrefix () 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 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 setToAnonymousMember (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
void setClassDefOfAnonymousType (const ClassDef *cd) 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_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_fromAnnMemb = nullptr
MemberDefm_toAnnMemb = 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
const ClassDefm_anonymousType = 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
QCString m_anonymousPrefix
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 1454 of file memberdef.cpp.

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

4677{
4678 m_isConstructorCached=1; // FALSE
4679 if (getClassDef())
4680 {
4681 if (m_isDMember) // for D
4682 {
4683 m_isConstructorCached = name()=="this" ? 2 : 1;
4684 return;
4685 }
4686 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4687 {
4688 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4689 return;
4690 }
4691 else if (name()=="__init__" &&
4692 getLanguage()==SrcLangExt::Python) // for Python
4693 {
4694 m_isConstructorCached = 2; // TRUE
4695 return;
4696 }
4697 else // for other languages
4698 {
4699 QCString locName = getClassDef()->localName();
4700 int i=locName.find('<');
4701 if (i==-1) // not a template class
4702 {
4703 m_isConstructorCached = name()==locName ? 2 : 1;
4704 }
4705 else
4706 {
4707 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4708 }
4709 return;
4710 }
4711 }
4712}
virtual const QCString & localName() const =0
const QCString & name() const override
SrcLangExt getLanguage() const override
const ClassDef * getClassDef() const override
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
QCString left(size_t len) const
Definition qcstring.h:233

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

Referenced by isConstructor().

◆ _computeIsDestructor()

void MemberDefImpl::_computeIsDestructor ( )
private

Definition at line 4726 of file memberdef.cpp.

4727{
4728 bool isDestructor = false;
4729 if (m_isDMember) // for D
4730 {
4731 isDestructor = name()=="~this";
4732 }
4733 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4734 {
4735 isDestructor = name()=="__destruct";
4736 }
4737 else if (name()=="__del__" &&
4738 getLanguage()==SrcLangExt::Python) // for Python
4739 {
4740 isDestructor = true;
4741 }
4742 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4743 {
4744 isDestructor = typeString()=="final";
4745 }
4746 else // other languages
4747 {
4748 isDestructor =
4749 (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
4750 && name().find("operator")==-1;
4751 }
4753}
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 1807 of file memberdef.cpp.

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

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

Referenced by isLinkableInProject().

◆ _countReimplementedBy()

size_t MemberDefImpl::_countReimplementedBy ( ) const
private

Definition at line 3020 of file memberdef.cpp.

3021{
3022 const MemberVector &bml=reimplementedBy();
3023 size_t count=0;
3024 for (const auto &bmd : bml)
3025 {
3026 const ClassDef *bcd=bmd->getClassDef();
3027 // count the members that directly inherit from md and for
3028 // which the member and class are visible in the docs.
3029 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
3030 {
3031 count++;
3032 }
3033 }
3034 return count;
3035}
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 5697 of file memberdef.cpp.

5698{
5699 bool enabled = m_hasCallerGraph &&
5700 (isFunction() || isSlot() || isSignal()) &&
5701 Config_getBool(HAVE_DOT);
5702 if (enabled)
5703 {
5704 bool trivial = DotCallGraph::isTrivial(this,TRUE);
5705 return !trivial;
5706 }
5707 return FALSE;
5708}
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 5679 of file memberdef.cpp.

5680{
5681 bool enabled = m_hasCallGraph &&
5682 (isFunction() || isSlot() || isSignal()) &&
5683 Config_getBool(HAVE_DOT);
5684 if (enabled)
5685 {
5686 bool trivial = DotCallGraph::isTrivial(this,FALSE);
5687 return !trivial;
5688 }
5689 return FALSE;
5690}

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

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

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

Referenced by warnIfUndocumented(), and writeDeclaration().

◆ _isReimplements()

bool MemberDefImpl::_isReimplements ( ) const
private

Definition at line 2947 of file memberdef.cpp.

2948{
2949 const MemberDef *bmd=reimplements();
2950 const ClassDef *bcd=nullptr;
2951 if (bmd && (bcd=bmd->getClassDef()))
2952 {
2953 // write class that contains a member that is reimplemented by this one
2954 if (bcd->isLinkable())
2955 {
2956 return true;
2957 }
2958 }
2959 return false;
2960}
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 2925 of file memberdef.cpp.

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

2903{
2904 // write call graph
2906 {
2907 DotCallGraph callGraph(this,FALSE);
2908 if (callGraph.isTooBig())
2909 {
2910 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2911 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2912 }
2913 else if (!callGraph.isTrivial())
2914 {
2915 msg("Generating call graph for function {}\n",qualifiedName());
2917 ol.startCallGraph();
2919 ol.endCallGraph(callGraph);
2920 ol.enableAll();
2921 }
2922 }
2923}
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 3096 of file memberdef.cpp.

3097{
3098 if (getClassDef()) // this should be a member of a class/category
3099 {
3100 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3101 // qPrint(name()),
3102 // m_category ? qPrint(m_category->name()) : "<none>",
3103 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3104 // qPrint(m_classDef->name()),
3105 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3106 // );
3107 QCString text;
3108 QCString ref;
3109 QCString file;
3110 QCString anc;
3111 QCString name;
3112 int i=-1;
3113 if (m_categoryRelation && m_categoryRelation->isLinkable())
3114 {
3115 if (m_category)
3116 {
3117 // this member is in a normal class and implements method categoryRelation from category
3118 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3120 name = m_category->displayName();
3121 }
3122 else if (getClassDef()->categoryOf())
3123 {
3124 // this member is part of a category so link to the corresponding class member of the class we extend
3125 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3126 text = theTranslator->trExtendsClass();
3128 }
3129 i=text.find("@0");
3130 if (i!=-1)
3131 {
3132 const MemberDef *md = m_categoryRelation;
3133 ref = md->getReference();
3134 file = md->getOutputFileBase();
3135 anc = md->anchor();
3136 }
3137 }
3138 if (i!=-1 && !name.isEmpty())
3139 {
3140 ol.startParagraph();
3141 ol.parseText(text.left(i));
3142 ol.writeObjectLink(ref,file,anc,name);
3143 ol.parseText(text.mid(i+2));
3144 ol.endParagraph();
3145 }
3146 }
3147}
virtual ClassDef * categoryOf() const =0
Returns the class of which this is a category (Objective-C only).
virtual QCString anchor() const =0
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString getOutputFileBase() const =0
virtual const QCString & name() const =0
const MemberDef * m_categoryRelation
ClassDef * m_category
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:407
void endParagraph()
Definition outputlist.h:409
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:245
virtual QCString trProvidedByCategory()=0
virtual QCString trExtendsClass()=0

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

Referenced by writeDocumentation().

◆ _writeEnumValues()

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

Definition at line 3170 of file memberdef.cpp.

3173{
3174 // For enum, we also write the documented enum values
3175 if (isEnumerate())
3176 {
3177 bool first=true;
3178 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3179 bool hasInits = false;
3180 if (hasEnumValues())
3181 {
3182 for (const auto &fmd : enumFieldList())
3183 {
3184 if (fmd->isLinkable())
3185 {
3186 if (!fmd->initializer().isEmpty())
3187 {
3188 hasInits = true;
3189 break;
3190 }
3191 }
3192 }
3193 }
3194 for (const auto &fmd : enumFieldList())
3195 {
3196 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3197 if (fmd->isLinkable())
3198 {
3199 if (first)
3200 {
3202 first=false;
3203 }
3204
3205 ol.startDescTableRow();
3206 ol.addIndexItem(fmd->name(),ciname);
3207 ol.addIndexItem(ciname,fmd->name());
3208
3210 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3211 ol.addLabel(cfname,fmd->anchor());
3212 ol.docify(fmd->name());
3214 ol.writeString(" ");
3215 ol.enableAll();
3216 ol.endDoxyAnchor(cfname,fmd->anchor());
3217 ol.endDescTableTitle();
3218 if (hasInits)
3219 {
3220 ol.startDescTableInit();
3221 if (!fmd->initializer().isEmpty())
3222 {
3223 QCString initStr = fmd->initializer().stripWhiteSpace();
3224 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3226 ol.writeString("(");
3227 ol.enableAll();
3228 ol.docify(initStr);
3230 ol.writeString(")");
3231 ol.enableAll();
3232 }
3233 ol.endDescTableInit();
3234 }
3235 ol.startDescTableData();
3236
3237 bool hasBrief = !fmd->briefDescription().isEmpty();
3238 bool hasDetails = !fmd->documentation().isEmpty();
3239
3240 if (hasBrief)
3241 {
3242 ol.generateDoc(fmd->briefFile(),
3243 fmd->briefLine(),
3244 getOuterScope()?getOuterScope():container,
3245 fmd,
3246 fmd->briefDescription(),
3247 DocOptions()
3248 .setIndexWords(true));
3249 }
3250 if (hasDetails)
3251 {
3252 ol.generateDoc(fmd->docFile(),
3253 fmd->docLine(),
3254 getOuterScope()?getOuterScope():container,
3255 fmd,
3256 fmd->documentation()+"\n",
3257 DocOptions()
3258 .setIndexWords(true));
3259 }
3260 ol.endDescTableData();
3261 ol.endDescTableRow();
3262 }
3263 }
3264 if (!first)
3265 {
3266 ol.endDescTable();
3267 }
3268 }
3269}
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString documentation() const =0
virtual Definition * getOuterScope() const =0
Definition * getOuterScope() const override
bool isEnumerate() const override
bool hasEnumValues() const override
const MemberVector & enumFieldList() const override
void writeString(const QCString &text)
Definition outputlist.h:411
void endDescTableRow()
Definition outputlist.h:634
void startDescTableInit()
Definition outputlist.h:640
void endDescTable()
Definition outputlist.h:630
void endDescTableTitle()
Definition outputlist.h:638
void endDoxyAnchor(const QCString &fn, const QCString &anchor)
Definition outputlist.h:541
void docify(const QCString &s)
Definition outputlist.h:437
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void endDescTableData()
Definition outputlist.h:646
void addIndexItem(const QCString &s1, const QCString &s2)
Definition outputlist.h:590
void startDescTableTitle()
Definition outputlist.h:636
void startDescTable(const QCString &title, const bool hasInits)
Definition outputlist.h:628
void addLabel(const QCString &fName, const QCString &anchor)
Definition outputlist.h:543
void startDescTableData()
Definition outputlist.h:644
void disableAllBut(OutputType o)
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args)
Definition outputlist.h:537
void endDescTableInit()
Definition outputlist.h:642
void startDescTableRow()
Definition outputlist.h:632
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:264
virtual QCString trEnumerationValues()=0

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

Referenced by writeDocumentation().

◆ _writeExamples()

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

Definition at line 3149 of file memberdef.cpp.

3150{
3151 // write the list of examples that use this member
3152 if (hasExamples())
3153 {
3154 ol.startExamples();
3155 ol.startDescForItem();
3157 ol.endDescForItem();
3158 ol.endExamples();
3159 }
3160}
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 3360 of file memberdef.cpp.

3361{
3362 // only write out the include file if this is not part of a class or file
3363 // definition
3364 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3365 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3366 const FileDef *fd = getFileDef();
3367 QCString nm;
3368 if (inGroup && fd && showGroupedMembInc)
3369 {
3370 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3371 {
3373 }
3374 else
3375 {
3376 nm = fd->name();
3377 }
3378 }
3379 if (!nm.isEmpty())
3380 {
3381 ol.startParagraph();
3382 ol.startTypewriter();
3383 SrcLangExt lang = getLanguage();
3384 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3385 if (isIDLorJava)
3386 {
3387 ol.docify("import ");
3388 }
3389 else
3390 {
3391 ol.docify("#include ");
3392 }
3393
3394 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3395
3396 if (fd->isLinkable())
3397 {
3398 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3399 }
3400 else
3401 {
3402 ol.docify(nm);
3403 }
3404
3405 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3406
3407 ol.endTypewriter();
3408 ol.endParagraph();
3409 }
3410}
virtual QCString absFilePath() const =0
void startTypewriter()
Definition outputlist.h:449
void endTypewriter()
Definition outputlist.h:451
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:167
#define Config_getList(name)
Definition config.h:38
SrcLangExt
Definition types.h:207
QCString stripFromIncludePath(const QCString &path)
Definition util.cpp:329

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

Referenced by writeDocumentation().

◆ _writeMultiLineInitializer()

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

Definition at line 3412 of file memberdef.cpp.

3413{
3414 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3415 ol.startBold();
3416 if (m_mtype==MemberType::Define)
3418 else
3420 ol.endBold();
3421 QCString langCorrected = getDefFileExtension();
3423 if (srcLangExt == SrcLangExt::Lex)
3424 {
3425 langCorrected = ".doxygen_lex_c";
3426 srcLangExt = SrcLangExt::Cpp;
3427 }
3428 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3429 intf->resetCodeParserState();
3430 auto &codeOL = ol.codeGenerators();
3431 codeOL.startCodeFragment("DoxyCode");
3432 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3433 CodeParserOptions()
3435 .setInlineFragment(true)
3436 .setMemberDef(this)
3437 .setShowLineNumbers(false)
3438 .setSearchCtx(this)
3439 );
3440 codeOL.endCodeFragment("DoxyCode");
3441}
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:5253

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

Referenced by writeDocumentation().

◆ _writeReimplementedBy()

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

Definition at line 3037 of file memberdef.cpp.

3038{
3039 const MemberVector &bml=reimplementedBy();
3040 size_t count = _countReimplementedBy();
3041 if (count>0)
3042 {
3043 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3044 {
3045 size_t cnt=0;
3046 auto it = bml.begin();
3047 // find the entryIndex-th documented entry in the inheritance list.
3048 const MemberDef *bmd = nullptr;
3049 const ClassDef *bcd = nullptr;
3050 while (it!=bml.end())
3051 {
3052 bmd = *it;
3053 bcd = bmd->getClassDef();
3054 if ( bmd->isLinkable() && bcd->isLinkable())
3055 {
3056 if (cnt==entryIndex) break;
3057 cnt++;
3058 }
3059 ++it;
3060 }
3061
3062 if (bcd && bmd) // write link for marker
3063 {
3064 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3065 // bmd->anchor(),bcd->name());
3067 bmd->anchor(),bcd->displayName());
3068
3069 if (bmd->isLinkableInProject() )
3070 {
3071 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3072 }
3073 }
3074 };
3075
3076 QCString reimplInLine;
3077 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3078 {
3079 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3080 }
3081 else
3082 {
3083 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3084 }
3085
3086 // write the list of classes that overwrite this member
3087 ol.startParagraph();
3088 writeMarkerList(ol,
3089 reimplInLine.str(),
3090 count,
3091 replaceFunc);
3092 ol.endParagraph();
3093 }
3094}
@ Interface
Definition classdef.h:112
size_t _countReimplementedBy() const
iterator end() noexcept
Definition memberlist.h:56
iterator begin() noexcept
Definition memberlist.h:54
const std::string & str() const
Definition qcstring.h:556
virtual QCString trReimplementedInList(int numEntries)=0
virtual QCString trImplementedInList(int numEntries)=0
void writePageRef(OutputList &ol, const QCString &cn, const QCString &mn)
Definition util.cpp:259
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1124

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

Referenced by writeDocumentation().

◆ _writeReimplements()

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

Definition at line 2961 of file memberdef.cpp.

2962{
2963 const MemberDef *bmd=reimplements();
2964 const ClassDef *bcd=nullptr;
2965 if (bmd && (bcd=bmd->getClassDef()))
2966 {
2967 // write class that contains a member that is reimplemented by this one
2968 if (bcd->isLinkable())
2969 {
2970 ol.startParagraph();
2971 QCString reimplFromLine;
2972 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
2973 {
2974 reimplFromLine = theTranslator->trReimplementedFromList(1);
2975 }
2976 else
2977 {
2978 reimplFromLine = theTranslator->trImplementedFromList(1);
2979 }
2980 int markerPos = reimplFromLine.find("@0");
2981 if (markerPos!=-1) // should always pass this.
2982 {
2983 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
2984 if (bmd->isLinkable()) // replace marker with link
2985 {
2986 //Definition *bd=bmd->group;
2987 //if (bd==0) bd=bcd;
2989 bmd->anchor(),bcd->displayName());
2990
2991 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
2992 // bmd->anchor(),bcd->name());
2993 if ( bmd->isLinkableInProject() )
2994 {
2995 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
2996 }
2997 }
2998 else
2999 {
3001 QCString(),bcd->displayName());
3002 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3003 {
3004 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3005 }
3006 }
3007 ol.parseText(reimplFromLine.right(
3008 reimplFromLine.length()-markerPos-2)); // text right from marker
3009
3010 }
3011 else
3012 {
3013 err("translation error: no marker in trReimplementsFromList()\n");
3014 }
3015 ol.endParagraph();
3016 }
3017 }
3018}
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e. class/struct/union/...
virtual Specifier virtualness(int count=0) const =0
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:170
QCString right(size_t len) const
Definition qcstring.h:238
virtual QCString trReimplementedFromList(int numEntries)=0
virtual QCString trImplementedFromList(int numEntries)=0
#define err(fmt,...)
Definition message.h:127

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

Referenced by writeDocumentation().

◆ _writeTagData()

void MemberDefImpl::_writeTagData ( const DefType ) const
private

◆ _writeTemplatePrefix()

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

Definition at line 2161 of file memberdef.cpp.

2163{
2164 ol.docify("template<");
2165 LinkifyTextOptions options;
2166 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2167 for (auto it = al.begin(); it!=al.end();)
2168 {
2169 Argument a = *it;
2170 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
2171 if (!a.name.isEmpty())
2172 {
2173 ol.docify(" ");
2174 ol.docify(a.name);
2175 }
2176 if (!a.defval.isEmpty())
2177 {
2178 ol.docify(" = ");
2179 ol.docify(a.defval);
2180 }
2181 ++it;
2182 if (it!=al.end()) ol.docify(", ");
2183 }
2184 ol.docify("> ");
2185 if (writeReqClause && !m_requiresClause.isEmpty())
2186 {
2187 ol.lineBreak();
2188 ol.docify("requires ");
2189 linkifyText(TextGeneratorOLImpl(ol), // out
2190 m_requiresClause, // text
2191 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2192 }
2193}
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:111
LinkifyTextOptions & setSelf(const Definition *self)
Definition util.h:117
LinkifyTextOptions & setFileScope(const FileDef *fileScope)
Definition util.h:114
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 3162 of file memberdef.cpp.

3163{
3164 if (m_typeConstraints.hasParameters())
3165 {
3167 }
3168}
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5501

References m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ addExample()

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

Implements MemberDefMutable.

Definition at line 1646 of file memberdef.cpp.

1647{
1648 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1649 return m_examples.inSort(Example(anchor,nameStr,file));
1650}
QCString anchor() const override

References anchor(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4527 of file memberdef.cpp.

4528{
4529 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4530 SrcLangExt lang = getLanguage();
4531 if (!isLinkableInProject()) return;
4532 QCString memLabel;
4533 if (optimizeOutputForC)
4534 {
4535 memLabel=theTranslator->trGlobal(TRUE,TRUE);
4536 }
4537 else if (lang==SrcLangExt::Fortran)
4538 {
4540 }
4541 else
4542 {
4543 memLabel=theTranslator->trMember(TRUE,TRUE);
4544 }
4545 QCString memName = name();
4546 Definition *pd=getOuterScope();
4547 QCString pdName = pd->definitionType()==Definition::TypeClass ?
4548 (toClassDef(pd))->displayName() : pd->name();
4549 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
4550 QCString memArgs;
4551 if (!isRelated())
4552 {
4553 if (isObjCMethod())
4554 {
4555 memName = "[" + pd->name() + " " + name() + "]";
4556 }
4557 else
4558 {
4559 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4560 memArgs = argsString();
4561 }
4562 }
4563 const RefItemVector &xrefItems = xrefListItems();
4564 if (sep!="::")
4565 {
4566 memName = substitute(memName,"::",sep);
4567 }
4568 addRefItem(xrefItems,
4569 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4570 memLabel,
4571 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4572}
virtual DefType definitionType() const =0
const RefItemVector & xrefListItems() const override
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
bool isObjCMethod() const override
bool isLinkableInProject() const override
QCString displayName(bool=TRUE) const override
QCString argsString() const override
bool isRelated() const override
QCString getOutputFileBase() const override
QCString & prepend(const char *s)
Definition qcstring.h:426
virtual QCString trGlobal(bool first_capital, bool singular)=0
virtual QCString trSubprogram(bool first_capital, bool singular)=0
virtual QCString trMember(bool first_capital, bool singular)=0
ClassDef * toClassDef(Definition *d)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
void addRefItem(const RefItemVector &sli, const QCString &key, const QCString &prefix, const QCString &name, const QCString &title, const QCString &args, const Definition *scope)
Definition util.cpp:4867
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5937

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

5850{
5851 for (const auto &sx : qualifiers)
5852 {
5853 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5854 if (!alreadyAdded)
5855 {
5856 m_qualifiers.push_back(sx);
5857 }
5858 }
5859}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4574 of file memberdef.cpp.

4575{
4577}
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 1784 of file memberdef.cpp.

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

◆ anonymousMemberPrefix()

QCString MemberDefImpl::anonymousMemberPrefix ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2012 of file memberdef.cpp.

2013{
2014 return m_anonymousPrefix;
2015}
QCString m_anonymousPrefix

References m_anonymousPrefix.

◆ argsString()

QCString MemberDefImpl::argsString ( ) const
overridevirtual

◆ argumentList()

const ArgumentList & MemberDefImpl::argumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5591 of file memberdef.cpp.

5592{
5593 return m_defArgList;
5594}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

QCString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5052 of file memberdef.cpp.

5053{
5054 return m_bitfields;
5055}

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

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

6078{
6081 m_cachedTypedefTemplSpec=templSpec;
6082 m_cachedResolvedType=resolvedType;
6083 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6084}
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 6037 of file memberdef.cpp.

6038{
6039 return m_category;
6040}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6047 of file memberdef.cpp.

6048{
6049 return m_categoryRelation;
6050}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6428 of file memberdef.cpp.

6429{
6430 switch (memberType())
6431 {
6432 case MemberType::Define: return CodeSymbolType::Define;
6433 case MemberType::Function: return CodeSymbolType::Function;
6434 case MemberType::Variable: return CodeSymbolType::Variable;
6435 case MemberType::Typedef: return CodeSymbolType::Typedef;
6436 case MemberType::Enumeration: return CodeSymbolType::Enumeration;
6437 case MemberType::EnumValue: return CodeSymbolType::EnumValue;
6438 case MemberType::Signal: return CodeSymbolType::Signal;
6439 case MemberType::Slot: return CodeSymbolType::Slot;
6440 case MemberType::Friend: return CodeSymbolType::Friend;
6441 case MemberType::DCOP: return CodeSymbolType::DCOP;
6442 case MemberType::Property: return CodeSymbolType::Property;
6443 case MemberType::Event: return CodeSymbolType::Event;
6444 case MemberType::Interface: return CodeSymbolType::Interface;
6445 case MemberType::Service: return CodeSymbolType::Service;
6446 case MemberType::Sequence: return CodeSymbolType::Sequence;
6447 case MemberType::Dictionary: return CodeSymbolType::Dictionary;
6448 }
6450}
MemberType memberType() const override

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

◆ copyArgumentNames()

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

Implements MemberDefMutable.

Definition at line 6086 of file memberdef.cpp.

6087{
6088 {
6089 const ArgumentList &srcAl = bmd->argumentList();
6090 ArgumentList &dstAl = m_defArgList;
6091 auto srcIt = srcAl.begin();
6092 auto dstIt = dstAl.begin();
6093 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6094 {
6095 Argument &argDst = *dstIt;
6096 const Argument &argSrc = *srcIt;
6097 if (!argSrc.name.isEmpty())
6098 {
6099 argDst.name = argSrc.name;
6100 }
6101 argDst.docs = argSrc.docs;
6102 ++srcIt;
6103 ++dstIt;
6104 }
6105 }
6106
6107 {
6108 const ArgumentList &srcAl = bmd->declArgumentList();
6109 ArgumentList &dstAl = m_declArgList;
6110 auto srcIt = srcAl.begin();
6111 auto dstIt = dstAl.begin();
6112
6113 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6114 {
6115 Argument &argDst = *dstIt;
6116 const Argument &argSrc = *srcIt;
6117 if (!argSrc.name.isEmpty())
6118 {
6119 argDst.name = argSrc.name;
6120 }
6121 argDst.docs = argSrc.docs;
6122 ++srcIt;
6123 ++dstIt;
6124 }
6125 }
6126}
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 4448 of file memberdef.cpp.

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

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

5023{
5024 return m_decl;
5025}
QCString m_decl

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5596 of file memberdef.cpp.

5597{
5598 return m_declArgList;
5599}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1467 of file memberdef.cpp.

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

5028{
5029 return m_def;
5030}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5654 of file memberdef.cpp.

5655{
5656 return m_defTmpArgLists;
5657}

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

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

3275{
3276 QCString ldef = definition();
3277 QCString title = name();
3278 if (isEnumerate())
3279 {
3280 if (isAnonymous())
3281 {
3282 ldef = title = "anonymous enum";
3283 if (!m_enumBaseType.isEmpty())
3284 {
3285 ldef+=" : "+m_enumBaseType;
3286 }
3287 }
3288 else
3289 {
3290 ldef.prepend("enum ");
3291 if (isSliceLocal())
3292 {
3293 ldef.prepend("local ");
3294 }
3295 }
3296 }
3297 else if (isEnumValue())
3298 {
3299 if (isAnonymous())
3300 {
3301 ldef=ldef.mid(2);
3302 }
3303 }
3304
3305 std::string sdef = ldef.str();
3306 reg::Match match;
3307 if (reg::search(sdef,match,reAnonymous))
3308 {
3309 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
3310 if (annoClassDef)
3311 {
3312 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)");
3313 reg::Match amatch;
3314 reg::search(sdef,amatch,ar);
3315 ldef = amatch.prefix().str() + annoClassDef->displayName() + amatch.suffix().str();
3316 }
3317 else
3318 {
3319 ldef = match.prefix().str() + " { ... } " + removeAnonymousScopes(match.suffix().str());
3320 }
3321 }
3322
3323 const ClassDef *cd=getClassDef();
3324 if (cd && cd->isObjectiveC())
3325 {
3326 // strip scope name
3327 int ep = ldef.find("::");
3328 if (ep!=-1)
3329 {
3330 int sp=ldef.findRev(' ',ep);
3331 if (sp!=-1)
3332 {
3333 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3334 }
3335 }
3336 // strip keywords
3337 int dp = ldef.find(':');
3338 if (dp!=-1)
3339 {
3340 ldef=ldef.left(dp+1);
3341 }
3342 int l=static_cast<int>(ldef.length());
3343 //printf("start >%s<\n",qPrint(ldef));
3344 int i=l-1;
3345 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3346 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3347 if (i>0)
3348 {
3349 // insert branches around the type
3350 ldef = "("+ldef.left(i+1)+")"+ldef.mid(i+1);
3351 }
3352 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3353 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3354 }
3355 SrcLangExt lang = getLanguage();
3356 QCString sep = getLanguageSpecificSeparator(lang,TRUE);
3357 return substitute(ldef,"::",sep);
3358}
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
const ClassDef * getClassDefOfAnonymousType() const override
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:597
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition qcstring.cpp:96
SubMatch prefix() const
Return the part of the string before the match.
Definition regex.h:166
SubMatch suffix() const
Return the part of the string after the match.
Definition regex.h:169
std::string str() const
Returns the matching part as a string.
Definition regex.h:129
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:257

References QCString::at(), definition(), Definition::displayName(), QCString::find(), QCString::findRev(), getClassDef(), getClassDefOfAnonymousType(), 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(), reg::Match::prefix(), QCString::prepend(), reAnonymous, removeAnonymousScopes(), reg::search(), QCString::str(), reg::SubMatch::str(), substitute(), reg::Match::suffix(), 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 6154 of file memberdef.cpp.

6155{
6156 return DefinitionMixin::name();
6157}

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

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

6063{
6064 return m_enumBaseType;
6065}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5576 of file memberdef.cpp.

5577{
5578 return m_enumFields;
5579}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

QCString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5047 of file memberdef.cpp.

5048{
5049 return m_exception;
5050}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

QCString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5032 of file memberdef.cpp.

5033{
5034 return m_extraTypeChars;
5035}

References m_extraTypeChars.

◆ fieldType()

QCString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4000 of file memberdef.cpp.

4001{
4002 QCString type = m_type;
4003 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
4004 return simplifyTypeForTable(type);
4005}
bool isTypedef() const override
static QCString simplifyTypeForTable(const QCString &s)

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

Referenced by writeMemberDocSimple().

◆ findSectionsInDocumentation()

void MemberDefImpl::findSectionsInDocumentation ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4911 of file memberdef.cpp.

4912{
4916}
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 5735 of file memberdef.cpp.

5736{
5738}

References m_formalTemplateArguments.

◆ fromAnonymousMember()

MemberDef * MemberDefImpl::fromAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5991 of file memberdef.cpp.

5992{
5993 return m_fromAnnMemb;
5994}

References m_fromAnnMemb.

◆ fromAnonymousScope()

bool MemberDefImpl::fromAnonymousScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5669 of file memberdef.cpp.

5670{
5671 return m_annScope;
5672}

References m_annScope.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5531 of file memberdef.cpp.

5532{
5533 return m_annEnumType;
5534}

References m_annEnumType.

Referenced by writeDeclaration(), and writeDocumentation().

◆ getCachedResolvedTypedef()

QCString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5755 of file memberdef.cpp.

5756{
5757 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5758 return m_cachedResolvedType;
5759}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

QCString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5750 of file memberdef.cpp.

5751{
5753}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5745 of file memberdef.cpp.

5746{
5747 return m_cachedTypedefValue;
5748}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5087 of file memberdef.cpp.

5088{
5089 return m_classDef;
5090}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5092 of file memberdef.cpp.

5093{
5095}
ClassDefMutable * toClassDefMutable(Definition *d)

References m_classDef, and toClassDefMutable().

◆ getClassDefOfAnonymousType()

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

2008{
2009 return m_anonymousType;
2010}

References m_anonymousType.

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

◆ getDeclColumn()

int MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5791 of file memberdef.cpp.

5792{
5793 return m_declColumn;
5794}

References m_declColumn.

◆ getDeclFileName()

QCString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5781 of file memberdef.cpp.

5782{
5783 return m_declFileName;
5784}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5786 of file memberdef.cpp.

5787{
5788 return m_declLine;
5789}

References m_declLine.

◆ getDeclType()

QCString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2114 of file memberdef.cpp.

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

5542{
5543 return m_enumScope;
5544}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5581 of file memberdef.cpp.

5582{
5583 return m_examples;
5584}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5102 of file memberdef.cpp.

5103{
5104 return m_fileDef;
5105}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5776 of file memberdef.cpp.

5777{
5778 return m_groupAlias;
5779}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5132 of file memberdef.cpp.

5133{
5134 return m_group;
5135}

References m_group.

◆ getGroupFileName()

QCString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5147 of file memberdef.cpp.

5148{
5149 return m_groupFileName;
5150}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5157 of file memberdef.cpp.

5158{
5159 return m_groupHasDocs;
5160}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5142 of file memberdef.cpp.

5143{
5144 return m_grouppri;
5145}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5152 of file memberdef.cpp.

5153{
5154 return m_groupStartLine;
5155}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2765 of file memberdef.cpp.

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

5665{
5666 return m_memberGroup;
5667}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5659 of file memberdef.cpp.

5660{
5661 return m_grpId;
5662}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5072 of file memberdef.cpp.

5073{
5074 return m_memSpec;
5075}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5137 of file memberdef.cpp.

5138{
5139 return m_moduleDef;
5140}

References m_moduleDef.

Referenced by getOutputFileBase(), getReference(), hasDetailedDescription(), and writeDocumentation().

◆ getNamespaceDef() [1/2]

const NamespaceDef * MemberDefImpl::getNamespaceDef ( ) const
overridevirtual

◆ getNamespaceDef() [2/2]

NamespaceDef * MemberDefImpl::getNamespaceDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5112 of file memberdef.cpp.

5113{
5114 return m_nspace;
5115}

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

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

5845{
5846 return m_qualifiers;
5847}

References m_qualifiers.

◆ getReadAccessor()

QCString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5117 of file memberdef.cpp.

5118{
5119 return m_read;
5120}

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

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

4355{
4356 QCString result;
4357 if (isStrong()) result=name();
4358 else if (getClassDef()) result=getClassDef()->displayName();
4359 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4360 return result;
4361}

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

4580{
4581 auto it = m_sectionMap.find(container);
4582 return it!=m_sectionMap.end() ? it->second : nullptr;
4583}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5077 of file memberdef.cpp.

5078{
5079 return m_vhdlSpec;
5080}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

QCString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5122 of file memberdef.cpp.

5123{
5124 return m_write;
5125}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5692 of file memberdef.cpp.

5693{
5694 return m_hasCallerGraph;
5695}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5674 of file memberdef.cpp.

5675{
5676 return m_hasCallGraph;
5677}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2631 of file memberdef.cpp.

2632{
2633 std::lock_guard<std::mutex> lock(g_hasDetailedDescriptionMutex);
2634 //printf(">hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2636 {
2637 bool extractAll = Config_getBool(EXTRACT_ALL);
2638 bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
2639 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2640 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2641 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2642 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2643 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2644 bool inlineSources = hasInlineSource();
2645
2646 // the member has detailed documentation because the user added some comments
2647 bool docFilter =
2648 // extract all is enabled
2649 extractAll ||
2650 // has detailed docs
2651 !documentation().isEmpty() ||
2652 // has inbody docs
2654 // is an enum with values that are documented
2656 // is documented enum value
2657 (m_mtype==MemberType::EnumValue && !briefDescription().isEmpty()) ||
2658 // has brief description that is part of the detailed description
2659 (!briefDescription().isEmpty() && // has brief docs
2660 (alwaysDetailedSec && // they are visible in
2661 (repeatBrief || // detailed section or
2662 !briefMemberDesc // they are explicitly not
2663 ) // shown in brief section
2664 )
2665 ) ||
2666 // has one or more documented arguments
2668 m_templateMaster->argumentList().hasDocumentation() :
2669 m_defArgList.hasDocumentation()) ||
2671 m_templateMaster->templateArguments().hasTemplateDocumentation() :
2672 m_tArgList.hasTemplateDocumentation()) ||
2673 // user-specified qualifiers
2674 !m_qualifiers.empty();
2675
2676 // generate function guard
2677 // ================== =======
2678 // _writeGroupInclude -> ignored in calculation
2679 // multiLineInitializer() -> hasMultiLineInitializer()
2680 // _writeReimplements -> _isReimplements()
2681 // _writeReimplementedBy -> _countReimplementedBy()>0
2682 // _writeExamples -> hasExamples()
2683 // _writeTypeConstraints -> m_typeConstraints.hasParameters()
2684 // writeSourceDef -> !getSourceFileBase().isEmpty();
2685 // writeInlineCode -> hasInlineSource() && hasSources()
2686 // writeSourceRefs -> hasReferencesRelation() && hasSourceRefs()
2687 // writeSourceReffedBy -> hasReferencedByRelation() && hasSourceReffedBy()
2688 // _writeCallGraph -> _hasVisibleCallGraph()
2689 // _writeCallerGraph -> _hasVisibleCallerGraph()
2690
2691 // the member has detailed documentation because there is some generated info
2692 bool docInfo =
2693 // has a multi-line initialization block
2695 // reimplements / reimplemented by
2697 // examples
2698 hasExamples() ||
2699 // type constraints
2700 m_typeConstraints.hasParameters() ||
2701 // has source definition
2703 // has inline sources
2704 (inlineSources && hasSources()) ||
2705 // has references
2708 // call graph
2710 // caller graph
2712 // requirement references
2714
2715 if (!hideUndocMembers) // if HIDE_UNDOC_MEMBERS is NO we also show the detailed section
2716 // if there is only some generated info
2717 {
2718 docFilter = docFilter || docInfo;
2719 }
2720
2721 // this is not a global static or global statics should be extracted
2722 bool staticFilter = getClassDef()!=nullptr || !isStatic() || extractStatic;
2723
2724 // a module does not contain details for members, so either the namespace or file should be linkable
2725 bool moduleFilter = getModuleDef()==nullptr || (getFileDef() && getFileDef()->isLinkable()) ||
2727
2728 // only include members that are non-private unless EXTRACT_PRIVATE is
2729 // set to YES or the member is part of a group
2730 bool privateFilter = protectionLevelVisible(protection()) || m_mtype==MemberType::Friend ||
2731 (m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual);
2732
2733 // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
2734 // is true
2735 bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend());
2736
2738 (docFilter && staticFilter && moduleFilter && privateFilter && friendCompoundFilter && !isHidden());
2739 //printf("docFilter=%d docInfo=%d staticFilter=%d privateFilter=%d friendCompoundFilter=%d !isHidden()=%d",
2740 // docFilter,docInfo,staticFilter,privateFilter,friendCompoundFilter,!isHidden());
2742 }
2743 //printf("<hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2745}
bool hasRequirementRefs() const override
QCString getSourceFileBase() const override
bool hasSourceReffedBy() const override
bool _isReimplements() const
bool hasMultiLineInitializer() const override
bool hasInlineSource() const override
bool hasReferencesRelation() const override
bool hasReferencedByRelation() const override
bool isLinkable() const override
bool hasDocumentedEnumValues() const override
static std::mutex g_hasDetailedDescriptionMutex

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

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

◆ hasDocumentation()

bool MemberDefImpl::hasDocumentation ( ) const
overridevirtual

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

See also
hasUserDocumentation()

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 4341 of file memberdef.cpp.

4342{
4344 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4345 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4346}
bool hasDocumentation() const override

References DefinitionMixin< Base >::hasDocumentation(), m_defArgList, m_docEnumValues, m_mtype, and m_tArgList.

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

◆ hasDocumentedEnumValues()

bool MemberDefImpl::hasDocumentedEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5526 of file memberdef.cpp.

5527{
5528 return m_docEnumValues;
5529}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5725 of file memberdef.cpp.

5726{
5727 return m_hasEnumValues;
5728}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1652 of file memberdef.cpp.

1653{
1654 return !m_examples.empty();
1655}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5720 of file memberdef.cpp.

5721{
5722 return m_hasInlineSource;
5723}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4502 of file memberdef.cpp.

4503{
4504 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4505 // initLines,userInitLines,maxInitLines);
4506 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4507 return (m_initLines>0 || (!m_initializer.isEmpty() && isFuncLikeMacro)) &&
4508 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4509 || m_initLines<m_userInitLines // explicitly enabled
4510 );
4511}

References m_defArgList, m_initializer, m_initLines, m_maxInitLines, m_mtype, and m_userInitLines.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasOneLineInitializer()

bool MemberDefImpl::hasOneLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4491 of file memberdef.cpp.

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

References m_defArgList, m_initializer, m_initLines, m_maxInitLines, m_mtype, and m_userInitLines.

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

◆ hasReferencedByRelation()

bool MemberDefImpl::hasReferencedByRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5710 of file memberdef.cpp.

5711{
5713}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5715 of file memberdef.cpp.

5716{
5718}

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

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

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6142 of file memberdef.cpp.

6143{
6145}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5771 of file memberdef.cpp.

5772{
5773 return m_docProvider;
5774}

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

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

References Config_getBool, Config_getInt, QCString::endsWith(), FALSE, Definition::getDefFileName(), Definition::getLanguage(), QCString::lower(), m_annEnumType, m_annScope, m_anonymousType, m_args, 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_fromAnnMemb, 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_toAnnMemb, m_tspec, m_type, m_userInitLines, m_vhdlSpec, m_virt, Definition::name(), removeRedundantWhiteSpace(), stringToArgumentList(), TRUE, and UNKNOWN.

Referenced by MemberDefImpl(), and writeDocumentation().

◆ initializer()

const QCString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5057 of file memberdef.cpp.

5058{
5059 return m_initializer;
5060}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5062 of file memberdef.cpp.

5063{
5064 return m_initLines;
5065}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1641 of file memberdef.cpp.

1642{
1643 m_enumFields.push_back(md);
1644}

References m_enumFields.

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1596 of file memberdef.cpp.

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

6137{
6140}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6022 of file memberdef.cpp.

6023{
6025}

References FALSE, and m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5362 of file memberdef.cpp.

5363{
5364 return m_memSpec.isAbstract();
5365}

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5312 of file memberdef.cpp.

5313{
5314 return m_memSpec.isAddable();
5315}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5387 of file memberdef.cpp.

5388{
5389 return m_memSpec.isAssign();
5390}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5444 of file memberdef.cpp.

5445{
5446 return m_memSpec.isAttribute();
5447}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5459 of file memberdef.cpp.

5460{
5461 return m_memSpec.isBound();
5462}

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

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

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

Referenced by writeEnumDeclaration().

◆ isCallable()

bool MemberDefImpl::isCallable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5510 of file memberdef.cpp.

5511{
5512 return isFunction() ||
5513 isSlot() ||
5514 isSignal() ||
5515 isConstructor() ||
5516 isDestructor() ||
5517 isObjCMethod() ||
5518 isFriend();
5519}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5566 of file memberdef.cpp.

5567{
5568 return m_memSpec.isConstEval();
5569}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5561 of file memberdef.cpp.

5562{
5563 return m_memSpec.isConstExpr();
5564}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5571 of file memberdef.cpp.

5572{
5573 return m_memSpec.isConstInit();
5574}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5464 of file memberdef.cpp.

5465{
5466 return m_memSpec.isConstrained();
5467}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4714 of file memberdef.cpp.

4715{
4716 if (m_isConstructorCached==0)
4717 {
4718 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4719 that->_computeIsConstructor();
4720 }
4722 return m_isConstructorCached==2;
4723
4724}
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 5382 of file memberdef.cpp.

5383{
5384 return m_memSpec.isCopy();
5385}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4964 of file memberdef.cpp.

4965{
4966 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return TRUE;
4967 return FALSE;
4968}
bool isProperty() const override

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

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5232 of file memberdef.cpp.

5233{
5234 return m_mtype==MemberType::DCOP;
5235}

References m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5429 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5222 of file memberdef.cpp.

5223{
5224 return m_mtype==MemberType::Define;
5225}

References m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5434 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4336 of file memberdef.cpp.

4337{
4338 return m_defArgList.isDeleted();
4339}

References m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4755 of file memberdef.cpp.

4756{
4757 if (m_isDestructorCached==0)
4758 {
4759 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4760 that->_computeIsDestructor();
4761 }
4763 return m_isDestructorCached==2;
4764}
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 2747 of file memberdef.cpp.

2748{
2749 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2750 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2751 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2752 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2753 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2754 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2755 getClassDef()!=nullptr && getClassDef()->isSimple();
2756
2757 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2758 !isReference();
2759 bool result = visible || simpleFilter;
2760 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2761 // qPrint(name()),result,groupFilter,fileFilter);
2762 return result;
2763}
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 5207 of file memberdef.cpp.

5208{
5209 return m_mtype==MemberType::Dictionary;
5210}

References m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5536 of file memberdef.cpp.

5537{
5538 return m_docsForDefinition;
5539}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5067 of file memberdef.cpp.

5068{
5069 return m_docTransferDone;
5070}
bool m_docTransferDone

References m_docTransferDone.

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4326 of file memberdef.cpp.

4327{
4328 ClassDef *fcd=nullptr;
4329 QCString baseName=name();
4330 int i=baseName.find('<');
4331 if (i!=-1) baseName=baseName.left(i);
4332 return (isFriendClass() &&
4333 (fcd=getClass(baseName)) && fcd->isLinkable());
4334}
bool isFriendClass() const override
ClassDef * getClass(const QCString &n)

References QCString::find(), getClass(), isFriendClass(), Definition::isLinkable(), QCString::left(), and DefinitionMixin< MemberDefMutable >::name().

Referenced by isBriefSectionVisible(), and writeDeclaration().

◆ isEnumerate()

bool MemberDefImpl::isEnumerate ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5187 of file memberdef.cpp.

5188{
5189 return m_mtype==MemberType::Enumeration;
5190}

References m_mtype.

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

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5407 of file memberdef.cpp.

5408{
5409 return m_memSpec.isEnumStruct();
5410}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5192 of file memberdef.cpp.

5193{
5194 return m_mtype==MemberType::EnumValue;
5195}

References m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5242 of file memberdef.cpp.

5243{
5244 return m_mtype==MemberType::Event;
5245}

References m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5267 of file memberdef.cpp.

5268{
5269 return m_memSpec.isExplicit();
5270}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5500 of file memberdef.cpp.

5501{
5502 return m_explExt;
5503}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5337 of file memberdef.cpp.

5338{
5339 return m_memSpec.isFinal();
5340}

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5252 of file memberdef.cpp.

5253{
5254 return m_related == Relationship::Foreign;
5255}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5227 of file memberdef.cpp.

5228{
5229 return m_mtype==MemberType::Friend;
5230}

References m_mtype.

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

◆ isFriendClass()

bool MemberDefImpl::isFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6399 of file memberdef.cpp.

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

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6389 of file memberdef.cpp.

6390{
6391 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6392 bool isFriendToHide = hideFriendCompounds &&
6393 (m_type=="friend class" ||
6394 m_type=="friend struct" ||
6395 m_type=="friend union");
6396 return isFriendToHide;
6397}
bool isFriendToHide() const override

References Config_getBool, isFriendToHide(), and m_type.

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

◆ isFunction()

bool MemberDefImpl::isFunction ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5212 of file memberdef.cpp.

5213{
5214 return m_mtype==MemberType::Function;
5215}

References m_mtype.

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

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6412 of file memberdef.cpp.

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

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5217 of file memberdef.cpp.

5218{
5219 return m_mtype==MemberType::Variable && QCString(argsString()).find(")(")!=-1;
5220}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5282 of file memberdef.cpp.

5283{
5284 return m_memSpec.isGettable();
5285}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5495 of file memberdef.cpp.

5496{
5497 return m_implOnly;
5498}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5357 of file memberdef.cpp.

5358{
5359 return m_memSpec.isInitonly();
5360}

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5262 of file memberdef.cpp.

5263{
5264 return m_memSpec.isInline();
5265}

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

1927{
1928 if (m_templateMaster)
1929 {
1930 return m_templateMaster->isLinkable();
1931 }
1932 else
1933 {
1934 return isLinkableInProject() || isReference();
1935 }
1936}

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

1916{
1917 if (m_isLinkableCached==0)
1918 {
1919 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1921 }
1923 return m_isLinkableCached==2;
1924}
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 5484 of file memberdef.cpp.

5485{
5486 return m_memSpec.isMaybeAmbiguous();
5487}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5479 of file memberdef.cpp.

5480{
5481 return m_memSpec.isMaybeDefault();
5482}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5474 of file memberdef.cpp.

5475{
5476 return m_memSpec.isMaybeVoid();
5477}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5272 of file memberdef.cpp.

5273{
5274 return m_memSpec.isMutable();
5275}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5342 of file memberdef.cpp.

5343{
5344 return m_memSpec.isNew();
5345}

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5556 of file memberdef.cpp.

5557{
5558 return m_memSpec.isNoDiscard();
5559}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5439 of file memberdef.cpp.

5440{
5441 return m_memSpec.isNoExcept();
5442}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5377 of file memberdef.cpp.

5378{
5379 return m_memSpec.isNonAtomic();
5380}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6407 of file memberdef.cpp.

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

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4952 of file memberdef.cpp.

4953{
4954 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return TRUE;
4955 return FALSE;
4956}

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

4959{
4960 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return TRUE;
4961 return FALSE;
4962}

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

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5367 of file memberdef.cpp.

5368{
5369 return m_memSpec.isOptional();
5370}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5352 of file memberdef.cpp.

5353{
5354 return m_memSpec.isOverride();
5355}

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5287 of file memberdef.cpp.

5288{
5289 return m_memSpec.isPrivateGettable();
5290}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5302 of file memberdef.cpp.

5303{
5304 return m_memSpec.isPrivateSettable();
5305}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5237 of file memberdef.cpp.

5238{
5239 return m_mtype==MemberType::Property;
5240}

References m_mtype.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5292 of file memberdef.cpp.

5293{
5294 return m_memSpec.isProtectedGettable();
5295}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5307 of file memberdef.cpp.

5308{
5309 return m_memSpec.isProtectedSettable();
5310}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5586 of file memberdef.cpp.

5587{
5588 return m_proto;
5589}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5489 of file memberdef.cpp.

5490{
5491 return m_memSpec.isPublished();
5492}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5322 of file memberdef.cpp.

5323{
5324 return m_memSpec.isRaisable();
5325}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5327 of file memberdef.cpp.

5328{
5329 return m_memSpec.isReadable();
5330}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5454 of file memberdef.cpp.

5455{
5456 return m_memSpec.isReadonly();
5457}

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

6423{
6425 (m_templateMaster && m_templateMaster->isReference());
6426}
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 1622 of file memberdef.cpp.

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

5248{
5249 return m_related == Relationship::Related;
5250}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6417 of file memberdef.cpp.

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

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5317 of file memberdef.cpp.

5318{
5319 return m_memSpec.isRemovable();
5320}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5372 of file memberdef.cpp.

5373{
5374 return m_memSpec.isRequired();
5375}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5392 of file memberdef.cpp.

5393{
5394 return m_memSpec.isRetain();
5395}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5347 of file memberdef.cpp.

5348{
5349 return m_memSpec.isSealed();
5350}

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5202 of file memberdef.cpp.

5203{
5204 return m_mtype==MemberType::Sequence;
5205}

References m_mtype.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5297 of file memberdef.cpp.

5298{
5299 return m_memSpec.isSettable();
5300}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5172 of file memberdef.cpp.

5173{
5174 return m_mtype==MemberType::Signal;
5175}

References m_mtype.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5551 of file memberdef.cpp.

5552{
5553 return m_memSpec.isLocal();
5554}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5177 of file memberdef.cpp.

5178{
5179 return m_mtype==MemberType::Slot;
5180}

References m_mtype.

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

◆ isStatic()

bool MemberDefImpl::isStatic ( ) const
overridevirtual

◆ isStrong()

bool MemberDefImpl::isStrong ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5402 of file memberdef.cpp.

5403{
5404 return m_memSpec.isStrong();
5405}

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5412 of file memberdef.cpp.

5413{
5414 return m_mtype==MemberType::EnumValue &&
5415 m_enumScope &&
5416 m_enumScope->isStrong();
5417}

References m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5505 of file memberdef.cpp.

5506{
5507 return m_tspec;
5508}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5277 of file memberdef.cpp.

5278{
5279 return m_memSpec.isThreadLocal();
5280}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5469 of file memberdef.cpp.

5470{
5471 return m_memSpec.isTransient();
5472}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5424 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5197 of file memberdef.cpp.

5198{
5199 return m_mtype==MemberType::Typedef;
5200}

References m_mtype.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5740 of file memberdef.cpp.

5741{
5742 return m_isTypedefValCached;
5743}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5449 of file memberdef.cpp.

5450{
5451 return m_memSpec.isProperty();
5452}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5419 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5182 of file memberdef.cpp.

5183{
5184 return m_mtype==MemberType::Variable;
5185}

References m_mtype.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5397 of file memberdef.cpp.

5398{
5399 return m_memSpec.isWeak();
5400}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5332 of file memberdef.cpp.

5333{
5334 return m_memSpec.isWritable();
5335}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5546 of file memberdef.cpp.

5547{
5548 return m_livesInsideEnum;
5549}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5895 of file memberdef.cpp.

5896{
5897 m_related = Relationship::Foreign;
5899}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5971 of file memberdef.cpp.

5972{
5974}

References m_implOnly, and TRUE.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5889 of file memberdef.cpp.

5890{
5891 m_related = Relationship::Related;
5893}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5766 of file memberdef.cpp.

5767{
5768 return m_memDec;
5769}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5761 of file memberdef.cpp.

5762{
5763 return m_memDef;
5764}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5167 of file memberdef.cpp.

5168{
5169 return m_mtype;
5170}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

QCString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4093 of file memberdef.cpp.

4094{
4095 if (m_mtype == MemberType::Define)
4096 {
4097 return "macro definition";
4098 }
4099 else if (m_mtype == MemberType::Enumeration)
4100 {
4101 return "enumeration";
4102 }
4103 return to_string_lower(m_mtype);
4104}
static constexpr const char * to_string_lower(Protection prot) noexcept
Definition types.h:50

References m_mtype, and to_string_lower().

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5839 of file memberdef.cpp.

5840{
5841 m_memSpec.merge(s);
5842}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4891 of file memberdef.cpp.

4892{
4893 m_defArgList = *al;
4894}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4896 of file memberdef.cpp.

4897{
4898 m_declArgList = *al;
4899}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1567 of file memberdef.cpp.

1568{
1569 setOuterScope(scope);
1571 {
1572 m_classDef = toClassDef(scope);
1573 }
1574 else if (scope->definitionType()==Definition::TypeFile)
1575 {
1576 m_fileDef = toFileDef(scope);
1577 }
1578 else if (scope->definitionType()==Definition::TypeModule)
1579 {
1580 m_moduleDef = toModuleDef(scope);
1581 }
1582 else if (scope->definitionType()==Definition::TypeNamespace)
1583 {
1584 m_nspace = toNamespaceDef(scope);
1585 }
1588}
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 6147 of file memberdef.cpp.

6148{
6149 return m_numberOfFlowKW;
6150}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5005 of file memberdef.cpp.

5006{
5007 QCString qm;
5008 if (showStatic)
5009 {
5010 if (isStatic()) qm="+ "; else qm="- ";
5011 }
5012 qm+=name();
5013 if (!localLink) // link to method of same class
5014 {
5015 qm+=" (";
5016 qm+=getClassDef()->name();
5017 qm+=")";
5018 }
5019 return qm;
5020}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4924 of file memberdef.cpp.

4925{
4928}
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 4918 of file memberdef.cpp.

4919{
4922}

References m_hasCallGraph, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4942 of file memberdef.cpp.

4943{
4945}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4947 of file memberdef.cpp.

4948{
4950}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4930 of file memberdef.cpp.

4931{
4934}

References m_hasReferencedByRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4936 of file memberdef.cpp.

4937{
4940}

References m_hasReferencesRelation, Doxygen::parseSourcesNeeded, and TRUE.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5162 of file memberdef.cpp.

5163{
5164 return m_prot;
5165}

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

4971{
4972 if (isObjCMethod())
4973 {
4974 QCString qm;
4975 if (isStatic()) qm="+"; else qm="-";
4976 qm+="[";
4977 qm+=getClassDef()->name()+" ";
4978 qm+=name();
4979 qm+="]";
4980 return qm;
4981 }
4982 else if (m_enumScope && m_enumScope->isStrong())
4983 {
4984 return m_enumScope->qualifiedName()+
4986 localName();
4987 }
4988 else
4989 {
4991 }
4992}
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 6452 of file memberdef.cpp.

6453{
6454 return m_redefineCount;
6455}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1617 of file memberdef.cpp.

1618{
1619 return m_redefinedBy;
1620}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1612 of file memberdef.cpp.

1613{
1614 return m_redefines;
1615}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5521 of file memberdef.cpp.

5522{
5523 return m_relatedAlso;
5524}

References m_relatedAlso.

◆ requiresClause()

QCString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6072 of file memberdef.cpp.

6073{
6074 return m_requiresClause;
6075}

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

5602{
5603 ArgumentList &decAl = m_declArgList;
5604 ArgumentList &defAl = m_defArgList;
5605 const ArgumentList &decAlSrc = md->declArgumentList();
5606 const ArgumentList &defAlSrc = md->argumentList();
5607 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5608 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5609 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5610 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5611 {
5612 Argument &decA = *decIt;
5613 Argument &defA = *defIt;
5614 const Argument &decAS = *decSrc;
5615 const Argument &defAS = *defSrc;
5616 if (decA.name.isEmpty())
5617 {
5618 if (!defA.name.isEmpty())
5619 {
5620 decA.name = defA.name;
5621 }
5622 else if (!decAS.name.isEmpty())
5623 {
5624 decA.name = decAS.name;
5625 }
5626 else if (!defAS.name.isEmpty())
5627 {
5628 decA.name = defAS.name;
5629 }
5630 }
5631 if (defA.name.isEmpty())
5632 {
5633 if (!decA.name.isEmpty())
5634 {
5635 defA.name = decA.name;
5636 }
5637 else if (!decAS.name.isEmpty())
5638 {
5639 defA.name = decAS.name;
5640 }
5641 else if (!defAS.name.isEmpty())
5642 {
5643 defA.name = defAS.name;
5644 }
5645 }
5646 }
5647}

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

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4363 of file memberdef.cpp.

4364{
4365 QCString memAnchor = name();
4366 if (!m_args.isEmpty()) memAnchor+=m_args;
4367 if (m_memSpec.isAlias()) // this is for backward compatibility
4368 {
4369 memAnchor.prepend(" = "+m_initializer);
4370 }
4371 memAnchor.prepend(definition()); // actually the method name is now included
4372 // twice, which is silly, but we keep it this way for backward
4373 // compatibility.
4374
4375 // include number of template arguments as well,
4376 // to distinguish between two template
4377 // specializations that only differ in the template parameters.
4378 if (m_tArgList.hasParameters())
4379 {
4380 char buf[20];
4381 qsnprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4382 buf[19]='\0';
4383 memAnchor.prepend(buf);
4384 }
4385 if (!m_requiresClause.isEmpty())
4386 {
4387 memAnchor+=" "+m_requiresClause;
4388 }
4389 if (m_redefineCount>0)
4390 {
4391 char buf[20];
4392 qsnprintf(buf,20,":%d",m_redefineCount);
4393 buf[19]='\0';
4394 memAnchor.append(buf);
4395 }
4396
4397 // convert to md5 hash
4398 uint8_t md5_sig[16];
4399 char sigStr[33];
4400 MD5Buffer(memAnchor.data(),static_cast<unsigned int>(memAnchor.length()),md5_sig);
4401 MD5SigToString(md5_sig,sigStr);
4402 m_anc = QCString("a")+sigStr;
4403}
QCString & append(char c)
Definition qcstring.h:400
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:176
#define qsnprintf
Definition qcstring.h:49

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

◆ setAnonymousEnumType()

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

Implements MemberDefMutable.

Definition at line 5928 of file memberdef.cpp.

5929{
5930 m_annEnumType = md;
5931}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5906 of file memberdef.cpp.

5907{
5908 m_args = as;
5909}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5861 of file memberdef.cpp.

5862{
5863 m_bitfields = QCString(s).simplifyWhiteSpace();
5864}

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

1893{
1896}
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 6042 of file memberdef.cpp.

6043{
6044 m_category = def;
6045}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6052 of file memberdef.cpp.

6053{
6054 m_categoryRelation = md;
6055}

References m_categoryRelation.

◆ setClassDefOfAnonymousType()

void MemberDefImpl::setClassDefOfAnonymousType ( const ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 1999 of file memberdef.cpp.

2000{
2001 m_anonymousType = cd;
2002}

References m_anonymousType.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5959 of file memberdef.cpp.

5960{
5961 m_declFileName = df;
5962 m_declLine = line;
5963 m_declColumn = column;
5964}

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

5806{
5807 m_def=d;
5808}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1939 of file memberdef.cpp.

1940{
1941 m_defTmpArgLists = lists;
1942}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6012 of file memberdef.cpp.

6013{
6015}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1898 of file memberdef.cpp.

1899{
1900 m_docTransferDone = true;
1901}

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

1887{
1890}
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 5923 of file memberdef.cpp.

5924{
5925 m_docEnumValues=value;
5926}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6057 of file memberdef.cpp.

6058{
6059 m_enumBaseType = type;
6060}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5916 of file memberdef.cpp.

5917{
5918 m_classDef = cd;
5921}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4419 of file memberdef.cpp.

4420{
4421 m_enumScope=md;
4423 if (md->getGroupDef())
4424 {
4425 m_group = md->getGroupDef();
4426 m_grouppri = md->getGroupPri();
4431 }
4432}
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 5946 of file memberdef.cpp.

5947{
5948 m_explExt=b;
5949 if (b)
5950 {
5951 setDeclFile(df,line,column);
5952 }
5953 else
5954 {
5955 setDefFile(df,line,column);
5956 }
5957}
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 5810 of file memberdef.cpp.

5811{
5812 m_fileDef=fd;
5816}

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

6008{
6010}

References m_formalTemplateArguments.

◆ setFromAnonymousMember()

void MemberDefImpl::setFromAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 5981 of file memberdef.cpp.

5982{
5983 m_fromAnnMemb=m;
5984}

References m_fromAnnMemb.

◆ setFromAnonymousScope()

void MemberDefImpl::setFromAnonymousScope ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5976 of file memberdef.cpp.

5977{
5978 m_annScope=b;
5979}

References m_annScope.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6017 of file memberdef.cpp.

6018{
6019 m_groupAlias = md;
6020}

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

4408{
4409 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4410 m_group=gd;
4411 m_grouppri=pri;
4412 m_groupFileName=fileName;
4413 m_groupStartLine=startLine;
4414 m_groupHasDocs=hasDocs;
4415 m_groupMember=member;
4417}

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

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

1904{
1907}
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 5901 of file memberdef.cpp.

5902{
5903 m_docProvider = md;
5904}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4513 of file memberdef.cpp.

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

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

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5866 of file memberdef.cpp.

5867{
5868 if (lines!=-1)
5869 {
5870 m_userInitLines=lines;
5871 }
5872}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6032 of file memberdef.cpp.

6033{
6034 m_memDec=md;
6035}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6027 of file memberdef.cpp.

6028{
6029 m_memDef=md;
6030}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4349 of file memberdef.cpp.

4350{
4351 m_memberGroup = grp;
4352}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 5966 of file memberdef.cpp.

5967{
5968 m_grpId=id;
5969}
virtual QCString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5829 of file memberdef.cpp.

5830{
5831 m_memSpec=s;
5832}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5799 of file memberdef.cpp.

5800{
5801 m_mtype=t;
5803}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5818 of file memberdef.cpp.

5819{
5820 m_moduleDef=mod;
5821}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4442 of file memberdef.cpp.

4443{
4444 m_nspace=nd;
4445 setOuterScope(nd);
4446}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5823 of file memberdef.cpp.

5824{
5825 m_prot=p;
5827}

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

5934{
5935 m_proto=p;
5936 if (p)
5937 {
5938 setDeclFile(df,line,column);
5939 }
5940 else
5941 {
5942 setDefFile(df,line,column);
5943 }
5944}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5874 of file memberdef.cpp.

5875{
5876 m_read=r;
5877}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6457 of file memberdef.cpp.

6458{
6459 m_redefineCount=count;
6460}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1591 of file memberdef.cpp.

1592{
1593 m_redefines = md;
1594}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5911 of file memberdef.cpp.

5912{
5913 m_relatedAlso=cd;
5914}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6067 of file memberdef.cpp.

6068{
6069 m_requiresClause = req;
6070}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4585 of file memberdef.cpp.

4586{
4587 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4588 m_sectionMap.emplace(container,sl);
4589}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 4994 of file memberdef.cpp.

4995{
4996 if (ti)
4997 {
4998 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
4999 m_anc=ti->anchor;
5000 setReference(ti->tagName);
5002 }
5003}
void setReference(const QCString &r) override
QCString stripExtension(const QCString &fName)
Definition util.cpp:4986

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

6002{
6005}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5884 of file memberdef.cpp.

5885{
5886 m_tspec=b;
5887}

References m_tspec.

◆ setToAnonymousMember()

void MemberDefImpl::setToAnonymousMember ( MemberDef * m)
overridevirtual

Implements MemberDefMutable.

Definition at line 5986 of file memberdef.cpp.

5987{
5988 m_toAnnMemb=m;
5989}

References m_toAnnMemb.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4906 of file memberdef.cpp.

4907{
4908 m_type = t;
4909}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4901 of file memberdef.cpp.

4902{
4903 m_typeConstraints = al;
4904}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5834 of file memberdef.cpp.

5835{
5836 m_vhdlSpec=s;
5837}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5879 of file memberdef.cpp.

5880{
5881 m_write=w;
5882}

References m_write.

◆ sourceRefName()

QCString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1657 of file memberdef.cpp.

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

5650{
5651 return m_tArgList;
5652}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5730 of file memberdef.cpp.

5731{
5732 return m_templateMaster;
5733}

References m_templateMaster.

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

◆ toAnonymousMember()

MemberDef * MemberDefImpl::toAnonymousMember ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5996 of file memberdef.cpp.

5997{
5998 return m_toAnnMemb;
5999}

References m_toAnnMemb.

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6384 of file memberdef.cpp.

6385{
6386 return m_typeConstraints;
6387}

References m_typeConstraints.

◆ typeString()

QCString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5037 of file memberdef.cpp.

5038{
5039 return m_type;
5040}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4591 of file memberdef.cpp.

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

4179{
4180 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4181 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4182 return (!isAnonymous() &&
4183 (!hideUndocMembers || hasDocumentation()) &&
4184 (!isStatic() || extractStatic) &&
4185 isLinkable()
4186 );
4187}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4106 of file memberdef.cpp.

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

4269{
4270 QCString returnType = typeString();
4271 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4272 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=-1;
4273
4274 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4275 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4276 {
4277 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4278 if (!defArgList.trailingReturnType().isEmpty())
4279 {
4280 QCString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4281 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4282 }
4283 }
4284 if (!Config_getBool(EXTRACT_ALL) &&
4285 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4286 Config_getBool(WARN_NO_PARAMDOC) &&
4287 isFunction() &&
4288 !isDeleted() &&
4289 !isReference() &&
4291 {
4293 {
4295 "parameters of member {} are not documented",
4296 qualifiedName());
4297 }
4299 hasDocumentation() && !returnType.isEmpty() &&
4300 !( // not one of the cases where nothing is returned
4301 isVoidReturn || // void return type
4302 isFortranSubroutine || // fortran subroutine
4303 isConstructor() || // a constructor
4304 isDestructor() || // or a destructor
4305 isFriend() // or a friend
4306 )
4307 )
4308 {
4310 "return type of member {} is not documented",
4311 qualifiedName());
4312 }
4313 }
4314 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4316 (isVoidReturn || // void return type
4317 isFortranSubroutine || // fortran subroutine
4318 isConstructor() || // a constructor
4319 isDestructor())) // or destructor
4320 {
4321 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4322 qualifiedName());
4323 }
4324}
QCString trailingReturnType() const
Definition arguments.h:114
static bool suppressDocWarnings
Definition doxygen.h:130
bool isDocsForDefinition() const override
bool endsWith(const char *s) const
Definition qcstring.h:528
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112

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

Referenced by warnIfUndocumented(), and writeDocumentation().

◆ writeDeclaration()

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

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

Implements MemberDef.

Definition at line 2209 of file memberdef.cpp.

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

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

References _writeCallerGraph(), _writeCallGraph(), _writeCategoryRelation(), _writeEnumValues(), _writeExamples(), _writeGroupInclude(), _writeMultiLineInitializer(), _writeReimplementedBy(), _writeReimplements(), _writeTemplatePrefix(), _writeTypeConstraints(), OutputList::addLabel(), Definition::anchor(), anchor(), QCString::append(), 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(), getAnonymousEnumType(), DefinitionMixin< MemberDefMutable >::getBodyDef(), getClassDef(), getClassDefOfAnonymousType(), getFileDef(), getGroupDef(), getLabels(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), getModuleDef(), getNamespaceDef(), Definition::getOutputFileBase(), getOutputFileBase(), Definition::getReference(), 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(), MemberDef::isEnumStruct(), isEnumStruct(), isEnumValue(), isFunction(), isId(), isLinkable(), VhdlDocGen::isMisc(), isObjCMethod(), ClassDef::isObjectiveC(), isSliceLocal(), isStatic(), MemberDef::isStrong(), isStrong(), isTemplateSpecialization(), isTypeAlias(), isTypedef(), isVariable(), QCString::left(), QCString::length(), linkifyText(), DefinitionMixin< MemberDefMutable >::localName(), m_defArgList, m_defTmpArgLists, m_enumBaseType, m_initializer, m_metaData, m_tArgList, m_templateMaster, m_toAnnMemb, QCString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), OutputList::popGeneratorState(), prefix, reg::Match::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(), reg::SubMatch::str(), QCString::stripPrefix(), substitute(), reg::Match::suffix(), toGroupDef(), TRUE, Definition::TypeFile, Definition::TypeGroup, warnIfUndocumentedParams(), writeDefArgumentList(), writeExceptionList(), DefinitionMixin< MemberDefMutable >::writeInlineCode(), OutputList::writeLabel(), OutputList::writeNonBreakableSpace(), OutputList::writeObjectLink(), 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 4766 of file memberdef.cpp.

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

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

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

Referenced by writeDeclaration(), and writeEnumDeclaration().

◆ writeMemberDocSimple()

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

Implements MemberDefMutable.

Definition at line 4007 of file memberdef.cpp.

4008{
4009 Definition *scope = getOuterScope();
4010 QCString doxyName = name();
4011 QCString doxyArgs = argsString();
4012 QCString memAnchor = anchor();
4013 QCString cfname = getOutputFileBase();
4014 QCString cname;
4015 if (scope) cname = scope->name();
4016 if (doxyName.at(0)=='@')
4017 {
4018 doxyName="__unnamed__";
4019 }
4020
4021 LinkifyTextOptions options;
4022 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
4023
4024 if (container && container->definitionType()==Definition::TypeClass &&
4025 !(toClassDef(container))->isJavaEnum())
4026 {
4028 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4029 ol.addLabel(cfname,memAnchor);
4030
4031 QCString ts = fieldType();
4032
4033 if (isFunctionPtr())
4034 ts = m_type + m_args;
4035
4036 linkifyText(TextGeneratorOLImpl(ol),ts,options);
4037 ol.endDoxyAnchor(cfname,memAnchor);
4039 }
4040
4042 ol.docify(doxyName);
4043 if (isVariable() && !argsString().isEmpty() && !isObjCMethod() && !isFunctionPtr())
4044 {
4045 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
4046 }
4047 if (!m_bitfields.isEmpty()) // add bitfields
4048 {
4049 linkifyText(TextGeneratorOLImpl(ol),m_bitfields,options);
4050 }
4051 if (hasOneLineInitializer() && !isDefine())
4052 {
4053 ol.writeString(" ");
4054 linkifyText(TextGeneratorOLImpl(ol),m_initializer.simplifyWhiteSpace(),options);
4055 }
4057
4059
4060 QCString brief = briefDescription();
4061 QCString detailed = documentation();
4062
4063 /* write brief description */
4064 if (!brief.isEmpty())
4065 {
4067 briefLine(),
4068 getOuterScope()?getOuterScope():container,this,
4069 brief,
4070 DocOptions()
4071 .setSingleLine(true));
4072 }
4073
4074 /* write detailed description */
4075 if (!detailed.isEmpty())
4076 {
4077 if (!brief.isEmpty())
4078 {
4080 ol.lineBreak();
4082 }
4083 ol.generateDoc(docFile(),
4084 docLine(),
4085 getOuterScope()?getOuterScope():container,this,
4086 detailed+"\n",
4087 DocOptions());
4088 }
4089
4090 ol.endInlineMemberDoc();
4091}
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

References OutputList::addLabel(), 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(), getOutputFileBase(), hasOneLineInitializer(), Html, isDefine(), QCString::isEmpty(), isFunctionPtr(), isObjCMethod(), isVariable(), OutputList::lineBreak(), linkifyText(), m_args, m_bitfields, m_defArgList, m_initializer, m_type, Definition::name(), DefinitionMixin< MemberDefMutable >::name(), LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), OutputList::startDoxyAnchor(), OutputList::startInlineMemberDoc(), OutputList::startInlineMemberName(), OutputList::startInlineMemberType(), toClassDef(), Definition::TypeClass, and OutputList::writeString().

◆ writeTagFile()

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

Implements MemberDefMutable.

Definition at line 4609 of file memberdef.cpp.

4610{
4611 if (!isLinkableInProject()) return;
4612 if (!showNamespaceMembers && getNamespaceDef()) return;
4613 tagFile << " <member kind=\"";
4614 if (m_mtype == MemberType::Enumeration)
4615 {
4616 tagFile << "enumeration";
4617 }
4618 else
4619 {
4620 tagFile << to_string_lower(m_mtype);
4621 }
4622 if (m_prot!=Protection::Public)
4623 {
4624 tagFile << "\" protection=\"";
4625 if (m_prot==Protection::Protected) tagFile << "protected";
4626 else if (m_prot==Protection::Package) tagFile << "package";
4627 else /* Private */ tagFile << "private";
4628 }
4629 if (m_virt!=Specifier::Normal)
4630 {
4631 tagFile << "\" virtualness=\"";
4632 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4633 else /* Pure */ tagFile << "pure";
4634 }
4635 if (isStatic())
4636 {
4637 tagFile << "\" static=\"yes";
4638 }
4639 tagFile << "\">\n";
4640 if (typeString()!=QCString("@"))
4641 {
4642 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4643 }
4644 QCString fn = getOutputFileBase();
4646 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4647 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4648 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4649 QCString idStr = id();
4650 if (!idStr.isEmpty())
4651 {
4652 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4653 }
4654 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4655 if (isStrong())
4656 {
4657 for (const auto &fmd : m_enumFields)
4658 {
4659 if (!fmd->isReference())
4660 {
4661 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4662 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4663 idStr = fmd->id();
4664 if (!idStr.isEmpty())
4665 {
4666 tagFile << "\" clangid=\"" << convertToXML(idStr);
4667 }
4668 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4669 }
4670 }
4671 }
4672 writeDocAnchorsToTagFile(tagFile);
4673 tagFile << " </member>\n";
4674}
void writeDocAnchorsToTagFile(TextStream &fs) const override
QCString convertToXML(const QCString &s, bool keepEntities, const bool citeEntry)
Definition util.cpp:3951
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4964

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

Member Data Documentation

◆ m_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_annScope

bool MemberDefImpl::m_annScope = false
private

◆ m_anonymousPrefix

QCString MemberDefImpl::m_anonymousPrefix
private

Definition at line 501 of file memberdef.cpp.

Referenced by anonymousMemberPrefix(), and deepCopy().

◆ m_anonymousType

const ClassDef* MemberDefImpl::m_anonymousType = nullptr
private

◆ m_args

QCString MemberDefImpl::m_args
private

◆ m_bitfields

QCString MemberDefImpl::m_bitfields
private

◆ m_cachedResolvedType

QCString MemberDefImpl::m_cachedResolvedType
private

Definition at line 478 of file memberdef.cpp.

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

◆ m_cachedTypedefTemplSpec

QCString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 477 of file memberdef.cpp.

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

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 476 of file memberdef.cpp.

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

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

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

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

◆ m_declFileName

QCString MemberDefImpl::m_declFileName
private

Definition at line 519 of file memberdef.cpp.

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

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

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

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

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 514 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 419 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 511 of file memberdef.cpp.

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

◆ m_explicitOutputFileBase

QCString MemberDefImpl::m_explicitOutputFileBase
private

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

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

◆ m_fromAnnMemb

MemberDef* MemberDefImpl::m_fromAnnMemb = nullptr
private

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

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

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

◆ m_groupFileName

QCString MemberDefImpl::m_groupFileName
private

Definition at line 471 of file memberdef.cpp.

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

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 513 of file memberdef.cpp.

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

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

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

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

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 472 of file memberdef.cpp.

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

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

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

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

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 502 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 492 of file memberdef.cpp.

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

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 493 of file memberdef.cpp.

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

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 510 of file memberdef.cpp.

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

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

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

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

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

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

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

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

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

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

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 416 of file memberdef.cpp.

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

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 415 of file memberdef.cpp.

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

◆ m_memSpec

◆ m_metaData

QCString MemberDefImpl::m_metaData
private

Definition at line 458 of file memberdef.cpp.

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

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

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

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

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 522 of file memberdef.cpp.

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

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

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

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

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 413 of file memberdef.cpp.

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

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

Definition at line 412 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 417 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 464 of file memberdef.cpp.

Referenced by deepCopy(), getSectionList(), and setSectionList().

◆ m_stat

bool MemberDefImpl::m_stat = false
private

◆ m_tArgList

◆ m_templateMaster

◆ m_toAnnMemb

MemberDef* MemberDefImpl::m_toAnnMemb = nullptr
private

◆ m_tspec

bool MemberDefImpl::m_tspec = false
private

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