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

Public Member Functions

 MemberDefImpl (const DString &defFileName, int defLine, int defColumn, const DString &type, const DString &name, const DString &args, const DString &excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList &tal, const ArgumentList &al, const DString &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
DString getOutputFileBase () const override
DString getReference () const override
DString anchor () const override
DString declaration () const override
DString definition () const override
DString typeString () const override
DString argsString () const override
DString excpString () const override
DString bitfieldString () const override
DString extraTypeChars () const override
const DStringinitializer () const override
int initializerLines () const override
TypeSpecifier getMemberSpecifiers () const override
VhdlSpecifier getVhdlSpecifiers () const override
const MemberListgetSectionList (const Definition *) const override
DString 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
DString getReadAccessor () const override
DString getWriteAccessor () const override
Grouping::GroupPri_t getGroupPri () const override
DString getGroupFileName () const override
int getGroupStartLine () const override
bool getGroupHasDocs () const override
DString qualifiedName () const override
DString objCMethodName (bool localLink, bool showStatic) const override
Protection protection () const override
Specifier virtualness (int count=0) const override
MemberType memberType () const override
DString 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 DString &type) override
DString 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 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
DString sourceRefName () const override
const MemberDeftemplateMaster () const override
DString getScopeString () const override
const ClassDefgetClassDefOfAnonymousType () const override
bool isTypedefValCached () const override
const ClassDefgetCachedTypedefVal () const override
DString getCachedTypedefTemplSpec () const override
DString getCachedResolvedTypedef () const override
MemberDefmemberDefinition () const override
MemberDefmemberDeclaration () const override
const MemberDefinheritsDocsFrom () const override
const MemberDefgetGroupAlias () const override
ClassDefcategory () const override
const MemberDefcategoryRelation () const override
DString displayName (bool=true) const override
DString getDeclType () const override
StringVector getLabels (const Definition *container) const override
const ArgumentListtypeConstraints () const override
DString requiresClause () const override
DString documentation () const override
DString briefDescription (bool abbr=false) const override
DString fieldType () const override
bool isReference () const override
DString getDeclFileName () const override
int getDeclLine () const override
int getDeclColumn () const override
void setMemberType (MemberType t) override
void setDefinition (const DString &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 DString &i) override
void setBitfields (const DString &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 DString &fileName, int startLine, bool hasDocs, MemberDef *member=nullptr) override
void setReadAccessor (const DString &r) override
void setWriteAccessor (const DString &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 DString &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 DString &anchor, const DString &name, const DString &file) override
void setPrototype (bool p, const DString &df, int line, int column) override
void setExplicitExternal (bool b, const DString &df, int line, int column) override
void setDeclFile (const DString &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 DString &t) override
void setNamespace (NamespaceDef *nd) override
void setMemberGroup (MemberGroup *grp) override
void setMemberGroupId (int id) override
void makeImplementationDetail () 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 DString &templSpec, const DString &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 DString &d, const DString &docFile, int docLine, bool stripWhiteSpace=true) override
void setBriefDescription (const DString &b, const DString &briefFile, int briefLine) override
void setInbodyDocumentation (const DString &d, const DString &inbodyFile, int inbodyLine) override
void setHidden (bool b) override
void setDocTransferDone () override
void setExplicitInherited (bool b) override
void setRequiresClause (const DString &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 DString &inheritId=DString()) const override
void writeDocumentation (const MemberList *ml, int memCount, int memTotal, OutputList &ol, const DString &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 DString &defFileName, int defLine, int defColumn, const DString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=true)
DefinitionMixinoperator= (const DefinitionMixin &other)
 ~DefinitionMixin () override=default
bool isAlias () const override
const DStringname () const override
bool isAnonymous () const override
const DStringlocalName () const override
DString symbolName () const override
DString getSourceFileBase () const override
DString getSourceAnchor () const override
int docLine () const override
DString docFile () const override
DString briefDescriptionAsTooltip () const override
int briefLine () const override
DString inbodyDocumentation () const override
DString inbodyFile () const override
int inbodyLine () const override
DString briefFile () const override
DString getDefFileName () const override
DString 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
DString externalReference (const DString &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 DString &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
DString id () const override
const SectionRefsgetSectionRefs () const override
void setName (const DString &name) override
void setId (const DString &name) override
void setDefFile (const DString &df, int defLine, int defColumn) override
void setReference (const DString &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 DString &sourceRefName) override
void addSourceReferences (MemberDef *md, const DString &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 DString &scopeName) const override
bool hasSourceRefs () const override
bool hasSourceReffedBy () const override
void writeSourceRefs (OutputList &ol, const DString &scopeName) const override
void writeSourceReffedBy (OutputList &ol, const DString &scopeName) const override
bool hasRequirementRefs () const override
void writeRequirementRefs (OutputList &ol) const override
void makePartOfGroup (GroupDef *gd) override
void writeNavigationPath (OutputList &ol) const override
DString navigationPathAsString () const override
void writeQuickMemberLinks (OutputList &ol, const MemberDef *md) const override
void writeSummaryLinks (OutputList &ol) const override
void writePageNavigation (OutputList &ol) const override
DString pathFragment () const override
void writeDocAnchorsToTagFile (TextStream &fs) const override
void setLocalName (const DString &name) override
void writeToc (OutputList &ol, const LocalToc &lt) const override
void computeTooltip () override
void _setSymbolName (const DString &name) override
DString _symbolName () const override

Private Member Functions

void _computeLinkableInProject ()
void _computeIsConstructor ()
void _computeIsDestructor ()
void _writeGroupInclude (OutputList &ol, bool inGroup) const
void _writeMultiLineInitializer (OutputList &ol, const DString &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 DString &cfname, const DString &ciname, const DString &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 DString &t, const DString &a, const DString &e, Protection p, Specifier v, bool s, Relationship r, MemberType mt, const ArgumentList &tal, const ArgumentList &al, const DString &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
DString m_type
DString m_args
DString m_def
DString m_anc
Specifier m_virt = Specifier::Normal
Protection m_prot = Protection::Public
DString m_decl
DString m_bitfields
DString m_read
DString m_write
DString m_exception
DString m_initializer
DString m_extraTypeChars
DString m_enumBaseType
DString 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
ArgumentList m_defArgList
ArgumentList m_declArgList
ArgumentList m_tArgList
ArgumentList m_typeConstraints
const MemberDefm_templateMaster = nullptr
std::optional< ArgumentListm_formalTemplateArguments
ArgumentLists m_defTmpArgLists
DString 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
DString m_groupFileName
int m_groupStartLine = 0
MemberDefm_groupMember = nullptr
bool m_isTypedefValCached = false
const ClassDefm_cachedTypedefValue = nullptr
DString m_cachedTypedefTemplSpec
DString m_cachedResolvedType
const MemberDefm_docProvider = nullptr
DString m_explicitOutputFileBase
bool m_explicitInherited = false
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_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
DString 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 DString & df,
int dl,
int dc,
const DString & t,
const DString & na,
const DString & a,
const DString & e,
Protection p,
Specifier v,
bool s,
Relationship r,
MemberType mt,
const ArgumentList & tal,
const ArgumentList & al,
const DString & 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 1433 of file memberdef.cpp.

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

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(), and NON_COPYABLE.

Member Function Documentation

◆ _computeIsConstructor()

void MemberDefImpl::_computeIsConstructor ( )
private

Definition at line 4624 of file memberdef.cpp.

4625{
4626 m_isConstructorCached=1; // false
4627 if (getClassDef())
4628 {
4629 if (m_isDMember) // for D
4630 {
4631 m_isConstructorCached = name()=="this" ? 2 : 1;
4632 return;
4633 }
4634 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4635 {
4636 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4637 return;
4638 }
4639 else if (name()=="__init__" &&
4640 getLanguage()==SrcLangExt::Python) // for Python
4641 {
4642 m_isConstructorCached = 2; // true
4643 return;
4644 }
4645 else // for other languages
4646 {
4647 DString locName = getClassDef()->localName();
4648 size_t i=locName.find('<');
4649 if (i==DString::npos) // not a template class
4650 {
4651 m_isConstructorCached = name()==locName ? 2 : 1;
4652 }
4653 else
4654 {
4655 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4656 }
4657 return;
4658 }
4659 }
4660}
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:183
size_t find(char c, size_t pos=0) const
Definition dstring.h:244
DString left(size_t len) const
Definition dstring.h:311
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual const DString & name() const =0
virtual const DString & localName() const =0
const ClassDef * getClassDef() const override

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

Referenced by isConstructor().

◆ _computeIsDestructor()

void MemberDefImpl::_computeIsDestructor ( )
private

Definition at line 4674 of file memberdef.cpp.

4675{
4676 bool isDestructor = false;
4677 if (m_isDMember) // for D
4678 {
4679 isDestructor = name()=="~this";
4680 }
4681 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4682 {
4683 isDestructor = name()=="__destruct";
4684 }
4685 else if (name()=="__del__" &&
4686 getLanguage()==SrcLangExt::Python) // for Python
4687 {
4688 isDestructor = true;
4689 }
4690 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4691 {
4692 isDestructor = typeString()=="final";
4693 }
4694 else // other languages
4695 {
4696 isDestructor =
4697 (name().find('~')!=DString::npos || name().find('!')!=DString::npos) // The ! is for C++/CLI
4698 && name().find("operator")==DString::npos;
4699 }
4701}
bool isDestructor() const override
DString typeString() const override

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

Referenced by isDestructor().

◆ _computeLinkableInProject()

void MemberDefImpl::_computeLinkableInProject ( )
private

Definition at line 1782 of file memberdef.cpp.

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

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

2958{
2959 const MemberVector &bml=reimplementedBy();
2960 size_t count=0;
2961 for (const auto &bmd : bml)
2962 {
2963 const ClassDef *bcd=bmd->getClassDef();
2964 // count the members that directly inherit from md and for
2965 // which the member and class are visible in the docs.
2966 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
2967 {
2968 count++;
2969 }
2970 }
2971 return count;
2972}
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 5640 of file memberdef.cpp.

5641{
5642 bool enabled = m_hasCallerGraph &&
5643 (isFunction() || isSlot() || isSignal()) &&
5644 Config_getBool(HAVE_DOT);
5645 if (enabled)
5646 {
5647 bool trivial = DotCallGraph::isTrivial(this,true);
5648 return !trivial;
5649 }
5650 return false;
5651}
bool isTrivial() const
bool isFunction() const override
bool m_hasCallerGraph
bool isSlot() const override
bool isSignal() const override

References Config_getBool, isFunction(), isSignal(), isSlot(), DotCallGraph::isTrivial(), and m_hasCallerGraph.

Referenced by _writeCallerGraph(), _writeTagData(), and hasDetailedDescription().

◆ _hasVisibleCallGraph()

bool MemberDefImpl::_hasVisibleCallGraph ( ) const
private

Definition at line 5622 of file memberdef.cpp.

5623{
5624 bool enabled = m_hasCallGraph &&
5625 (isFunction() || isSlot() || isSignal()) &&
5626 Config_getBool(HAVE_DOT);
5627 if (enabled)
5628 {
5629 bool trivial = DotCallGraph::isTrivial(this,false);
5630 return !trivial;
5631 }
5632 return false;
5633}

References Config_getBool, isFunction(), isSignal(), isSlot(), DotCallGraph::isTrivial(), and m_hasCallGraph.

Referenced by _writeCallGraph(), _writeTagData(), and hasDetailedDescription().

◆ _isAnonymousBitField()

bool MemberDefImpl::_isAnonymousBitField ( ) const
private

Definition at line 2178 of file memberdef.cpp.

2179{
2180 return !m_bitfields.empty() && name().startsWith("__pad"); // anonymous bitfield
2181}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:153
bool startsWith(const char *s) const
Definition dstring.h:589
DString m_bitfields

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

Referenced by _writeTagData(), warnIfUndocumented(), and writeDeclaration().

◆ _isReimplements()

bool MemberDefImpl::_isReimplements ( ) const
private

Definition at line 2885 of file memberdef.cpp.

2886{
2887 const MemberDef *bmd=reimplements();
2888 const ClassDef *bcd=nullptr;
2889 if (bmd && (bcd=bmd->getClassDef()))
2890 {
2891 // write class that contains a member that is reimplemented by this one
2892 if (bcd->isLinkable())
2893 {
2894 return true;
2895 }
2896 }
2897 return false;
2898}
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 2863 of file memberdef.cpp.

2864{
2866 {
2867 DotCallGraph callerGraph(this, true);
2868 if (callerGraph.isTooBig())
2869 {
2870 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2871 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2872 }
2873 else if (!callerGraph.isTrivial())
2874 {
2875 msg("Generating caller graph for function {}\n",qualifiedName());
2877 ol.startCallGraph();
2879 ol.endCallGraph(callerGraph);
2880 ol.enableAll();
2881 }
2882 }
2883}
bool _hasVisibleCallerGraph() const
void parseText(const DString &textStr)
void disable(OutputType o)
void startCallGraph()
Definition outputlist.h:656
void endCallGraph(DotCallGraph &g)
Definition outputlist.h:658
void enableAll()
virtual DString 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, Translator::trCallerGraph(), and warn_uncond.

Referenced by writeDocumentation().

◆ _writeCallGraph()

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

Definition at line 2840 of file memberdef.cpp.

2841{
2842 // write call graph
2844 {
2845 DotCallGraph callGraph(this,false);
2846 if (callGraph.isTooBig())
2847 {
2848 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2849 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2850 }
2851 else if (!callGraph.isTrivial())
2852 {
2853 msg("Generating call graph for function {}\n",qualifiedName());
2855 ol.startCallGraph();
2857 ol.endCallGraph(callGraph);
2858 ol.enableAll();
2859 }
2860 }
2861}
bool _hasVisibleCallGraph() const
virtual DString trCallGraph()=0

References _hasVisibleCallGraph(), Config_getInt, OutputList::disable(), OutputList::enableAll(), OutputList::endCallGraph(), DotCallGraph::isTooBig(), DotCallGraph::isTrivial(), Man, msg, DotCallGraph::numNodes(), OutputList::parseText(), qualifiedName(), OutputList::startCallGraph(), theTranslator, Translator::trCallGraph(), and warn_uncond.

Referenced by writeDocumentation().

◆ _writeCategoryRelation()

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

Definition at line 3033 of file memberdef.cpp.

3034{
3035 if (getClassDef()) // this should be a member of a class/category
3036 {
3037 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3038 // qPrint(name()),
3039 // m_category ? qPrint(m_category->name()) : "<none>",
3040 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3041 // qPrint(m_classDef->name()),
3042 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3043 // );
3044 DString text;
3045 DString ref;
3046 DString file;
3047 DString anc;
3048 DString name;
3049 size_t i=DString::npos;
3051 {
3052 if (m_category)
3053 {
3054 // this member is in a normal class and implements method categoryRelation from category
3055 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3058 }
3059 else if (getClassDef()->categoryOf())
3060 {
3061 // this member is part of a category so link to the corresponding class member of the class we extend
3062 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3063 text = theTranslator->trExtendsClass();
3065 }
3066 i=text.find("@0");
3067 if (i!=DString::npos)
3068 {
3069 const MemberDef *md = m_categoryRelation;
3070 ref = md->getReference();
3071 file = md->getOutputFileBase();
3072 anc = md->anchor();
3073 }
3074 }
3075 if (i!=DString::npos && !name.empty())
3076 {
3077 ol.startParagraph();
3078 ol.parseText(text.left(i));
3079 ol.writeObjectLink(ref,file,anc,name);
3080 ol.parseText(text.mid(i+2));
3081 ol.endParagraph();
3082 }
3083 }
3084}
virtual ClassDef * categoryOf() const =0
Returns the class of which this is a category (Objective-C only).
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:323
virtual DString displayName(bool includeScope=true) const =0
virtual DString anchor() const =0
virtual DString getReference() const =0
virtual DString getOutputFileBase() const =0
const MemberDef * m_categoryRelation
ClassDef * m_category
void startParagraph(const DString &classDef=DString())
Definition outputlist.h:407
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name)
Definition outputlist.h:439
void endParagraph()
Definition outputlist.h:409
virtual DString trProvidedByCategory()=0
virtual DString trExtendsClass()=0

References Definition::anchor(), ClassDef::categoryOf(), Definition::displayName(), DString::empty(), OutputList::endParagraph(), DString::find(), getClassDef(), Definition::getOutputFileBase(), Definition::getReference(), Definition::isLinkable(), DString::left(), m_category, m_categoryRelation, DString::mid(), DefinitionMixin< MemberDefMutable >::name(), DString::npos, OutputList::parseText(), OutputList::startParagraph(), theTranslator, Translator::trExtendsClass(), Translator::trProvidedByCategory(), and OutputList::writeObjectLink().

Referenced by writeDocumentation().

◆ _writeEnumValues()

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

Definition at line 3107 of file memberdef.cpp.

3110{
3111 // For enum, we also write the documented enum values
3112 if (isEnumerate())
3113 {
3114 bool first=true;
3115 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3116 bool hasInits = false;
3117 if (hasEnumValues())
3118 {
3119 for (const auto &fmd : enumFieldList())
3120 {
3121 if (fmd->isLinkable())
3122 {
3123 if (!fmd->initializer().empty())
3124 {
3125 hasInits = true;
3126 break;
3127 }
3128 }
3129 }
3130 }
3131 for (const auto &fmd : enumFieldList())
3132 {
3133 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3134 if (fmd->isLinkable())
3135 {
3136 if (first)
3137 {
3139 first=false;
3140 }
3141
3142 ol.startDescTableRow();
3143 ol.addIndexItem(fmd->name(),ciname);
3144 ol.addIndexItem(ciname,fmd->name());
3145
3147 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3148 ol.addLabel(cfname,fmd->anchor());
3149 ol.docify(fmd->name());
3151 ol.writeString(" ");
3152 ol.enableAll();
3153 ol.endDoxyAnchor(cfname,fmd->anchor());
3154 ol.endDescTableTitle();
3155 if (hasInits)
3156 {
3157 ol.startDescTableInit();
3158 if (!fmd->initializer().empty())
3159 {
3160 DString initStr = fmd->initializer().stripWhiteSpace();
3161 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3163 ol.writeString("(");
3164 ol.enableAll();
3165 ol.docify(initStr);
3167 ol.writeString(")");
3168 ol.enableAll();
3169 }
3170 ol.endDescTableInit();
3171 }
3172 ol.startDescTableData();
3173
3174 bool hasBrief = !fmd->briefDescription().empty();
3175 bool hasDetails = !fmd->documentation().empty();
3176
3177 if (hasBrief)
3178 {
3179 ol.generateDoc(fmd->briefFile(),
3180 fmd->briefLine(),
3181 getOuterScope()?getOuterScope():container,
3182 fmd,
3183 fmd->briefDescription(),
3184 DocOptions()
3185 .setIndexWords(true));
3186 }
3187 if (hasDetails)
3188 {
3189 ol.generateDoc(fmd->docFile(),
3190 fmd->docLine(),
3191 getOuterScope()?getOuterScope():container,
3192 fmd,
3193 fmd->documentation()+"\n",
3194 DocOptions()
3195 .setIndexWords(true));
3196 }
3197 ol.endDescTableData();
3198 ol.endDescTableRow();
3199 }
3200 }
3201 if (!first)
3202 {
3203 ol.endDescTable();
3204 }
3205 }
3206}
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:342
virtual DString briefDescription(bool abbreviate=false) const =0
virtual DString documentation() const =0
virtual Definition * getOuterScope() const =0
bool isEnumerate() const override
bool hasEnumValues() const override
const MemberVector & enumFieldList() const override
void endDescTableRow()
Definition outputlist.h:634
void startDescTableInit()
Definition outputlist.h:640
void addIndexItem(const DString &s1, const DString &s2)
Definition outputlist.h:590
void endDescTable()
Definition outputlist.h:630
void docify(const DString &s)
Definition outputlist.h:437
void endDescTableTitle()
Definition outputlist.h:638
void writeString(const DString &text)
Definition outputlist.h:411
void endDoxyAnchor(const DString &fn, const DString &anchor)
Definition outputlist.h:541
void startDescTable(const DString &title, const bool hasInits)
Definition outputlist.h:628
void endDescTableData()
Definition outputlist.h:646
void startDescTableTitle()
Definition outputlist.h:636
void addLabel(const DString &fName, const DString &anchor)
Definition outputlist.h:543
void startDescTableData()
Definition outputlist.h:644
void disableAllBut(OutputType o)
void generateDoc(const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &docStr, const DocOptions &options)
void startDoxyAnchor(const DString &fName, const DString &manName, const DString &anchor, const DString &name, const DString &args)
Definition outputlist.h:537
void endDescTableInit()
Definition outputlist.h:642
void startDescTableRow()
Definition outputlist.h:632
virtual DString 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, DString::mid(), OutputList::startDescTable(), OutputList::startDescTableData(), OutputList::startDescTableInit(), OutputList::startDescTableRow(), OutputList::startDescTableTitle(), OutputList::startDoxyAnchor(), DString::startsWith(), DString::stripWhiteSpace(), theTranslator, Translator::trEnumerationValues(), and OutputList::writeString().

Referenced by writeDocumentation().

◆ _writeExamples()

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

Definition at line 3086 of file memberdef.cpp.

3087{
3088 // write the list of examples that use this member
3089 if (hasExamples())
3090 {
3091 ol.startExamples();
3092 ol.startDescForItem();
3094 ol.endDescForItem();
3095 ol.endExamples();
3096 }
3097}
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:1179

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

3295{
3296 // only write out the include file if this is not part of a class or file
3297 // definition
3298 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3299 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3300 const FileDef *fd = getFileDef();
3301 DString nm;
3302 if (inGroup && fd && showGroupedMembInc)
3303 {
3304 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3305 {
3307 }
3308 else
3309 {
3310 nm = fd->name();
3311 }
3312 }
3313 if (!nm.empty())
3314 {
3315 ol.startParagraph();
3316 ol.startTypewriter();
3317 SrcLangExt lang = getLanguage();
3318 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3319 if (isIDLorJava)
3320 {
3321 ol.docify("import ");
3322 }
3323 else
3324 {
3325 ol.docify("#include ");
3326 }
3327
3328 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3329
3330 if (fd && fd->isLinkable())
3331 {
3332 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3333 }
3334 else
3335 {
3336 ol.docify(nm);
3337 }
3338
3339 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3340
3341 ol.endTypewriter();
3342 ol.endParagraph();
3343 }
3344}
virtual DString absFilePath() const =0
void startTypewriter()
Definition outputlist.h:449
void endTypewriter()
Definition outputlist.h:451
#define Config_getList(name)
Definition config.h:38
SrcLangExt
Definition types.h:207
DString stripFromIncludePath(const DString &path)
Definition util.cpp:334

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

Referenced by writeDocumentation().

◆ _writeMultiLineInitializer()

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

Definition at line 3346 of file memberdef.cpp.

3347{
3348 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3349 ol.startBold();
3350 if (m_mtype==MemberType::Define)
3352 else
3354 ol.endBold();
3355 DString langCorrected = getDefFileExtension();
3357 if (srcLangExt == SrcLangExt::Lex)
3358 {
3359 langCorrected = ".doxygen_lex_c";
3360 srcLangExt = SrcLangExt::Cpp;
3361 }
3362 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3363 intf->resetCodeParserState();
3364 auto &codeOL = ol.codeGenerators();
3365 codeOL.startCodeFragment("DoxyCode");
3366 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3367 CodeParserOptions()
3369 .setInlineFragment(true)
3370 .setMemberDef(this)
3371 .setShowLineNumbers(false)
3372 .setSearchCtx(this)
3373 );
3374 codeOL.endCodeFragment("DoxyCode");
3375}
virtual DString getDefFileExtension() const =0
static ParserManager * parserManager
Definition doxygen.h:129
void setFileDef(FileDef *fd) override
DString m_initializer
void startCodeFragment(const DString &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 DString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:254
virtual DString trDefineValue()=0
virtual DString trInitialValue()=0
SrcLangExt getLanguageFromFileName(const DString &fileName, SrcLangExt defLang)
Definition util.cpp:5258

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

Referenced by writeDocumentation().

◆ _writeReimplementedBy()

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

Definition at line 2974 of file memberdef.cpp.

2975{
2976 const MemberVector &bml=reimplementedBy();
2977 size_t count = _countReimplementedBy();
2978 if (count>0)
2979 {
2980 auto replaceFunc = [&bml,&ol](size_t entryIndex)
2981 {
2982 size_t cnt=0;
2983 auto it = bml.begin();
2984 // find the entryIndex-th documented entry in the inheritance list.
2985 const MemberDef *bmd = nullptr;
2986 const ClassDef *bcd = nullptr;
2987 while (it!=bml.end())
2988 {
2989 bmd = *it;
2990 bcd = bmd->getClassDef();
2991 if ( bmd->isLinkable() && bcd->isLinkable())
2992 {
2993 if (cnt==entryIndex) break;
2994 cnt++;
2995 }
2996 ++it;
2997 }
2998
2999 if (bcd && bmd) // write link for marker
3000 {
3001 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3002 // bmd->anchor(),bcd->name());
3004 bmd->anchor(),bcd->displayName());
3005
3006 if (bmd->isLinkableInProject() )
3007 {
3008 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3009 }
3010 }
3011 };
3012
3013 DString reimplInLine;
3014 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3015 {
3016 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3017 }
3018 else
3019 {
3020 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3021 }
3022
3023 // write the list of classes that overwrite this member
3024 ol.startParagraph();
3025 writeMarkerList(ol,
3026 reimplInLine.str(),
3027 count,
3028 replaceFunc);
3029 ol.endParagraph();
3030 }
3031}
@ Interface
Definition classdef.h:112
const std::string & str() const
Definition dstring.h:634
size_t _countReimplementedBy() const
iterator end() noexcept
Definition memberlist.h:56
iterator begin() noexcept
Definition memberlist.h:54
virtual DString trImplementedInList(int numEntries)=0
virtual DString trReimplementedInList(int numEntries)=0
void writePageRef(OutputList &ol, const DString &cn, const DString &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:1128

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(), DString::str(), theTranslator, Translator::trImplementedInList(), Translator::trReimplementedInList(), writeMarkerList(), OutputList::writeObjectLink(), and writePageRef().

Referenced by writeDocumentation().

◆ _writeReimplements()

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

Definition at line 2899 of file memberdef.cpp.

2900{
2901 const MemberDef *bmd=reimplements();
2902 const ClassDef *bcd=nullptr;
2903 if (bmd && (bcd=bmd->getClassDef()))
2904 {
2905 // write class that contains a member that is reimplemented by this one
2906 if (bcd->isLinkable())
2907 {
2908 ol.startParagraph();
2909 DString reimplFromLine;
2910 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
2911 {
2912 reimplFromLine = theTranslator->trReimplementedFromList(1);
2913 }
2914 else
2915 {
2916 reimplFromLine = theTranslator->trImplementedFromList(1);
2917 }
2918 if (size_t markerPos = reimplFromLine.find("@0"); markerPos!=DString::npos) // should always pass this.
2919 {
2920 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
2921 if (bmd->isLinkable()) // replace marker with link
2922 {
2923 //Definition *bd=bmd->group;
2924 //if (bd==0) bd=bcd;
2926 bmd->anchor(),bcd->displayName());
2927
2928 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
2929 // bmd->anchor(),bcd->name());
2930 if ( bmd->isLinkableInProject() )
2931 {
2932 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
2933 }
2934 }
2935 else
2936 {
2938 DString(),bcd->displayName());
2939 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
2940 {
2941 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
2942 }
2943 }
2944 ol.parseText(reimplFromLine.right(
2945 reimplFromLine.length()-markerPos-2)); // text right from marker
2946
2947 }
2948 else
2949 {
2950 err("translation error: no marker in trReimplementsFromList()\n");
2951 }
2952 ol.endParagraph();
2953 }
2954 }
2955}
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e. class/struct/union/...
DString right(size_t len) const
Definition dstring.h:316
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:156
virtual Specifier virtualness(int count=0) const =0
virtual DString trReimplementedFromList(int numEntries)=0
virtual DString trImplementedFromList(int numEntries)=0
#define err(fmt,...)
Definition message.h:127

References Definition::anchor(), ClassDef::compoundType(), Definition::displayName(), OutputList::endParagraph(), err, DString::find(), MemberDef::getClassDef(), Definition::getOutputFileBase(), Definition::getReference(), ClassDef::Interface, Definition::isLinkable(), Definition::isLinkableInProject(), DString::left(), DString::length(), DString::npos, OutputList::parseText(), reimplements(), DString::right(), OutputList::startParagraph(), theTranslator, Translator::trImplementedFromList(), Translator::trReimplementedFromList(), 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 2135 of file memberdef.cpp.

2137{
2138 ol.docify("template<");
2139 LinkifyTextOptions options;
2140 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2141 for (auto it = al.begin(); it!=al.end();)
2142 {
2143 Argument a = *it;
2144 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
2145 if (!a.name.empty())
2146 {
2147 ol.docify(" ");
2148 ol.docify(a.name);
2149 }
2150 if (!a.defval.empty())
2151 {
2152 ol.docify(" = ");
2153 ol.docify(a.defval);
2154 }
2155 ++it;
2156 if (it!=al.end()) ol.docify(", ");
2157 }
2158 ol.docify("> ");
2159 if (writeReqClause && !m_requiresClause.empty())
2160 {
2161 ol.lineBreak();
2162 ol.docify("requires ");
2164 m_requiresClause, // text
2165 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2166 }
2167}
iterator end()
Definition arguments.h:94
iterator begin()
Definition arguments.h:93
DString m_requiresClause
void lineBreak(const DString &style=DString())
Definition outputlist.h:559
TextGeneratorOLImpl(OutputList &ol)
Definition util.cpp:102
DString defval
Definition arguments.h:46
DString name
Definition arguments.h:44
DString type
Definition arguments.h:42
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 DString &text, const LinkifyTextOptions &options)
Definition util.cpp:898

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

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

◆ _writeTypeConstraints()

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

Definition at line 3099 of file memberdef.cpp.

3100{
3102 {
3104 }
3105}
bool hasParameters() const
Definition arguments.h:76
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5505

References ArgumentList::hasParameters(), m_typeConstraints, and writeTypeConstraints().

Referenced by writeDocumentation().

◆ addExample()

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

Implements MemberDefMutable.

Definition at line 1621 of file memberdef.cpp.

1622{
1623 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1624 return m_examples.inSort(Example(anchor,nameStr,file));
1625}
bool inSort(const Example &ex)
Definition example.h:39
DString anchor() const override
Example(const DString &a, const DString &n, const DString &f)
Definition example.h:30

References anchor(), Example::Example(), ExampleList::inSort(), and m_examples.

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4475 of file memberdef.cpp.

4476{
4477 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4478 SrcLangExt lang = getLanguage();
4479 if (!isLinkableInProject()) return;
4480 DString memLabel;
4481 if (optimizeOutputForC)
4482 {
4483 memLabel=theTranslator->trGlobal(true,true);
4484 }
4485 else if (lang==SrcLangExt::Fortran)
4486 {
4487 memLabel=theTranslator->trSubprogram(true,true);
4488 }
4489 else
4490 {
4491 memLabel=theTranslator->trMember(true,true);
4492 }
4493 DString memName = name();
4494 Definition *pd=getOuterScope();
4495 DString pdName = pd->definitionType()==Definition::TypeClass ?
4496 (toClassDef(pd))->displayName() : pd->name();
4497 DString sep = getLanguageSpecificSeparator(lang,true);
4498 DString memArgs;
4499 if (!isRelated())
4500 {
4501 if (isObjCMethod())
4502 {
4503 memName = "[" + pd->name() + " " + name() + "]";
4504 }
4505 else
4506 {
4507 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4508 memArgs = argsString();
4509 }
4510 }
4511 const RefItemVector &xrefItems = xrefListItems();
4512 if (sep!="::")
4513 {
4514 memName = substitute(memName,"::",sep);
4515 }
4516 addRefItem(xrefItems,
4517 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4518 memLabel,
4519 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4520}
DString & prepend(const char *s)
Definition dstring.h:504
virtual const RefItemVector & xrefListItems() const =0
virtual DefType definitionType() const =0
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
bool isObjCMethod() const override
bool isLinkableInProject() const override
bool isRelated() const override
DString argsString() const override
DString displayName(bool=true) const override
DString getOutputFileBase() const override
virtual DString trSubprogram(bool first_capital, bool singular)=0
virtual DString trMember(bool first_capital, bool singular)=0
virtual DString trGlobal(bool first_capital, bool singular)=0
ClassDef * toClassDef(Definition *d)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
Definition dstring.cpp:476
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
void addRefItem(const RefItemVector &sli, const DString &key, const DString &prefix, const DString &name, const DString &title, const DString &args, const Definition *scope)
Definition util.cpp:4872
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5941

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(), DString::prepend(), qualifiedName(), substitute(), theTranslator, toClassDef(), Translator::trGlobal(), Translator::trMember(), Translator::trSubprogram(), Definition::TypeClass, and DefinitionMixin< MemberDefMutable >::xrefListItems().

◆ addQualifiers()

void MemberDefImpl::addQualifiers ( const StringVector & qualifiers)
overridevirtual

Implements MemberDefMutable.

Definition at line 5792 of file memberdef.cpp.

5793{
5794 for (const auto &sx : qualifiers)
5795 {
5796 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5797 if (!alreadyAdded)
5798 {
5799 m_qualifiers.push_back(sx);
5800 }
5801 }
5802}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4522 of file memberdef.cpp.

4523{
4525}
static RequirementManager & instance()
void addRequirementRefsForSymbol(const Definition *symbol)

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

◆ anchor()

DString MemberDefImpl::anchor ( ) const
overridevirtual

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

Implements Definition.

Definition at line 1759 of file memberdef.cpp.

1760{
1761 DString result=m_anc;
1762 if (m_groupAlias) return m_groupAlias->anchor();
1764 if (m_enumScope && m_enumScope!=this) // avoid recursion for C#'s public enum E { E, F }
1765 {
1766 result.prepend(m_enumScope->anchor());
1767 }
1768 if (getGroupDef())
1769 {
1770 if (m_groupMember)
1771 {
1772 result=m_groupMember->anchor();
1773 }
1774 else if (getReference().empty())
1775 {
1776 result.prepend("g");
1777 }
1778 }
1779 return result;
1780}
DString getReference() const override
const MemberDef * m_enumScope
const MemberDef * m_groupAlias
const MemberDef * m_templateMaster
MemberDef * m_groupMember

References Definition::anchor(), getGroupDef(), getReference(), m_anc, m_enumScope, m_groupAlias, m_groupMember, m_templateMaster, and DString::prepend().

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

◆ argsString()

DString MemberDefImpl::argsString ( ) const
overridevirtual

◆ argumentList()

const ArgumentList & MemberDefImpl::argumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5539 of file memberdef.cpp.

5540{
5541 return m_defArgList;
5542}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

DString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4999 of file memberdef.cpp.

5000{
5001 return m_bitfields;
5002}

References m_bitfields.

◆ briefDescription()

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

6267{
6268 if (m_templateMaster)
6269 {
6270 return m_templateMaster->briefDescription(abbr);
6271 }
6272 else
6273 {
6275 }
6276}
DString briefDescription(bool abbreviate=false) const override

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

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

◆ cacheTypedefVal()

void MemberDefImpl::cacheTypedefVal ( const ClassDef * val,
const DString & templSpec,
const DString & resolvedType )
overridevirtual

Implements MemberDefMutable.

Definition at line 5995 of file memberdef.cpp.

5996{
5999 m_cachedTypedefTemplSpec=templSpec;
6000 m_cachedResolvedType=resolvedType;
6001 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6002}
DString m_cachedResolvedType
bool m_isTypedefValCached
const ClassDef * m_cachedTypedefValue
DString m_cachedTypedefTemplSpec

References m_cachedResolvedType, m_cachedTypedefTemplSpec, m_cachedTypedefValue, and m_isTypedefValCached.

◆ category()

ClassDef * MemberDefImpl::category ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5955 of file memberdef.cpp.

5956{
5957 return m_category;
5958}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5965 of file memberdef.cpp.

5966{
5967 return m_categoryRelation;
5968}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6346 of file memberdef.cpp.

6347{
6348 switch (memberType())
6349 {
6350 case MemberType::Define: return CodeSymbolType::Define;
6351 case MemberType::Function: return CodeSymbolType::Function;
6352 case MemberType::Variable: return CodeSymbolType::Variable;
6353 case MemberType::Typedef: return CodeSymbolType::Typedef;
6354 case MemberType::Enumeration: return CodeSymbolType::Enumeration;
6355 case MemberType::EnumValue: return CodeSymbolType::EnumValue;
6356 case MemberType::Signal: return CodeSymbolType::Signal;
6357 case MemberType::Slot: return CodeSymbolType::Slot;
6358 case MemberType::Friend: return CodeSymbolType::Friend;
6359 case MemberType::DCOP: return CodeSymbolType::DCOP;
6360 case MemberType::Property: return CodeSymbolType::Property;
6361 case MemberType::Event: return CodeSymbolType::Event;
6362 case MemberType::Interface: return CodeSymbolType::Interface;
6363 case MemberType::Service: return CodeSymbolType::Service;
6364 case MemberType::Sequence: return CodeSymbolType::Sequence;
6365 case MemberType::Dictionary: return CodeSymbolType::Dictionary;
6366 }
6368}
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 6004 of file memberdef.cpp.

6005{
6006 {
6007 const ArgumentList &srcAl = bmd->argumentList();
6008 ArgumentList &dstAl = m_defArgList;
6009 auto srcIt = srcAl.begin();
6010 auto dstIt = dstAl.begin();
6011 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6012 {
6013 Argument &argDst = *dstIt;
6014 const Argument &argSrc = *srcIt;
6015 if (!argSrc.name.empty())
6016 {
6017 argDst.name = argSrc.name;
6018 }
6019 argDst.docs = argSrc.docs;
6020 ++srcIt;
6021 ++dstIt;
6022 }
6023 }
6024
6025 {
6026 const ArgumentList &srcAl = bmd->declArgumentList();
6027 ArgumentList &dstAl = m_declArgList;
6028 auto srcIt = srcAl.begin();
6029 auto dstIt = dstAl.begin();
6030
6031 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6032 {
6033 Argument &argDst = *dstIt;
6034 const Argument &argSrc = *srcIt;
6035 if (!argSrc.name.empty())
6036 {
6037 argDst.name = argSrc.name;
6038 }
6039 argDst.docs = argSrc.docs;
6040 ++srcIt;
6041 ++dstIt;
6042 }
6043 }
6044}
virtual const ArgumentList & argumentList() const =0
virtual const ArgumentList & declArgumentList() const =0
ArgumentList m_declArgList
DString docs
Definition arguments.h:47

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

◆ createTemplateInstanceMember()

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

Implements MemberDef.

Definition at line 4396 of file memberdef.cpp.

4398{
4399 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4400 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4401 if (!m_defArgList.empty())
4402 {
4403 // replace formal arguments with actuals
4404 for (Argument &arg : *actualArgList)
4405 {
4406 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4407 }
4408 actualArgList->setTrailingReturnType(
4409 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4410 }
4411
4412 DString methodName=name();
4413 if (methodName.startsWith("operator ")) // conversion operator
4414 {
4415 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4416 }
4417
4418 auto imd = createMemberDef(
4420 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4421 methodName,
4422 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4425 ArgumentList(), ArgumentList(), ""
4426 );
4427 auto mmd = toMemberDefMutable(imd.get());
4428 mmd->moveArgumentList(std::move(actualArgList));
4429 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4430 mmd->setBodyDef(getBodyDef());
4431 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4432 mmd->setFormalTemplateArguments(formalArgs);
4433
4434 // TODO: init other member variables (if needed).
4435 // TODO: reimplemented info
4436 return imd;
4437}
bool empty() const
Definition arguments.h:99
virtual int getEndBodyLine() const =0
virtual DString getDefFileName() const =0
virtual int getDefLine() const =0
virtual const FileDef * getBodyDef() const =0
virtual int getStartBodyLine() const =0
virtual int getDefColumn() const =0
DString m_exception
Relationship m_related
std::unique_ptr< MemberDef > createMemberDef(const DString &defFileName, int defLine, int defColumn, const DString &type, const DString &name, const DString &args, const DString &excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList &tal, const ArgumentList &al, const DString &metaData)
Factory method to create a new instance of a MemberDef.
MemberDefMutable * toMemberDefMutable(Definition *d)
DString substituteTemplateArgumentsInString(const DString &nm, const ArgumentList &formalArgs, const ArgumentList *actualArgs)
Definition util.cpp:4413

References createMemberDef(), ArgumentList::empty(), 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(), DString::startsWith(), substituteTemplateArgumentsInString(), and toMemberDefMutable().

◆ declaration()

DString MemberDefImpl::declaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4969 of file memberdef.cpp.

4970{
4971 return m_decl;
4972}

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5544 of file memberdef.cpp.

5545{
5546 return m_declArgList;
5547}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1446 of file memberdef.cpp.

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

References DefinitionMixin< MemberDefMutable >::getDefColumn(), DefinitionMixin< MemberDefMutable >::getDefFileName(), DefinitionMixin< MemberDefMutable >::getDefLine(), DefinitionMixin< MemberDefMutable >::localName(), m_anc, m_annEnumType, 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_group, m_groupAlias, m_groupFileName, m_groupHasDocs, m_groupMember, m_grouppri, m_groupStartLine, m_grpId, m_hasCallerGraph, m_hasCallGraph, m_hasDetailedDescriptionCached, m_hasDocumentedParams, m_hasDocumentedReturnType, m_hasEnumValues, m_hasInlineSource, m_hasReferencedByRelation, m_hasReferencesRelation, m_implOnly, m_initializer, m_initLines, m_isDMember, m_isTypedefValCached, m_livesInsideEnum, m_maxInitLines, m_memberGroup, m_memDec, m_memDef, m_memSpec, m_metaData, m_moduleDef, m_mtype, m_nspace, m_numberOfFlowKW, m_prot, m_proto, m_qualifiers, m_read, m_redefinedBy, m_redefines, m_related, m_relatedAlso, m_requiresClause, m_sectionMap, m_stat, m_tArgList, m_templateMaster, m_tspec, m_type, m_typeConstraints, m_userInitLines, m_vhdlSpec, m_virt, m_write, and MemberDefImpl().

◆ definition()

DString MemberDefImpl::definition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4974 of file memberdef.cpp.

4975{
4976 return m_def;
4977}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5602 of file memberdef.cpp.

5603{
5604 return m_defTmpArgLists;
5605}

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

4154{
4155 //printf("%s:detectUndocumentedParams(%d,%d)\n",qPrint(name()),hasParamCommand,hasReturnCommand);
4156 bool isPython = getLanguage()==SrcLangExt::Python;
4157
4158 // this function is called while parsing the documentation. A member can have multiple
4159 // documentation blocks, which could be handled by multiple threads, hence this guard.
4160 std::lock_guard<std::mutex> lock(g_detectUndocumentedParamsMutex);
4161
4162 if (!m_hasDocumentedParams && hasParamCommand)
4163 {
4164 //printf("%s:hasDocumentedParams=true;\n",qPrint(name()));
4165 m_hasDocumentedParams = true;
4166 }
4167 else if (!m_hasDocumentedParams)
4168 {
4169 const ArgumentList &al = argumentList();
4170 const ArgumentList &declAl = declArgumentList();
4171 bool allDoc=true; // no parameter => all parameters are documented
4172 if ( // member has parameters
4173 al.hasParameters() // with at least one parameter (that is not void)
4174 )
4175 {
4176 // see if all parameters have documentation
4177 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4178 {
4179 const Argument &a = *it;
4180 if (!a.name.empty() && a.type!="void" && a.name!="..." &&
4181 !(isPython && (a.name=="self" || a.name=="cls"))
4182 )
4183 {
4184 allDoc = !a.docs.empty();
4185 }
4186 //printf("a.type=%s a.name=%s doc=%s\n",
4187 // qPrint(a.type),qPrint(a.name),qPrint(a.docs));
4188 }
4189 if (!allDoc && declAl.empty()) // try declaration arguments as well
4190 {
4191 allDoc=true;
4192 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4193 {
4194 const Argument &a = *it;
4195 if (!a.name.empty() && a.type!="void" && a.name!="..." &&
4196 !(isPython && (a.name=="self" || a.name=="cls"))
4197 )
4198 {
4199 allDoc = !a.docs.empty();
4200 }
4201 //printf("a.name=%s doc=%s\n",qPrint(a.name),qPrint(a.docs));
4202 }
4203 }
4204 }
4205 if (allDoc)
4206 {
4207 //printf("%s:hasDocumentedParams=true;\n",qPrint(name()));
4208 m_hasDocumentedParams = true;
4209 }
4210 }
4211
4212 //printf("Member %s hasDocumentedReturnType=%d hasReturnCommand=%d\n",
4213 // qPrint(name()),m_hasDocumentedReturnType,hasReturnCommand);
4215}
const ArgumentList & argumentList() const override
const ArgumentList & declArgumentList() const override
static std::mutex g_detectUndocumentedParamsMutex

References argumentList(), ArgumentList::begin(), declArgumentList(), Argument::docs, ArgumentList::empty(), DString::empty(), ArgumentList::end(), g_detectUndocumentedParamsMutex, DefinitionMixin< MemberDefMutable >::getLanguage(), ArgumentList::hasParameters(), m_hasDocumentedParams, m_hasDocumentedReturnType, Argument::name, and Argument::type.

◆ displayDefinition()

DString MemberDefImpl::displayDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3211 of file memberdef.cpp.

3212{
3213 DString ldef = definition();
3214 DString title = name();
3215 if (isEnumerate())
3216 {
3217 if (isAnonymous())
3218 {
3219 ldef = title = "anonymous enum";
3220 if (!m_enumBaseType.empty())
3221 {
3222 ldef+=" : "+m_enumBaseType;
3223 }
3224 }
3225 else
3226 {
3227 ldef.prepend("enum ");
3228 if (isSliceLocal())
3229 {
3230 ldef.prepend("local ");
3231 }
3232 }
3233 }
3234 else if (isEnumValue())
3235 {
3236 if (isAnonymous())
3237 {
3238 ldef=ldef.mid(2);
3239 }
3240 }
3241
3242 std::string sdef = ldef.str();
3243 reg::Match match;
3244 if (reg::search(sdef,match,reAnonymous))
3245 {
3246 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
3247 if (annoClassDef)
3248 {
3249 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)");
3250 reg::Match amatch;
3251 reg::search(sdef,amatch,ar);
3252 ldef = amatch.prefix().str() + annoClassDef->displayName() + amatch.suffix().str();
3253 }
3254 else
3255 {
3256 ldef = match.prefix().str() + " { ... } " + removeAnonymousScopes(match.suffix().str());
3257 }
3258 }
3259
3260 const ClassDef *cd=getClassDef();
3261 if (cd && cd->isObjectiveC())
3262 {
3263 // strip scope name
3264 if (size_t ep = ldef.find("::"); ep!=DString::npos)
3265 {
3266 if (size_t sp=ldef.rfind(' ',ep); sp!=DString::npos)
3267 {
3268 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3269 }
3270 }
3271 // strip keywords
3272 if (size_t dp = ldef.find(':'); dp!=DString::npos)
3273 {
3274 ldef=ldef.left(dp+1);
3275 }
3276 int l=static_cast<int>(ldef.length());
3277 //printf("start >%s<\n",qPrint(ldef));
3278 int i=l-1;
3279 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3280 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3281 if (i>0)
3282 {
3283 // insert branches around the type
3284 ldef = "("+ldef.left(i+1)+")"+ldef.mid(i+1);
3285 }
3286 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3287 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3288 }
3289 SrcLangExt lang = getLanguage();
3290 DString sep = getLanguageSpecificSeparator(lang,true);
3291 return substitute(ldef,"::",sep);
3292}
virtual bool isObjectiveC() const =0
Returns true if this class is implemented in Objective-C.
size_t rfind(char c, size_t pos=npos) const
Definition dstring.h:249
char & at(size_t i)
Returns a reference to the character at index i.
Definition dstring.h:675
bool isSliceLocal() const override
DString definition() const override
bool isEnumValue() const override
bool isStatic() const override
const ClassDef * getClassDefOfAnonymousType() const override
SubMatch prefix() const
Return the part of the string before the match.
Definition regex.h:169
SubMatch suffix() const
Return the part of the string after the match.
Definition regex.h:172
std::string str() const
Returns the matching part as a string.
Definition regex.h:132
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:847
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:858
DString removeAnonymousScopes(const DString &str)
Definition util.cpp:161
bool isId(int c)
Definition util.h:257

References DString::at(), definition(), Definition::displayName(), DString::empty(), DString::find(), getClassDef(), getClassDefOfAnonymousType(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), DefinitionMixin< MemberDefMutable >::isAnonymous(), isEnumerate(), isEnumValue(), isId(), ClassDef::isObjectiveC(), isSliceLocal(), isStatic(), DString::left(), DString::length(), m_enumBaseType, DString::mid(), DefinitionMixin< MemberDefMutable >::name(), DString::npos, reg::Match::prefix(), DString::prepend(), reAnonymous, removeAnonymousScopes(), DString::rfind(), reg::search(), DString::str(), reg::SubMatch::str(), substitute(), and reg::Match::suffix().

◆ displayName()

DString MemberDefImpl::displayName ( bool includeScope = true) const
overridevirtual

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

Implements Definition.

Definition at line 6072 of file memberdef.cpp.

6073{
6074 return DefinitionMixin::name();
6075}
const DString & name() const override

References DefinitionMixin< Base >::name().

Referenced by addListReference().

◆ documentation()

DString MemberDefImpl::documentation ( ) const
overridevirtual

Returns the detailed description of this definition

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 6278 of file memberdef.cpp.

6279{
6280 if (m_templateMaster)
6281 {
6283 }
6284 else
6285 {
6287 }
6288}
DString documentation() const override

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

Referenced by findSectionsInDocumentation(), hasDetailedDescription(), isBriefSectionVisible(), writeDocumentation(), and writeMemberDocSimple().

◆ enumBaseType()

DString MemberDefImpl::enumBaseType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5980 of file memberdef.cpp.

5981{
5982 return m_enumBaseType;
5983}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5524 of file memberdef.cpp.

5525{
5526 return m_enumFields;
5527}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

DString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4994 of file memberdef.cpp.

4995{
4996 return m_exception;
4997}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

DString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4979 of file memberdef.cpp.

4980{
4981 return m_extraTypeChars;
4982}

References m_extraTypeChars.

◆ fieldType()

DString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3926 of file memberdef.cpp.

3927{
3928 DString type = m_type;
3929 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3930 return simplifyTypeForTable(type);
3931}
bool isTypedef() const override
static DString simplifyTypeForTable(const DString &s)

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

Referenced by writeMemberDocSimple().

◆ findSectionsInDocumentation()

void MemberDefImpl::findSectionsInDocumentation ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4858 of file memberdef.cpp.

4859{
4863}
virtual DString inbodyDocumentation() const =0
virtual DString docFile() const =0
DString documentation() const override
DString briefDescription(bool abbr=false) const override
void docFindSections(const DString &input, const Definition *d, const DString &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 5678 of file memberdef.cpp.

5679{
5681}

References m_formalTemplateArguments.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5479 of file memberdef.cpp.

5480{
5481 return m_annEnumType;
5482}

References m_annEnumType.

Referenced by writeDeclaration(), and writeDocumentation().

◆ getCachedResolvedTypedef()

DString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5698 of file memberdef.cpp.

5699{
5700 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5701 return m_cachedResolvedType;
5702}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

DString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5693 of file memberdef.cpp.

5694{
5696}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5688 of file memberdef.cpp.

5689{
5690 return m_cachedTypedefValue;
5691}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5034 of file memberdef.cpp.

5035{
5036 return m_classDef;
5037}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5039 of file memberdef.cpp.

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

1988{
1989 return m_anonymousType;
1990}

References m_anonymousType.

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

◆ getDeclColumn()

int MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5734 of file memberdef.cpp.

5735{
5736 return m_declColumn;
5737}

References m_declColumn.

◆ getDeclFileName()

DString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5724 of file memberdef.cpp.

5725{
5726 return m_declFileName;
5727}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5729 of file memberdef.cpp.

5730{
5731 return m_declLine;
5732}

References m_declLine.

◆ getDeclType()

DString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2088 of file memberdef.cpp.

2089{
2090 SrcLangExt lang = getLanguage();
2091 DString ltype(m_type);
2092 if (lang==SrcLangExt::Cpp && isEnumerate() && isStrong())
2093 {
2094 if (isEnumStruct())
2095 {
2096 ltype+=" struct";
2097 }
2098 else
2099 {
2100 ltype+=" class";
2101 }
2102 }
2103 if (isTypedef() && getLanguage() != SrcLangExt::Slice)
2104 {
2105 ltype.prepend("typedef ");
2106 }
2107 if (isTypeAlias())
2108 {
2109 if (lang==SrcLangExt::Python)
2110 {
2111 ltype="type";
2112 }
2113 else
2114 {
2115 ltype="using";
2116 }
2117 }
2118 // strip 'friend' keyword from ltype
2119 ltype.stripPrefix("friend ");
2120 if (ltype=="@") // rename type from enum values
2121 {
2122 ltype="";
2123 }
2124 else
2125 {
2126 if (isObjCMethod())
2127 {
2128 ltype.prepend("(");
2129 ltype.append(")");
2130 }
2131 }
2132 return ltype;
2133}
bool isStrong() const override
bool isTypeAlias() const override
bool isEnumStruct() const override

References DString::append(), DefinitionMixin< MemberDefMutable >::getLanguage(), isEnumerate(), isEnumStruct(), isObjCMethod(), isStrong(), isTypeAlias(), isTypedef(), m_type, DString::prepend(), and DString::stripPrefix().

◆ getEnumScope()

const MemberDef * MemberDefImpl::getEnumScope ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5489 of file memberdef.cpp.

5490{
5491 return m_enumScope;
5492}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5529 of file memberdef.cpp.

5530{
5531 return m_examples;
5532}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5049 of file memberdef.cpp.

5050{
5051 return m_fileDef;
5052}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5719 of file memberdef.cpp.

5720{
5721 return m_groupAlias;
5722}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5079 of file memberdef.cpp.

5080{
5081 return m_group;
5082}

References m_group.

◆ getGroupFileName()

DString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5094 of file memberdef.cpp.

5095{
5096 return m_groupFileName;
5097}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5104 of file memberdef.cpp.

5105{
5106 return m_groupHasDocs;
5107}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5089 of file memberdef.cpp.

5090{
5091 return m_grouppri;
5092}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5099 of file memberdef.cpp.

5100{
5101 return m_groupStartLine;
5102}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2704 of file memberdef.cpp.

2705{
2706 StringVector sl;
2707 bool inlineInfo = Config_getBool(INLINE_INFO);
2708 bool inherited = getClassDef() &&
2709 (getClassDef()!=container || m_explicitInherited) &&
2710 container->definitionType()==TypeClass &&
2711 !isRelated();
2712 Specifier lvirt=virtualness();
2713 if ((!isObjCMethod() || isOptional() || isRequired()) &&
2714 (protection()!=Protection::Public || lvirt!=Specifier::Normal ||
2715 isFriend() || isRelated() ||
2716 (isInline() && inlineInfo) ||
2717 isSignal() || isSlot() ||
2718 isStatic() || isExternal() ||
2719 isExported() ||
2720 inherited ||
2721 TypeSpecifier(m_memSpec).setInline(false)!=TypeSpecifier()
2722 )
2723 )
2724 {
2725 // write the member specifier list
2726 //ol.writeLatexSpacing();
2727 //ol.startTypewriter();
2728 //ol.docify(" [");
2729 SrcLangExt lang = getLanguage();
2730 bool optVhdl = lang==SrcLangExt::VHDL;
2731 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2732 if (optVhdl)
2733 {
2734 sl.push_back(theTranslator->trVhdlType(getVhdlSpecifiers(),true).str());
2735 }
2736 else
2737 {
2738 if (isFriend()) sl.emplace_back("friend");
2739 else if (isRelated()) sl.emplace_back("related");
2740 else
2741 {
2742 if (isExternal()) sl.emplace_back("extern");
2743 if (inlineInfo && isInline()) sl.emplace_back("inline");
2744 if (isExplicit()) sl.emplace_back("explicit");
2745 if (isMutable()) sl.emplace_back("mutable");
2746 if (isThreadLocal()) sl.emplace_back("thread_local");
2747 if (isStatic()) sl.emplace_back("static");
2748 if (isGettable()) sl.emplace_back("get");
2749 if (isProtectedGettable()) sl.emplace_back("protected get");
2750 if (isSettable()) sl.emplace_back("set");
2751 if (isProtectedSettable()) sl.emplace_back("protected set");
2752 if (extractPrivate)
2753 {
2754 if (isPrivateGettable()) sl.emplace_back("private get");
2755 if (isPrivateSettable()) sl.emplace_back("private set");
2756 }
2757 if (isNoDiscard()) sl.emplace_back("nodiscard");
2758 if (isConstExpr()) sl.emplace_back("constexpr");
2759 if (isConstEval()) sl.emplace_back("consteval");
2760 if (isConstInit()) sl.emplace_back("constinit");
2761 if (isAddable()) sl.emplace_back("add");
2762 if (!isUNOProperty() && isRemovable()) sl.emplace_back("remove");
2763 if (isRaisable()) sl.emplace_back("raise");
2764 if (isReadable()) sl.emplace_back("read");
2765 if (isWritable()) sl.emplace_back("write");
2766 if (isFinal()) sl.emplace_back("final");
2767 if (isAbstract()) sl.emplace_back("abstract");
2768 if (isOverride()) sl.emplace_back("override");
2769 if (isInitonly()) sl.emplace_back("initonly");
2770 if (isSealed()) sl.emplace_back("sealed");
2771 if (isNew()) sl.emplace_back("new");
2772 if (isOptional()) sl.emplace_back("optional");
2773 if (isRequired()) sl.emplace_back("required");
2774 if (isExported()) sl.emplace_back("export");
2775
2776 if (isNonAtomic()) sl.emplace_back("nonatomic");
2777 else if (isObjCProperty()) sl.emplace_back("atomic");
2778
2779 // mutual exclusive Objective 2.0 property attributes
2780 if (isAssign()) sl.emplace_back("assign");
2781 else if (isCopy()) sl.emplace_back("copy");
2782 else if (isRetain()) sl.emplace_back("retain");
2783 else if (isWeak()) sl.emplace_back("weak");
2784 else if (lang!=SrcLangExt::CSharp && isStrong()) sl.emplace_back("strong");
2785 else if (isUnretained()) sl.emplace_back("unsafe_unretained");
2786
2787 if (!isObjCMethod())
2788 {
2789 if (protection()==Protection::Protected) sl.emplace_back("protected");
2790 else if (protection()==Protection::Private) sl.emplace_back("private");
2791 else if (protection()==Protection::Package) sl.emplace_back("package");
2792
2793 if (lvirt==Specifier::Virtual) sl.emplace_back("virtual");
2794 else if (lvirt==Specifier::Pure) sl.emplace_back("pure virtual");
2795 if (isSignal()) sl.emplace_back("signal");
2796 if (isSlot()) sl.emplace_back("slot");
2797 if (isDefault()) sl.emplace_back("default");
2798 if (isDelete()) sl.emplace_back("delete");
2799 if (isNoExcept()) sl.emplace_back("noexcept");
2800 if (isAttribute()) sl.emplace_back("attribute");
2801 if (isUNOProperty()) sl.emplace_back("property");
2802 if (isReadonly()) sl.emplace_back("readonly");
2803 if (isBound()) sl.emplace_back("bound");
2804 if (isUNOProperty() && isRemovable()) sl.emplace_back("removable");
2805 if (isConstrained()) sl.emplace_back("constrained");
2806 if (isTransient()) sl.emplace_back("transient");
2807 if (isMaybeVoid()) sl.emplace_back("maybevoid");
2808 if (isMaybeDefault()) sl.emplace_back("maybedefault");
2809 if (isMaybeAmbiguous()) sl.emplace_back("maybeambiguous");
2810 if (isPublished()) sl.emplace_back("published"); // enum
2811 }
2813 {
2814 sl.emplace_back("implementation");
2815 }
2816 }
2817 if (inherited)
2818 {
2819 sl.emplace_back("inherited");
2820 }
2821 }
2822 }
2823 else if (isObjCMethod() && isImplementation())
2824 {
2825 sl.emplace_back("implementation");
2826 }
2827
2828 for (const auto &sx : m_qualifiers)
2829 {
2830 bool alreadyAdded = std::find(sl.begin(), sl.end(), sx) != sl.end();
2831 if (!alreadyAdded)
2832 {
2833 sl.push_back(sx);
2834 }
2835 }
2836
2837 return sl;
2838}
virtual bool isExported() const =0
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 m_explicitInherited
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 DString trVhdlType(VhdlSpecifier type, bool single)=0
constexpr TypeSpecifier() noexcept
Definition types.h:696
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_explicitInherited, m_memSpec, m_qualifiers, protection(), theTranslator, Translator::trVhdlType(), Definition::TypeClass, TypeSpecifier::TypeSpecifier(), and virtualness().

Referenced by writeDocumentation().

◆ getMemberGroup()

MemberGroup * MemberDefImpl::getMemberGroup ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5612 of file memberdef.cpp.

5613{
5614 return m_memberGroup;
5615}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5607 of file memberdef.cpp.

5608{
5609 return m_grpId;
5610}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5019 of file memberdef.cpp.

5020{
5021 return m_memSpec;
5022}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5084 of file memberdef.cpp.

5085{
5086 return m_moduleDef;
5087}

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

5060{
5061 return m_nspace;
5062}

References m_nspace.

◆ getOutputFileBase()

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

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

5788{
5789 return m_qualifiers;
5790}

References m_qualifiers.

◆ getReadAccessor()

DString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5064 of file memberdef.cpp.

5065{
5066 return m_read;
5067}

References m_read.

◆ getReference()

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

1721{
1722 DString ref = DefinitionMixin::getReference();
1723 if (!ref.empty())
1724 {
1725 return ref;
1726 }
1727 const NamespaceDef *nspace = getNamespaceDef();
1728 const FileDef *fileDef = getFileDef();
1729 const ClassDef *classDef = getClassDef();
1730 const ModuleDef *moduleDef = getModuleDef();
1731 const GroupDef *groupDef = getGroupDef();
1732 if (templateMaster())
1733 {
1734 return templateMaster()->getReference();
1735 }
1736 else if (groupDef)
1737 {
1738 return groupDef->getReference();
1739 }
1740 else if (classDef)
1741 {
1742 return classDef->getReference();
1743 }
1744 else if (nspace)
1745 {
1746 return nspace->getReference();
1747 }
1748 else if (moduleDef)
1749 {
1750 return moduleDef->getReference();
1751 }
1752 else if (fileDef)
1753 {
1754 return fileDef->getReference();
1755 }
1756 return "";
1757}
DString getReference() const override

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

Referenced by anchor(), and writeLink().

◆ getScopeString()

DString MemberDefImpl::getScopeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4302 of file memberdef.cpp.

4303{
4304 DString result;
4305 if (isStrong()) result=name();
4306 else if (getClassDef()) result=getClassDef()->displayName();
4307 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4308 return result;
4309}

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

4528{
4529 auto it = m_sectionMap.find(container);
4530 return it!=m_sectionMap.end() ? it->second : nullptr;
4531}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5024 of file memberdef.cpp.

5025{
5026 return m_vhdlSpec;
5027}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

DString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5069 of file memberdef.cpp.

5070{
5071 return m_write;
5072}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5635 of file memberdef.cpp.

5636{
5637 return m_hasCallerGraph;
5638}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5617 of file memberdef.cpp.

5618{
5619 return m_hasCallGraph;
5620}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2570 of file memberdef.cpp.

2571{
2572 std::lock_guard<std::mutex> lock(g_hasDetailedDescriptionMutex);
2573 //printf(">hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2575 {
2576 bool extractAll = Config_getBool(EXTRACT_ALL);
2577 bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
2578 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2579 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2580 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2581 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2582 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2583 bool inlineSources = hasInlineSource();
2584
2585 // the member has detailed documentation because the user added some comments
2586 bool docFilter =
2587 // extract all is enabled
2588 extractAll ||
2589 // has detailed docs
2590 !documentation().empty() ||
2591 // has inbody docs
2593 // is an enum with values that are documented
2595 // is documented enum value
2596 (m_mtype==MemberType::EnumValue && !briefDescription().empty()) ||
2597 // has brief description that is part of the detailed description
2598 (!briefDescription().empty() && // has brief docs
2599 (alwaysDetailedSec && // they are visible in
2600 (repeatBrief || // detailed section or
2601 !briefMemberDesc // they are explicitly not
2602 ) // shown in brief section
2603 )
2604 ) ||
2605 // has one or more documented arguments
2610 m_templateMaster->templateArguments().hasTemplateDocumentation() :
2612 // user-specified qualifiers
2613 !m_qualifiers.empty();
2614
2615 // generate function guard
2616 // ================== =======
2617 // _writeGroupInclude -> ignored in calculation
2618 // multiLineInitializer() -> hasMultiLineInitializer()
2619 // _writeReimplements -> _isReimplements()
2620 // _writeReimplementedBy -> _countReimplementedBy()>0
2621 // _writeExamples -> hasExamples()
2622 // _writeTypeConstraints -> m_typeConstraints.hasParameters()
2623 // writeSourceDef -> !getSourceFileBase().empty();
2624 // writeInlineCode -> hasInlineSource() && hasSources()
2625 // writeSourceRefs -> hasReferencesRelation() && hasSourceRefs()
2626 // writeSourceReffedBy -> hasReferencedByRelation() && hasSourceReffedBy()
2627 // _writeCallGraph -> _hasVisibleCallGraph()
2628 // _writeCallerGraph -> _hasVisibleCallerGraph()
2629
2630 // the member has detailed documentation because there is some generated info
2631 bool docInfo =
2632 // has a multi-line initialization block
2634 // reimplements / reimplemented by
2636 // examples
2637 hasExamples() ||
2638 // type constraints
2640 // has source definition
2641 !getSourceFileBase().empty() ||
2642 // has inline sources
2643 (inlineSources && hasSources()) ||
2644 // has references
2647 // call graph
2649 // caller graph
2651 // requirement references
2653
2654 if (!hideUndocMembers) // if HIDE_UNDOC_MEMBERS is NO we also show the detailed section
2655 // if there is only some generated info
2656 {
2657 docFilter = docFilter || docInfo;
2658 }
2659
2660 // this is not a global static or global statics should be extracted
2661 bool staticFilter = getClassDef()!=nullptr || !isStatic() || extractStatic;
2662
2663 // a module does not contain details for members, so either the namespace or file should be linkable
2664 bool moduleFilter = getModuleDef()==nullptr || (getFileDef() && getFileDef()->isLinkable()) ||
2666
2667 // only include members that are non-private unless EXTRACT_PRIVATE is
2668 // set to YES or the member is part of a group
2669 bool privateFilter = protectionLevelVisible(protection()) || m_mtype==MemberType::Friend ||
2670 (m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual);
2671
2672 // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
2673 // is true
2674 bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend());
2675
2677 (docFilter && staticFilter && moduleFilter && privateFilter && friendCompoundFilter && !isHidden());
2678 //printf("docFilter=%d docInfo=%d staticFilter=%d privateFilter=%d friendCompoundFilter=%d !isHidden()=%d",
2679 // docFilter,docInfo,staticFilter,privateFilter,friendCompoundFilter,!isHidden());
2681 }
2682 //printf("<hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2684}
bool hasDocumentation(bool allowEmptyNames=false) const
Definition arguments.cpp:22
bool hasTemplateDocumentation() const
Definition arguments.cpp:30
virtual bool hasSources() const =0
virtual DString getSourceFileBase() const =0
virtual bool hasSourceRefs() const =0
virtual bool hasRequirementRefs() const =0
virtual bool hasSourceReffedBy() const =0
virtual const ArgumentList & templateArguments() const =0
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(), MemberDef::argumentList(), briefDescription(), Config_getBool, documentation(), DString::empty(), g_hasDetailedDescriptionMutex, getClassDef(), getFileDef(), getModuleDef(), getNamespaceDef(), DefinitionMixin< MemberDefMutable >::getSourceFileBase(), ArgumentList::hasDocumentation(), hasDocumentation(), hasDocumentedEnumValues(), hasExamples(), hasInlineSource(), hasMultiLineInitializer(), ArgumentList::hasParameters(), hasReferencedByRelation(), hasReferencesRelation(), DefinitionMixin< MemberDefMutable >::hasRequirementRefs(), DefinitionMixin< MemberDefMutable >::hasSourceReffedBy(), DefinitionMixin< MemberDefMutable >::hasSourceRefs(), DefinitionMixin< MemberDefMutable >::hasSources(), ArgumentList::hasTemplateDocumentation(), DefinitionMixin< MemberDefMutable >::inbodyDocumentation(), 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(), protectionLevelVisible(), and MemberDef::templateArguments().

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

4290{
4292 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4293 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4294}
bool hasDocumentation() const override

References ArgumentList::hasDocumentation(), DefinitionMixin< Base >::hasDocumentation(), ArgumentList::hasTemplateDocumentation(), 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 5474 of file memberdef.cpp.

5475{
5476 return m_docEnumValues;
5477}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5668 of file memberdef.cpp.

5669{
5670 return m_hasEnumValues;
5671}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1627 of file memberdef.cpp.

1628{
1629 return !m_examples.empty();
1630}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5663 of file memberdef.cpp.

5664{
5665 return m_hasInlineSource;
5666}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4450 of file memberdef.cpp.

4451{
4452 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4453 // initLines,userInitLines,maxInitLines);
4454 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4455 return (m_initLines>0 || (!m_initializer.empty() && isFuncLikeMacro)) &&
4456 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4457 || m_initLines<m_userInitLines // explicitly enabled
4458 );
4459}

References DString::empty(), ArgumentList::hasParameters(), 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 4439 of file memberdef.cpp.

4440{
4441 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4442 // qPrint(name()),qPrint(m_initializer),m_initLines,
4443 // m_maxInitLines,m_userInitLines);
4444 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4445 return !m_initializer.empty() && m_initLines==0 && // one line initializer
4446 !isFuncLikeMacro &&
4447 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4448}

References DString::empty(), ArgumentList::hasParameters(), 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 5653 of file memberdef.cpp.

5654{
5656}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5658 of file memberdef.cpp.

5659{
5661}

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

6291{
6292 if (m_templateMaster)
6293 {
6295 }
6296 else
6297 {
6299 }
6300}
virtual bool hasUserDocumentation() const =0
bool hasUserDocumentation() const override

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

Referenced by warnIfUndocumented().

◆ incrementFlowKeyWordCount()

void MemberDefImpl::incrementFlowKeyWordCount ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6060 of file memberdef.cpp.

6061{
6063}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5714 of file memberdef.cpp.

5715{
5716 return m_docProvider;
5717}

References m_docProvider.

◆ init()

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

Definition at line 1326 of file memberdef.cpp.

1332{
1333 m_classDef=nullptr;
1334 m_fileDef=nullptr;
1335 m_moduleDef=nullptr;
1336 m_redefines=nullptr;
1337 m_relatedAlso=nullptr;
1338 m_nspace=nullptr;
1339 m_memDef=nullptr;
1340 m_memDec=nullptr;
1341 m_group=nullptr;
1342 m_grpId=-1;
1343 m_enumScope=nullptr;
1344 m_livesInsideEnum=false;
1345 m_hasCallGraph = Config_getBool(CALL_GRAPH);
1346 m_hasCallerGraph = Config_getBool(CALLER_GRAPH);
1347 m_hasReferencedByRelation = Config_getBool(REFERENCED_BY_RELATION);
1348 m_hasReferencesRelation = Config_getBool(REFERENCES_RELATION);
1349 m_hasEnumValues = Config_getBool(SHOW_ENUM_VALUES);
1350 m_hasInlineSource = Config_getBool(INLINE_SOURCES);
1351 m_initLines=0;
1352 m_type=t;
1353 if (mt==MemberType::Typedef) m_type.stripPrefix("typedef ");
1354 // type.stripPrefix("struct ");
1355 // type.stripPrefix("class " );
1356 // type.stripPrefix("union " );
1358 m_args=a;
1360 if (m_type.empty()) m_decl=d->name()+m_args; else m_decl=m_type+" "+d->name()+m_args;
1361
1362 m_memberGroup=nullptr;
1363 m_virt=v;
1364 m_prot=p;
1365 m_related=r;
1366 m_stat=s;
1367 m_mtype=mt;
1368 m_exception=e;
1369 m_proto=false;
1372 m_annEnumType=nullptr;
1373 m_groupAlias=nullptr;
1374 m_explExt=false;
1375 m_tspec=false;
1376 m_anonymousType=nullptr;
1377 m_maxInitLines=Config_getInt(MAX_INITIALIZER_LINES);
1378 m_userInitLines=-1;
1379 m_docEnumValues=false;
1380 // copy function template arguments (if any)
1381 m_tArgList = tal;
1382 //printf("new member al=%p\n",al);
1383 // copy function definition arguments (if any)
1384 m_defArgList = al;
1385 // convert function declaration arguments (if any)
1386 if (!m_args.empty())
1387 {
1389 //printf("setDeclArgList %s to %s const=%d\n",qPrint(args),
1390 // qPrint(argListToString(declArgList)),declArgList->constSpecifier);
1391 }
1392 m_metaData = meta;
1393 m_templateMaster = nullptr;
1394 m_docsForDefinition = true;
1395 m_isTypedefValCached = false;
1396 m_cachedTypedefValue = nullptr;
1397 m_implOnly=false;
1398 m_groupMember = nullptr;
1399 m_hasDocumentedParams = false;
1401 m_docProvider = nullptr;
1402 m_isDMember = d->getDefFileName().lower().endsWith(".d");
1403}
bool stripPrefix(const DString &prefix)
Definition dstring.h:295
std::unique_ptr< ArgumentList > stringToArgumentList(SrcLangExt lang, const DString &argsString, DString *extraTypeChars=nullptr)
Definition defargs.l:828

References Config_getBool, Config_getInt, DString::empty(), DString::endsWith(), Definition::getDefFileName(), Definition::getLanguage(), DString::lower(), m_annEnumType, 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_group, m_groupAlias, m_groupMember, m_grpId, m_hasCallerGraph, m_hasCallGraph, m_hasDocumentedParams, m_hasDocumentedReturnType, m_hasEnumValues, m_hasInlineSource, m_hasReferencedByRelation, m_hasReferencesRelation, m_implOnly, m_initLines, m_isDMember, m_isTypedefValCached, m_livesInsideEnum, m_maxInitLines, m_memberGroup, m_memDec, m_memDef, m_memSpec, m_metaData, m_moduleDef, m_mtype, m_nspace, m_prot, m_proto, m_redefines, m_related, m_relatedAlso, m_stat, m_tArgList, m_templateMaster, m_tspec, m_type, m_userInitLines, m_vhdlSpec, m_virt, Definition::name(), removeRedundantWhiteSpace(), stringToArgumentList(), DString::stripPrefix(), TypeSpecifier::TypeSpecifier(), and UNKNOWN.

Referenced by _writeTagData(), MemberDefImpl(), and writeDocumentation().

◆ initializer()

const DString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5004 of file memberdef.cpp.

5005{
5006 return m_initializer;
5007}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5009 of file memberdef.cpp.

5010{
5011 return m_initLines;
5012}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1616 of file memberdef.cpp.

1617{
1619}
void push_back(const T &value)
Definition memberlist.h:48

References m_enumFields, and MemberVector::push_back().

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1571 of file memberdef.cpp.

1572{
1573 if (m_templateMaster)
1574 {
1575 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef *>(m_templateMaster));
1576 if (mdm)
1577 {
1578 mdm->insertReimplementedBy(md);
1579 }
1580 }
1581 if (!m_redefinedBy.contains(md))
1582 {
1584 }
1585}
virtual void insertReimplementedBy(MemberDef *md)=0
bool contains(const MemberDef *md) const
Definition memberlist.h:89
void inSort(MemberDef *md)
Definition memberlist.h:80

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

◆ invalidateCachedArgumentTypes()

void MemberDefImpl::invalidateCachedArgumentTypes ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6054 of file memberdef.cpp.

6055{
6058}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5940 of file memberdef.cpp.

5941{
5943}

References m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5310 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5260 of file memberdef.cpp.

5261{
5262 return m_memSpec.isAddable();
5263}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5335 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5392 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5407 of file memberdef.cpp.

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

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

1996{
1997 bool extractStatic = Config_getBool(EXTRACT_STATIC);
1998 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
1999 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2000 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2001 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2002 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
2003
2004 //printf("Member %s grpId=%d docs=%s file=%s args=%s\n",
2005 // qPrint(name()),
2006 // 0,"", //grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
2007 // "", //qPrint(getFileDef()->name()),
2008 // argsString());
2009
2010 bool hasDocs = hasDocumentation();
2011
2012 // only include static members with file/namespace scope if
2013 // explicitly enabled in the config file
2014 bool visibleIfStatic = !(getClassDef()==nullptr &&
2015 isStatic() &&
2016 !extractStatic
2017 );
2018
2019 // only include members is the are documented or
2020 // HIDE_UNDOC_MEMBERS is NO in the config file
2021 bool visibleIfDocumented = (!hideUndocMembers ||
2022 hasDocs ||
2024 );
2025
2026 // hide members with no detailed description and brief descriptions
2027 // explicitly disabled.
2028 bool visibleIfEnabled = !(hideUndocMembers &&
2029 documentation().empty() &&
2030 !briefMemberDesc &&
2031 !repeatBrief
2032 );
2033
2034 // Hide friend (class|struct|union) declarations if HIDE_FRIEND_COMPOUNDS is true
2035 bool visibleIfFriendCompound = !(hideFriendCompounds &&
2036 isFriend() /*&&
2037 (m_type=="friend class" ||
2038 m_type=="friend struct" ||
2039 m_type=="friend union"
2040 )*/
2041 );
2042
2043 // only include members that are non-private unless EXTRACT_PRIVATE is
2044 // set to YES or the member is part of a group. And as a special case,
2045 // private *documented* virtual members are shown if EXTRACT_PRIV_VIRTUAL
2046 // is set to YES
2047 bool visibleIfPrivate = (protectionLevelVisible(protection()) ||
2048 m_mtype==MemberType::Friend ||
2049 (m_prot==Protection::Private &&
2050 (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual && hasDocs)
2051 );
2052
2053 // hide member if it overrides a member in a superclass and has no
2054 // documentation of its own
2055 //bool visibleIfDocVirtual = !reimplements() ||
2056 // !Config_getBool(INHERIT_DOCS) ||
2057 // hasDocs;
2058
2059 // true if this member is a constructor or destructor
2060 bool cOrDTor = isConstructor() || isDestructor();
2061
2062 // hide default constructors or destructors (no args) without
2063 // documentation
2064 bool visibleIfNotDefaultCDTor = !(cOrDTor &&
2065 (m_defArgList.empty() ||
2066 m_defArgList.front().type == "void"
2067 ) &&
2068 !hasDocs
2069 );
2070
2071
2072 //printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d "
2073 // "visibleIfPrivate=%d visibleIfNotDefaultCDTor=%d "
2074 // "visibleIfFriendCompound=%d\n",
2075 // visibleIfStatic,visibleIfDocumented,
2076 // visibleIfEnabled,visibleIfPrivate,visibleIfNotDefaultCDTor,
2077 // visibleIfFriendCompound);
2078
2079 bool visible = visibleIfStatic && visibleIfDocumented &&
2080 visibleIfEnabled && visibleIfPrivate &&
2081 /*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
2082 visibleIfFriendCompound &&
2083 !isHidden();
2084 //printf("MemberDefImpl::isBriefSectionVisible() %d\n",visible);
2085 return visible;
2086}
Argument & front()
Definition arguments.h:105
bool isConstructor() const override
bool isDocumentedFriendClass() const override

References Config_getBool, documentation(), ArgumentList::empty(), DString::empty(), ArgumentList::front(), getClassDef(), hasDocumentation(), isConstructor(), isDestructor(), isDocumentedFriendClass(), isFinal(), isFriend(), DefinitionMixin< MemberDefMutable >::isHidden(), isOverride(), isStatic(), m_defArgList, m_mtype, m_prot, m_virt, protection(), protectionLevelVisible(), and Argument::type.

Referenced by writeEnumDeclaration().

◆ isCallable()

bool MemberDefImpl::isCallable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5458 of file memberdef.cpp.

5459{
5460 return isFunction() ||
5461 isSlot() ||
5462 isSignal() ||
5463 isConstructor() ||
5464 isDestructor() ||
5465 isObjCMethod() ||
5466 isFriend();
5467}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5514 of file memberdef.cpp.

5515{
5516 return m_memSpec.isConstEval();
5517}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5509 of file memberdef.cpp.

5510{
5511 return m_memSpec.isConstExpr();
5512}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5519 of file memberdef.cpp.

5520{
5521 return m_memSpec.isConstInit();
5522}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5412 of file memberdef.cpp.

5413{
5414 return m_memSpec.isConstrained();
5415}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4662 of file memberdef.cpp.

4663{
4664 if (m_isConstructorCached==0)
4665 {
4666 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4667 that->_computeIsConstructor();
4668 }
4670 return m_isConstructorCached==2;
4671
4672}
void _computeIsConstructor()
#define ASSERT(x)
Definition dstring.h:29

References _computeIsConstructor(), ASSERT, m_isConstructorCached, and MemberDefImpl().

Referenced by isBriefSectionVisible(), isCallable(), and warnIfUndocumentedParams().

◆ isCopy()

bool MemberDefImpl::isCopy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5330 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4911 of file memberdef.cpp.

4912{
4913 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return true;
4914 return false;
4915}
bool isProperty() const override

References getClassDef(), and isProperty().

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5180 of file memberdef.cpp.

5181{
5182 return m_mtype==MemberType::DCOP;
5183}

References m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5377 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5170 of file memberdef.cpp.

5171{
5172 return m_mtype==MemberType::Define;
5173}

References m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5382 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4284 of file memberdef.cpp.

4285{
4286 return m_defArgList.isDeleted();
4287}
bool isDeleted() const
Definition arguments.h:115

References ArgumentList::isDeleted(), and m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4703 of file memberdef.cpp.

4704{
4705 if (m_isDestructorCached==0)
4706 {
4707 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4708 that->_computeIsDestructor();
4709 }
4711 return m_isDestructorCached==2;
4712}
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 2686 of file memberdef.cpp.

2687{
2688 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2689 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2690 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2691 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2692 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2693 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2694 getClassDef()!=nullptr && getClassDef()->isSimple();
2695
2696 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2697 !isReference();
2698 bool result = visible || simpleFilter;
2699 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2700 // qPrint(name()),result,groupFilter,fileFilter);
2701 return result;
2702}
virtual bool hasBriefDescription() const =0
returns true if this class has a brief description

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

5155{
5156 return m_mtype==MemberType::Dictionary;
5157}

References m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5484 of file memberdef.cpp.

5485{
5486 return m_docsForDefinition;
5487}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5014 of file memberdef.cpp.

5015{
5016 return m_docTransferDone;
5017}
bool m_docTransferDone

References m_docTransferDone.

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4275 of file memberdef.cpp.

4276{
4277 ClassDef *fcd=nullptr;
4278 DString baseName=name();
4279 if (size_t i=baseName.find('<'); i!=DString::npos) baseName=baseName.left(i);
4280 return (isFriendClass() &&
4281 (fcd=getClass(baseName)) && fcd->isLinkable());
4282}
bool isFriendClass() const override
ClassDef * getClass(const DString &n)

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

Referenced by isBriefSectionVisible(), and writeDeclaration().

◆ isEnumerate()

bool MemberDefImpl::isEnumerate ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5134 of file memberdef.cpp.

5135{
5136 return m_mtype==MemberType::Enumeration;
5137}

References m_mtype.

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

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5355 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5139 of file memberdef.cpp.

5140{
5141 return m_mtype==MemberType::EnumValue;
5142}

References m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5190 of file memberdef.cpp.

5191{
5192 return m_mtype==MemberType::Event;
5193}

References m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5215 of file memberdef.cpp.

5216{
5217 return m_memSpec.isExplicit();
5218}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5448 of file memberdef.cpp.

5449{
5450 return m_explExt;
5451}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5285 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5200 of file memberdef.cpp.

5201{
5202 return m_related == Relationship::Foreign;
5203}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5175 of file memberdef.cpp.

5176{
5177 return m_mtype==MemberType::Friend;
5178}

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

6318{
6319 return (isFriend() &&
6320 (m_type=="friend class" || m_type=="friend struct" ||
6321 m_type=="friend union"));
6322}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6307 of file memberdef.cpp.

6308{
6309 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6310 bool isFriendToHide = hideFriendCompounds &&
6311 (m_type=="friend class" ||
6312 m_type=="friend struct" ||
6313 m_type=="friend union");
6314 return isFriendToHide;
6315}
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 5159 of file memberdef.cpp.

5160{
5161 return m_mtype==MemberType::Function;
5162}

References m_mtype.

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

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6330 of file memberdef.cpp.

6331{
6332 return isFunction() || isSlot() || isSignal();
6333}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5164 of file memberdef.cpp.

5165{
5166 return m_mtype==MemberType::Variable &&
5167 DString(argsString()).find(")(")!=DString::npos;
5168}
DString()=default

References argsString(), DString::DString(), m_mtype, and DString::npos.

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5230 of file memberdef.cpp.

5231{
5232 return m_memSpec.isGettable();
5233}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5443 of file memberdef.cpp.

5444{
5445 return m_implOnly;
5446}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5305 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5210 of file memberdef.cpp.

5211{
5212 return m_memSpec.isInline();
5213}

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

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

References Definition::isLinkable(), 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 1895 of file memberdef.cpp.

1896{
1897 if (m_isLinkableCached==0)
1898 {
1899 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1901 }
1903 return m_isLinkableCached==2;
1904}
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 5432 of file memberdef.cpp.

5433{
5434 return m_memSpec.isMaybeAmbiguous();
5435}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5427 of file memberdef.cpp.

5428{
5429 return m_memSpec.isMaybeDefault();
5430}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5422 of file memberdef.cpp.

5423{
5424 return m_memSpec.isMaybeVoid();
5425}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5220 of file memberdef.cpp.

5221{
5222 return m_memSpec.isMutable();
5223}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5290 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5504 of file memberdef.cpp.

5505{
5506 return m_memSpec.isNoDiscard();
5507}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5387 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5325 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6325 of file memberdef.cpp.

6326{
6327 return !(isFriend() && isFriendToHide());
6328}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4899 of file memberdef.cpp.

4900{
4901 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return true;
4902 return false;
4903}

References getClassDef(), and isFunction().

Referenced by addListReference(), getDeclType(), getLabels(), isCallable(), qualifiedName(), writeDeclaration(), writeDocumentation(), writeLink(), and writeMemberDocSimple().

◆ isObjCProperty()

bool MemberDefImpl::isObjCProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4905 of file memberdef.cpp.

4906{
4907 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return true;
4908 return false;
4909}

References getClassDef(), and isProperty().

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5315 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5300 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5235 of file memberdef.cpp.

5236{
5237 return m_memSpec.isPrivateGettable();
5238}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5250 of file memberdef.cpp.

5251{
5252 return m_memSpec.isPrivateSettable();
5253}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5185 of file memberdef.cpp.

5186{
5187 return m_mtype==MemberType::Property;
5188}

References m_mtype.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5240 of file memberdef.cpp.

5241{
5242 return m_memSpec.isProtectedGettable();
5243}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5255 of file memberdef.cpp.

5256{
5257 return m_memSpec.isProtectedSettable();
5258}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5534 of file memberdef.cpp.

5535{
5536 return m_proto;
5537}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5437 of file memberdef.cpp.

5438{
5439 return m_memSpec.isPublished();
5440}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5270 of file memberdef.cpp.

5271{
5272 return m_memSpec.isRaisable();
5273}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5275 of file memberdef.cpp.

5276{
5277 return m_memSpec.isReadable();
5278}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5402 of file memberdef.cpp.

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

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

6341{
6344}
virtual bool isReference() const =0
bool isReference() const override

References Definition::isReference(), 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 1597 of file memberdef.cpp.

1598{
1599 if (cd)
1600 {
1601 for (const auto &md : m_redefinedBy)
1602 {
1603 const ClassDef *mcd = md->getClassDef();
1604 if (mcd)
1605 {
1606 if (cd==mcd || cd->isBaseClass(mcd,true))
1607 {
1608 return true;
1609 }
1610 }
1611 }
1612 }
1613 return false;
1614}
virtual int isBaseClass(const ClassDef *bcd, bool followInstances, const DString &templSpec=DString()) const =0
Returns true iff bcd is a direct or indirect base class of this class.

References ClassDef::isBaseClass(), and m_redefinedBy.

◆ isRelated()

bool MemberDefImpl::isRelated ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5195 of file memberdef.cpp.

5196{
5197 return m_related == Relationship::Related;
5198}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6335 of file memberdef.cpp.

6336{
6337 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6338}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5265 of file memberdef.cpp.

5266{
5267 return m_memSpec.isRemovable();
5268}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5320 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5340 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5295 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5149 of file memberdef.cpp.

5150{
5151 return m_mtype==MemberType::Sequence;
5152}

References m_mtype.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5245 of file memberdef.cpp.

5246{
5247 return m_memSpec.isSettable();
5248}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5119 of file memberdef.cpp.

5120{
5121 return m_mtype==MemberType::Signal;
5122}

References m_mtype.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5499 of file memberdef.cpp.

5500{
5501 return m_memSpec.isLocal();
5502}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5124 of file memberdef.cpp.

5125{
5126 return m_mtype==MemberType::Slot;
5127}

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

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

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5360 of file memberdef.cpp.

5361{
5362 return m_mtype==MemberType::EnumValue &&
5363 m_enumScope &&
5365}
virtual bool isStrong() const =0

References MemberDef::isStrong(), m_enumScope, and m_mtype.

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5453 of file memberdef.cpp.

5454{
5455 return m_tspec;
5456}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5225 of file memberdef.cpp.

5226{
5227 return m_memSpec.isThreadLocal();
5228}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5417 of file memberdef.cpp.

5418{
5419 return m_memSpec.isTransient();
5420}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5372 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5144 of file memberdef.cpp.

5145{
5146 return m_mtype==MemberType::Typedef;
5147}

References m_mtype.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5683 of file memberdef.cpp.

5684{
5685 return m_isTypedefValCached;
5686}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5397 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5367 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5129 of file memberdef.cpp.

5130{
5131 return m_mtype==MemberType::Variable;
5132}

References m_mtype.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5345 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5280 of file memberdef.cpp.

5281{
5282 return m_memSpec.isWritable();
5283}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5494 of file memberdef.cpp.

5495{
5496 return m_livesInsideEnum;
5497}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5838 of file memberdef.cpp.

5839{
5840 m_related = Relationship::Foreign;
5842}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5914 of file memberdef.cpp.

5915{
5916 m_implOnly=true;
5917}

References m_implOnly.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5832 of file memberdef.cpp.

5833{
5834 m_related = Relationship::Related;
5836}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5709 of file memberdef.cpp.

5710{
5711 return m_memDec;
5712}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5704 of file memberdef.cpp.

5705{
5706 return m_memDef;
5707}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5114 of file memberdef.cpp.

5115{
5116 return m_mtype;
5117}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

DString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4042 of file memberdef.cpp.

4043{
4044 if (m_mtype == MemberType::Define)
4045 {
4046 return "macro definition";
4047 }
4048 else if (m_mtype == MemberType::Enumeration)
4049 {
4050 return "enumeration";
4051 }
4052 return to_string_lower(m_mtype);
4053}

References m_mtype.

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5782 of file memberdef.cpp.

5783{
5784 m_memSpec.merge(s);
5785}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4838 of file memberdef.cpp.

4839{
4840 m_defArgList = *al;
4841}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4843 of file memberdef.cpp.

4844{
4845 m_declArgList = *al;
4846}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1542 of file memberdef.cpp.

1543{
1544 setOuterScope(scope);
1546 {
1547 m_classDef = toClassDef(scope);
1548 }
1549 else if (scope->definitionType()==Definition::TypeFile)
1550 {
1551 m_fileDef = toFileDef(scope);
1552 }
1553 else if (scope->definitionType()==Definition::TypeModule)
1554 {
1555 m_moduleDef = toModuleDef(scope);
1556 }
1557 else if (scope->definitionType()==Definition::TypeNamespace)
1558 {
1559 m_nspace = toNamespaceDef(scope);
1560 }
1563}
virtual void setOuterScope(Definition *d)=0
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 6065 of file memberdef.cpp.

6066{
6067 return m_numberOfFlowKW;
6068}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 4952 of file memberdef.cpp.

4953{
4954 DString qm;
4955 if (showStatic)
4956 {
4957 if (isStatic()) qm="+ "; else qm="- ";
4958 }
4959 qm+=name();
4960 if (!localLink) // link to method of same class
4961 {
4962 qm+=" (";
4963 qm+=getClassDef()->name();
4964 qm+=")";
4965 }
4966 return qm;
4967}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4871 of file memberdef.cpp.

4872{
4874 if (e) Doxygen::parseSourcesNeeded = true;
4875}
static bool parseSourcesNeeded
Definition doxygen.h:123

References m_hasCallerGraph, and Doxygen::parseSourcesNeeded.

◆ overrideCallGraph()

void MemberDefImpl::overrideCallGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4865 of file memberdef.cpp.

4866{
4868 if (e) Doxygen::parseSourcesNeeded = true;
4869}

References m_hasCallGraph, and Doxygen::parseSourcesNeeded.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4889 of file memberdef.cpp.

4890{
4892}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4894 of file memberdef.cpp.

4895{
4897}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4877 of file memberdef.cpp.

4878{
4880 if (e) Doxygen::parseSourcesNeeded = true;
4881}

References m_hasReferencedByRelation, and Doxygen::parseSourcesNeeded.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4883 of file memberdef.cpp.

4884{
4886 if (e) Doxygen::parseSourcesNeeded = true;
4887}

References m_hasReferencesRelation, and Doxygen::parseSourcesNeeded.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5109 of file memberdef.cpp.

5110{
5111 return m_prot;
5112}

References m_prot.

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

◆ qualifiedName()

DString MemberDefImpl::qualifiedName ( ) const
overridevirtual

Returns the fully qualified name of this definition

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 4917 of file memberdef.cpp.

4918{
4919 if (isObjCMethod())
4920 {
4921 DString qm;
4922 if (isStatic()) qm="+"; else qm="-";
4923 qm+="[";
4924 qm+=getClassDef()->name()+" ";
4925 qm+=name();
4926 qm+="]";
4927 return qm;
4928 }
4929 else if (m_enumScope && m_enumScope->isStrong())
4930 {
4931 return m_enumScope->qualifiedName()+
4933 localName();
4934 }
4935 else
4936 {
4938 }
4939}
virtual DString qualifiedName() const =0
DString qualifiedName() const override

References getClassDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), isObjCMethod(), isStatic(), MemberDef::isStrong(), DefinitionMixin< MemberDefMutable >::localName(), m_enumScope, Definition::name(), DefinitionMixin< MemberDefMutable >::name(), Definition::qualifiedName(), 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 6370 of file memberdef.cpp.

6371{
6372 return m_redefineCount;
6373}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1592 of file memberdef.cpp.

1593{
1594 return m_redefinedBy;
1595}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1587 of file memberdef.cpp.

1588{
1589 return m_redefines;
1590}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5469 of file memberdef.cpp.

5470{
5471 return m_relatedAlso;
5472}

References m_relatedAlso.

◆ requiresClause()

DString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5990 of file memberdef.cpp.

5991{
5992 return m_requiresClause;
5993}

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

5550{
5551 ArgumentList &decAl = m_declArgList;
5552 ArgumentList &defAl = m_defArgList;
5553 const ArgumentList &decAlSrc = md->declArgumentList();
5554 const ArgumentList &defAlSrc = md->argumentList();
5555 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5556 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5557 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5558 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5559 {
5560 Argument &decA = *decIt;
5561 Argument &defA = *defIt;
5562 const Argument &decAS = *decSrc;
5563 const Argument &defAS = *defSrc;
5564 if (decA.name.empty())
5565 {
5566 if (!defA.name.empty())
5567 {
5568 decA.name = defA.name;
5569 }
5570 else if (!decAS.name.empty())
5571 {
5572 decA.name = decAS.name;
5573 }
5574 else if (!defAS.name.empty())
5575 {
5576 decA.name = defAS.name;
5577 }
5578 }
5579 if (defA.name.empty())
5580 {
5581 if (!decA.name.empty())
5582 {
5583 defA.name = decA.name;
5584 }
5585 else if (!decAS.name.empty())
5586 {
5587 defA.name = decAS.name;
5588 }
5589 else if (!defAS.name.empty())
5590 {
5591 defA.name = defAS.name;
5592 }
5593 }
5594 }
5595}

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

◆ setAnchor()

void MemberDefImpl::setAnchor ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 4311 of file memberdef.cpp.

4312{
4313 DString memAnchor = name();
4314 if (!m_args.empty()) memAnchor+=m_args;
4315 if (m_memSpec.isAlias()) // this is for backward compatibility
4316 {
4317 memAnchor.prepend(" = "+m_initializer);
4318 }
4319 memAnchor.prepend(definition()); // actually the method name is now included
4320 // twice, which is silly, but we keep it this way for backward
4321 // compatibility.
4322
4323 // include number of template arguments as well,
4324 // to distinguish between two template
4325 // specializations that only differ in the template parameters.
4327 {
4328 char buf[20];
4329 snprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4330 buf[19]='\0';
4331 memAnchor.prepend(buf);
4332 }
4333 if (!m_requiresClause.empty())
4334 {
4335 memAnchor+=" "+m_requiresClause;
4336 }
4337 if (m_redefineCount>0)
4338 {
4339 char buf[20];
4340 snprintf(buf,20,":%d",m_redefineCount);
4341 buf[19]='\0';
4342 memAnchor.append(buf);
4343 }
4344
4345 // convert to md5 hash
4346 uint8_t md5_sig[16];
4347 char sigStr[33];
4348 MD5Buffer(memAnchor.data(),static_cast<unsigned int>(memAnchor.length()),md5_sig);
4349 MD5SigToString(md5_sig,sigStr);
4350 m_anc = DString("a")+sigStr;
4351}
size_t size() const
Definition arguments.h:100
DString & append(char c)
Definition dstring.h:478
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:162

References DString::append(), DString::data(), definition(), DString::DString(), DString::empty(), ArgumentList::hasParameters(), DString::length(), m_anc, m_args, m_initializer, m_memSpec, m_redefineCount, m_requiresClause, m_tArgList, DefinitionMixin< MemberDefMutable >::name(), DString::prepend(), and ArgumentList::size().

◆ setAnonymousEnumType()

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

Implements MemberDefMutable.

Definition at line 5871 of file memberdef.cpp.

5872{
5873 m_annEnumType = md;
5874}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5849 of file memberdef.cpp.

5850{
5851 m_args = as;
5852}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5804 of file memberdef.cpp.

5805{
5807}
DString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
Definition dstring.cpp:118

References DString::DString(), m_bitfields, and DString::simplifyWhiteSpace().

◆ setBriefDescription()

void MemberDefImpl::setBriefDescription ( const DString & b,
const DString & 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 1867 of file memberdef.cpp.

1868{
1871}
virtual DString briefFile() const =0
virtual int briefLine() const =0
void setBriefDescription(const DString &brief, const DString &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 5960 of file memberdef.cpp.

5961{
5962 m_category = def;
5963}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 5970 of file memberdef.cpp.

5971{
5972 m_categoryRelation = md;
5973}

References m_categoryRelation.

◆ setClassDefOfAnonymousType()

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

Implements MemberDefMutable.

Definition at line 1979 of file memberdef.cpp.

1980{
1981 m_anonymousType = cd;
1982}

References m_anonymousType.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5902 of file memberdef.cpp.

5903{
5904 m_declFileName = df;
5905 m_declLine = line;
5906 m_declColumn = column;
5907}

References m_declColumn, m_declFileName, and m_declLine.

Referenced by setExplicitExternal(), and setPrototype().

◆ setDefinition()

void MemberDefImpl::setDefinition ( const DString & d)
overridevirtual

Implements MemberDefMutable.

Definition at line 5748 of file memberdef.cpp.

5749{
5750 m_def=d;
5751}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1919 of file memberdef.cpp.

1920{
1921 m_defTmpArgLists = lists;
1922}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5930 of file memberdef.cpp.

5931{
5933}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1873 of file memberdef.cpp.

1874{
1875 m_docTransferDone = true;
1876}

References m_docTransferDone.

◆ setDocumentation()

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

Sets the documentation of this definition to d.

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 1861 of file memberdef.cpp.

1862{
1865}
virtual int docLine() const =0
void setDocumentation(const DString &doc, const DString &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 5866 of file memberdef.cpp.

5867{
5868 m_docEnumValues=value;
5869}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 5975 of file memberdef.cpp.

5976{
5977 m_enumBaseType = type;
5978}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5859 of file memberdef.cpp.

5860{
5861 m_classDef = cd;
5864}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4367 of file memberdef.cpp.

4368{
4369 m_enumScope=md;
4371 if (md->getGroupDef())
4372 {
4373 m_group = md->getGroupDef();
4374 m_grouppri = md->getGroupPri();
4379 }
4380}
virtual bool getGroupHasDocs() const =0
virtual GroupDef * getGroupDef()=0
virtual int getGroupStartLine() const =0
virtual Grouping::GroupPri_t getGroupPri() const =0
virtual DString 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 DString & df,
int line,
int column )
overridevirtual

Implements MemberDefMutable.

Definition at line 5889 of file memberdef.cpp.

5890{
5891 m_explExt=b;
5892 if (b)
5893 {
5894 setDeclFile(df,line,column);
5895 }
5896 else
5897 {
5898 setDefFile(df,line,column);
5899 }
5900}
virtual void setDefFile(const DString &df, int defLine, int defColumn)=0
void setDeclFile(const DString &df, int line, int column) override

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

◆ setExplicitInherited()

void MemberDefImpl::setExplicitInherited ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 1878 of file memberdef.cpp.

1879{
1881}

References m_explicitInherited.

◆ setFileDef()

void MemberDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5753 of file memberdef.cpp.

5754{
5755 m_fileDef=fd;
5759}

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

5926{
5928}

References m_formalTemplateArguments.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 5935 of file memberdef.cpp.

5936{
5937 m_groupAlias = md;
5938}

References m_groupAlias.

◆ setGroupDef()

void MemberDefImpl::setGroupDef ( GroupDef * gd,
Grouping::GroupPri_t pri,
const DString & fileName,
int startLine,
bool hasDocs,
MemberDef * member = nullptr )
overridevirtual

Implements MemberDefMutable.

Definition at line 4353 of file memberdef.cpp.

4356{
4357 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4358 m_group=gd;
4359 m_grouppri=pri;
4360 m_groupFileName=fileName;
4361 m_groupStartLine=startLine;
4362 m_groupHasDocs=hasDocs;
4363 m_groupMember=member;
4365}

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

1890{
1893}
void setHidden(bool b) override

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

◆ setInbodyDocumentation()

void MemberDefImpl::setInbodyDocumentation ( const DString & d,
const DString & 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 1883 of file memberdef.cpp.

1884{
1887}
virtual DString inbodyFile() const =0
virtual int inbodyLine() const =0
void setInbodyDocumentation(const DString &doc, const DString &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 5844 of file memberdef.cpp.

5845{
5846 m_docProvider = md;
5847}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4461 of file memberdef.cpp.

4462{
4463 size_t indent=0;
4465 int l=static_cast<int>(m_initializer.length());
4466 int p=l-1;
4467 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4471
4472 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4473}
int contains(char c, bool cs=true) const
Definition dstring.cpp:76
const DString & initializer() const override
DString detab(const DString &s, size_t &refIndent)
Definition util.cpp:6764
void stripIndentationVerbatim(DString &doc, const int indentationLevel, bool skipFirstLine)
Definition util.cpp:6082

References DString::at(), DString::contains(), detab(), initializer(), DString::left(), DString::length(), m_initializer, m_initLines, and stripIndentationVerbatim().

◆ setMaxInitLines()

void MemberDefImpl::setMaxInitLines ( int lines)
overridevirtual

Implements MemberDefMutable.

Definition at line 5809 of file memberdef.cpp.

5810{
5811 if (lines!=-1)
5812 {
5813 m_userInitLines=lines;
5814 }
5815}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5950 of file memberdef.cpp.

5951{
5952 m_memDec=md;
5953}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5945 of file memberdef.cpp.

5946{
5947 m_memDef=md;
5948}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4297 of file memberdef.cpp.

4298{
4299 m_memberGroup = grp;
4300}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 5909 of file memberdef.cpp.

5910{
5911 m_grpId=id;
5912}
virtual DString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5772 of file memberdef.cpp.

5773{
5774 m_memSpec=s;
5775}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5742 of file memberdef.cpp.

5743{
5744 m_mtype=t;
5746}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5761 of file memberdef.cpp.

5762{
5763 m_moduleDef=mod;
5764}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4390 of file memberdef.cpp.

4391{
4392 m_nspace=nd;
4393 setOuterScope(nd);
4394}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5766 of file memberdef.cpp.

5767{
5768 m_prot=p;
5770}

References m_isLinkableCached, and m_prot.

◆ setPrototype()

void MemberDefImpl::setPrototype ( bool p,
const DString & df,
int line,
int column )
overridevirtual

Implements MemberDefMutable.

Definition at line 5876 of file memberdef.cpp.

5877{
5878 m_proto=p;
5879 if (p)
5880 {
5881 setDeclFile(df,line,column);
5882 }
5883 else
5884 {
5885 setDefFile(df,line,column);
5886 }
5887}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5817 of file memberdef.cpp.

5818{
5819 m_read=r;
5820}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6375 of file memberdef.cpp.

6376{
6377 m_redefineCount=count;
6378}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1566 of file memberdef.cpp.

1567{
1568 m_redefines = md;
1569}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5854 of file memberdef.cpp.

5855{
5856 m_relatedAlso=cd;
5857}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 5985 of file memberdef.cpp.

5986{
5987 m_requiresClause = req;
5988}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4533 of file memberdef.cpp.

4534{
4535 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4536 m_sectionMap.emplace(container,sl);
4537}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 4941 of file memberdef.cpp.

4942{
4943 if (ti)
4944 {
4945 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
4946 m_anc=ti->anchor;
4947 setReference(ti->tagName);
4949 }
4950}
virtual void setReference(const DString &r)=0
DString stripExtension(const DString &fName)
Definition util.cpp:4993

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

5920{
5923}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5827 of file memberdef.cpp.

5828{
5829 m_tspec=b;
5830}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4853 of file memberdef.cpp.

4854{
4855 m_type = t;
4856}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4848 of file memberdef.cpp.

4849{
4850 m_typeConstraints = al;
4851}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5777 of file memberdef.cpp.

5778{
5779 m_vhdlSpec=s;
5780}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5822 of file memberdef.cpp.

5823{
5824 m_write=w;
5825}

References m_write.

◆ sourceRefName()

DString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1632 of file memberdef.cpp.

1633{
1634 DString n = name();
1635 DString s = getScopeString();
1636
1637 if (!s.empty())
1638 {
1639 n.prepend(s+"::");
1640 }
1641 else if (isStatic() && getFileDef())
1642 {
1643 n.prepend(getFileDef()->name()+":");
1644 }
1645 if (isCallable())
1646 {
1647 n.append(argsString());
1648 }
1649 return n;
1650}
bool isCallable() const override
DString getScopeString() const override

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

◆ templateArguments()

const ArgumentList & MemberDefImpl::templateArguments ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5597 of file memberdef.cpp.

5598{
5599 return m_tArgList;
5600}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5673 of file memberdef.cpp.

5674{
5675 return m_templateMaster;
5676}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6302 of file memberdef.cpp.

6303{
6304 return m_typeConstraints;
6305}

References m_typeConstraints.

◆ typeString()

DString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4984 of file memberdef.cpp.

4985{
4986 return m_type;
4987}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4539 of file memberdef.cpp.

4540{
4541 if (count>25)
4542 {
4544 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4545 return Specifier::Normal;
4546 }
4547 Specifier v = m_virt;
4548 const MemberDef *rmd = reimplements();
4549 while (rmd && v==Specifier::Normal)
4550 {
4551 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4552 rmd = rmd->reimplements();
4553 }
4554 return v;
4555}
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 4127 of file memberdef.cpp.

4128{
4129 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4130 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4131 return (!isAnonymous() &&
4132 (!hideUndocMembers || hasDocumentation()) &&
4133 (!isStatic() || extractStatic) &&
4134 isLinkable()
4135 );
4136}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4055 of file memberdef.cpp.

4056{
4057 /*
4058 * Removed bug_303020:
4059 * if (m_memberGroup) return;
4060 */
4061 const ClassDef *cd = getClassDef();
4062 const NamespaceDef *nd = getNamespaceDef();
4063 const FileDef *fd = getFileDef();
4064 const GroupDef *gd = getGroupDef();
4065 const Definition *d=nullptr;
4066 DString t;
4067 if (cd)
4068 {
4069 t=cd->compoundTypeString();
4070 d=cd;
4071 }
4072 else if (nd)
4073 {
4074 t=nd->compoundTypeString();
4075 d=nd;
4076 }
4077 else if (gd)
4078 {
4079 t="group";
4080 d=gd;
4081 }
4082 else
4083 {
4084 t="file";
4085 d=fd;
4086 }
4087 bool extractAll = Config_getBool(EXTRACT_ALL);
4088
4089 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4090 // qPrint(name()),
4091 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4092 if ((!hasUserDocumentation() && !extractAll) &&
4093 !isFriendClass() &&
4094 name().find('@')==DString::npos && d && d->name().find('@')==DString::npos &&
4097 !isReference() && !isDeleted()
4098 )
4099 {
4100 SrcLangExt lang = getLanguage();
4101 DString sep = getLanguageSpecificSeparator(lang,true);
4102 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4104 substitute(d->name(),"::",sep));
4105 }
4106 else if (!hasDetailedDescription())
4107 {
4109 }
4110
4111 // if it is an enum, we check that its members are documented
4112 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4113 {
4114 for (const auto &fmd : enumFieldList())
4115 {
4116 if (!fmd->isLinkableInProject())
4117 {
4118 SrcLangExt lang = getLanguage();
4119 DString sep = getLanguageSpecificSeparator(lang,true);
4120 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4121 qualifiedName(),sep,fmd->name());
4122 }
4123 }
4124 }
4125}
virtual DString compoundTypeString() const =0
Returns the type of compound as a string.
void warnIfUndocumentedParams() const override
bool hasUserDocumentation() const override
DString memberTypeName() const override
bool _isAnonymousBitField() const
bool isDeleted() const override
virtual DString compoundTypeString() const =0
#define warn_undoc(file, line, fmt,...)
Definition message.h:102

References _isAnonymousBitField(), argsString(), ClassDef::compoundTypeString(), NamespaceDef::compoundTypeString(), Config_getBool, enumFieldList(), DString::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(), DString::npos, protectionLevelVisible(), qualifiedName(), substitute(), warn, warn_undoc, and warnIfUndocumentedParams().

Referenced by writeDeclaration().

◆ warnIfUndocumentedParams()

void MemberDefImpl::warnIfUndocumentedParams ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4217 of file memberdef.cpp.

4218{
4219 DString returnType = typeString();
4220 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4221 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=DString::npos;
4222
4223 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4224 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4225 {
4226 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4227 if (!defArgList.trailingReturnType().empty())
4228 {
4229 DString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4230 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4231 }
4232 }
4233 if (!Config_getBool(EXTRACT_ALL) &&
4234 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4235 Config_getBool(WARN_NO_PARAMDOC) &&
4236 isFunction() &&
4237 !isDeleted() &&
4238 !isReference() &&
4240 {
4242 {
4244 "parameters of member {} are not documented",
4245 qualifiedName());
4246 }
4248 hasDocumentation() && !returnType.empty() &&
4249 !( // not one of the cases where nothing is returned
4250 isVoidReturn || // void return type
4251 isFortranSubroutine || // fortran subroutine
4252 isConstructor() || // a constructor
4253 isDestructor() || // or a destructor
4254 isFriend() // or a friend
4255 )
4256 )
4257 {
4259 "return type of member {} is not documented",
4260 qualifiedName());
4261 }
4262 }
4263 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4265 (isVoidReturn || // void return type
4266 isFortranSubroutine || // fortran subroutine
4267 isConstructor() || // a constructor
4268 isDestructor())) // or destructor
4269 {
4270 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4271 qualifiedName());
4272 }
4273}
DString trailingReturnType() const
Definition arguments.h:114
bool endsWith(const char *s) const
Definition dstring.h:606
static bool suppressDocWarnings
Definition doxygen.h:130
bool isDocsForDefinition() const override
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112

References argumentList(), Config_getBool, declArgumentList(), DefinitionMixin< MemberDefMutable >::docFile(), DefinitionMixin< MemberDefMutable >::docLine(), DString::empty(), DString::endsWith(), DString::find(), DefinitionMixin< MemberDefMutable >::getLanguage(), hasDocumentation(), isConstructor(), isDeleted(), isDestructor(), isDocsForDefinition(), isFriend(), isFunction(), isReference(), m_hasDocumentedParams, m_hasDocumentedReturnType, DString::npos, 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 DString & inheritId = DString() ) const
overridevirtual

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

Implements MemberDef.

Definition at line 2183 of file memberdef.cpp.

2186{
2187 //printf("> %s MemberDefImpl::writeDeclaration() inGroup=%d inheritId=%s\n",qPrint(qualifiedName()),inGroup,qPrint(inheritId));
2188
2189 // hide enum value, since they appear already as part of the enum, unless they
2190 // are explicitly grouped.
2191 if (!inGroup && m_mtype==MemberType::EnumValue) return;
2192
2193 const Definition *d=nullptr;
2194 ASSERT (cd!=nullptr || nd!=nullptr || fd!=nullptr || gd!=nullptr || mod!=nullptr); // member should belong to something
2195 if (cd) d=cd;
2196 else if (nd) d=nd;
2197 else if (fd) d=fd;
2198 else d=gd;
2199 if (d==gd || d==mod) // see bug 753608
2200 {
2201 if (getClassDef()) d = getClassDef();
2202 else if (getNamespaceDef()) d = getNamespaceDef();
2203 else if (getFileDef()) d = getFileDef();
2204 }
2205 else if (d==fd) // see issue #9850, namespace member can be shown in file scope as well
2206 {
2207 if (getNamespaceDef()) d = getNamespaceDef();
2208 }
2209 if (d==nullptr)
2210 {
2211 err("No context could be derived for member '{}'\n",name());
2212 return; // should not happen
2213 }
2214
2215 DString cname = d->name();
2216 DString cdname = d->displayName();
2217 DString cfname = getOutputFileBase();
2218
2219 // search for the last anonymous scope in the member type
2220 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
2221
2223
2224 // start a new member declaration
2227 ol.startMemberItem(annoClassDef ? DString() : anchor(), anonType, inheritId);
2228
2229
2230 // If there is no detailed description we need to write the anchor here.
2231 bool detailsVisible = hasDetailedDescription();
2232 bool writeAnchor = (inGroup || getGroupDef()==nullptr) && // only write anchors for member that have no details and are
2233 !detailsVisible && // rendered inside the group page or are not grouped at all
2234 inheritId.empty();
2235
2236 if (writeAnchor)
2237 {
2238 DString doxyArgs=argsString();
2239 DString doxyName=name();
2240 if (!cname.empty())
2241 {
2243 }
2244 ol.startDoxyAnchor(cfname,cname,anchor(),doxyName,doxyArgs);
2245 ol.addLabel(cfname,anchor());
2246 }
2247
2248 if (!detailsVisible)
2249 {
2250 ol.pushGeneratorState();
2254 ol.docify("\n");
2255 ol.popGeneratorState();
2256 }
2257
2258 if (annoClassDef)
2259 {
2260 for (int j=0;j<indentLevel;j++)
2261 {
2263 }
2264 }
2265
2266 // *** write template lists
2267 if (m_tArgList.hasParameters() && getLanguage()==SrcLangExt::Cpp)
2268 {
2271 ol.endMemberTemplateParams(anchor(),inheritId);
2272 }
2273
2274
2275 // *** write type
2276 DString ltype(m_type);
2277 auto lang = getLanguage();
2278 if (isTypedef() && lang != SrcLangExt::Slice)
2279 {
2280 ltype.prepend("typedef ");
2281 }
2282 if (isTypeAlias())
2283 {
2284 if (lang==SrcLangExt::Python)
2285 {
2286 ltype="type";
2287 }
2288 else
2289 {
2290 ltype="using";
2291 }
2292 }
2293 // strip 'friend' keyword from ltype
2294 ltype.stripPrefix("friend ");
2295 static const reg::Ex r(R"(@\d+)"); // anonymous type marker
2296 reg::Match match;
2297 std::string stype = ltype.str();
2298 bool endAnonScopeNeeded=false;
2299 LinkifyTextOptions options;
2300 options.setScope(d).setFileScope(getBodyDef()).setSelf(this);
2301 if (reg::search(stype,match,r)) // member has an anonymous type marker
2302 {
2303 //printf("name=%s annoClassDef=%p stype='%s' scopeName='%s'\n",
2304 // qPrint(name()),(void*)annoClassDef,qPrint(stype),qPrint(cname));
2305
2306 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)"); // anonymous type marker(s) including scope
2307 reg::Match amatch;
2308 reg::search(stype,amatch,ar);
2309 size_t ai = amatch.position();
2310 size_t al = amatch.length();
2311 const MemberDef *amd = getAnonymousEnumType();
2312 if (annoClassDef && amd==nullptr) // type is an anonymous compound
2313 {
2314 ol.writeObjectLink(annoClassDef->getReference(),annoClassDef->getOutputFileBase(),
2315 annoClassDef->anchor(),ltype.left(ai)+ltype.mid(ai+al));
2316 }
2317 else if (amd) // type is an anonymous enum
2318 {
2319 DString typePlaceholder = " { ... } ";
2320 if (lang==SrcLangExt::Cpp)
2321 {
2322 if (amd->isEnumStruct()) typePlaceholder.prepend(" struct");
2323 else if (amd->isStrong()) typePlaceholder.prepend(" class");
2324 }
2326 amd->anchor(),ltype.left(ai)+typePlaceholder+ltype.mid(ai+al));
2327 }
2328 else // fallback if anonymous type is not found
2329 {
2330 size_t i = match.position();
2331 size_t l = match.length();
2332 ltype = ltype.left(i) + " { ... } " + removeAnonymousScopes(ltype.mid(i+l));
2333 linkifyText(TextGeneratorOLImpl(ol), ltype, options);
2334 }
2335 }
2336 else if (ltype=="@") // rename type from enum values
2337 {
2338 ltype="";
2339 }
2340 else
2341 {
2342 if (isObjCMethod())
2343 {
2344 ltype.prepend("(");
2345 ltype.append(")");
2346 }
2347 linkifyText(TextGeneratorOLImpl(ol),ltype,options);
2348 }
2349
2350 if (!ltype.empty())
2351 {
2352 ol.pushGeneratorState();
2354 ol.docify(" ");
2355 ol.popGeneratorState();
2356 }
2357
2359
2360 // *** write name
2361 if (!isAnonymous() && !_isAnonymousBitField()) // hide anonymous stuff
2362 {
2363 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2364 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2365 bool visibleIfPrivate = (protectionLevelVisible(protection()) ||
2366 m_mtype==MemberType::Friend ||
2367 (m_prot==Protection::Private &&
2368 (m_virt!=Specifier::Normal || isOverride() || isFinal()) &&
2369 extractPrivateVirtual && hasDocumentation()
2370 ));
2371 //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d hasDocumentation=%d\n",qPrint(name()),gd,getGroupDef(),inGroup,isLinkable(),hasDocumentation());
2372 if (!name().empty() && // name valid
2373 (hasDetailedDescription() || isReference()) && // has docs
2374 visibleIfPrivate &&
2375 !(isStatic() && getClassDef()==nullptr && !extractStatic) // hidden due to static-ness
2376 )
2377 {
2378 //printf("writeLink %s->%d\n",qPrint(name),hasDocumentation());
2379 const ClassDef *rcd = cd;
2380 if (isReference() && getClassDef()) rcd = getClassDef();
2381 writeLink(ol,rcd,nd,fd,gd,mod);
2382 }
2383 else if (isDocumentedFriendClass())
2384 // if the member is an undocumented friend declaration for some class,
2385 // then maybe we can link to the class
2386 {
2387 writeLink(ol,getClass(name()),nullptr,nullptr,nullptr,nullptr);
2388 }
2389 else
2390 // there is a brief member description and brief member
2391 // descriptions are enabled or there is no detailed description.
2392 {
2393 const ClassDef *rcd = cd;
2394 if (isReference() && getClassDef()) rcd = getClassDef();
2395 writeLink(ol,rcd,nd,fd,gd,mod,true);
2396 }
2397 }
2398
2399 // *** write arguments
2400 if (!argsString().empty() && !isObjCMethod())
2401 {
2402 if (!isDefine() && !isTypedef()) ol.writeString(" ");
2404 isDefine() ?
2405 substitute(argsString(),",",", ") :
2406 isTypedef() ?
2407 substitute(argsString(),")(",") (") :
2409 LinkifyTextOptions(options)
2410 .setArgumentList(&m_defArgList)
2411 .setAutoBreak(false)
2412 .setIndentLevel(indentLevel)
2413 );
2414 }
2415
2416 // *** write bitfields
2417 if (!m_bitfields.empty()) // add bitfields
2418 {
2420 }
2421 else if (hasOneLineInitializer()
2422 //!init.empty() && initLines==0 && // one line initializer
2423 //((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
2424 ) // add initializer
2425 {
2426 if (isTypeAlias()) // using statement
2427 {
2428 ol.writeString(" = ");
2430 }
2431 else if (!isDefine())
2432 {
2433 //ol.writeString(" = ");
2434 ol.writeString(" ");
2436 }
2437 else
2438 {
2441 }
2442 }
2443
2444
2446 {
2447 ol.startTypewriter();
2448 ol.docify(" [implementation]");
2449 ol.endTypewriter();
2450 }
2451
2452 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2453
2454 if (isProperty() && (isSettable() || isGettable() ||
2457 {
2458 ol.writeLatexSpacing();
2459 ol.startTypewriter();
2460 ol.docify(" [");
2461 StringVector sl;
2462
2463 if (isGettable()) sl.emplace_back("get");
2464 if (isProtectedGettable()) sl.emplace_back("protected get");
2465 if (isSettable()) sl.emplace_back("set");
2466 if (isProtectedSettable()) sl.emplace_back("protected set");
2467 if (extractPrivate)
2468 {
2469 if (isPrivateGettable()) sl.emplace_back("private get");
2470 if (isPrivateSettable()) sl.emplace_back("private set");
2471 }
2472 bool first=true;
2473 for (const auto &s : sl)
2474 {
2475 if (!first)
2476 {
2477 ol.docify(", ");
2478 }
2479 first=false;
2480 ol.docify(s);
2481 }
2482 ol.docify("]");
2483 ol.endTypewriter();
2484 }
2485
2486 if (isEvent() && (isAddable() || isRemovable() || isRaisable()))
2487 {
2488 ol.writeLatexSpacing();
2489 ol.startTypewriter();
2490 ol.docify(" [");
2491 StringVector sl;
2492 if (isAddable()) sl.emplace_back("add");
2493 if (isRemovable()) sl.emplace_back("remove");
2494 if (isRaisable()) sl.emplace_back("raise");
2495 bool first=true;
2496 for (const auto &s : sl)
2497 {
2498 if (!first)
2499 {
2500 ol.docify(", ");
2501 }
2502 first=false;
2503 ol.docify(s);
2504 }
2505 ol.docify("]");
2506 ol.endTypewriter();
2507 }
2508
2509 if (writeAnchor)
2510 {
2511 ol.endDoxyAnchor(cfname,anchor());
2512 }
2513
2514 //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
2515 // qPrint(name()),annoClassDef,annEnumType);
2516 ol.endMemberItem(anonType);
2517 if (endAnonScopeNeeded)
2518 {
2519 ol.endAnonTypeScope(indentLevel);
2520 }
2521
2522 // write brief description
2523 if (!briefDescription().empty() &&
2524 Config_getBool(BRIEF_MEMBER_DESC)
2525 )
2526 {
2527 auto parser { createDocParser() };
2528 auto ast { validatingParseDoc(*parser.get(),
2529 briefFile(),
2530 briefLine(),
2532 this,
2534 DocOptions()
2535 .setIndexWords(inheritedFrom==nullptr)
2536 .setSingleLine(true))
2537 };
2538 if (!ast->empty())
2539 {
2540 ol.startMemberDescription(anchor(),inheritId);
2541 ol.writeDoc(ast.get(),getOuterScope()?getOuterScope():d,this);
2542 if (detailsVisible) // add More.. link only when both brief and details are visible
2543 {
2544 if (!isAnonymous()) // hide anonymous stuff
2545 {
2546 ol.pushGeneratorState();
2548 ol.docify(" ");
2549 ol.popGeneratorState();
2550 }
2551 }
2552 // for RTF we need to add an extra empty paragraph
2553 ol.pushGeneratorState();
2555 ol.startParagraph();
2556 ol.endParagraph();
2557 ol.popGeneratorState();
2559 }
2560 }
2561
2562 ol.endMemberDeclaration(anchor(),inheritId);
2563
2565 //printf("< %s MemberDefImpl::writeDeclaration() inGroup=%d\n",qPrint(qualifiedName()),inGroup);
2566}
virtual bool isEnumStruct() const =0
void warnIfUndocumented() const override
bool isDefine() const override
void _writeTemplatePrefix(OutputList &ol, const Definition *def, const ArgumentList &al, bool writeReqClause=true) const
DString excpString() const override
const MemberDef * getAnonymousEnumType() const override
bool hasOneLineInitializer() 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
bool isEvent() const override
void writeDoc(const IDocNodeAST *ast, const Definition *ctx, const MemberDef *md, int sectionLevel=-1)
Definition outputlist.h:383
void startMemberDeclaration()
Definition outputlist.h:569
void writeLatexSpacing()
Definition outputlist.h:545
void endMemberDescription()
Definition outputlist.h:567
void endMemberDeclaration(const DString &anchor, const DString &inheritId)
Definition outputlist.h:571
void endMemberTemplateParams(const DString &anchor, const DString &inheritId)
Definition outputlist.h:499
void insertMemberAlign(bool templ=false)
Definition outputlist.h:517
void endMemberItem(OutputGenerator::MemberItemType type)
Definition outputlist.h:495
void pushGeneratorState()
void popGeneratorState()
void startMemberItem(const DString &anchor, OutputGenerator::MemberItemType type, const DString &id=DString())
Definition outputlist.h:493
void startMemberDescription(const DString &anchor, const DString &inheritId=DString(), bool typ=false)
Definition outputlist.h:565
void endAnonTypeScope(int i1)
Definition outputlist.h:491
void writeNonBreakableSpace(int num)
Definition outputlist.h:626
void startMemberTemplateParams()
Definition outputlist.h:497
size_t position() const
Returns the position of the match or std::string::npos if no position is set.
Definition regex.h:160
size_t length() const
Returns the position of the match or std::string::npos if no length is set.
Definition regex.h:163
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
static DString combineArgsAndException(DString args, DString exception)

References _isAnonymousBitField(), _writeTemplatePrefix(), OutputList::addLabel(), Definition::anchor(), anchor(), DString::append(), argsString(), ASSERT, briefDescription(), DefinitionMixin< MemberDefMutable >::briefFile(), DefinitionMixin< MemberDefMutable >::briefLine(), combineArgsAndException(), Config_getBool, createDocParser(), OutputList::disable(), OutputList::disableAllBut(), Definition::displayName(), Docbook, OutputList::docify(), DString::DString(), ArgumentList::empty(), DString::empty(), OutputList::endAnonTypeScope(), OutputList::endDoxyAnchor(), OutputList::endMemberDeclaration(), OutputList::endMemberDescription(), OutputList::endMemberItem(), OutputList::endMemberTemplateParams(), OutputList::endParagraph(), OutputList::endTypewriter(), err, excpString(), getAnonymousEnumType(), DefinitionMixin< MemberDefMutable >::getBodyDef(), getClass(), getClassDef(), getClassDefOfAnonymousType(), getFileDef(), getGroupDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), getLanguageSpecificSeparator(), getNamespaceDef(), DefinitionMixin< MemberDefMutable >::getOuterScope(), Definition::getOutputFileBase(), getOutputFileBase(), Definition::getReference(), hasDetailedDescription(), hasDocumentation(), hasOneLineInitializer(), ArgumentList::hasParameters(), Html, OutputList::insertMemberAlign(), isAddable(), DefinitionMixin< MemberDefMutable >::isAnonymous(), isDefine(), isDocumentedFriendClass(), MemberDef::isEnumStruct(), isEvent(), isFinal(), isGettable(), isImplementation(), isObjCMethod(), isObjCProperty(), isOverride(), isPrivateGettable(), isPrivateSettable(), isProperty(), isProtectedGettable(), isProtectedSettable(), isRaisable(), isReference(), isRemovable(), isSettable(), isStatic(), MemberDef::isStrong(), isTypeAlias(), isTypedef(), Latex, DString::left(), reg::Match::length(), linkifyText(), m_bitfields, m_defArgList, m_initializer, m_mtype, m_prot, m_tArgList, m_type, m_virt, Man, DString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), OutputGenerator::Normal, OutputList::popGeneratorState(), reg::Match::position(), DString::prepend(), protection(), protectionLevelVisible(), OutputList::pushGeneratorState(), removeAnonymousScopes(), RTF, reg::search(), LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), DString::simplifyWhiteSpace(), OutputList::startDoxyAnchor(), OutputList::startMemberDeclaration(), OutputList::startMemberDescription(), OutputList::startMemberItem(), OutputList::startMemberTemplateParams(), OutputList::startParagraph(), OutputList::startTypewriter(), DString::str(), DString::stripPrefix(), substitute(), OutputGenerator::Templated, TextGeneratorOLImpl::TextGeneratorOLImpl(), validatingParseDoc(), warnIfUndocumented(), OutputList::writeDoc(), OutputList::writeLatexSpacing(), writeLink(), OutputList::writeNonBreakableSpace(), OutputList::writeObjectLink(), and OutputList::writeString().

◆ writeDocumentation()

void MemberDefImpl::writeDocumentation ( const MemberList * ml,
int memCount,
int memTotal,
OutputList & ol,
const DString & 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 3380 of file memberdef.cpp.

3389{
3390 // if this member is in a group find the real scope name.
3391 bool hasParameterList = false;
3392
3393 //printf("MemberDefImpl::writeDocumentation(): name='%s' hasDocs='%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
3394 // qPrint(name()),hasDocs,container->definitionType(),inGroup,hasDetailedDescription());
3395
3396 //if ( !hasDocs ) return;
3397 //if (isEnumValue() && !showEnumValues) return;
3398
3399 SrcLangExt lang = getLanguage();
3400 //printf("member=%s lang=%d\n",qPrint(name()),lang);
3401 bool optVhdl = lang==SrcLangExt::VHDL;
3402 DString sep = getLanguageSpecificSeparator(lang,true);
3403
3404 DString scopeName = scName;
3405 DString memAnchor = anchor();
3406 DString ciname = container->displayName();
3407 const Definition *scopedContainer = container; // see bug 753608
3408 if (container->definitionType()==TypeGroup)
3409 {
3410 if (getClassDef()) { scopeName=getClassDef()->displayName(); scopedContainer=getClassDef(); }
3411 else if (getNamespaceDef()) { scopeName=getNamespaceDef()->displayName(); scopedContainer=getNamespaceDef(); }
3412 else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); }
3413 ciname = (toGroupDef(container))->groupTitle();
3414 }
3415 else if (container->definitionType()==TypeFile && getNamespaceDef() && getNamespaceDef()->isLinkable())
3416 { // member is in a namespace, but is written as part of the file documentation
3417 // as well, so we need to make sure its anchor is unique (it is not really used).
3418 memAnchor.prepend("file_");
3419 }
3420
3421 DString cname = container->name();
3422 DString cfname = getOutputFileBase();
3423
3424 // get member name
3425 DString doxyName=name();
3426 // prepend scope if there is any. TODO: make this optional for C only docs
3427 if (!scopeName.empty())
3428 {
3429 doxyName.prepend(scopeName+sep);
3430 }
3431 DString doxyArgs=argsString();
3432
3433 DString ldef = definition();
3434 DString title = name();
3435
3436 //printf("member '%s' def='%s'\n",qPrint(name()),qPrint(ldef));
3437 if (isEnumerate())
3438 {
3439 if (title.at(0)=='@')
3440 {
3441 ldef = title = "anonymous enum";
3442 if (isSliceLocal())
3443 {
3444 ldef.prepend("local ");
3445 }
3446 if (lang==SrcLangExt::Cpp)
3447 {
3448 if (isEnumStruct()) ldef.append(" struct");
3449 else if (isStrong()) ldef.append(" class");
3450 }
3451 if (!m_enumBaseType.empty())
3452 {
3453 ldef+=" : "+m_enumBaseType;
3454 }
3455 }
3456 else
3457 {
3458 if (lang==SrcLangExt::Cpp)
3459 {
3460 if (isEnumStruct()) ldef.prepend("struct ");
3461 else if (isStrong()) ldef.prepend("class ");
3462 }
3463 ldef.prepend("enum ");
3464 if (isSliceLocal())
3465 {
3466 ldef.prepend("local ");
3467 }
3468 }
3469 }
3470 else if (isEnumValue())
3471 {
3472 if (ldef.at(0)=='@')
3473 {
3474 ldef=ldef.mid(2);
3475 }
3476 }
3477 else if (isFunction() && !isObjCMethod())
3478 {
3479 title += "()";
3480 }
3481 if (lang == SrcLangExt::Slice)
3482 {
3483 // Remove the container scope from the member name.
3484 DString prefix = scName + sep;
3485 if (size_t pos = ldef.rfind(prefix); pos != DString::npos)
3486 {
3487 ldef.remove(pos, prefix.length());
3488 }
3489 }
3490 ldef.stripPrefix("constexpr ");
3491 ldef.stripPrefix("consteval ");
3492 ldef.stripPrefix("constinit ");
3493 ldef.stripPrefix("static ");
3494
3495 //----------------------------------------
3496
3497 ol.pushGeneratorState();
3498
3499 bool htmlEndLabelTable=false;
3500 StringVector sl = getLabels(scopedContainer);
3501
3502 static const reg::Ex r(R"(@\d+)");
3503 reg::Match match;
3504 std::string sdef = ldef.str();
3505 LinkifyTextOptions options;
3506 options.setScope(scopedContainer).setFileScope(getBodyDef()).setSelf(this);
3507 if ((isVariable() || isTypedef()) && reg::search(sdef,match,r))
3508 {
3509 // find enum type and insert it in the definition
3510 bool found=false;
3511 for (const auto &vmd : *ml)
3512 {
3513 if (vmd->isEnumerate() && match.str()==vmd->name())
3514 {
3515 ol.startDoxyAnchor(cfname, cname, memAnchor, doxyName, doxyArgs);
3516 ol.startMemberDoc(ciname,name(),memAnchor,name(),memCount,memTotal,showInline);
3517 ol.addLabel(cfname, memAnchor);
3518 DString prefix = match.prefix().str();
3519 DString suffix = match.suffix().str();
3521 vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef(),getModuleDef());
3522 linkifyText(TextGeneratorOLImpl(ol),suffix,options);
3523
3524 found=true;
3525 break;
3526 }
3527 }
3528 if (!found) // anonymous compound
3529 {
3530 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
3531 DString typeName;
3532 if (annoClassDef) typeName=annoClassDef->compoundTypeString();
3533 ol.startDoxyAnchor(cfname, cname, memAnchor, doxyName, doxyArgs);
3534 ol.startMemberDoc(ciname,name(),memAnchor,title,memCount,memTotal,showInline);
3535 ol.addLabel(cfname, memAnchor);
3536 // search for the last anonymous compound name in the definition
3537
3539 if (reg::search(sdef,match,reAnonymous))
3540 {
3541 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)");
3542 reg::Match amatch;
3543 reg::search(sdef,amatch,ar);
3544 DString prefix = amatch.prefix().str();
3545 DString suffix = removeAnonymousScopes(amatch.suffix().str());
3546 //printf("writeDocumentation(): anonymous compound in definition: sdef='%s' prefix='%s' suffix='%s' annoClassDef=%p\n",
3547 // qPrint(sdef), qPrint(prefix),qPrint(suffix),(void*)annoClassDef);
3548 const MemberDef *amd = getAnonymousEnumType();
3549 if (annoClassDef && amd==nullptr)
3550 {
3551 ol.docify(prefix);
3552 DString annTypeName = annoClassDef->displayName(true);
3553 if (suffix.empty())
3554 {
3555 suffix=" "+localName();
3556 }
3557 ol.writeObjectLink(annoClassDef->getReference(),annoClassDef->getOutputFileBase(),
3558 annoClassDef->anchor(),annTypeName);
3559 linkifyText(TextGeneratorOLImpl(ol),suffix,options);
3560 }
3561 else if (amd) // type is an anonymous enum
3562 {
3563 DString typePlaceholder = " { ... } ";
3564 if (lang==SrcLangExt::Cpp)
3565 {
3566 if (amd->isEnumStruct()) typePlaceholder.prepend(" struct");
3567 else if (amd->isStrong()) typePlaceholder.prepend(" class");
3568 }
3569 ol.writeObjectLink(amd->getReference(),amd->getOutputFileBase(),amd->anchor(),prefix+typePlaceholder+suffix);
3570 }
3571 else
3572 {
3573 prefix = match.prefix().str();
3574 suffix = removeAnonymousScopes(match.suffix().str());
3575 ol.docify(prefix);
3576 ol.docify(" { ... } ");
3577 linkifyText(TextGeneratorOLImpl(ol),suffix,options);
3578 }
3579 }
3580 else
3581 {
3582 linkifyText(TextGeneratorOLImpl(ol),ldef,options);
3583 }
3584 }
3585 }
3586 else // not an enum value or anonymous compound
3587 {
3588 ol.startDoxyAnchor(cfname, cname, memAnchor, doxyName, doxyArgs);
3589 ol.startMemberDoc(ciname,name(),memAnchor,title,memCount,memTotal,showInline);
3590 ol.addLabel(cfname, memAnchor);
3591
3592 if (!m_metaData.empty() && getLanguage()==SrcLangExt::Slice)
3593 {
3595 ol.docify(m_metaData);
3597 }
3598
3599 const ClassDef *cd=getClassDef();
3600 const NamespaceDef *nd=getNamespaceDef();
3601 if (!m_defTmpArgLists.empty() && lang==SrcLangExt::Cpp)
3602 // definition has explicit template parameter declarations
3603 {
3604 for (const ArgumentList &tal : m_defTmpArgLists)
3605 {
3606 if (!tal.empty())
3607 {
3609 _writeTemplatePrefix(ol,scopedContainer,tal);
3611 }
3612 }
3613 }
3614 else // definition gets it template parameters from its class
3615 // (since no definition was found)
3616 {
3617 if (cd && lang==SrcLangExt::Cpp && !isTemplateSpecialization())
3618 {
3619 for (const ArgumentList &tal : cd->getTemplateParameterLists())
3620 {
3621 if (!tal.empty())
3622 {
3624 _writeTemplatePrefix(ol,scopedContainer,tal,false);
3626 }
3627 }
3628 }
3629 if (m_tArgList.hasParameters() && lang==SrcLangExt::Cpp) // function template prefix
3630 {
3632 _writeTemplatePrefix(ol,scopedContainer,m_tArgList);
3634 }
3635 }
3636
3637 if (!sl.empty())
3638 {
3639 ol.pushGeneratorState();
3640 ol.disableAll();
3642 ol.writeString("<table class=\"mlabels\">\n");
3643 ol.writeString(" <tr>\n");
3644 ol.writeString(" <td class=\"mlabels-left\">\n");
3645 ol.popGeneratorState();
3646 htmlEndLabelTable=true;
3647 }
3648
3650 if (cd && cd->isObjectiveC())
3651 {
3652 // strip scope name
3653 if (size_t ep = ldef.find("::"); ep!=DString::npos)
3654 {
3655 if (size_t sp=ldef.rfind(' ',ep); sp!=DString::npos)
3656 {
3657 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3658 } else {
3659 ldef=ldef.mid(ep+2);
3660 }
3661 }
3662 // strip keywords
3663 if (size_t dp = ldef.find(':'); dp!=DString::npos)
3664 {
3665 ldef=ldef.left(dp+1);
3666 }
3667 int dl=static_cast<int>(ldef.length());
3668 //printf("start >%s<\n",qPrint(ldef));
3669 int i=dl-1;
3670 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3671 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3672 if (i>0)
3673 {
3674 // insert branches around the type
3675 ldef="("+ldef.left(i+1)+")"+ldef.mid(i+1);
3676 }
3677 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3678 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3679 }
3680
3681 if (optVhdl)
3682 {
3683 hasParameterList=VhdlDocGen::writeVHDLTypeDocumentation(this,scopedContainer,ol);
3684 }
3685 else if (lang==SrcLangExt::Slice)
3686 {
3687 // Eliminate the self-reference.
3688 size_t pos = ldef.rfind(' ');
3689 if (pos==DString::npos) pos=0;
3690 if (pos>0)
3691 {
3692 linkifyText(TextGeneratorOLImpl(ol),ldef.left(pos),options);
3693 }
3694 ol.docify(ldef.mid(pos));
3695 const Definition *scope = cd;
3696 if (scope==nullptr) scope = nd;
3697 hasParameterList=writeDefArgumentList(ol,scope,this);
3698 }
3699 else
3700 {
3701 linkifyText(TextGeneratorOLImpl(ol),substitute(ldef,"::",sep),options);
3702 const Definition *scope = cd;
3703 if (scope==nullptr) scope = nd;
3704 hasParameterList=writeDefArgumentList(ol,scope,this);
3705 }
3706
3707 if (hasOneLineInitializer()) // add initializer
3708 {
3709 if (isTypeAlias())
3710 {
3711 ol.docify(" = ");
3714 }
3715 else if (!isDefine())
3716 {
3717 ol.docify(" ");
3720 }
3721 else
3722 {
3725 }
3726 }
3727 if (!excpString().empty()) // add exception list
3728 {
3729 writeExceptionList(ol,cd,this);
3730 hasParameterList=true; // call endParameterList below
3731 }
3732 }
3733
3734 ol.pushGeneratorState();
3736 if (!sl.empty())
3737 {
3738 ol.startLabels();
3739 size_t count=0;
3740 for (const auto &s : sl)
3741 {
3742 count++;
3743 ol.writeLabel(s,count==sl.size());
3744 }
3745 ol.endLabels();
3746 }
3747 ol.popGeneratorState();
3748
3749 if (hasParameterList)
3750 {
3751 ol.endParameterList();
3752 ol.endMemberDoc(true);
3753 }
3754 else
3755 {
3756 ol.endMemberDocName();
3757 ol.endMemberDoc(false);
3758 }
3759
3760 // for HTML write the labels here
3761 ol.pushGeneratorState();
3762 ol.disableAll();
3764 if (htmlEndLabelTable)
3765 {
3766 ol.writeString(" </td>\n");
3767 ol.writeString(" <td class=\"mlabels-right\">\n");
3768 ol.startLabels();
3769 size_t count=0;
3770 for (const auto &s : sl)
3771 {
3772 count++;
3773 ol.writeLabel(s,count==sl.size());
3774 }
3775 ol.endLabels();
3776 ol.writeString(" </td>\n");
3777 ol.writeString(" </tr>\n");
3778 ol.writeString("</table>\n");
3779 }
3780 ol.writeString("</div>");
3781 ol.popGeneratorState();
3782
3783
3784 ol.endDoxyAnchor(cfname,memAnchor);
3785 ol.startIndent();
3786
3787 _writeGroupInclude(ol,inGroup);
3788
3789 /* write multi-line initializer (if any) */
3791
3792 /* write brief description */
3793 DString brief = briefDescription();
3794 if (!brief.empty() &&
3795 (Config_getBool(REPEAT_BRIEF) ||
3796 !Config_getBool(BRIEF_MEMBER_DESC)
3797 )
3798 )
3799 {
3800 ol.startParagraph();
3802 briefLine(),
3803 scopedContainer,
3804 this,
3805 brief,
3806 DocOptions()
3807 .setSingleLine(true));
3808 ol.endParagraph();
3809 }
3810
3811 /* write detailed description */
3812 DString detailed = documentation();
3813 if (!detailed.empty() ||
3814 !inbodyDocumentation().empty())
3815 {
3816 // write vhdl inline code with or without option INLINE_SOURCE
3817 if (optVhdl && VhdlDocGen::isMisc(this))
3818 {
3819 VhdlDocGen::writeSource(this,ol,cname);
3820 return;
3821 }
3822 else
3823 {
3824 ol.generateDoc(docFile(),
3825 docLine(),
3826 scopedContainer,
3827 this,
3828 detailed+"\n",
3829 DocOptions()
3830 .setIndexWords(true));
3831 }
3832
3833 if (!inbodyDocumentation().empty())
3834 {
3836 inbodyLine(),
3837 scopedContainer,
3838 this,
3839 inbodyDocumentation()+"\n",
3840 DocOptions()
3841 .setIndexWords(true));
3842 }
3843 }
3844 else if (!brief.empty() && (Config_getBool(REPEAT_BRIEF) || !Config_getBool(BRIEF_MEMBER_DESC)))
3845 {
3846 if (!inbodyDocumentation().empty())
3847 {
3849 inbodyLine(),
3850 scopedContainer,
3851 this,
3852 inbodyDocumentation()+"\n",
3853 DocOptions()
3854 .setIndexWords(true));
3855 }
3856 }
3857
3858
3859 //printf("***** defArgList=%p name=%s docs=%s hasDocs=%d\n",
3860 // defArgList,
3861 // defArgList?defArgList->hasDocumentation():-1);
3862 const ArgumentList &docArgList = m_templateMaster ?
3865 ol.generateDoc(docFile(),
3866 docLine(),
3867 scopedContainer,
3868 this, // memberDef
3869 inlineArgListToDoc(docArgList), // docStr
3870 DocOptions()
3871 .setIndexWords(true));
3872
3873 const ArgumentList &docTemplateArgList = m_templateMaster ?
3875 m_tArgList;
3876 ol.generateDoc(docFile(),
3877 docLine(),
3878 scopedContainer,
3879 this, // memberDef
3880 inlineTemplateArgListToDoc(docTemplateArgList), // docStr
3881 DocOptions()
3882 .setIndexWords(true));
3883
3884 _writeEnumValues(ol,scopedContainer,cfname,ciname,cname);
3888 _writeExamples(ol);
3890 DString scopeStr = getScopeString();
3891 writeSourceDef(ol);
3892 writeInlineCode(ol,scopeStr);
3893 if (hasReferencesRelation()) writeSourceRefs(ol,scopeStr);
3894 if (hasReferencedByRelation()) writeSourceReffedBy(ol,scopeStr);
3895 _writeCallGraph(ol);
3898
3899 ol.endIndent();
3900
3901 // enable LaTeX again
3902 //if (Config_getBool(EXTRACT_ALL) && !hasDocs) ol.enable(OutputType::Latex);
3903 ol.popGeneratorState();
3904
3906}
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.
DString & remove(size_t index, size_t len)
Definition dstring.h:524
virtual void writeSourceReffedBy(OutputList &ol, const DString &scopeName) const =0
virtual void writeInlineCode(OutputList &ol, const DString &scopeName) const =0
virtual void writeSourceDef(OutputList &ol) const =0
virtual void writeRequirementRefs(OutputList &ol) const =0
virtual void writeSourceRefs(OutputList &ol, const DString &scopeName) const =0
void _writeCallerGraph(OutputList &ol) const
void _writeTypeConstraints(OutputList &ol) const
void _writeExamples(OutputList &ol) const
void _writeReimplementedBy(OutputList &ol) const
StringVector getLabels(const Definition *container) const override
void _writeMultiLineInitializer(OutputList &ol, const DString &scopeName) const
void _writeCategoryRelation(OutputList &ol) const
bool isTemplateSpecialization() const override
void _writeReimplements(OutputList &ol) const
void _writeGroupInclude(OutputList &ol, bool inGroup) const
void _writeEnumValues(OutputList &ol, const Definition *container, const DString &cfname, const DString &ciname, const DString &cname) const
bool isVariable() const override
void _writeCallGraph(OutputList &ol) const
void endIndent()
Definition outputlist.h:584
void startMemberDocName(bool align)
Definition outputlist.h:680
void endMemberDocName()
Definition outputlist.h:682
void endMemberDoc(bool hasArgs)
Definition outputlist.h:535
void enable(OutputType o)
void startMemberDoc(const DString &clName, const DString &memName, const DString &anchor, const DString &title, int memCount, int memTotal, bool showInline)
Definition outputlist.h:531
void startIndent()
Definition outputlist.h:582
void disableAll()
void endMemberDocPrefixItem()
Definition outputlist.h:678
void writeLabel(const DString &l, bool isLast)
Definition outputlist.h:740
void endLabels()
Definition outputlist.h:742
void endParameterList()
Definition outputlist.h:702
void startLabels()
Definition outputlist.h:738
void startMemberDocPrefixItem()
Definition outputlist.h:676
static bool writeVHDLTypeDocumentation(const MemberDef *mdef, const Definition *d, OutputList &ol)
static bool isMisc(const MemberDef *mdef)
static void writeSource(const MemberDef *mdef, OutputList &ol, const DString &cname)
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)
DString inlineArgListToDoc(const ArgumentList &al)
Definition util.cpp:1208
DString inlineTemplateArgListToDoc(const ArgumentList &al)
Definition util.cpp:1231

References _writeCallerGraph(), _writeCallGraph(), _writeCategoryRelation(), _writeEnumValues(), _writeExamples(), _writeGroupInclude(), _writeMultiLineInitializer(), _writeReimplementedBy(), _writeReimplements(), _writeTemplatePrefix(), _writeTypeConstraints(), OutputList::addLabel(), Definition::anchor(), anchor(), DString::append(), argsString(), MemberDef::argumentList(), DString::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(), DString::empty(), OutputList::enable(), OutputList::endDoxyAnchor(), OutputList::endIndent(), OutputList::endLabels(), OutputList::endMemberDoc(), OutputList::endMemberDocName(), OutputList::endMemberDocPrefixItem(), OutputList::endParagraph(), OutputList::endParameterList(), excpString(), DString::find(), 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(), ArgumentList::hasParameters(), hasReferencedByRelation(), hasReferencesRelation(), DefinitionMixin< MemberDefMutable >::hasRequirementRefs(), Html, DefinitionMixin< MemberDefMutable >::inbodyDocumentation(), DefinitionMixin< MemberDefMutable >::inbodyFile(), DefinitionMixin< MemberDefMutable >::inbodyLine(), init(), inlineArgListToDoc(), inlineTemplateArgListToDoc(), isDefine(), isEnumerate(), MemberDef::isEnumStruct(), isEnumStruct(), isEnumValue(), isFunction(), isId(), isLinkable(), VhdlDocGen::isMisc(), isObjCMethod(), ClassDef::isObjectiveC(), isSliceLocal(), isStatic(), MemberDef::isStrong(), isStrong(), isTemplateSpecialization(), isTypeAlias(), isTypedef(), isVariable(), DString::left(), DString::length(), linkifyText(), DefinitionMixin< MemberDefMutable >::localName(), m_defArgList, m_defTmpArgLists, m_enumBaseType, m_initializer, m_metaData, m_tArgList, m_templateMaster, DString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), DString::npos, OutputList::popGeneratorState(), prefix, reg::Match::prefix(), DString::prepend(), OutputList::pushGeneratorState(), reAnonymous, DString::remove(), removeAnonymousScopes(), DString::rfind(), reg::search(), LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), DString::simplifyWhiteSpace(), OutputList::startDoxyAnchor(), OutputList::startIndent(), OutputList::startLabels(), OutputList::startMemberDoc(), OutputList::startMemberDocName(), OutputList::startMemberDocPrefixItem(), OutputList::startParagraph(), DString::str(), reg::SubMatch::str(), DString::stripPrefix(), substitute(), reg::Match::suffix(), MemberDef::templateArguments(), TextGeneratorOLImpl::TextGeneratorOLImpl(), toGroupDef(), 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 4714 of file memberdef.cpp.

4716{
4717 int enumMemCount=0;
4718
4719 uint32_t numVisibleEnumValues=0;
4720 for (const auto &fmd : m_enumFields)
4721 {
4722 if (fmd->isBriefSectionVisible()) numVisibleEnumValues++;
4723 }
4724 if (numVisibleEnumValues==0 && !isBriefSectionVisible())
4725 {
4726 return;
4727 }
4728
4729 DString n = name();
4730 if (size_t i=n.rfind("::"); i!=DString::npos) n=n.mid(i+2); // strip scope (TODO: is this needed?)
4731 if (n[0]!='@') // not an anonymous enum
4732 {
4734 {
4735 //_writeTagData(compoundType);
4736 writeLink(typeDecl,cd,nd,fd,gd,mod);
4737 }
4738 else
4739 {
4740 typeDecl.startBold();
4741 typeDecl.docify(n);
4742 typeDecl.endBold();
4743 }
4744 typeDecl.writeChar(' ');
4745 }
4746 if (!m_enumBaseType.empty())
4747 {
4748 typeDecl.writeChar(':');
4749 typeDecl.writeChar(' ');
4750 typeDecl.docify(m_enumBaseType);
4751 typeDecl.writeChar(' ');
4752 }
4753
4754 uint32_t enumValuesPerLine = static_cast<uint32_t>(Config_getInt(ENUM_VALUES_PER_LINE));
4755 if (numVisibleEnumValues>0 && enumValuesPerLine>0)
4756 {
4757 typeDecl.docify("{ ");
4758
4759 auto it = m_enumFields.begin();
4760 if (it!=m_enumFields.end())
4761 {
4762 const MemberDef *fmd=*it;
4763 bool fmdVisible = fmd->isBriefSectionVisible();
4764 bool first=true;
4765 while (fmd)
4766 {
4767 if (fmdVisible)
4768 {
4769 if (!first)
4770 {
4771 typeDecl.writeString(", ");
4772 }
4773 /* in html we start a new line after a number of items */
4774 if (numVisibleEnumValues>enumValuesPerLine
4775 && (enumMemCount%enumValuesPerLine)==0
4776 )
4777 {
4778 typeDecl.pushGeneratorState();
4780 typeDecl.enable(OutputType::Latex);
4781 typeDecl.enable(OutputType::Docbook);
4782 typeDecl.lineBreak();
4783 typeDecl.disable(OutputType::Latex);
4784 typeDecl.disable(OutputType::Docbook);
4785 typeDecl.writeString("&#160;&#160;");
4786 typeDecl.popGeneratorState();
4787 }
4788
4789 if (fmd->hasDocumentation()) // enum value has docs
4790 {
4791 fmd->writeLink(typeDecl,cd,nd,fd,gd,mod);
4792 }
4793 else // no docs for this enum value
4794 {
4795 typeDecl.startBold();
4796 typeDecl.docify(fmd->name());
4797 typeDecl.endBold();
4798 }
4799 if (fmd->hasOneLineInitializer()) // enum value has initializer
4800 {
4801 //typeDecl.writeString(" = ");
4802 typeDecl.writeString(" ");
4803 typeDecl.parseText(fmd->initializer());
4804 }
4805 first=false;
4806 }
4807
4808 bool prevVisible = fmdVisible;
4809 ++it;
4810 if (it!=m_enumFields.end())
4811 {
4812 fmd=*it;
4813 }
4814 else
4815 {
4816 fmd=nullptr;
4817 }
4818 if (prevVisible)
4819 {
4820 typeDecl.disable(OutputType::Man);
4821 typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
4822 typeDecl.enable(OutputType::Man);
4823 enumMemCount++;
4824 }
4825 }
4826 if (numVisibleEnumValues>enumValuesPerLine)
4827 {
4828 typeDecl.pushGeneratorState();
4830 typeDecl.lineBreak();
4831 typeDecl.popGeneratorState();
4832 }
4833 }
4834 typeDecl.docify(" }");
4835 }
4836}
virtual bool hasDocumentation() const =0
virtual const DString & initializer() const =0
virtual bool hasOneLineInitializer() const =0
virtual bool isBriefSectionVisible() 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
bool isBriefSectionVisible() const override
void writeChar(char c)
Definition outputlist.h:529

References Config_getInt, OutputList::disable(), OutputList::disableAllBut(), Docbook, OutputList::docify(), DString::empty(), OutputList::enable(), OutputList::endBold(), Definition::hasDocumentation(), hasDocumentedEnumValues(), MemberDef::hasOneLineInitializer(), Html, MemberDef::initializer(), MemberDef::isBriefSectionVisible(), isBriefSectionVisible(), isLinkableInProject(), Latex, OutputList::lineBreak(), m_enumBaseType, m_enumFields, Man, DString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), DString::npos, OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), DString::rfind(), 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 1924 of file memberdef.cpp.

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

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(), DString::prepend(), OutputList::startBold(), and OutputList::writeObjectLink().

Referenced by writeDeclaration(), and writeEnumDeclaration().

◆ writeMemberDocSimple()

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

Implements MemberDefMutable.

Definition at line 3933 of file memberdef.cpp.

3934{
3935 Definition *scope = getOuterScope();
3936 DString doxyName = name();
3937 DString doxyArgs = argsString();
3938 DString memAnchor = anchor();
3939 DString cfname = getOutputFileBase();
3940 DString cname;
3941 if (scope) cname = scope->name();
3942 if (doxyName.at(0)=='@')
3943 {
3944 doxyName="__unnamed__";
3945 }
3946
3947 LinkifyTextOptions options;
3948 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
3949
3950 if (container && container->definitionType()==Definition::TypeClass &&
3951 !(toClassDef(container))->isJavaEnum())
3952 {
3954 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
3955 ol.addLabel(cfname,memAnchor);
3956
3957 bool written=false;
3958 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
3959 if (annoClassDef)
3960 {
3961 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)"); // anonymous type marker(s) including scope
3962 reg::Match amatch;
3963 std::string stype = m_type.str();
3964 if (reg::search(stype,amatch,ar))
3965 {
3966 size_t ai = amatch.position();
3967 size_t al = amatch.length();
3968 ol.writeObjectLink(annoClassDef->getReference(),annoClassDef->getOutputFileBase(),
3969 annoClassDef->anchor(),m_type.left(ai)+m_type.mid(ai+al));
3970 written=true;
3971 }
3972 }
3973 if (!written)
3974 {
3975 DString ts;
3976 if (isFunctionPtr())
3977 {
3978 ts = m_type + m_args;
3979 }
3980 else
3981 {
3982 ts = fieldType();
3983 }
3984 linkifyText(TextGeneratorOLImpl(ol),ts,options);
3985 }
3986 ol.endDoxyAnchor(cfname,memAnchor);
3988 }
3989
3991 ol.docify(doxyName);
3992 if (isVariable() && !argsString().empty() && !isObjCMethod() && !isFunctionPtr())
3993 {
3994 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
3995 }
3996 if (!m_bitfields.empty()) // add bitfields
3997 {
3999 }
4000 if (hasOneLineInitializer() && !isDefine())
4001 {
4002 ol.writeString(" ");
4004 }
4006
4008
4009 DString brief = briefDescription();
4010 DString detailed = documentation();
4011
4012 /* write brief description */
4013 if (!brief.empty())
4014 {
4016 briefLine(),
4017 getOuterScope()?getOuterScope():container,this,
4018 brief,
4019 DocOptions()
4020 .setSingleLine(true));
4021 }
4022
4023 /* write detailed description */
4024 if (!detailed.empty())
4025 {
4026 if (!brief.empty())
4027 {
4029 ol.lineBreak();
4031 }
4032 ol.generateDoc(docFile(),
4033 docLine(),
4034 getOuterScope()?getOuterScope():container,this,
4035 detailed+"\n",
4036 DocOptions());
4037 }
4038
4039 ol.endInlineMemberDoc();
4040}
DString 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(), Definition::anchor(), anchor(), argsString(), DString::at(), briefDescription(), DefinitionMixin< MemberDefMutable >::briefFile(), DefinitionMixin< MemberDefMutable >::briefLine(), Definition::definitionType(), OutputList::disable(), DefinitionMixin< MemberDefMutable >::docFile(), OutputList::docify(), DefinitionMixin< MemberDefMutable >::docLine(), documentation(), DString::empty(), OutputList::enable(), OutputList::endDoxyAnchor(), OutputList::endInlineMemberDoc(), OutputList::endInlineMemberName(), OutputList::endInlineMemberType(), fieldType(), OutputList::generateDoc(), DefinitionMixin< MemberDefMutable >::getBodyDef(), getClassDefOfAnonymousType(), DefinitionMixin< MemberDefMutable >::getOuterScope(), Definition::getOutputFileBase(), getOutputFileBase(), Definition::getReference(), hasOneLineInitializer(), Html, isDefine(), isFunctionPtr(), isObjCMethod(), isVariable(), DString::left(), reg::Match::length(), OutputList::lineBreak(), linkifyText(), m_args, m_bitfields, m_defArgList, m_initializer, m_type, DString::mid(), Definition::name(), DefinitionMixin< MemberDefMutable >::name(), reg::Match::position(), reg::search(), LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), DString::simplifyWhiteSpace(), OutputList::startDoxyAnchor(), OutputList::startInlineMemberDoc(), OutputList::startInlineMemberName(), OutputList::startInlineMemberType(), DString::str(), TextGeneratorOLImpl::TextGeneratorOLImpl(), toClassDef(), Definition::TypeClass, OutputList::writeObjectLink(), and OutputList::writeString().

◆ writeTagFile()

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

Implements MemberDefMutable.

Definition at line 4557 of file memberdef.cpp.

4558{
4559 if (!isLinkableInProject()) return;
4560 if (!showNamespaceMembers && getNamespaceDef()) return;
4561 tagFile << " <member kind=\"";
4562 if (m_mtype == MemberType::Enumeration)
4563 {
4564 tagFile << "enumeration";
4565 }
4566 else
4567 {
4568 tagFile << to_string_lower(m_mtype);
4569 }
4570 if (m_prot!=Protection::Public)
4571 {
4572 tagFile << "\" protection=\"";
4573 if (m_prot==Protection::Protected) tagFile << "protected";
4574 else if (m_prot==Protection::Package) tagFile << "package";
4575 else /* Private */ tagFile << "private";
4576 }
4577 if (m_virt!=Specifier::Normal)
4578 {
4579 tagFile << "\" virtualness=\"";
4580 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4581 else /* Pure */ tagFile << "pure";
4582 }
4583 if (isStatic())
4584 {
4585 tagFile << "\" static=\"yes";
4586 }
4587 tagFile << "\">\n";
4588 if (typeString()!=DString("@"))
4589 {
4590 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4591 }
4592 DString fn = getOutputFileBase();
4594 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4595 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4596 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4597 DString idStr = id();
4598 if (!idStr.empty())
4599 {
4600 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4601 }
4602 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4603 if (isStrong())
4604 {
4605 for (const auto &fmd : m_enumFields)
4606 {
4607 if (!fmd->isReference())
4608 {
4609 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4610 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4611 idStr = fmd->id();
4612 if (!idStr.empty())
4613 {
4614 tagFile << "\" clangid=\"" << convertToXML(idStr);
4615 }
4616 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4617 }
4618 }
4619 }
4620 writeDocAnchorsToTagFile(tagFile);
4621 tagFile << " </member>\n";
4622}
virtual void writeDocAnchorsToTagFile(TextStream &) const =0
void addHtmlExtensionIfMissing(DString &fName)
Definition util.cpp:4969
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
Definition util.cpp:3956

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

Member Data Documentation

◆ m_anc

DString MemberDefImpl::m_anc
private

Definition at line 418 of file memberdef.cpp.

Referenced by anchor(), deepCopy(), setAnchor(), and setTagInfo().

◆ m_annEnumType

const MemberDef* MemberDefImpl::m_annEnumType = nullptr
private

Definition at line 403 of file memberdef.cpp.

Referenced by deepCopy(), getAnonymousEnumType(), init(), and setAnonymousEnumType().

◆ m_anonymousType

const ClassDef* MemberDefImpl::m_anonymousType = nullptr
private

◆ m_args

DString MemberDefImpl::m_args
private

◆ m_bitfields

DString MemberDefImpl::m_bitfields
private

◆ m_cachedResolvedType

DString MemberDefImpl::m_cachedResolvedType
private

Definition at line 470 of file memberdef.cpp.

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

◆ m_cachedTypedefTemplSpec

DString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 469 of file memberdef.cpp.

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

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 468 of file memberdef.cpp.

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

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

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

DString MemberDefImpl::m_decl
private

Definition at line 421 of file memberdef.cpp.

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

◆ m_declArgList

◆ m_declColumn

int MemberDefImpl::m_declColumn = -1
private

Definition at line 512 of file memberdef.cpp.

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

◆ m_declFileName

DString MemberDefImpl::m_declFileName
private

Definition at line 510 of file memberdef.cpp.

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

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

Definition at line 511 of file memberdef.cpp.

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

◆ m_def

DString MemberDefImpl::m_def
private

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

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

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 505 of file memberdef.cpp.

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

◆ m_docTransferDone

bool MemberDefImpl::m_docTransferDone = false
private

Definition at line 432 of file memberdef.cpp.

Referenced by isDocTransferDone(), and setDocTransferDone().

◆ m_enumBaseType

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

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

◆ m_exception

DString MemberDefImpl::m_exception
private

Definition at line 426 of file memberdef.cpp.

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

◆ m_explExt

bool MemberDefImpl::m_explExt = false
private

Definition at line 502 of file memberdef.cpp.

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

◆ m_explicitInherited

bool MemberDefImpl::m_explicitInherited = false
private

Definition at line 477 of file memberdef.cpp.

Referenced by getLabels(), and setExplicitInherited().

◆ m_explicitOutputFileBase

DString MemberDefImpl::m_explicitOutputFileBase
private

Definition at line 476 of file memberdef.cpp.

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

◆ m_extraTypeChars

DString MemberDefImpl::m_extraTypeChars
private

Definition at line 428 of file memberdef.cpp.

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

◆ m_fileDef

FileDef* MemberDefImpl::m_fileDef = nullptr
private

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

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

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

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

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

◆ m_groupFileName

DString MemberDefImpl::m_groupFileName
private

Definition at line 463 of file memberdef.cpp.

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

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 504 of file memberdef.cpp.

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

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

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

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

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 464 of file memberdef.cpp.

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

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

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

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

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 493 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 485 of file memberdef.cpp.

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

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 486 of file memberdef.cpp.

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

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 501 of file memberdef.cpp.

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

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

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

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

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

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

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

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

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

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

◆ m_maxInitLines

int MemberDefImpl::m_maxInitLines = 0
private

Definition at line 437 of file memberdef.cpp.

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

◆ m_memberGroup

MemberGroup* MemberDefImpl::m_memberGroup = nullptr
private

Definition at line 460 of file memberdef.cpp.

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

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 410 of file memberdef.cpp.

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

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 409 of file memberdef.cpp.

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

◆ m_memSpec

◆ m_metaData

DString MemberDefImpl::m_metaData
private

Definition at line 450 of file memberdef.cpp.

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

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

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

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

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 513 of file memberdef.cpp.

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

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

Definition at line 490 of file memberdef.cpp.

Referenced by deepCopy(), init(), isPrototype(), and setPrototype().

◆ m_qualifiers

StringVector MemberDefImpl::m_qualifiers
private

◆ m_read

DString MemberDefImpl::m_read
private

Definition at line 424 of file memberdef.cpp.

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

◆ m_redefineCount

int MemberDefImpl::m_redefineCount = 0
private

Definition at line 514 of file memberdef.cpp.

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

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 407 of file memberdef.cpp.

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

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

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

Referenced by deepCopy(), init(), relatedAlso(), and setRelatedAlso().

◆ m_requiresClause

DString MemberDefImpl::m_requiresClause
private

◆ m_sectionMap

std::map<const Definition *,const MemberList *> MemberDefImpl::m_sectionMap
private

Definition at line 456 of file memberdef.cpp.

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

◆ m_stat

bool MemberDefImpl::m_stat = false
private

◆ m_tArgList

◆ m_templateMaster

◆ m_tspec

bool MemberDefImpl::m_tspec = false
private

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

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

◆ m_virt

◆ m_write

DString MemberDefImpl::m_write
private

Definition at line 425 of file memberdef.cpp.

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


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