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, size_t 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
size_t 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, size_t column) override
void setExplicitExternal (bool b, const DString &df, int line, size_t column) override
void setDeclFile (const DString &df, int line, size_t 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, size_t 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
size_t 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, size_t 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
size_t 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,
size_t 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 1452 of file memberdef.cpp.

1457{
1458 //printf("MemberDefImpl::MemberDef(%s)\n",qPrint(na));
1459 init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
1463}
DefinitionMixin(const DString &defFileName, int defLine, size_t 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:426

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

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

◆ ~MemberDefImpl()

MemberDefImpl::~MemberDefImpl ( )
overridedefault

References MemberDefImpl().

Member Function Documentation

◆ _computeIsConstructor()

void MemberDefImpl::_computeIsConstructor ( )
private

Definition at line 4640 of file memberdef.cpp.

4641{
4642 m_isConstructorCached=1; // false
4643 if (getClassDef())
4644 {
4645 if (m_isDMember) // for D
4646 {
4647 m_isConstructorCached = name()=="this" ? 2 : 1;
4648 return;
4649 }
4650 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4651 {
4652 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4653 return;
4654 }
4655 else if (name()=="__init__" &&
4656 getLanguage()==SrcLangExt::Python) // for Python
4657 {
4658 m_isConstructorCached = 2; // true
4659 return;
4660 }
4661 else // for other languages
4662 {
4663 DString locName = getClassDef()->localName();
4664 size_t i=locName.find('<');
4665 if (i==DString::npos) // not a template class
4666 {
4667 m_isConstructorCached = name()==locName ? 2 : 1;
4668 }
4669 else
4670 {
4671 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4672 }
4673 return;
4674 }
4675 }
4676}
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:178
size_t find(char c, size_t pos=0) const
Definition dstring.h:239
DString left(size_t len) const
Definition dstring.h:306
virtual const DString & localName() const =0
const DString & name() const override
SrcLangExt getLanguage() const override
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 4690 of file memberdef.cpp.

4691{
4692 bool isDestructor = false;
4693 if (m_isDMember) // for D
4694 {
4695 isDestructor = name()=="~this";
4696 }
4697 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4698 {
4699 isDestructor = name()=="__destruct";
4700 }
4701 else if (name()=="__del__" &&
4702 getLanguage()==SrcLangExt::Python) // for Python
4703 {
4704 isDestructor = true;
4705 }
4706 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4707 {
4708 isDestructor = typeString()=="final";
4709 }
4710 else // other languages
4711 {
4712 isDestructor =
4713 (name().find('~')!=DString::npos || name().find('!')!=DString::npos) // The ! is for C++/CLI
4714 && name().find("operator")==DString::npos;
4715 }
4717}
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 1801 of file memberdef.cpp.

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

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

2978{
2979 const MemberVector &bml=reimplementedBy();
2980 size_t count=0;
2981 for (const auto &bmd : bml)
2982 {
2983 const ClassDef *bcd=bmd->getClassDef();
2984 // count the members that directly inherit from md and for
2985 // which the member and class are visible in the docs.
2986 if ( bcd && bmd->isLinkable() && bcd->isLinkable() )
2987 {
2988 count++;
2989 }
2990 }
2991 return count;
2992}
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 5656 of file memberdef.cpp.

5657{
5658 bool enabled = m_hasCallerGraph &&
5659 (isFunction() || isSlot() || isSignal()) &&
5660 Config_getBool(HAVE_DOT);
5661 if (enabled)
5662 {
5663 bool trivial = DotCallGraph::isTrivial(this,true);
5664 return !trivial;
5665 }
5666 return false;
5667}
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(), and hasDetailedDescription().

◆ _hasVisibleCallGraph()

bool MemberDefImpl::_hasVisibleCallGraph ( ) const
private

Definition at line 5638 of file memberdef.cpp.

5639{
5640 bool enabled = m_hasCallGraph &&
5641 (isFunction() || isSlot() || isSignal()) &&
5642 Config_getBool(HAVE_DOT);
5643 if (enabled)
5644 {
5645 bool trivial = DotCallGraph::isTrivial(this,false);
5646 return !trivial;
5647 }
5648 return false;
5649}

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

Referenced by _writeCallGraph(), and hasDetailedDescription().

◆ _isAnonymousBitField()

bool MemberDefImpl::_isAnonymousBitField ( ) const
private

Definition at line 2197 of file memberdef.cpp.

2198{
2199 return !m_bitfields.empty() && name().startsWith("__pad"); // anonymous bitfield
2200}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
bool startsWith(const char *s) const
Definition dstring.h:600
DString m_bitfields

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

Referenced by warnIfUndocumented(), and writeDeclaration().

◆ _isReimplements()

bool MemberDefImpl::_isReimplements ( ) const
private

Definition at line 2905 of file memberdef.cpp.

2906{
2907 const MemberDef *bmd=reimplements();
2908 const ClassDef *bcd=nullptr;
2909 if (bmd && (bcd=bmd->getClassDef()))
2910 {
2911 // write class that contains a member that is reimplemented by this one
2912 if (bcd->isLinkable())
2913 {
2914 return true;
2915 }
2916 }
2917 return false;
2918}
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 2883 of file memberdef.cpp.

2884{
2886 {
2887 DotCallGraph callerGraph(this, true);
2888 if (callerGraph.isTooBig())
2889 {
2890 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2891 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2892 }
2893 else if (!callerGraph.isTrivial())
2894 {
2895 msg("Generating caller graph for function {}\n",qualifiedName());
2897 ol.startCallGraph();
2899 ol.endCallGraph(callerGraph);
2900 ol.enableAll();
2901 }
2902 }
2903}
bool _hasVisibleCallerGraph() const
void parseText(const DString &textStr)
void disable(OutputType o)
void startCallGraph()
Definition outputlist.h:652
void endCallGraph(DotCallGraph &g)
Definition outputlist.h:654
void enableAll()
virtual DString trCallerGraph()=0
#define Config_getInt(name)
Definition config.h:34
Translator * theTranslator
Definition language.cpp:76
#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 2860 of file memberdef.cpp.

2861{
2862 // write call graph
2864 {
2865 DotCallGraph callGraph(this,false);
2866 if (callGraph.isTooBig())
2867 {
2868 warn_uncond("Call graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2869 qualifiedName(), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2870 }
2871 else if (!callGraph.isTrivial())
2872 {
2873 msg("Generating call graph for function {}\n",qualifiedName());
2875 ol.startCallGraph();
2877 ol.endCallGraph(callGraph);
2878 ol.enableAll();
2879 }
2880 }
2881}
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 3053 of file memberdef.cpp.

3054{
3055 if (getClassDef()) // this should be a member of a class/category
3056 {
3057 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3058 // qPrint(name()),
3059 // m_category ? qPrint(m_category->name()) : "<none>",
3060 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3061 // qPrint(m_classDef->name()),
3062 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3063 // );
3064 DString text;
3065 DString ref;
3066 DString file;
3067 DString anc;
3068 DString name;
3069 size_t i=DString::npos;
3071 {
3072 if (m_category)
3073 {
3074 // this member is in a normal class and implements method categoryRelation from category
3075 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3078 }
3079 else if (getClassDef()->categoryOf())
3080 {
3081 // this member is part of a category so link to the corresponding class member of the class we extend
3082 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3083 text = theTranslator->trExtendsClass();
3085 }
3086 i=text.find("@0");
3087 if (i!=DString::npos)
3088 {
3089 const MemberDef *md = m_categoryRelation;
3090 ref = md->getReference();
3091 file = md->getOutputFileBase();
3092 anc = md->anchor();
3093 }
3094 }
3095 if (i!=DString::npos && !name.empty())
3096 {
3097 ol.startParagraph();
3098 ol.parseText(text.left(i));
3099 ol.writeObjectLink(ref,file,anc,name);
3100 ol.parseText(text.mid(i+2));
3101 ol.endParagraph();
3102 }
3103 }
3104}
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:318
virtual const DString & name() const =0
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:403
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name)
Definition outputlist.h:435
void endParagraph()
Definition outputlist.h:405
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 3127 of file memberdef.cpp.

3130{
3131 // For enum, we also write the documented enum values
3132 if (isEnumerate())
3133 {
3134 bool first=true;
3135 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3136 bool hasInits = false;
3137 if (hasEnumValues())
3138 {
3139 for (const auto &fmd : enumFieldList())
3140 {
3141 if (fmd->isLinkable())
3142 {
3143 if (!fmd->initializer().empty())
3144 {
3145 hasInits = true;
3146 break;
3147 }
3148 }
3149 }
3150 }
3151 for (const auto &fmd : enumFieldList())
3152 {
3153 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3154 if (fmd->isLinkable())
3155 {
3156 if (first)
3157 {
3159 first=false;
3160 }
3161
3162 ol.startDescTableRow();
3163 ol.addIndexItem(fmd->name(),ciname);
3164 ol.addIndexItem(ciname,fmd->name());
3165
3167 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3168 ol.addLabel(cfname,fmd->anchor());
3169 ol.docify(fmd->name());
3171 ol.writeString(" ");
3172 ol.enableAll();
3173 ol.endDoxyAnchor(cfname,fmd->anchor());
3174 ol.endDescTableTitle();
3175 if (hasInits)
3176 {
3177 ol.startDescTableInit();
3178 if (!fmd->initializer().empty())
3179 {
3180 DString initStr = fmd->initializer().stripWhiteSpace();
3181 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3183 ol.writeString("(");
3184 ol.enableAll();
3185 ol.docify(initStr);
3187 ol.writeString(")");
3188 ol.enableAll();
3189 }
3190 ol.endDescTableInit();
3191 }
3192 ol.startDescTableData();
3193
3194 bool hasBrief = !fmd->briefDescription().empty();
3195 bool hasDetails = !fmd->documentation().empty();
3196
3197 if (hasBrief)
3198 {
3199 ol.generateDoc(fmd->briefFile(),
3200 fmd->briefLine(),
3201 getOuterScope()?getOuterScope():container,
3202 fmd,
3203 fmd->briefDescription(),
3204 DocOptions()
3205 .setIndexWords(true));
3206 }
3207 if (hasDetails)
3208 {
3209 ol.generateDoc(fmd->docFile(),
3210 fmd->docLine(),
3211 getOuterScope()?getOuterScope():container,
3212 fmd,
3213 fmd->documentation()+"\n",
3214 DocOptions()
3215 .setIndexWords(true));
3216 }
3217 ol.endDescTableData();
3218 ol.endDescTableRow();
3219 }
3220 }
3221 if (!first)
3222 {
3223 ol.endDescTable();
3224 }
3225 }
3226}
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:337
virtual DString briefDescription(bool abbreviate=false) const =0
virtual DString documentation() const =0
virtual Definition * getOuterScope() const =0
Definition * getOuterScope() const override
bool isEnumerate() const override
bool hasEnumValues() const override
const MemberVector & enumFieldList() const override
void endDescTableRow()
Definition outputlist.h:630
void startDescTableInit()
Definition outputlist.h:636
void addIndexItem(const DString &s1, const DString &s2)
Definition outputlist.h:586
void endDescTable()
Definition outputlist.h:626
void docify(const DString &s)
Definition outputlist.h:433
void endDescTableTitle()
Definition outputlist.h:634
void writeString(const DString &text)
Definition outputlist.h:407
void endDoxyAnchor(const DString &fn, const DString &anchor)
Definition outputlist.h:537
void startDescTable(const DString &title, const bool hasInits)
Definition outputlist.h:624
void endDescTableData()
Definition outputlist.h:642
void startDescTableTitle()
Definition outputlist.h:632
void addLabel(const DString &fName, const DString &anchor)
Definition outputlist.h:539
void startDescTableData()
Definition outputlist.h:640
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:533
void endDescTableInit()
Definition outputlist.h:638
void startDescTableRow()
Definition outputlist.h:628
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 3106 of file memberdef.cpp.

3107{
3108 // write the list of examples that use this member
3109 if (hasExamples())
3110 {
3111 ol.startExamples();
3112 ol.startDescForItem();
3114 ol.endDescForItem();
3115 ol.endExamples();
3116 }
3117}
ExampleList m_examples
bool hasExamples() const override
void endDescForItem()
Definition outputlist.h:545
void endExamples()
Definition outputlist.h:576
void startExamples()
Definition outputlist.h:574
void startDescForItem()
Definition outputlist.h:543
void writeExamples(OutputList &ol, const ExampleList &list)
Definition util.cpp:804

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

3315{
3316 // only write out the include file if this is not part of a class or file
3317 // definition
3318 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3319 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3320 const FileDef *fd = getFileDef();
3321 DString nm;
3322 if (inGroup && fd && showGroupedMembInc)
3323 {
3324 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3325 {
3327 }
3328 else
3329 {
3330 nm = fd->name();
3331 }
3332 }
3333 if (!nm.empty())
3334 {
3335 ol.startParagraph();
3336 ol.startTypewriter();
3337 SrcLangExt lang = getLanguage();
3338 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3339 if (isIDLorJava)
3340 {
3341 ol.docify("import ");
3342 }
3343 else
3344 {
3345 ol.docify("#include ");
3346 }
3347
3348 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3349
3350 if (fd && fd->isLinkable())
3351 {
3352 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3353 }
3354 else
3355 {
3356 ol.docify(nm);
3357 }
3358
3359 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3360
3361 ol.endTypewriter();
3362 ol.endParagraph();
3363 }
3364}
virtual DString absFilePath() const =0
void startTypewriter()
Definition outputlist.h:445
void endTypewriter()
Definition outputlist.h:447
#define Config_getList(name)
Definition config.h:38
SrcLangExt
Definition types.h:207
DString stripFromIncludePath(const DString &path)
Definition util.cpp:227

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

3367{
3368 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3369 ol.startBold();
3370 if (m_mtype==MemberType::Define)
3372 else
3374 ol.endBold();
3375 DString langCorrected = getDefFileExtension();
3377 if (srcLangExt == SrcLangExt::Lex)
3378 {
3379 langCorrected = ".doxygen_lex_c";
3380 srcLangExt = SrcLangExt::Cpp;
3381 }
3382 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3383 intf->resetCodeParserState();
3384 auto &codeOL = ol.codeGenerators();
3385 codeOL.startCodeFragment("DoxyCode");
3386 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3387 CodeParserOptions()
3389 .setInlineFragment(true)
3390 .setMemberDef(this)
3391 .setShowLineNumbers(false)
3392 .setSearchCtx(this)
3393 );
3394 codeOL.endCodeFragment("DoxyCode");
3395}
DString getDefFileExtension() const override
static ParserManager * parserManager
Definition doxygen.h:122
void setFileDef(FileDef *fd) override
DString m_initializer
void startCodeFragment(const DString &style)
Definition outputlist.h:276
const OutputCodeList & codeGenerators() const
Definition outputlist.h:354
void startBold()
Definition outputlist.h:557
void endBold()
Definition outputlist.h:559
std::unique_ptr< CodeParserInterface > getCodeParser(const DString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:253
virtual DString trDefineValue()=0
virtual DString trInitialValue()=0
SrcLangExt getLanguageFromFileName(const DString &fileName, SrcLangExt defLang)
Definition util.cpp:4168

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

2995{
2996 const MemberVector &bml=reimplementedBy();
2997 size_t count = _countReimplementedBy();
2998 if (count>0)
2999 {
3000 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3001 {
3002 size_t cnt=0;
3003 auto it = bml.begin();
3004 // find the entryIndex-th documented entry in the inheritance list.
3005 const MemberDef *bmd = nullptr;
3006 const ClassDef *bcd = nullptr;
3007 while (it!=bml.end())
3008 {
3009 bmd = *it;
3010 bcd = bmd->getClassDef();
3011 if ( bmd->isLinkable() && bcd->isLinkable())
3012 {
3013 if (cnt==entryIndex) break;
3014 cnt++;
3015 }
3016 ++it;
3017 }
3018
3019 if (bcd && bmd) // write link for marker
3020 {
3021 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3022 // bmd->anchor(),bcd->name());
3024 bmd->anchor(),bcd->displayName());
3025
3026 if (bmd->isLinkableInProject() )
3027 {
3028 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3029 }
3030 }
3031 };
3032
3033 DString reimplInLine;
3034 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3035 {
3036 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3037 }
3038 else
3039 {
3040 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3041 }
3042
3043 // write the list of classes that overwrite this member
3044 ol.startParagraph();
3045 writeMarkerList(ol,
3046 reimplInLine.str(),
3047 count,
3048 replaceFunc);
3049 ol.endParagraph();
3050 }
3051}
@ Interface
Definition classdef.h:108
const std::string & str() const
Definition dstring.h:645
size_t _countReimplementedBy() const
iterator end() noexcept
Definition memberlist.h:57
iterator begin() noexcept
Definition memberlist.h:55
virtual DString trImplementedInList(int numEntries)=0
virtual DString trReimplementedInList(int numEntries)=0
static void writePageRef(OutputList &ol, const DString &cn, const DString &mn)
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:753

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

2920{
2921 const MemberDef *bmd=reimplements();
2922 const ClassDef *bcd=nullptr;
2923 if (bmd && (bcd=bmd->getClassDef()))
2924 {
2925 // write class that contains a member that is reimplemented by this one
2926 if (bcd->isLinkable())
2927 {
2928 ol.startParagraph();
2929 DString reimplFromLine;
2930 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
2931 {
2932 reimplFromLine = theTranslator->trReimplementedFromList(1);
2933 }
2934 else
2935 {
2936 reimplFromLine = theTranslator->trImplementedFromList(1);
2937 }
2938 if (size_t markerPos = reimplFromLine.find("@0"); markerPos!=DString::npos) // should always pass this.
2939 {
2940 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
2941 if (bmd->isLinkable()) // replace marker with link
2942 {
2943 //Definition *bd=bmd->group;
2944 //if (bd==0) bd=bcd;
2946 bmd->anchor(),bcd->displayName());
2947
2948 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
2949 // bmd->anchor(),bcd->name());
2950 if ( bmd->isLinkableInProject() )
2951 {
2952 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
2953 }
2954 }
2955 else
2956 {
2958 DString(),bcd->displayName());
2959 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
2960 {
2961 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
2962 }
2963 }
2964 ol.parseText(reimplFromLine.right(
2965 reimplFromLine.length()-markerPos-2)); // text right from marker
2966
2967 }
2968 else
2969 {
2970 err("translation error: no marker in trReimplementsFromList()\n");
2971 }
2972 ol.endParagraph();
2973 }
2974 }
2975}
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:311
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151
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 2154 of file memberdef.cpp.

2156{
2157 ol.docify("template<");
2158 LinkifyTextOptions options;
2159 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2160 for (auto it = al.begin(); it!=al.end();)
2161 {
2162 Argument a = *it;
2163 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
2164 if (!a.name.empty())
2165 {
2166 ol.docify(" ");
2167 ol.docify(a.name);
2168 }
2169 if (!a.defval.empty())
2170 {
2171 ol.docify(" = ");
2172 ol.docify(a.defval);
2173 }
2174 ++it;
2175 if (it!=al.end()) ol.docify(", ");
2176 }
2177 ol.docify("> ");
2178 if (writeReqClause && !m_requiresClause.empty())
2179 {
2180 ol.lineBreak();
2181 ol.docify("requires ");
2182 linkifyText(TextGeneratorOLImpl(ol), // out
2183 m_requiresClause, // text
2184 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2185 }
2186}
DString defval
Definition arguments.h:47
DString name
Definition arguments.h:45
DString type
Definition arguments.h:43
iterator end()
Definition arguments.h:95
iterator begin()
Definition arguments.h:94
DString m_requiresClause
void lineBreak(const DString &style=DString())
Definition outputlist.h:555
void linkifyText(const TextGeneratorIntf &out, const DString &text, const LinkifyTextOptions &options)
LinkifyTextOptions & setScope(const Definition *scope)
Definition linkifytext.h:58
LinkifyTextOptions & setSelf(const Definition *self)
Definition linkifytext.h:64
LinkifyTextOptions & setFileScope(const FileDef *fileScope)
Definition linkifytext.h:61

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(), and Argument::type.

Referenced by writeDeclaration(), and writeDocumentation().

◆ _writeTypeConstraints()

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

Definition at line 3119 of file memberdef.cpp.

3120{
3122 {
3124 }
3125}
bool hasParameters() const
Definition arguments.h:77
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:4283

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

1641{
1642 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1643 return m_examples.inSort(Example(anchor,nameStr,file));
1644}
bool inSort(const Example &ex)
Definition example.h:39
DString anchor() const override

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

◆ addListReference()

void MemberDefImpl::addListReference ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4491 of file memberdef.cpp.

4492{
4493 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4494 SrcLangExt lang = getLanguage();
4495 if (!isLinkableInProject()) return;
4496 DString memLabel;
4497 if (optimizeOutputForC)
4498 {
4499 memLabel=theTranslator->trGlobal(true,true);
4500 }
4501 else if (lang==SrcLangExt::Fortran)
4502 {
4503 memLabel=theTranslator->trSubprogram(true,true);
4504 }
4505 else
4506 {
4507 memLabel=theTranslator->trMember(true,true);
4508 }
4509 DString memName = name();
4510 Definition *pd=getOuterScope();
4511 DString pdName = pd->definitionType()==Definition::TypeClass ?
4512 (toClassDef(pd))->displayName() : pd->name();
4513 DString sep = getLanguageSpecificSeparator(lang,true);
4514 DString memArgs;
4515 if (!isRelated())
4516 {
4517 if (isObjCMethod())
4518 {
4519 memName = "[" + pd->name() + " " + name() + "]";
4520 }
4521 else
4522 {
4523 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4524 memArgs = argsString();
4525 }
4526 }
4527 const RefItemVector &xrefItems = xrefListItems();
4528 if (sep!="::")
4529 {
4530 memName = substitute(memName,"::",sep);
4531 }
4532 addRefItem(xrefItems,
4533 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4534 memLabel,
4535 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4536}
DString & prepend(const char *s)
Definition dstring.h:515
virtual DefType definitionType() const =0
const RefItemVector & xrefListItems() const override
static NamespaceDefMutable * globalScope
Definition doxygen.h:114
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:485
void addRefItem(const RefItemVector &sli, const DString &key, const DString &prefix, const DString &name, const DString &title, const DString &args, const Definition *scope)
Definition reflist.h:134
std::vector< RefItem * > RefItemVector
Definition reflist.h:132
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Definition util.cpp:4629

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

5809{
5810 for (const auto &sx : qualifiers)
5811 {
5812 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5813 if (!alreadyAdded)
5814 {
5815 m_qualifiers.push_back(sx);
5816 }
5817 }
5818}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4538 of file memberdef.cpp.

4539{
4541}
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 1778 of file memberdef.cpp.

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

5556{
5557 return m_defArgList;
5558}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

DString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5015 of file memberdef.cpp.

5016{
5017 return m_bitfields;
5018}

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

6302{
6303 if (m_templateMaster)
6304 {
6305 return m_templateMaster->briefDescription(abbr);
6306 }
6307 else
6308 {
6310 }
6311}
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 6011 of file memberdef.cpp.

6012{
6015 m_cachedTypedefTemplSpec=templSpec;
6016 m_cachedResolvedType=resolvedType;
6017 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6018}
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 5971 of file memberdef.cpp.

5972{
5973 return m_category;
5974}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5981 of file memberdef.cpp.

5982{
5983 return m_categoryRelation;
5984}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6381 of file memberdef.cpp.

6382{
6383 switch (memberType())
6384 {
6385 case MemberType::Define: return CodeSymbolType::Define;
6386 case MemberType::Function: return CodeSymbolType::Function;
6387 case MemberType::Variable: return CodeSymbolType::Variable;
6388 case MemberType::Typedef: return CodeSymbolType::Typedef;
6389 case MemberType::Enumeration: return CodeSymbolType::Enumeration;
6390 case MemberType::EnumValue: return CodeSymbolType::EnumValue;
6391 case MemberType::Signal: return CodeSymbolType::Signal;
6392 case MemberType::Slot: return CodeSymbolType::Slot;
6393 case MemberType::Friend: return CodeSymbolType::Friend;
6394 case MemberType::DCOP: return CodeSymbolType::DCOP;
6395 case MemberType::Property: return CodeSymbolType::Property;
6396 case MemberType::Event: return CodeSymbolType::Event;
6397 case MemberType::Interface: return CodeSymbolType::Interface;
6398 case MemberType::Service: return CodeSymbolType::Service;
6399 case MemberType::Sequence: return CodeSymbolType::Sequence;
6400 case MemberType::Dictionary: return CodeSymbolType::Dictionary;
6401 }
6403}
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 6020 of file memberdef.cpp.

6021{
6022 {
6023 const ArgumentList &srcAl = bmd->argumentList();
6024 ArgumentList &dstAl = m_defArgList;
6025 auto srcIt = srcAl.begin();
6026 auto dstIt = dstAl.begin();
6027 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6028 {
6029 Argument &argDst = *dstIt;
6030 const Argument &argSrc = *srcIt;
6031 if (!argSrc.name.empty())
6032 {
6033 argDst.name = argSrc.name;
6034 }
6035 argDst.docs = argSrc.docs;
6036 ++srcIt;
6037 ++dstIt;
6038 }
6039 }
6040
6041 {
6042 const ArgumentList &srcAl = bmd->declArgumentList();
6043 ArgumentList &dstAl = m_declArgList;
6044 auto srcIt = srcAl.begin();
6045 auto dstIt = dstAl.begin();
6046
6047 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6048 {
6049 Argument &argDst = *dstIt;
6050 const Argument &argSrc = *srcIt;
6051 if (!argSrc.name.empty())
6052 {
6053 argDst.name = argSrc.name;
6054 }
6055 argDst.docs = argSrc.docs;
6056 ++srcIt;
6057 ++dstIt;
6058 }
6059 }
6060}
DString docs
Definition arguments.h:48
virtual const ArgumentList & argumentList() const =0
virtual const ArgumentList & declArgumentList() const =0
ArgumentList m_declArgList

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

4414{
4415 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4416 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4417 if (!m_defArgList.empty())
4418 {
4419 // replace formal arguments with actuals
4420 for (Argument &arg : *actualArgList)
4421 {
4422 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4423 }
4424 actualArgList->setTrailingReturnType(
4425 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4426 }
4427
4428 DString methodName=name();
4429 if (methodName.startsWith("operator ")) // conversion operator
4430 {
4431 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4432 }
4433
4434 auto imd = createMemberDef(
4436 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4437 methodName,
4438 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4441 ArgumentList(), ArgumentList(), ""
4442 );
4443 auto mmd = toMemberDefMutable(imd.get());
4444 mmd->moveArgumentList(std::move(actualArgList));
4445 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4446 mmd->setBodyDef(getBodyDef());
4447 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4448 mmd->setFormalTemplateArguments(formalArgs);
4449
4450 // TODO: init other member variables (if needed).
4451 // TODO: reimplemented info
4452 return imd;
4453}
bool empty() const
Definition arguments.h:100
size_t getDefColumn() const override
DString getDefFileName() const override
const FileDef * getBodyDef() const override
DString m_exception
Relationship m_related
std::unique_ptr< MemberDef > createMemberDef(const DString &defFileName, int defLine, size_t 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:3524

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

4986{
4987 return m_decl;
4988}

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5560 of file memberdef.cpp.

5561{
5562 return m_declArgList;
5563}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1465 of file memberdef.cpp.

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

4991{
4992 return m_def;
4993}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5618 of file memberdef.cpp.

5619{
5620 return m_defTmpArgLists;
5621}

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

4174{
4175 //printf("%s:detectUndocumentedParams(%d,%d)\n",qPrint(name()),hasParamCommand,hasReturnCommand);
4176 bool isPython = getLanguage()==SrcLangExt::Python;
4177
4178 // this function is called while parsing the documentation. A member can have multiple
4179 // documentation blocks, which could be handled by multiple threads, hence this guard.
4180 std::lock_guard<std::mutex> lock(g_detectUndocumentedParamsMutex);
4181
4182 if (!m_hasDocumentedParams && hasParamCommand)
4183 {
4184 //printf("%s:hasDocumentedParams=true;\n",qPrint(name()));
4185 m_hasDocumentedParams = true;
4186 }
4187 else if (!m_hasDocumentedParams)
4188 {
4189 const ArgumentList &al = argumentList();
4190 const ArgumentList &declAl = declArgumentList();
4191 bool allDoc=true; // no parameter => all parameters are documented
4192 if ( // member has parameters
4193 al.hasParameters() // with at least one parameter (that is not void)
4194 )
4195 {
4196 // see if all parameters have documentation
4197 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4198 {
4199 const Argument &a = *it;
4200 if (!a.name.empty() && a.type!="void" && a.name!="..." &&
4201 !(isPython && (a.name=="self" || a.name=="cls"))
4202 )
4203 {
4204 allDoc = !a.docs.empty();
4205 }
4206 //printf("a.type=%s a.name=%s doc=%s\n",
4207 // qPrint(a.type),qPrint(a.name),qPrint(a.docs));
4208 }
4209 if (!allDoc && declAl.empty()) // try declaration arguments as well
4210 {
4211 allDoc=true;
4212 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4213 {
4214 const Argument &a = *it;
4215 if (!a.name.empty() && a.type!="void" && a.name!="..." &&
4216 !(isPython && (a.name=="self" || a.name=="cls"))
4217 )
4218 {
4219 allDoc = !a.docs.empty();
4220 }
4221 //printf("a.name=%s doc=%s\n",qPrint(a.name),qPrint(a.docs));
4222 }
4223 }
4224 }
4225 if (allDoc)
4226 {
4227 //printf("%s:hasDocumentedParams=true;\n",qPrint(name()));
4228 m_hasDocumentedParams = true;
4229 }
4230 }
4231
4232 //printf("Member %s hasDocumentedReturnType=%d hasReturnCommand=%d\n",
4233 // qPrint(name()),m_hasDocumentedReturnType,hasReturnCommand);
4235}
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 3231 of file memberdef.cpp.

3232{
3233 DString ldef = definition();
3234 DString title = name();
3235 if (isEnumerate())
3236 {
3237 if (isAnonymous())
3238 {
3239 ldef = title = "anonymous enum";
3240 if (!m_enumBaseType.empty())
3241 {
3242 ldef+=" : "+m_enumBaseType;
3243 }
3244 }
3245 else
3246 {
3247 ldef.prepend("enum ");
3248 if (isSliceLocal())
3249 {
3250 ldef.prepend("local ");
3251 }
3252 }
3253 }
3254 else if (isEnumValue())
3255 {
3256 if (isAnonymous())
3257 {
3258 ldef=ldef.mid(2);
3259 }
3260 }
3261
3262 std::string sdef = ldef.str();
3263 reg::Match match;
3264 if (reg::search(sdef,match,reAnonymous))
3265 {
3266 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
3267 if (annoClassDef)
3268 {
3269 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)");
3270 reg::Match amatch;
3271 reg::search(sdef,amatch,ar);
3272 ldef = amatch.prefix().str() + annoClassDef->displayName() + amatch.suffix().str();
3273 }
3274 else
3275 {
3276 ldef = match.prefix().str() + " { ... } " + removeAnonymousScopes(match.suffix().str());
3277 }
3278 }
3279
3280 const ClassDef *cd=getClassDef();
3281 if (cd && cd->isObjectiveC())
3282 {
3283 // strip scope name
3284 if (size_t ep = ldef.find("::"); ep!=DString::npos)
3285 {
3286 if (size_t sp=ldef.rfind(' ',ep); sp!=DString::npos)
3287 {
3288 ldef=ldef.left(sp+1)+ldef.mid(ep+2);
3289 }
3290 }
3291 // strip keywords
3292 if (size_t dp = ldef.find(':'); dp!=DString::npos)
3293 {
3294 ldef=ldef.left(dp+1);
3295 }
3296 int l=static_cast<int>(ldef.length());
3297 //printf("start >%s<\n",qPrint(ldef));
3298 int i=l-1;
3299 while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
3300 while (i>=0 && isspace(static_cast<uint8_t>(ldef.at(i)))) i--;
3301 if (i>0)
3302 {
3303 // insert branches around the type
3304 ldef = "("+ldef.left(i+1)+")"+ldef.mid(i+1);
3305 }
3306 //printf("end >%s< i=%d\n",qPrint(ldef),i);
3307 if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
3308 }
3309 SrcLangExt lang = getLanguage();
3310 DString sep = getLanguageSpecificSeparator(lang,true);
3311 return substitute(ldef,"::",sep);
3312}
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:244
char & at(size_t i)
Returns a reference to the character at index i.
Definition dstring.h:686
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
bool isId(int c)
Returns true if c is a valid character for an identifier.
Definition dstring.h:895
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:850
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:861
DString removeAnonymousScopes(const DString &str)
Definition util.cpp:98

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

6089{
6090 return DefinitionMixin::name();
6091}

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

6314{
6315 if (m_templateMaster)
6316 {
6318 }
6319 else
6320 {
6322 }
6323}
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 5996 of file memberdef.cpp.

5997{
5998 return m_enumBaseType;
5999}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5540 of file memberdef.cpp.

5541{
5542 return m_enumFields;
5543}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

DString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5010 of file memberdef.cpp.

5011{
5012 return m_exception;
5013}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

DString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4995 of file memberdef.cpp.

4996{
4997 return m_extraTypeChars;
4998}

References m_extraTypeChars.

◆ fieldType()

DString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3946 of file memberdef.cpp.

3947{
3948 DString type = m_type;
3949 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3950 return simplifyTypeForTable(type);
3951}
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 4874 of file memberdef.cpp.

4875{
4879}
DString docFile() const override
DString inbodyDocumentation() const override
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 5694 of file memberdef.cpp.

5695{
5697}

References m_formalTemplateArguments.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5495 of file memberdef.cpp.

5496{
5497 return m_annEnumType;
5498}

References m_annEnumType.

Referenced by writeDeclaration(), and writeDocumentation().

◆ getCachedResolvedTypedef()

DString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5714 of file memberdef.cpp.

5715{
5716 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5717 return m_cachedResolvedType;
5718}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

DString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5709 of file memberdef.cpp.

5710{
5712}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5704 of file memberdef.cpp.

5705{
5706 return m_cachedTypedefValue;
5707}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5050 of file memberdef.cpp.

5051{
5052 return m_classDef;
5053}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5055 of file memberdef.cpp.

5056{
5058}
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 2006 of file memberdef.cpp.

2007{
2008 return m_anonymousType;
2009}

References m_anonymousType.

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

◆ getDeclColumn()

size_t MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5750 of file memberdef.cpp.

5751{
5752 return m_declColumn;
5753}

References m_declColumn.

◆ getDeclFileName()

DString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5740 of file memberdef.cpp.

5741{
5742 return m_declFileName;
5743}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5745 of file memberdef.cpp.

5746{
5747 return m_declLine;
5748}

References m_declLine.

◆ getDeclType()

DString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2107 of file memberdef.cpp.

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

5506{
5507 return m_enumScope;
5508}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5545 of file memberdef.cpp.

5546{
5547 return m_examples;
5548}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5065 of file memberdef.cpp.

5066{
5067 return m_fileDef;
5068}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5735 of file memberdef.cpp.

5736{
5737 return m_groupAlias;
5738}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5095 of file memberdef.cpp.

5096{
5097 return m_group;
5098}

References m_group.

◆ getGroupFileName()

DString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5110 of file memberdef.cpp.

5111{
5112 return m_groupFileName;
5113}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5120 of file memberdef.cpp.

5121{
5122 return m_groupHasDocs;
5123}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5105 of file memberdef.cpp.

5106{
5107 return m_grouppri;
5108}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5115 of file memberdef.cpp.

5116{
5117 return m_groupStartLine;
5118}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2724 of file memberdef.cpp.

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

Referenced by writeDocumentation().

◆ getMemberGroup()

MemberGroup * MemberDefImpl::getMemberGroup ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5628 of file memberdef.cpp.

5629{
5630 return m_memberGroup;
5631}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5623 of file memberdef.cpp.

5624{
5625 return m_grpId;
5626}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5035 of file memberdef.cpp.

5036{
5037 return m_memSpec;
5038}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5100 of file memberdef.cpp.

5101{
5102 return m_moduleDef;
5103}

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

5076{
5077 return m_nspace;
5078}

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

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

References Definition::anchor(), anchor(), Config_getBool, 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 5803 of file memberdef.cpp.

5804{
5805 return m_qualifiers;
5806}

References m_qualifiers.

◆ getReadAccessor()

DString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5080 of file memberdef.cpp.

5081{
5082 return m_read;
5083}

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

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

4323{
4324 DString result;
4325 if (isStrong()) result=name();
4326 else if (getClassDef()) result=getClassDef()->displayName();
4327 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4328 return result;
4329}

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

4544{
4545 auto it = m_sectionMap.find(container);
4546 return it!=m_sectionMap.end() ? it->second : nullptr;
4547}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5040 of file memberdef.cpp.

5041{
5042 return m_vhdlSpec;
5043}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

DString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5085 of file memberdef.cpp.

5086{
5087 return m_write;
5088}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5651 of file memberdef.cpp.

5652{
5653 return m_hasCallerGraph;
5654}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5633 of file memberdef.cpp.

5634{
5635 return m_hasCallGraph;
5636}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2589 of file memberdef.cpp.

2590{
2591 std::lock_guard<std::mutex> lock(g_hasDetailedDescriptionMutex);
2592 //printf(">hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2594 {
2595 bool extractAll = Config_getBool(EXTRACT_ALL);
2596 bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
2597 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
2598 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2599 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2600 bool extractStatic = Config_getBool(EXTRACT_STATIC);
2601 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
2602 bool inlineSources = hasInlineSource();
2603
2604 // the member has detailed documentation because the user added some comments
2605 bool docFilter =
2606 // extract all is enabled
2607 extractAll ||
2608 // has detailed docs
2609 !documentation().empty() ||
2610 // has inbody docs
2612 // is an enum with values that are documented
2614 // is documented enum value
2615 (m_mtype==MemberType::EnumValue && !briefDescription().empty()) ||
2616 // has brief description that is part of the detailed description
2617 (!briefDescription().empty() && // has brief docs
2618 (alwaysDetailedSec && // they are visible in
2619 (repeatBrief || // detailed section or
2620 !briefMemberDesc // they are explicitly not
2621 ) // shown in brief section
2622 )
2623 ) ||
2624 // has one or more documented arguments
2629 m_templateMaster->templateArguments().hasTemplateDocumentation() :
2631 // user-specified qualifiers
2632 !m_qualifiers.empty();
2633
2634 // generate function guard
2635 // ================== =======
2636 // _writeGroupInclude -> ignored in calculation
2637 // multiLineInitializer() -> hasMultiLineInitializer()
2638 // _writeReimplements -> _isReimplements()
2639 // _writeReimplementedBy -> _countReimplementedBy()>0
2640 // _writeExamples -> hasExamples()
2641 // _writeTypeConstraints -> m_typeConstraints.hasParameters()
2642 // writeSourceDef -> !getSourceFileBase().empty();
2643 // writeInlineCode -> hasInlineSource() && hasSources()
2644 // writeSourceRefs -> hasReferencesRelation() && hasSourceRefs()
2645 // writeSourceReffedBy -> hasReferencedByRelation() && hasSourceReffedBy()
2646 // _writeCallGraph -> _hasVisibleCallGraph()
2647 // _writeCallerGraph -> _hasVisibleCallerGraph()
2648
2649 // the member has detailed documentation because there is some generated info
2650 bool docInfo =
2651 // has a multi-line initialization block
2653 // reimplements / reimplemented by
2655 // examples
2656 hasExamples() ||
2657 // type constraints
2659 // has source definition
2660 !getSourceFileBase().empty() ||
2661 // has inline sources
2662 (inlineSources && hasSources()) ||
2663 // has references
2666 // call graph
2668 // caller graph
2670 // requirement references
2672
2673 if (!hideUndocMembers) // if HIDE_UNDOC_MEMBERS is NO we also show the detailed section
2674 // if there is only some generated info
2675 {
2676 docFilter = docFilter || docInfo;
2677 }
2678
2679 // this is not a global static or global statics should be extracted
2680 bool staticFilter = getClassDef()!=nullptr || !isStatic() || extractStatic;
2681
2682 // a module does not contain details for members, so either the namespace or file should be linkable
2683 bool moduleFilter = getModuleDef()==nullptr || (getFileDef() && getFileDef()->isLinkable()) ||
2686
2687 // only include members that are non-private unless EXTRACT_PRIVATE is
2688 // set to YES or the member is part of a group
2689 bool privateFilter = protectionLevelVisible(protection()) || m_mtype==MemberType::Friend ||
2690 (m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual);
2691
2692 // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
2693 // is true
2694 bool friendCompoundFilter = !(Config_getBool(HIDE_FRIEND_COMPOUNDS) && isFriend());
2695
2697 (docFilter && staticFilter && moduleFilter && privateFilter && friendCompoundFilter && !isHidden());
2698 //printf("docFilter=%d docInfo=%d staticFilter=%d privateFilter=%d friendCompoundFilter=%d !isHidden()=%d",
2699 // docFilter,docInfo,staticFilter,privateFilter,friendCompoundFilter,!isHidden());
2701 }
2702 //printf("<hasDetailedDescription(cached=%d)\n",m_hasDetailedDescriptionCached);
2704}
bool hasDocumentation(bool allowEmptyNames=false) const
Definition arguments.cpp:26
bool hasTemplateDocumentation() const
Definition arguments.cpp:34
bool hasRequirementRefs() const override
bool hasSourceReffedBy() const override
DString getSourceFileBase() const override
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(), getGroupDef(), 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 4309 of file memberdef.cpp.

4310{
4312 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4313 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4314}
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 5490 of file memberdef.cpp.

5491{
5492 return m_docEnumValues;
5493}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5684 of file memberdef.cpp.

5685{
5686 return m_hasEnumValues;
5687}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1646 of file memberdef.cpp.

1647{
1648 return !m_examples.empty();
1649}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5679 of file memberdef.cpp.

5680{
5681 return m_hasInlineSource;
5682}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4466 of file memberdef.cpp.

4467{
4468 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4469 // initLines,userInitLines,maxInitLines);
4470 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4471 return (m_initLines>0 || (!m_initializer.empty() && isFuncLikeMacro)) &&
4472 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4473 || m_initLines<m_userInitLines // explicitly enabled
4474 );
4475}

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

4456{
4457 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4458 // qPrint(name()),qPrint(m_initializer),m_initLines,
4459 // m_maxInitLines,m_userInitLines);
4460 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4461 return !m_initializer.empty() && m_initLines==0 && // one line initializer
4462 !isFuncLikeMacro &&
4463 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4464}

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

5670{
5672}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5674 of file memberdef.cpp.

5675{
5677}

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

6326{
6327 if (m_templateMaster)
6328 {
6330 }
6331 else
6332 {
6334 }
6335}
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 6076 of file memberdef.cpp.

6077{
6079}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5730 of file memberdef.cpp.

5731{
5732 return m_docProvider;
5733}

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

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

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

Referenced by MemberDefImpl(), and writeDocumentation().

◆ initializer()

const DString & MemberDefImpl::initializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5020 of file memberdef.cpp.

5021{
5022 return m_initializer;
5023}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5025 of file memberdef.cpp.

5026{
5027 return m_initLines;
5028}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1635 of file memberdef.cpp.

1636{
1638}
void push_back(const T &value)
Definition memberlist.h:49

References m_enumFields, and MemberVector::push_back().

◆ insertReimplementedBy()

void MemberDefImpl::insertReimplementedBy ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1590 of file memberdef.cpp.

1591{
1592 if (m_templateMaster)
1593 {
1594 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef *>(m_templateMaster));
1595 if (mdm)
1596 {
1597 mdm->insertReimplementedBy(md);
1598 }
1599 }
1600 if (!m_redefinedBy.contains(md))
1601 {
1603 }
1604}
virtual void insertReimplementedBy(MemberDef *md)=0
bool contains(const MemberDef *md) const
Definition memberlist.h:90
void inSort(MemberDef *md)
Definition memberlist.h:81

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

◆ invalidateCachedArgumentTypes()

void MemberDefImpl::invalidateCachedArgumentTypes ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6070 of file memberdef.cpp.

6071{
6074}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5956 of file memberdef.cpp.

5957{
5959}

References m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5326 of file memberdef.cpp.

5327{
5328 return m_memSpec.isAbstract();
5329}

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5276 of file memberdef.cpp.

5277{
5278 return m_memSpec.isAddable();
5279}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5351 of file memberdef.cpp.

5352{
5353 return m_memSpec.isAssign();
5354}

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5408 of file memberdef.cpp.

5409{
5410 return m_memSpec.isAttribute();
5411}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5423 of file memberdef.cpp.

5424{
5425 return m_memSpec.isBound();
5426}

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

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

5475{
5476 return isFunction() ||
5477 isSlot() ||
5478 isSignal() ||
5479 isConstructor() ||
5480 isDestructor() ||
5481 isObjCMethod() ||
5482 isFriend();
5483}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5530 of file memberdef.cpp.

5531{
5532 return m_memSpec.isConstEval();
5533}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5525 of file memberdef.cpp.

5526{
5527 return m_memSpec.isConstExpr();
5528}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5535 of file memberdef.cpp.

5536{
5537 return m_memSpec.isConstInit();
5538}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5428 of file memberdef.cpp.

5429{
5430 return m_memSpec.isConstrained();
5431}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4678 of file memberdef.cpp.

4679{
4680 if (m_isConstructorCached==0)
4681 {
4682 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4683 that->_computeIsConstructor();
4684 }
4686 return m_isConstructorCached==2;
4687
4688}
void _computeIsConstructor()
#define ASSERT(x)
Definition message.h:142

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

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

◆ isCopy()

bool MemberDefImpl::isCopy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5346 of file memberdef.cpp.

5347{
5348 return m_memSpec.isCopy();
5349}

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4927 of file memberdef.cpp.

4928{
4929 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return true;
4930 return false;
4931}
bool isProperty() const override

References getClassDef(), and isProperty().

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5196 of file memberdef.cpp.

5197{
5198 return m_mtype==MemberType::DCOP;
5199}

References m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5393 of file memberdef.cpp.

5394{
5395 return m_memSpec.isDefault();
5396}

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5186 of file memberdef.cpp.

5187{
5188 return m_mtype==MemberType::Define;
5189}

References m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5398 of file memberdef.cpp.

5399{
5400 return m_memSpec.isDelete();
5401}

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4304 of file memberdef.cpp.

4305{
4306 return m_defArgList.isDeleted();
4307}
bool isDeleted() const
Definition arguments.h:116

References ArgumentList::isDeleted(), and m_defArgList.

Referenced by warnIfUndocumented(), and warnIfUndocumentedParams().

◆ isDestructor()

bool MemberDefImpl::isDestructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4719 of file memberdef.cpp.

4720{
4721 if (m_isDestructorCached==0)
4722 {
4723 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4724 that->_computeIsDestructor();
4725 }
4727 return m_isDestructorCached==2;
4728}
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 2706 of file memberdef.cpp.

2707{
2708 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2709 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2710 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2711 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2712 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2713 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2714 getClassDef()!=nullptr && getClassDef()->isSimple();
2715
2716 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2717 !isReference();
2718 bool result = visible || simpleFilter;
2719 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2720 // qPrint(name()),result,groupFilter,fileFilter);
2721 return result;
2722}
bool hasBriefDescription() const override

References Config_getBool, File, getClassDef(), getGroupDef(), getNamespaceDef(), Group, DefinitionMixin< MemberDefMutable >::hasBriefDescription(), hasDetailedDescription(), Definition::isLinkable(), isReference(), and ClassDef::isSimple().

◆ isDictionary()

bool MemberDefImpl::isDictionary ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5170 of file memberdef.cpp.

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

References m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5500 of file memberdef.cpp.

5501{
5502 return m_docsForDefinition;
5503}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5030 of file memberdef.cpp.

5031{
5032 return m_docTransferDone;
5033}
bool m_docTransferDone

References m_docTransferDone.

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4295 of file memberdef.cpp.

4296{
4297 ClassDef *fcd=nullptr;
4298 DString baseName=name();
4299 if (size_t i=baseName.find('<'); i!=DString::npos) baseName=baseName.left(i);
4300 return (isFriendClass() &&
4301 (fcd=getClass(baseName)) && fcd->isLinkable());
4302}
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 5150 of file memberdef.cpp.

5151{
5152 return m_mtype==MemberType::Enumeration;
5153}

References m_mtype.

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

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5371 of file memberdef.cpp.

5372{
5373 return m_memSpec.isEnumStruct();
5374}

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5155 of file memberdef.cpp.

5156{
5157 return m_mtype==MemberType::EnumValue;
5158}

References m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5206 of file memberdef.cpp.

5207{
5208 return m_mtype==MemberType::Event;
5209}

References m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5231 of file memberdef.cpp.

5232{
5233 return m_memSpec.isExplicit();
5234}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5464 of file memberdef.cpp.

5465{
5466 return m_explExt;
5467}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5301 of file memberdef.cpp.

5302{
5303 return m_memSpec.isFinal();
5304}

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5216 of file memberdef.cpp.

5217{
5218 return m_related == Relationship::Foreign;
5219}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5191 of file memberdef.cpp.

5192{
5193 return m_mtype==MemberType::Friend;
5194}

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

6353{
6354 return (isFriend() &&
6355 (m_type=="friend class" || m_type=="friend struct" ||
6356 m_type=="friend union"));
6357}

References isFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6342 of file memberdef.cpp.

6343{
6344 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6345 bool isFriendToHide = hideFriendCompounds &&
6346 (m_type=="friend class" ||
6347 m_type=="friend struct" ||
6348 m_type=="friend union");
6349 return isFriendToHide;
6350}
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 5175 of file memberdef.cpp.

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

References m_mtype.

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

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6365 of file memberdef.cpp.

6366{
6367 return isFunction() || isSlot() || isSignal();
6368}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5180 of file memberdef.cpp.

5181{
5182 return m_mtype==MemberType::Variable &&
5183 DString(argsString()).find(")(")!=DString::npos;
5184}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5246 of file memberdef.cpp.

5247{
5248 return m_memSpec.isGettable();
5249}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5459 of file memberdef.cpp.

5460{
5461 return m_implOnly;
5462}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5321 of file memberdef.cpp.

5322{
5323 return m_memSpec.isInitonly();
5324}

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5226 of file memberdef.cpp.

5227{
5228 return m_memSpec.isInline();
5229}

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

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

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

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

5449{
5450 return m_memSpec.isMaybeAmbiguous();
5451}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5443 of file memberdef.cpp.

5444{
5445 return m_memSpec.isMaybeDefault();
5446}

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5438 of file memberdef.cpp.

5439{
5440 return m_memSpec.isMaybeVoid();
5441}

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5236 of file memberdef.cpp.

5237{
5238 return m_memSpec.isMutable();
5239}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5306 of file memberdef.cpp.

5307{
5308 return m_memSpec.isNew();
5309}

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5520 of file memberdef.cpp.

5521{
5522 return m_memSpec.isNoDiscard();
5523}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5403 of file memberdef.cpp.

5404{
5405 return m_memSpec.isNoExcept();
5406}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5341 of file memberdef.cpp.

5342{
5343 return m_memSpec.isNonAtomic();
5344}

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6360 of file memberdef.cpp.

6361{
6362 return !(isFriend() && isFriendToHide());
6363}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4915 of file memberdef.cpp.

4916{
4917 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return true;
4918 return false;
4919}

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

4922{
4923 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return true;
4924 return false;
4925}

References getClassDef(), and isProperty().

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5331 of file memberdef.cpp.

5332{
5333 return m_memSpec.isOptional();
5334}

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5316 of file memberdef.cpp.

5317{
5318 return m_memSpec.isOverride();
5319}

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5251 of file memberdef.cpp.

5252{
5253 return m_memSpec.isPrivateGettable();
5254}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5266 of file memberdef.cpp.

5267{
5268 return m_memSpec.isPrivateSettable();
5269}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5201 of file memberdef.cpp.

5202{
5203 return m_mtype==MemberType::Property;
5204}

References m_mtype.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5256 of file memberdef.cpp.

5257{
5258 return m_memSpec.isProtectedGettable();
5259}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5271 of file memberdef.cpp.

5272{
5273 return m_memSpec.isProtectedSettable();
5274}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5550 of file memberdef.cpp.

5551{
5552 return m_proto;
5553}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5453 of file memberdef.cpp.

5454{
5455 return m_memSpec.isPublished();
5456}

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5286 of file memberdef.cpp.

5287{
5288 return m_memSpec.isRaisable();
5289}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5291 of file memberdef.cpp.

5292{
5293 return m_memSpec.isReadable();
5294}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5418 of file memberdef.cpp.

5419{
5420 return m_memSpec.isReadonly();
5421}

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

6376{
6379}
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 1616 of file memberdef.cpp.

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

5212{
5213 return m_related == Relationship::Related;
5214}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6370 of file memberdef.cpp.

6371{
6372 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6373}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5281 of file memberdef.cpp.

5282{
5283 return m_memSpec.isRemovable();
5284}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5336 of file memberdef.cpp.

5337{
5338 return m_memSpec.isRequired();
5339}

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5356 of file memberdef.cpp.

5357{
5358 return m_memSpec.isRetain();
5359}

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5311 of file memberdef.cpp.

5312{
5313 return m_memSpec.isSealed();
5314}

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5165 of file memberdef.cpp.

5166{
5167 return m_mtype==MemberType::Sequence;
5168}

References m_mtype.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5261 of file memberdef.cpp.

5262{
5263 return m_memSpec.isSettable();
5264}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5135 of file memberdef.cpp.

5136{
5137 return m_mtype==MemberType::Signal;
5138}

References m_mtype.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5515 of file memberdef.cpp.

5516{
5517 return m_memSpec.isLocal();
5518}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5140 of file memberdef.cpp.

5141{
5142 return m_mtype==MemberType::Slot;
5143}

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

5367{
5368 return m_memSpec.isStrong();
5369}

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5376 of file memberdef.cpp.

5377{
5378 return m_mtype==MemberType::EnumValue &&
5379 m_enumScope &&
5381}
virtual bool isStrong() const =0

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

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5469 of file memberdef.cpp.

5470{
5471 return m_tspec;
5472}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5241 of file memberdef.cpp.

5242{
5243 return m_memSpec.isThreadLocal();
5244}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5433 of file memberdef.cpp.

5434{
5435 return m_memSpec.isTransient();
5436}

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5388 of file memberdef.cpp.

5389{
5390 return m_memSpec.isAlias();
5391}

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5160 of file memberdef.cpp.

5161{
5162 return m_mtype==MemberType::Typedef;
5163}

References m_mtype.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5699 of file memberdef.cpp.

5700{
5701 return m_isTypedefValCached;
5702}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5413 of file memberdef.cpp.

5414{
5415 return m_memSpec.isProperty();
5416}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5383 of file memberdef.cpp.

5384{
5385 return m_memSpec.isUnretained();
5386}

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5145 of file memberdef.cpp.

5146{
5147 return m_mtype==MemberType::Variable;
5148}

References m_mtype.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5361 of file memberdef.cpp.

5362{
5363 return m_memSpec.isWeak();
5364}

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5296 of file memberdef.cpp.

5297{
5298 return m_memSpec.isWritable();
5299}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5510 of file memberdef.cpp.

5511{
5512 return m_livesInsideEnum;
5513}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5854 of file memberdef.cpp.

5855{
5856 m_related = Relationship::Foreign;
5858}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5930 of file memberdef.cpp.

5931{
5932 m_implOnly=true;
5933}

References m_implOnly.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5848 of file memberdef.cpp.

5849{
5850 m_related = Relationship::Related;
5852}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5725 of file memberdef.cpp.

5726{
5727 return m_memDec;
5728}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5720 of file memberdef.cpp.

5721{
5722 return m_memDef;
5723}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5130 of file memberdef.cpp.

5131{
5132 return m_mtype;
5133}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

DString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4062 of file memberdef.cpp.

4063{
4064 if (m_mtype == MemberType::Define)
4065 {
4066 return "macro definition";
4067 }
4068 else if (m_mtype == MemberType::Enumeration)
4069 {
4070 return "enumeration";
4071 }
4072 return to_string_lower(m_mtype);
4073}

References m_mtype.

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5798 of file memberdef.cpp.

5799{
5800 m_memSpec.merge(s);
5801}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4854 of file memberdef.cpp.

4855{
4856 m_defArgList = *al;
4857}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4859 of file memberdef.cpp.

4860{
4861 m_declArgList = *al;
4862}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1561 of file memberdef.cpp.

1562{
1563 setOuterScope(scope);
1565 {
1566 m_classDef = toClassDef(scope);
1567 }
1568 else if (scope->definitionType()==Definition::TypeFile)
1569 {
1570 m_fileDef = toFileDef(scope);
1571 }
1572 else if (scope->definitionType()==Definition::TypeModule)
1573 {
1574 m_moduleDef = toModuleDef(scope);
1575 }
1576 else if (scope->definitionType()==Definition::TypeNamespace)
1577 {
1578 m_nspace = toNamespaceDef(scope);
1579 }
1582}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1973
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 6081 of file memberdef.cpp.

6082{
6083 return m_numberOfFlowKW;
6084}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 4968 of file memberdef.cpp.

4969{
4970 DString qm;
4971 if (showStatic)
4972 {
4973 if (isStatic()) qm="+ "; else qm="- ";
4974 }
4975 qm+=name();
4976 if (!localLink) // link to method of same class
4977 {
4978 qm+=" (";
4979 qm+=getClassDef()->name();
4980 qm+=")";
4981 }
4982 return qm;
4983}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4887 of file memberdef.cpp.

4888{
4890 if (e) Doxygen::parseSourcesNeeded = true;
4891}
static bool parseSourcesNeeded
Definition doxygen.h:116

References m_hasCallerGraph, and Doxygen::parseSourcesNeeded.

◆ overrideCallGraph()

void MemberDefImpl::overrideCallGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4881 of file memberdef.cpp.

4882{
4884 if (e) Doxygen::parseSourcesNeeded = true;
4885}

References m_hasCallGraph, and Doxygen::parseSourcesNeeded.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4905 of file memberdef.cpp.

4906{
4908}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4910 of file memberdef.cpp.

4911{
4913}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4893 of file memberdef.cpp.

4894{
4896 if (e) Doxygen::parseSourcesNeeded = true;
4897}

References m_hasReferencedByRelation, and Doxygen::parseSourcesNeeded.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4899 of file memberdef.cpp.

4900{
4902 if (e) Doxygen::parseSourcesNeeded = true;
4903}

References m_hasReferencesRelation, and Doxygen::parseSourcesNeeded.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5125 of file memberdef.cpp.

5126{
5127 return m_prot;
5128}

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

4934{
4935 if (isObjCMethod())
4936 {
4937 DString qm;
4938 if (isStatic()) qm="+"; else qm="-";
4939 qm+="[";
4940 qm+=getClassDef()->name()+" ";
4941 qm+=name();
4942 qm+="]";
4943 return qm;
4944 }
4945 else if (m_enumScope && m_enumScope->isStrong())
4946 {
4947 return m_enumScope->qualifiedName()+
4949 localName();
4950 }
4951 else
4952 {
4954 }
4955}
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 6405 of file memberdef.cpp.

6406{
6407 return m_redefineCount;
6408}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1611 of file memberdef.cpp.

1612{
1613 return m_redefinedBy;
1614}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1606 of file memberdef.cpp.

1607{
1608 return m_redefines;
1609}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5485 of file memberdef.cpp.

5486{
5487 return m_relatedAlso;
5488}

References m_relatedAlso.

◆ requiresClause()

DString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6006 of file memberdef.cpp.

6007{
6008 return m_requiresClause;
6009}

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

5566{
5567 ArgumentList &decAl = m_declArgList;
5568 ArgumentList &defAl = m_defArgList;
5569 const ArgumentList &decAlSrc = md->declArgumentList();
5570 const ArgumentList &defAlSrc = md->argumentList();
5571 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5572 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5573 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5574 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5575 {
5576 Argument &decA = *decIt;
5577 Argument &defA = *defIt;
5578 const Argument &decAS = *decSrc;
5579 const Argument &defAS = *defSrc;
5580 if (decA.name.empty())
5581 {
5582 if (!defA.name.empty())
5583 {
5584 decA.name = defA.name;
5585 }
5586 else if (!decAS.name.empty())
5587 {
5588 decA.name = decAS.name;
5589 }
5590 else if (!defAS.name.empty())
5591 {
5592 decA.name = defAS.name;
5593 }
5594 }
5595 if (defA.name.empty())
5596 {
5597 if (!decA.name.empty())
5598 {
5599 defA.name = decA.name;
5600 }
5601 else if (!decAS.name.empty())
5602 {
5603 defA.name = decAS.name;
5604 }
5605 else if (!defAS.name.empty())
5606 {
5607 defA.name = defAS.name;
5608 }
5609 }
5610 }
5611}

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

4332{
4333 DString memAnchor = name();
4334 if (!m_args.empty()) memAnchor+=m_args;
4335 if (m_memSpec.isAlias()) // this is for backward compatibility
4336 {
4337 memAnchor.prepend(" = "+m_initializer);
4338 }
4339 memAnchor.prepend(definition()); // actually the method name is now included
4340 // twice, which is silly, but we keep it this way for backward
4341 // compatibility.
4342
4343 // include number of template arguments as well,
4344 // to distinguish between two template
4345 // specializations that only differ in the template parameters.
4347 {
4348 char buf[20];
4349 snprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4350 buf[19]='\0';
4351 memAnchor.prepend(buf);
4352 }
4353 if (!m_requiresClause.empty())
4354 {
4355 memAnchor+=" "+m_requiresClause;
4356 }
4357 if (m_redefineCount>0)
4358 {
4359 char buf[20];
4360 snprintf(buf,20,":%d",m_redefineCount);
4361 buf[19]='\0';
4362 memAnchor.append(buf);
4363 }
4364
4365 // convert to md5 hash
4366 m_anc = "a"+md5str(memAnchor.view());
4367}
size_t size() const
Definition arguments.h:101
std::string_view view() const
Definition dstring.h:162
DString & append(char c)
Definition dstring.h:489
DString md5str(const std::string_view &str)
Definition md5hash.h:33

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

◆ setAnonymousEnumType()

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

Implements MemberDefMutable.

Definition at line 5887 of file memberdef.cpp.

5888{
5889 m_annEnumType = md;
5890}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5865 of file memberdef.cpp.

5866{
5867 m_args = as;
5868}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5820 of file memberdef.cpp.

5821{
5822 m_bitfields = DString(s).simplifyWhiteSpace();
5823}
DString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple internal white...
Definition dstring.cpp:127

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

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

5977{
5978 m_category = def;
5979}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 5986 of file memberdef.cpp.

5987{
5988 m_categoryRelation = md;
5989}

References m_categoryRelation.

◆ setClassDefOfAnonymousType()

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

Implements MemberDefMutable.

Definition at line 1998 of file memberdef.cpp.

1999{
2000 m_anonymousType = cd;
2001}

References m_anonymousType.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5918 of file memberdef.cpp.

5919{
5920 m_declFileName = df;
5921 m_declLine = line;
5922 m_declColumn = column;
5923}

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

5765{
5766 m_def=d;
5767}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1938 of file memberdef.cpp.

1939{
1940 m_defTmpArgLists = lists;
1941}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5946 of file memberdef.cpp.

5947{
5949}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1892 of file memberdef.cpp.

1893{
1894 m_docTransferDone = true;
1895}

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

1881{
1884}
virtual int docLine() const =0
virtual DString docFile() 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:75

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

5883{
5884 m_docEnumValues=value;
5885}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 5991 of file memberdef.cpp.

5992{
5993 m_enumBaseType = type;
5994}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5875 of file memberdef.cpp.

5876{
5877 m_classDef = cd;
5880}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4383 of file memberdef.cpp.

4384{
4385 m_enumScope=md;
4387 if (md->getGroupDef())
4388 {
4389 m_group = md->getGroupDef();
4390 m_grouppri = md->getGroupPri();
4395 }
4396}
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,
size_t column )
overridevirtual

Implements MemberDefMutable.

Definition at line 5905 of file memberdef.cpp.

5906{
5907 m_explExt=b;
5908 if (b)
5909 {
5910 setDeclFile(df,line,column);
5911 }
5912 else
5913 {
5914 setDefFile(df,line,column);
5915 }
5916}
void setDefFile(const DString &df, int defLine, size_t defColumn) override
void setDeclFile(const DString &df, int line, size_t column) override

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

◆ setExplicitInherited()

void MemberDefImpl::setExplicitInherited ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 1897 of file memberdef.cpp.

1898{
1900}

References m_explicitInherited.

◆ setFileDef()

void MemberDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5769 of file memberdef.cpp.

5770{
5771 m_fileDef=fd;
5775}

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

5942{
5944}

References m_formalTemplateArguments.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 5951 of file memberdef.cpp.

5952{
5953 m_groupAlias = md;
5954}

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

4372{
4373 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4374 m_group=gd;
4375 m_grouppri=pri;
4376 m_groupFileName=fileName;
4377 m_groupStartLine=startLine;
4378 m_groupHasDocs=hasDocs;
4379 m_groupMember=member;
4381}

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

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

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

5861{
5862 m_docProvider = md;
5863}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4477 of file memberdef.cpp.

4478{
4479 size_t indent=0;
4481 int l=static_cast<int>(m_initializer.length());
4482 int p=l-1;
4483 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4487
4488 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4489}
int contains(char c, bool cs=true) const
Definition dstring.cpp:85
const DString & initializer() const override
DString detab(const DString &s, size_t &refIndent)
Definition util.cpp:5179
void stripIndentationVerbatim(DString &doc, size_t indentationLevel, bool skipFirstLine)
Definition util.cpp:4772

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

5826{
5827 if (lines!=-1)
5828 {
5829 m_userInitLines=lines;
5830 }
5831}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5966 of file memberdef.cpp.

5967{
5968 m_memDec=md;
5969}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 5961 of file memberdef.cpp.

5962{
5963 m_memDef=md;
5964}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4317 of file memberdef.cpp.

4318{
4319 m_memberGroup = grp;
4320}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 5925 of file memberdef.cpp.

5926{
5927 m_grpId=id;
5928}
virtual DString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5788 of file memberdef.cpp.

5789{
5790 m_memSpec=s;
5791}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5758 of file memberdef.cpp.

5759{
5760 m_mtype=t;
5762}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5777 of file memberdef.cpp.

5778{
5779 m_moduleDef=mod;
5780}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4406 of file memberdef.cpp.

4407{
4408 m_nspace=nd;
4409 setOuterScope(nd);
4410}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5782 of file memberdef.cpp.

5783{
5784 m_prot=p;
5786}

References m_isLinkableCached, and m_prot.

◆ setPrototype()

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

Implements MemberDefMutable.

Definition at line 5892 of file memberdef.cpp.

5893{
5894 m_proto=p;
5895 if (p)
5896 {
5897 setDeclFile(df,line,column);
5898 }
5899 else
5900 {
5901 setDefFile(df,line,column);
5902 }
5903}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5833 of file memberdef.cpp.

5834{
5835 m_read=r;
5836}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6410 of file memberdef.cpp.

6411{
6412 m_redefineCount=count;
6413}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1585 of file memberdef.cpp.

1586{
1587 m_redefines = md;
1588}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5870 of file memberdef.cpp.

5871{
5872 m_relatedAlso=cd;
5873}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6001 of file memberdef.cpp.

6002{
6003 m_requiresClause = req;
6004}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4549 of file memberdef.cpp.

4550{
4551 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4552 m_sectionMap.emplace(container,sl);
4553}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 4957 of file memberdef.cpp.

4958{
4959 if (ti)
4960 {
4961 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
4962 m_anc=ti->anchor;
4963 setReference(ti->tagName);
4965 }
4966}
void setReference(const DString &r) override
DString stripExtension(const DString &fName)
Definition util.cpp:3955

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

5936{
5939}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5843 of file memberdef.cpp.

5844{
5845 m_tspec=b;
5846}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4869 of file memberdef.cpp.

4870{
4871 m_type = t;
4872}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4864 of file memberdef.cpp.

4865{
4866 m_typeConstraints = al;
4867}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5793 of file memberdef.cpp.

5794{
5795 m_vhdlSpec=s;
5796}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5838 of file memberdef.cpp.

5839{
5840 m_write=w;
5841}

References m_write.

◆ sourceRefName()

DString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1651 of file memberdef.cpp.

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

5614{
5615 return m_tArgList;
5616}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5689 of file memberdef.cpp.

5690{
5691 return m_templateMaster;
5692}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6337 of file memberdef.cpp.

6338{
6339 return m_typeConstraints;
6340}

References m_typeConstraints.

◆ typeString()

DString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5000 of file memberdef.cpp.

5001{
5002 return m_type;
5003}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4555 of file memberdef.cpp.

4556{
4557 if (count>25)
4558 {
4560 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4561 return Specifier::Normal;
4562 }
4563 Specifier v = m_virt;
4564 const MemberDef *rmd = reimplements();
4565 while (rmd && v==Specifier::Normal)
4566 {
4567 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4568 rmd = rmd->reimplements();
4569 }
4570 return v;
4571}
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 4147 of file memberdef.cpp.

4148{
4149 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4150 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4151 return (!isAnonymous() &&
4152 (!hideUndocMembers || hasDocumentation()) &&
4153 (!isStatic() || extractStatic) &&
4154 isLinkable()
4155 );
4156}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4075 of file memberdef.cpp.

4076{
4077 /*
4078 * Removed bug_303020:
4079 * if (m_memberGroup) return;
4080 */
4081 const ClassDef *cd = getClassDef();
4082 const NamespaceDef *nd = getNamespaceDef();
4083 const FileDef *fd = getFileDef();
4084 const GroupDef *gd = getGroupDef();
4085 const Definition *d=nullptr;
4086 DString t;
4087 if (cd)
4088 {
4089 t=cd->compoundTypeString();
4090 d=cd;
4091 }
4092 else if (nd)
4093 {
4094 t=nd->compoundTypeString();
4095 d=nd;
4096 }
4097 else if (gd)
4098 {
4099 t="group";
4100 d=gd;
4101 }
4102 else
4103 {
4104 t="file";
4105 d=fd;
4106 }
4107 bool extractAll = Config_getBool(EXTRACT_ALL);
4108
4109 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4110 // qPrint(name()),
4111 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4112 if ((!hasUserDocumentation() && !extractAll) &&
4113 !isFriendClass() &&
4114 name().find('@')==DString::npos && d && d->name().find('@')==DString::npos &&
4117 !isReference() && !isDeleted()
4118 )
4119 {
4120 SrcLangExt lang = getLanguage();
4121 DString sep = getLanguageSpecificSeparator(lang,true);
4122 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4124 substitute(d->name(),"::",sep));
4125 }
4126 else if (!hasDetailedDescription())
4127 {
4129 }
4130
4131 // if it is an enum, we check that its members are documented
4132 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4133 {
4134 for (const auto &fmd : enumFieldList())
4135 {
4136 if (!fmd->isLinkableInProject())
4137 {
4138 SrcLangExt lang = getLanguage();
4139 DString sep = getLanguageSpecificSeparator(lang,true);
4140 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4141 qualifiedName(),sep,fmd->name());
4142 }
4143 }
4144 }
4145}
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 4237 of file memberdef.cpp.

4238{
4239 DString returnType = typeString();
4240 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4241 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=DString::npos;
4242
4243 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4244 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4245 {
4246 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4247 if (!defArgList.trailingReturnType().empty())
4248 {
4249 DString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4250 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4251 }
4252 }
4253 if (!Config_getBool(EXTRACT_ALL) &&
4254 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4255 Config_getBool(WARN_NO_PARAMDOC) &&
4256 isFunction() &&
4257 !isDeleted() &&
4258 !isReference() &&
4260 {
4262 {
4264 "parameters of member {} are not documented",
4265 qualifiedName());
4266 }
4268 hasDocumentation() && !returnType.empty() &&
4269 !( // not one of the cases where nothing is returned
4270 isVoidReturn || // void return type
4271 isFortranSubroutine || // fortran subroutine
4272 isConstructor() || // a constructor
4273 isDestructor() || // or a destructor
4274 isFriend() // or a friend
4275 )
4276 )
4277 {
4279 "return type of member {} is not documented",
4280 qualifiedName());
4281 }
4282 }
4283 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4285 (isVoidReturn || // void return type
4286 isFortranSubroutine || // fortran subroutine
4287 isConstructor() || // a constructor
4288 isDestructor())) // or destructor
4289 {
4290 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4291 qualifiedName());
4292 }
4293}
DString trailingReturnType() const
Definition arguments.h:115
bool endsWith(const char *s) const
Definition dstring.h:617
static bool suppressDocWarnings
Definition doxygen.h:123
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 2202 of file memberdef.cpp.

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

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

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(), 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 4730 of file memberdef.cpp.

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

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

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

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

3954{
3955 Definition *scope = getOuterScope();
3956 DString doxyName = name();
3957 DString doxyArgs = argsString();
3958 DString memAnchor = anchor();
3959 DString cfname = getOutputFileBase();
3960 DString cname;
3961 if (scope) cname = scope->name();
3962 if (doxyName.at(0)=='@')
3963 {
3964 doxyName="__unnamed__";
3965 }
3966
3967 LinkifyTextOptions options;
3968 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
3969
3970 if (container && container->definitionType()==Definition::TypeClass &&
3971 !(toClassDef(container))->isJavaEnum())
3972 {
3974 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
3975 ol.addLabel(cfname,memAnchor);
3976
3977 bool written=false;
3978 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
3979 if (annoClassDef)
3980 {
3981 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)"); // anonymous type marker(s) including scope
3982 reg::Match amatch;
3983 std::string stype = m_type.str();
3984 if (reg::search(stype,amatch,ar))
3985 {
3986 size_t ai = amatch.position();
3987 size_t al = amatch.length();
3988 ol.writeObjectLink(annoClassDef->getReference(),annoClassDef->getOutputFileBase(),
3989 annoClassDef->anchor(),m_type.left(ai)+m_type.mid(ai+al));
3990 written=true;
3991 }
3992 }
3993 if (!written)
3994 {
3995 DString ts;
3996 if (isFunctionPtr())
3997 {
3998 ts = m_type + m_args;
3999 }
4000 else
4001 {
4002 ts = fieldType();
4003 }
4004 linkifyText(TextGeneratorOLImpl(ol),ts,options);
4005 }
4006 ol.endDoxyAnchor(cfname,memAnchor);
4008 }
4009
4011 ol.docify(doxyName);
4012 if (isVariable() && !argsString().empty() && !isObjCMethod() && !isFunctionPtr())
4013 {
4014 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
4015 }
4016 if (!m_bitfields.empty()) // add bitfields
4017 {
4018 linkifyText(TextGeneratorOLImpl(ol),m_bitfields,options);
4019 }
4020 if (hasOneLineInitializer() && !isDefine())
4021 {
4022 ol.writeString(" ");
4023 linkifyText(TextGeneratorOLImpl(ol),m_initializer.simplifyWhiteSpace(),options);
4024 }
4026
4028
4029 DString brief = briefDescription();
4030 DString detailed = documentation();
4031
4032 /* write brief description */
4033 if (!brief.empty())
4034 {
4036 briefLine(),
4037 getOuterScope()?getOuterScope():container,this,
4038 brief,
4039 DocOptions()
4040 .setSingleLine(true));
4041 }
4042
4043 /* write detailed description */
4044 if (!detailed.empty())
4045 {
4046 if (!brief.empty())
4047 {
4049 ol.lineBreak();
4051 }
4052 ol.generateDoc(docFile(),
4053 docLine(),
4054 getOuterScope()?getOuterScope():container,this,
4055 detailed+"\n",
4056 DocOptions());
4057 }
4058
4059 ol.endInlineMemberDoc();
4060}
DString fieldType() const override
bool isFunctionPtr() const override
void endInlineMemberType()
Definition outputlist.h:724
void startInlineMemberType()
Definition outputlist.h:722
void startInlineMemberDoc()
Definition outputlist.h:730
void endInlineMemberDoc()
Definition outputlist.h:732
void startInlineMemberName()
Definition outputlist.h:726
void endInlineMemberName()
Definition outputlist.h:728

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(), 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 4573 of file memberdef.cpp.

4574{
4575 if (!isLinkableInProject()) return;
4576 if (!showNamespaceMembers && getNamespaceDef()) return;
4577 tagFile << " <member kind=\"";
4578 if (m_mtype == MemberType::Enumeration)
4579 {
4580 tagFile << "enumeration";
4581 }
4582 else
4583 {
4584 tagFile << to_string_lower(m_mtype);
4585 }
4586 if (m_prot!=Protection::Public)
4587 {
4588 tagFile << "\" protection=\"";
4589 if (m_prot==Protection::Protected) tagFile << "protected";
4590 else if (m_prot==Protection::Package) tagFile << "package";
4591 else /* Private */ tagFile << "private";
4592 }
4593 if (m_virt!=Specifier::Normal)
4594 {
4595 tagFile << "\" virtualness=\"";
4596 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4597 else /* Pure */ tagFile << "pure";
4598 }
4599 if (isStatic())
4600 {
4601 tagFile << "\" static=\"yes";
4602 }
4603 tagFile << "\">\n";
4604 if (typeString()!=DString("@"))
4605 {
4606 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4607 }
4608 DString fn = getOutputFileBase();
4610 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4611 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4612 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4613 DString idStr = id();
4614 if (!idStr.empty())
4615 {
4616 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4617 }
4618 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4619 if (isStrong())
4620 {
4621 for (const auto &fmd : m_enumFields)
4622 {
4623 if (!fmd->isReference())
4624 {
4625 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4626 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4627 idStr = fmd->id();
4628 if (!idStr.empty())
4629 {
4630 tagFile << "\" clangid=\"" << convertToXML(idStr);
4631 }
4632 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4633 }
4634 }
4635 }
4636 writeDocAnchorsToTagFile(tagFile);
4637 tagFile << " </member>\n";
4638}
void writeDocAnchorsToTagFile(TextStream &fs) const override
void addHtmlExtensionIfMissing(DString &fName)
Definition util.cpp:3931
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
Definition util.cpp:3232

References addHtmlExtensionIfMissing(), anchor(), argsString(), convertToXML(), 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

size_t 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: