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
MemberDef * resolveAlias () override
const MemberDef * resolveAlias () const override
CodeSymbolType codeSymbolType () const override
std::unique_ptr< MemberDef > deepCopy () 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 DString & initializer () const override
int initializerLines () const override
TypeSpecifier getMemberSpecifiers () const override
VhdlSpecifier getVhdlSpecifiers () const override
const MemberList * getSectionList (const Definition *) const override
DString displayDefinition () const override
const ClassDef * getClassDef () const override
ClassDef * getClassDef () override
const FileDef * getFileDef () const override
FileDef * getFileDef () override
const NamespaceDef * getNamespaceDef () const override
NamespaceDef * getNamespaceDef () override
const GroupDef * getGroupDef () const override
GroupDef * getGroupDef () override
const ModuleDef * getModuleDef () 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 MemberDef * reimplements () const override
const MemberVector & reimplementedBy () const override
bool isReimplementedBy (const ClassDef *cd) const override
ClassDef * relatedAlso () const override
bool hasDocumentedEnumValues () const override
const MemberDef * getAnonymousEnumType () const override
bool isDocsForDefinition () const override
const MemberDef * getEnumScope () const override
const MemberVector & enumFieldList () const override
void setEnumBaseType (const DString &type) override
DString enumBaseType () const override
bool hasExamples () const override
const ExampleList & getExamples () const override
bool isPrototype () const override
const ArgumentList & argumentList () const override
const ArgumentList & declArgumentList () const override
const ArgumentList & templateArguments () const override
const ArgumentLists & definitionTemplateParameterLists () const override
std::optional< ArgumentList > formalTemplateArguments () const override
int getMemberGroupId () const override
MemberGroup * getMemberGroup () 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 MemberDef * templateMaster () const override
DString getScopeString () const override
const ClassDef * getClassDefOfAnonymousType () const override
bool isTypedefValCached () const override
const ClassDef * getCachedTypedefVal () const override
DString getCachedTypedefTemplSpec () const override
DString getCachedResolvedTypedef () const override
MemberDef * memberDefinition () const override
MemberDef * memberDeclaration () const override
const MemberDef * inheritsDocsFrom () const override
const MemberDef * getGroupAlias () const override
ClassDef * category () const override
const MemberDef * categoryRelation () const override
DString displayName (bool=true) const override
DString getDeclType () const override
StringVector getLabels (const Definition *container) const override
const ArgumentList & typeConstraints () 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< MemberDef > createTemplateInstanceMember (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
ClassDefMutable * getClassDefMutable () override
void setModuleDef (ModuleDef *mod) override
int redefineCount () const override
void setRedefineCount (int) override
void setClassDefOfAnonymousType (const ClassDef *cd) override
void setIncludeFile (FileDef *fd, const DString &incName, bool local, bool force) 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)
DefinitionMixin & operator= (const DefinitionMixin &other)
 ~DefinitionMixin () override=default
bool isAlias () const override
const DString & name () const override
bool isAnonymous () const override
const DString & localName () 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 FileDef * getBodyDef () const override
SrcLangExt getLanguage () const override
const GroupList & partOfGroups () const override
bool isLinkableViaGroup () const override
const RefItemVector & xrefListItems () const override
const RequirementRefs & requirementReferences () const override
const Definition * findInnerCompound (const DString &name) const override
Definition * getOuterScope () const override
const MemberVector & getReferencesMembers () const override
const MemberVector & getReferencedByMembers () const override
bool hasSections () const override
bool hasSources () const override
bool hasBriefDescription () const override
DString id () const override
const SectionRefs & getSectionRefs () 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
ClassDef * m_classDef = nullptr
FileDef * m_fileDef = nullptr
NamespaceDef * m_nspace = nullptr
ModuleDef * m_moduleDef = nullptr
const MemberDef * m_enumScope = nullptr
bool m_livesInsideEnum = false
const MemberDef * m_annEnumType = nullptr
MemberVector m_enumFields
MemberDef * m_redefines = nullptr
MemberVector m_redefinedBy
MemberDef * m_memDef = nullptr
MemberDef * m_memDec = nullptr
ClassDef * m_relatedAlso = nullptr
std::unique_ptr< IncludeInfo > m_incInfo
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 MemberDef * m_templateMaster = nullptr
std::optional< ArgumentList > m_formalTemplateArguments
ArgumentLists m_defTmpArgLists
DString m_metaData
const ClassDef * m_anonymousType = nullptr
std::map< const Definition *, const MemberList * > m_sectionMap
const MemberDef * m_groupAlias = nullptr
int m_grpId = 0
MemberGroup * m_memberGroup = nullptr
GroupDef * m_group = nullptr
Grouping::GroupPri_t m_grouppri = Grouping::GROUPING_AUTO_DEF
DString m_groupFileName
int m_groupStartLine = 0
MemberDef * m_groupMember = nullptr
bool m_isTypedefValCached = false
const ClassDef * m_cachedTypedefValue = nullptr
DString m_cachedTypedefTemplSpec
DString m_cachedResolvedType
const MemberDef * m_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
ClassDef * m_category = nullptr
const MemberDef * m_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 1455 of file memberdef.cpp.

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

4680{
4681 m_isConstructorCached=1; // false
4682 if (getClassDef())
4683 {
4684 if (m_isDMember) // for D
4685 {
4686 m_isConstructorCached = name()=="this" ? 2 : 1;
4687 return;
4688 }
4689 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4690 {
4691 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4692 return;
4693 }
4694 else if (name()=="__init__" &&
4695 getLanguage()==SrcLangExt::Python) // for Python
4696 {
4697 m_isConstructorCached = 2; // true
4698 return;
4699 }
4700 else // for other languages
4701 {
4702 DString locName = getClassDef()->localName();
4703 size_t i=locName.find('<');
4704 if (i==DString::npos) // not a template class
4705 {
4706 m_isConstructorCached = name()==locName ? 2 : 1;
4707 }
4708 else
4709 {
4710 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4711 }
4712 return;
4713 }
4714 }
4715}
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 4729 of file memberdef.cpp.

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

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

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

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

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

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

2200{
2201 return !m_bitfields.empty() && name().startsWith("__pad"); // anonymous bitfield
2202}
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 2910 of file memberdef.cpp.

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

2889{
2891 {
2892 DotCallGraph callerGraph(this, true);
2893 if (callerGraph.isTooBig())
2894 {
2895 warn_uncond("Caller graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
2896 qualifiedName(), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
2897 }
2898 else if (!callerGraph.isTrivial())
2899 {
2900 msg("Generating caller graph for function {}\n",qualifiedName());
2902 ol.startCallGraph();
2904 ol.endCallGraph(callerGraph);
2905 ol.enableAll();
2906 }
2907 }
2908}
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 2865 of file memberdef.cpp.

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

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

3135{
3136 // For enum, we also write the documented enum values
3137 if (isEnumerate())
3138 {
3139 bool first=true;
3140 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3141 bool hasInits = false;
3142 if (hasEnumValues())
3143 {
3144 for (const auto &fmd : enumFieldList())
3145 {
3146 if (fmd->isLinkable())
3147 {
3148 if (!fmd->initializer().empty())
3149 {
3150 hasInits = true;
3151 break;
3152 }
3153 }
3154 }
3155 }
3156 for (const auto &fmd : enumFieldList())
3157 {
3158 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3159 if (fmd->isLinkable())
3160 {
3161 if (first)
3162 {
3164 first=false;
3165 }
3166
3167 ol.startDescTableRow();
3168 ol.addIndexItem(fmd->name(),ciname);
3169 ol.addIndexItem(ciname,fmd->name());
3170
3172 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3173 ol.addLabel(cfname,fmd->anchor());
3174 ol.docify(fmd->name());
3176 ol.writeString(" ");
3177 ol.enableAll();
3178 ol.endDoxyAnchor(cfname,fmd->anchor());
3179 ol.endDescTableTitle();
3180 if (hasInits)
3181 {
3182 ol.startDescTableInit();
3183 if (!fmd->initializer().empty())
3184 {
3185 DString initStr = fmd->initializer().stripWhiteSpace();
3186 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3188 ol.writeString("(");
3189 ol.enableAll();
3190 ol.docify(initStr);
3192 ol.writeString(")");
3193 ol.enableAll();
3194 }
3195 ol.endDescTableInit();
3196 }
3197 ol.startDescTableData();
3198
3199 bool hasBrief = !fmd->briefDescription().empty();
3200 bool hasDetails = !fmd->documentation().empty();
3201
3202 if (hasBrief)
3203 {
3204 ol.generateDoc(fmd->briefFile(),
3205 fmd->briefLine(),
3206 getOuterScope()?getOuterScope():container,
3207 fmd,
3208 fmd->briefDescription(),
3209 DocOptions()
3210 .setIndexWords(true));
3211 }
3212 if (hasDetails)
3213 {
3214 ol.generateDoc(fmd->docFile(),
3215 fmd->docLine(),
3216 getOuterScope()?getOuterScope():container,
3217 fmd,
3218 fmd->documentation()+"\n",
3219 DocOptions()
3220 .setIndexWords(true));
3221 }
3222 ol.endDescTableData();
3223 ol.endDescTableRow();
3224 }
3225 }
3226 if (!first)
3227 {
3228 ol.endDescTable();
3229 }
3230 }
3231}
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 3111 of file memberdef.cpp.

3112{
3113 // write the list of examples that use this member
3114 if (hasExamples())
3115 {
3116 ol.startExamples();
3117 ol.startDescForItem();
3119 ol.endDescForItem();
3120 ol.endExamples();
3121 }
3122}
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 3319 of file memberdef.cpp.

3320{
3321 SrcLangExt lang = getLanguage();
3322 bool written = false;
3323 if (m_incInfo) // explicit \headerfile command
3324 {
3325 DString nm=m_incInfo->includeName.empty() ?
3326 (m_incInfo->fileDef ?
3327 m_incInfo->fileDef->docName() : DString()
3328 ) : m_incInfo->includeName;
3329 if (!nm.empty())
3330 {
3331 ol.startParagraph();
3332 ol.startTypewriter();
3333 ol.docify(::includeStatement(lang,m_incInfo->kind));
3334 ol.docify(::includeOpen(lang,m_incInfo->kind));
3335 ol.pushGeneratorState();
3337 ol.docify(nm);
3340 if (m_incInfo->fileDef)
3341 {
3342 ol.writeObjectLink(DString(),m_incInfo->fileDef->includeName(),DString(),nm);
3343 }
3344 else
3345 {
3346 ol.docify(nm);
3347 }
3348 ol.popGeneratorState();
3349 ol.docify(::includeClose(lang,m_incInfo->kind));
3350 ol.endTypewriter();
3351 ol.endParagraph();
3352 written = true;
3353 }
3354 }
3355 if (!written) // only write out the include file if this is not part of a class or file definition
3356 {
3357 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3358 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3359 const FileDef *fd = getFileDef();
3360 DString nm;
3361 if (inGroup && fd && showGroupedMembInc)
3362 {
3363 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3364 {
3366 }
3367 else
3368 {
3369 nm = fd->name();
3370 }
3371 }
3372 if (!nm.empty())
3373 {
3374 ol.startParagraph();
3375 ol.startTypewriter();
3376 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3377 if (isIDLorJava)
3378 {
3379 ol.docify("import ");
3380 }
3381 else
3382 {
3383 ol.docify("#include ");
3384 }
3385
3386 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3387
3388 if (fd && fd->isLinkable())
3389 {
3390 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3391 }
3392 else
3393 {
3394 ol.docify(nm);
3395 }
3396
3397 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3398
3399 ol.endTypewriter();
3400 ol.endParagraph();
3401 }
3402 }
3403}
virtual DString absFilePath() const =0
std::unique_ptr< IncludeInfo > m_incInfo
void enable(OutputType o)
void startTypewriter()
Definition outputlist.h:445
void pushGeneratorState()
void popGeneratorState()
void endTypewriter()
Definition outputlist.h:447
#define Config_getList(name)
Definition config.h:38
DString includeClose(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:82
DString includeOpen(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:69
DString includeStatement(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:52
SrcLangExt
Definition types.h:207
DString stripFromIncludePath(const DString &path)
Definition util.cpp:227

References FileDef::absFilePath(), Definition::anchor(), Config_getBool, Config_getList, OutputList::disable(), OutputList::disableAllBut(), OutputList::docify(), DString::empty(), OutputList::enable(), OutputList::endParagraph(), OutputList::endTypewriter(), getFileDef(), DefinitionMixin< MemberDefMutable >::getLanguage(), Definition::getOutputFileBase(), Definition::getReference(), Html, includeClose(), includeOpen(), includeStatement(), Definition::isLinkable(), m_incInfo, Definition::name(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), 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 3405 of file memberdef.cpp.

3406{
3407 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3408 ol.startBold();
3409 if (m_mtype==MemberType::Define)
3411 else
3413 ol.endBold();
3414 DString langCorrected = getDefFileExtension();
3416 if (srcLangExt == SrcLangExt::Lex)
3417 {
3418 langCorrected = ".doxygen_lex_c";
3419 srcLangExt = SrcLangExt::Cpp;
3420 }
3421 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3422 intf->resetCodeParserState();
3423 auto &codeOL = ol.codeGenerators();
3424 codeOL.startCodeFragment("DoxyCode");
3425 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3426 CodeParserOptions()
3428 .setInlineFragment(true)
3429 .setMemberDef(this)
3430 .setShowLineNumbers(false)
3431 .setSearchCtx(this)
3432 );
3433 codeOL.endCodeFragment("DoxyCode");
3434}
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 2999 of file memberdef.cpp.

3000{
3001 const MemberVector &bml=reimplementedBy();
3002 size_t count = _countReimplementedBy();
3003 if (count>0)
3004 {
3005 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3006 {
3007 size_t cnt=0;
3008 auto it = bml.begin();
3009 // find the entryIndex-th documented entry in the inheritance list.
3010 const MemberDef *bmd = nullptr;
3011 const ClassDef *bcd = nullptr;
3012 while (it!=bml.end())
3013 {
3014 bmd = *it;
3015 bcd = bmd->getClassDef();
3016 if ( bmd->isLinkable() && bcd->isLinkable())
3017 {
3018 if (cnt==entryIndex) break;
3019 cnt++;
3020 }
3021 ++it;
3022 }
3023
3024 if (bcd && bmd) // write link for marker
3025 {
3026 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3027 // bmd->anchor(),bcd->name());
3029 bmd->anchor(),bcd->displayName());
3030
3031 if (bmd->isLinkableInProject() )
3032 {
3033 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3034 }
3035 }
3036 };
3037
3038 DString reimplInLine;
3039 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3040 {
3041 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3042 }
3043 else
3044 {
3045 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3046 }
3047
3048 // write the list of classes that overwrite this member
3049 ol.startParagraph();
3050 writeMarkerList(ol,
3051 reimplInLine.str(),
3052 count,
3053 replaceFunc);
3054 ol.endParagraph();
3055 }
3056}
@ 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 2924 of file memberdef.cpp.

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

2158{
2159 ol.docify("template<");
2160 LinkifyTextOptions options;
2161 options.setScope(def).setFileScope(getFileDef()).setSelf(this);
2162 for (auto it = al.begin(); it!=al.end();)
2163 {
2164 Argument a = *it;
2165 linkifyText(TextGeneratorOLImpl(ol),a.type,options);
2166 if (!a.name.empty())
2167 {
2168 ol.docify(" ");
2169 ol.docify(a.name);
2170 }
2171 if (!a.defval.empty())
2172 {
2173 ol.docify(" = ");
2174 ol.docify(a.defval);
2175 }
2176 ++it;
2177 if (it!=al.end()) ol.docify(", ");
2178 }
2179 ol.docify("> ");
2180 if (writeReqClause && !m_requiresClause.empty())
2181 {
2182 ol.lineBreak();
2183 ol.docify("requires ");
2184 linkifyText(TextGeneratorOLImpl(ol), // out
2185 m_requiresClause, // text
2186 LinkifyTextOptions(options).setAutoBreak(true).setBreakThreshold(120));
2187 }
2188}
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 3124 of file memberdef.cpp.

3125{
3127 {
3129 }
3130}
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 1648 of file memberdef.cpp.

1649{
1650 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1651 return m_examples.inSort(Example(anchor,nameStr,file));
1652}
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 4530 of file memberdef.cpp.

4531{
4532 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4533 SrcLangExt lang = getLanguage();
4534 if (!isLinkableInProject()) return;
4535 DString memLabel;
4536 if (optimizeOutputForC)
4537 {
4538 memLabel=theTranslator->trGlobal(true,true);
4539 }
4540 else if (lang==SrcLangExt::Fortran)
4541 {
4542 memLabel=theTranslator->trSubprogram(true,true);
4543 }
4544 else
4545 {
4546 memLabel=theTranslator->trMember(true,true);
4547 }
4548 DString memName = name();
4549 Definition *pd=getOuterScope();
4550 DString pdName = pd->definitionType()==Definition::TypeClass ?
4551 (toClassDef(pd))->displayName() : pd->name();
4552 DString sep = getLanguageSpecificSeparator(lang,true);
4553 DString memArgs;
4554 if (!isRelated())
4555 {
4556 if (isObjCMethod())
4557 {
4558 memName = "[" + pd->name() + " " + name() + "]";
4559 }
4560 else
4561 {
4562 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4563 memArgs = argsString();
4564 }
4565 }
4566 const RefItemVector &xrefItems = xrefListItems();
4567 if (sep!="::")
4568 {
4569 memName = substitute(memName,"::",sep);
4570 }
4571 addRefItem(xrefItems,
4572 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4573 memLabel,
4574 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4575}
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:136
std::vector< RefItem * > RefItemVector
Definition reflist.h:134
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 5847 of file memberdef.cpp.

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

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4577 of file memberdef.cpp.

4578{
4580}
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 1786 of file memberdef.cpp.

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

5595{
5596 return m_defArgList;
5597}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

DString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5054 of file memberdef.cpp.

5055{
5056 return m_bitfields;
5057}

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

6341{
6342 if (m_templateMaster)
6343 {
6344 return m_templateMaster->briefDescription(abbr);
6345 }
6346 else
6347 {
6349 }
6350}
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 6050 of file memberdef.cpp.

6051{
6054 m_cachedTypedefTemplSpec=templSpec;
6055 m_cachedResolvedType=resolvedType;
6056 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6057}
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 6010 of file memberdef.cpp.

6011{
6012 return m_category;
6013}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6020 of file memberdef.cpp.

6021{
6022 return m_categoryRelation;
6023}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6427 of file memberdef.cpp.

6428{
6429 switch (memberType())
6430 {
6431 case MemberType::Define: return CodeSymbolType::Define;
6432 case MemberType::Function: return CodeSymbolType::Function;
6433 case MemberType::Variable: return CodeSymbolType::Variable;
6434 case MemberType::Typedef: return CodeSymbolType::Typedef;
6435 case MemberType::Enumeration: return CodeSymbolType::Enumeration;
6436 case MemberType::EnumValue: return CodeSymbolType::EnumValue;
6437 case MemberType::Signal: return CodeSymbolType::Signal;
6438 case MemberType::Slot: return CodeSymbolType::Slot;
6439 case MemberType::Friend: return CodeSymbolType::Friend;
6440 case MemberType::DCOP: return CodeSymbolType::DCOP;
6441 case MemberType::Property: return CodeSymbolType::Property;
6442 case MemberType::Event: return CodeSymbolType::Event;
6443 case MemberType::Interface: return CodeSymbolType::Interface;
6444 case MemberType::Service: return CodeSymbolType::Service;
6445 case MemberType::Sequence: return CodeSymbolType::Sequence;
6446 case MemberType::Dictionary: return CodeSymbolType::Dictionary;
6447 }
6449}
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 6059 of file memberdef.cpp.

6060{
6061 {
6062 const ArgumentList &srcAl = bmd->argumentList();
6063 ArgumentList &dstAl = m_defArgList;
6064 auto srcIt = srcAl.begin();
6065 auto dstIt = dstAl.begin();
6066 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6067 {
6068 Argument &argDst = *dstIt;
6069 const Argument &argSrc = *srcIt;
6070 if (!argSrc.name.empty())
6071 {
6072 argDst.name = argSrc.name;
6073 }
6074 argDst.docs = argSrc.docs;
6075 ++srcIt;
6076 ++dstIt;
6077 }
6078 }
6079
6080 {
6081 const ArgumentList &srcAl = bmd->declArgumentList();
6082 ArgumentList &dstAl = m_declArgList;
6083 auto srcIt = srcAl.begin();
6084 auto dstIt = dstAl.begin();
6085
6086 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6087 {
6088 Argument &argDst = *dstIt;
6089 const Argument &argSrc = *srcIt;
6090 if (!argSrc.name.empty())
6091 {
6092 argDst.name = argSrc.name;
6093 }
6094 argDst.docs = argSrc.docs;
6095 ++srcIt;
6096 ++dstIt;
6097 }
6098 }
6099}
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 4451 of file memberdef.cpp.

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

5025{
5026 return m_decl;
5027}

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5599 of file memberdef.cpp.

5600{
5601 return m_declArgList;
5602}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1468 of file memberdef.cpp.

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

5030{
5031 return m_def;
5032}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5657 of file memberdef.cpp.

5658{
5659 return m_defTmpArgLists;
5660}

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

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

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

6128{
6129 return DefinitionMixin::name();
6130}

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

6353{
6354 if (m_templateMaster)
6355 {
6357 }
6358 else
6359 {
6361 }
6362}
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 6035 of file memberdef.cpp.

6036{
6037 return m_enumBaseType;
6038}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5579 of file memberdef.cpp.

5580{
5581 return m_enumFields;
5582}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

DString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5049 of file memberdef.cpp.

5050{
5051 return m_exception;
5052}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

DString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5034 of file memberdef.cpp.

5035{
5036 return m_extraTypeChars;
5037}

References m_extraTypeChars.

◆ fieldType()

DString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3985 of file memberdef.cpp.

3986{
3987 DString type = m_type;
3988 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
3989 return simplifyTypeForTable(type);
3990}
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 4913 of file memberdef.cpp.

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

5734{
5736}

References m_formalTemplateArguments.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5534 of file memberdef.cpp.

5535{
5536 return m_annEnumType;
5537}

References m_annEnumType.

Referenced by writeDeclaration(), and writeDocumentation().

◆ getCachedResolvedTypedef()

DString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5753 of file memberdef.cpp.

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

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

DString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5748 of file memberdef.cpp.

5749{
5751}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5743 of file memberdef.cpp.

5744{
5745 return m_cachedTypedefValue;
5746}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5089 of file memberdef.cpp.

5090{
5091 return m_classDef;
5092}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5094 of file memberdef.cpp.

5095{
5097}
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 2012 of file memberdef.cpp.

2013{
2014 return m_anonymousType;
2015}

References m_anonymousType.

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

◆ getDeclColumn()

size_t MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5789 of file memberdef.cpp.

5790{
5791 return m_declColumn;
5792}

References m_declColumn.

◆ getDeclFileName()

DString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5779 of file memberdef.cpp.

5780{
5781 return m_declFileName;
5782}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5784 of file memberdef.cpp.

5785{
5786 return m_declLine;
5787}

References m_declLine.

◆ getDeclType()

DString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2109 of file memberdef.cpp.

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

5545{
5546 return m_enumScope;
5547}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5584 of file memberdef.cpp.

5585{
5586 return m_examples;
5587}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5104 of file memberdef.cpp.

5105{
5106 return m_fileDef;
5107}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5774 of file memberdef.cpp.

5775{
5776 return m_groupAlias;
5777}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5134 of file memberdef.cpp.

5135{
5136 return m_group;
5137}

References m_group.

◆ getGroupFileName()

DString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5149 of file memberdef.cpp.

5150{
5151 return m_groupFileName;
5152}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5159 of file memberdef.cpp.

5160{
5161 return m_groupHasDocs;
5162}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5144 of file memberdef.cpp.

5145{
5146 return m_grouppri;
5147}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5154 of file memberdef.cpp.

5155{
5156 return m_groupStartLine;
5157}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2729 of file memberdef.cpp.

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

5668{
5669 return m_memberGroup;
5670}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5662 of file memberdef.cpp.

5663{
5664 return m_grpId;
5665}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5074 of file memberdef.cpp.

5075{
5076 return m_memSpec;
5077}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5139 of file memberdef.cpp.

5140{
5141 return m_moduleDef;
5142}

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

5115{
5116 return m_nspace;
5117}

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

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

5843{
5844 return m_qualifiers;
5845}

References m_qualifiers.

◆ getReadAccessor()

DString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5119 of file memberdef.cpp.

5120{
5121 return m_read;
5122}

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

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

4362{
4363 DString result;
4364 if (isStrong()) result=name();
4365 else if (getClassDef()) result=getClassDef()->displayName();
4366 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4367 return result;
4368}

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

4583{
4584 auto it = m_sectionMap.find(container);
4585 return it!=m_sectionMap.end() ? it->second : nullptr;
4586}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5079 of file memberdef.cpp.

5080{
5081 return m_vhdlSpec;
5082}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

DString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5124 of file memberdef.cpp.

5125{
5126 return m_write;
5127}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5690 of file memberdef.cpp.

5691{
5692 return m_hasCallerGraph;
5693}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5672 of file memberdef.cpp.

5673{
5674 return m_hasCallGraph;
5675}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2591 of file memberdef.cpp.

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

4349{
4351 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4352 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4353}
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 5529 of file memberdef.cpp.

5530{
5531 return m_docEnumValues;
5532}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5723 of file memberdef.cpp.

5724{
5725 return m_hasEnumValues;
5726}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1654 of file memberdef.cpp.

1655{
1656 return !m_examples.empty();
1657}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5718 of file memberdef.cpp.

5719{
5720 return m_hasInlineSource;
5721}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4505 of file memberdef.cpp.

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

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

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

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

5709{
5711}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5713 of file memberdef.cpp.

5714{
5716}

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

6365{
6366 if (m_templateMaster)
6367 {
6369 }
6370 else
6371 {
6373 }
6374}
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 6115 of file memberdef.cpp.

6116{
6118}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5769 of file memberdef.cpp.

5770{
5771 return m_docProvider;
5772}

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

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

5060{
5061 return m_initializer;
5062}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5064 of file memberdef.cpp.

5065{
5066 return m_initLines;
5067}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1643 of file memberdef.cpp.

1644{
1646}
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 1598 of file memberdef.cpp.

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

6110{
6113}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5995 of file memberdef.cpp.

5996{
5998}

References m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5365 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5315 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5390 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5447 of file memberdef.cpp.

5448{
5449 return m_memSpec.isAttribute();
5450}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5462 of file memberdef.cpp.

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

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

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

5514{
5515 return isFunction() ||
5516 isSlot() ||
5517 isSignal() ||
5518 isConstructor() ||
5519 isDestructor() ||
5520 isObjCMethod() ||
5521 isFriend();
5522}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5569 of file memberdef.cpp.

5570{
5571 return m_memSpec.isConstEval();
5572}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5564 of file memberdef.cpp.

5565{
5566 return m_memSpec.isConstExpr();
5567}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5574 of file memberdef.cpp.

5575{
5576 return m_memSpec.isConstInit();
5577}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5467 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4717 of file memberdef.cpp.

4718{
4719 if (m_isConstructorCached==0)
4720 {
4721 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4722 that->_computeIsConstructor();
4723 }
4725 return m_isConstructorCached==2;
4726
4727}
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 5385 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4966 of file memberdef.cpp.

4967{
4968 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return true;
4969 return false;
4970}
bool isProperty() const override

References getClassDef(), and isProperty().

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5235 of file memberdef.cpp.

5236{
5237 return m_mtype==MemberType::DCOP;
5238}

References m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5432 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5225 of file memberdef.cpp.

5226{
5227 return m_mtype==MemberType::Define;
5228}

References m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5437 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4343 of file memberdef.cpp.

4344{
4345 return m_defArgList.isDeleted();
4346}
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 4758 of file memberdef.cpp.

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

2712{
2713 bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
2714 bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
2715 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
2716 bool groupFilter = getGroupDef()==nullptr || container==MemberListContainer::Group || separateMemPages;
2717 bool fileFilter = getNamespaceDef()==nullptr || !getNamespaceDef()->isLinkable() || container!=MemberListContainer::File;
2718 bool simpleFilter = (hasBriefDescription() || !hideUndocMembers) && inlineSimpleStructs &&
2719 getClassDef()!=nullptr && getClassDef()->isSimple();
2720
2721 bool visible = hasDetailedDescription() && groupFilter && fileFilter &&
2722 !isReference();
2723 bool result = visible || simpleFilter;
2724 //printf("%s::isDetailedSectionVisible: %d groupFilter=%d fileFilter=%d\n",
2725 // qPrint(name()),result,groupFilter,fileFilter);
2726 return result;
2727}
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 5209 of file memberdef.cpp.

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

References m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5539 of file memberdef.cpp.

5540{
5541 return m_docsForDefinition;
5542}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5069 of file memberdef.cpp.

5070{
5071 return m_docTransferDone;
5072}
bool m_docTransferDone

References m_docTransferDone.

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4334 of file memberdef.cpp.

4335{
4336 ClassDef *fcd=nullptr;
4337 DString baseName=name();
4338 if (size_t i=baseName.find('<'); i!=DString::npos) baseName=baseName.left(i);
4339 return (isFriendClass() &&
4340 (fcd=getClass(baseName)) && fcd->isLinkable());
4341}
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 5189 of file memberdef.cpp.

5190{
5191 return m_mtype==MemberType::Enumeration;
5192}

References m_mtype.

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

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5410 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5194 of file memberdef.cpp.

5195{
5196 return m_mtype==MemberType::EnumValue;
5197}

References m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5245 of file memberdef.cpp.

5246{
5247 return m_mtype==MemberType::Event;
5248}

References m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5270 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5503 of file memberdef.cpp.

5504{
5505 return m_explExt;
5506}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5340 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5255 of file memberdef.cpp.

5256{
5257 return m_related == Relationship::Foreign;
5258}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5230 of file memberdef.cpp.

5231{
5232 return m_mtype==MemberType::Friend;
5233}

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

6401{
6402 return isFriend() && isTypeAClassFriend(m_type);
6403}
bool isTypeAClassFriend(const DString &type)
Definition types.h:920

References isFriend(), isTypeAClassFriend(), and m_type.

Referenced by isDocumentedFriendClass(), and warnIfUndocumented().

◆ isFriendToHide()

bool MemberDefImpl::isFriendToHide ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6393 of file memberdef.cpp.

6394{
6395 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6396 bool isFriendToHide = hideFriendCompounds && isTypeAClassFriend(m_type);
6397 return isFriendToHide;
6398}
bool isFriendToHide() const override

References Config_getBool, isFriendToHide(), isTypeAClassFriend(), and m_type.

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

◆ isFunction()

bool MemberDefImpl::isFunction ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5214 of file memberdef.cpp.

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

References m_mtype.

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

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6411 of file memberdef.cpp.

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

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5219 of file memberdef.cpp.

5220{
5221 return m_mtype==MemberType::Variable &&
5222 DString(argsString()).find(")(")!=DString::npos;
5223}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5285 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5498 of file memberdef.cpp.

5499{
5500 return m_implOnly;
5501}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5360 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5265 of file memberdef.cpp.

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

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

1934{
1935 if (m_templateMaster)
1936 {
1937 return m_templateMaster->isLinkable();
1938 }
1939 else
1940 {
1941 return isLinkableInProject() || isReference();
1942 }
1943}

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

1923{
1924 if (m_isLinkableCached==0)
1925 {
1926 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1928 }
1930 return m_isLinkableCached==2;
1931}
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 5487 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5482 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5477 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5275 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5345 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5559 of file memberdef.cpp.

5560{
5561 return m_memSpec.isNoDiscard();
5562}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5442 of file memberdef.cpp.

5443{
5444 return m_memSpec.isNoExcept();
5445}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5380 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6406 of file memberdef.cpp.

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

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4954 of file memberdef.cpp.

4955{
4956 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return true;
4957 return false;
4958}

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

4961{
4962 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return true;
4963 return false;
4964}

References getClassDef(), and isProperty().

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5370 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5355 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5290 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5305 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5240 of file memberdef.cpp.

5241{
5242 return m_mtype==MemberType::Property;
5243}

References m_mtype.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5295 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5310 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5589 of file memberdef.cpp.

5590{
5591 return m_proto;
5592}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5492 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5325 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5330 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5457 of file memberdef.cpp.

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

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

6422{
6425}
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 1624 of file memberdef.cpp.

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

5251{
5252 return m_related == Relationship::Related;
5253}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6416 of file memberdef.cpp.

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

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5320 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5375 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5395 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5350 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5204 of file memberdef.cpp.

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

References m_mtype.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5300 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5174 of file memberdef.cpp.

5175{
5176 return m_mtype==MemberType::Signal;
5177}

References m_mtype.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5554 of file memberdef.cpp.

5555{
5556 return m_memSpec.isLocal();
5557}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5179 of file memberdef.cpp.

5180{
5181 return m_mtype==MemberType::Slot;
5182}

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

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

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5415 of file memberdef.cpp.

5416{
5417 return m_mtype==MemberType::EnumValue &&
5418 m_enumScope &&
5420}
virtual bool isStrong() const =0

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

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5508 of file memberdef.cpp.

5509{
5510 return m_tspec;
5511}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5280 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5472 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5427 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5199 of file memberdef.cpp.

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

References m_mtype.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5738 of file memberdef.cpp.

5739{
5740 return m_isTypedefValCached;
5741}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5452 of file memberdef.cpp.

5453{
5454 return m_memSpec.isProperty();
5455}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5422 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5184 of file memberdef.cpp.

5185{
5186 return m_mtype==MemberType::Variable;
5187}

References m_mtype.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5400 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5335 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5549 of file memberdef.cpp.

5550{
5551 return m_livesInsideEnum;
5552}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5893 of file memberdef.cpp.

5894{
5895 m_related = Relationship::Foreign;
5897}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5969 of file memberdef.cpp.

5970{
5971 m_implOnly=true;
5972}

References m_implOnly.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5887 of file memberdef.cpp.

5888{
5889 m_related = Relationship::Related;
5891}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5764 of file memberdef.cpp.

5765{
5766 return m_memDec;
5767}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5759 of file memberdef.cpp.

5760{
5761 return m_memDef;
5762}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5169 of file memberdef.cpp.

5170{
5171 return m_mtype;
5172}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

DString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4101 of file memberdef.cpp.

4102{
4103 if (m_mtype == MemberType::Define)
4104 {
4105 return "macro definition";
4106 }
4107 else if (m_mtype == MemberType::Enumeration)
4108 {
4109 return "enumeration";
4110 }
4111 return to_string_lower(m_mtype);
4112}

References m_mtype.

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5837 of file memberdef.cpp.

5838{
5839 m_memSpec.merge(s);
5840}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4893 of file memberdef.cpp.

4894{
4895 m_defArgList = *al;
4896}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4898 of file memberdef.cpp.

4899{
4900 m_declArgList = *al;
4901}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1569 of file memberdef.cpp.

1570{
1571 setOuterScope(scope);
1573 {
1574 m_classDef = toClassDef(scope);
1575 }
1576 else if (scope->definitionType()==Definition::TypeFile)
1577 {
1578 m_fileDef = toFileDef(scope);
1579 }
1580 else if (scope->definitionType()==Definition::TypeModule)
1581 {
1582 m_moduleDef = toModuleDef(scope);
1583 }
1584 else if (scope->definitionType()==Definition::TypeNamespace)
1585 {
1586 m_nspace = toNamespaceDef(scope);
1587 }
1590}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:2027
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 6120 of file memberdef.cpp.

6121{
6122 return m_numberOfFlowKW;
6123}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5007 of file memberdef.cpp.

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

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4926 of file memberdef.cpp.

4927{
4929 if (e) Doxygen::parseSourcesNeeded = true;
4930}
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 4920 of file memberdef.cpp.

4921{
4923 if (e) Doxygen::parseSourcesNeeded = true;
4924}

References m_hasCallGraph, and Doxygen::parseSourcesNeeded.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4944 of file memberdef.cpp.

4945{
4947}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4949 of file memberdef.cpp.

4950{
4952}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4932 of file memberdef.cpp.

4933{
4935 if (e) Doxygen::parseSourcesNeeded = true;
4936}

References m_hasReferencedByRelation, and Doxygen::parseSourcesNeeded.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4938 of file memberdef.cpp.

4939{
4941 if (e) Doxygen::parseSourcesNeeded = true;
4942}

References m_hasReferencesRelation, and Doxygen::parseSourcesNeeded.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5164 of file memberdef.cpp.

5165{
5166 return m_prot;
5167}

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

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

6452{
6453 return m_redefineCount;
6454}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1619 of file memberdef.cpp.

1620{
1621 return m_redefinedBy;
1622}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1614 of file memberdef.cpp.

1615{
1616 return m_redefines;
1617}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5524 of file memberdef.cpp.

5525{
5526 return m_relatedAlso;
5527}

References m_relatedAlso.

◆ requiresClause()

DString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6045 of file memberdef.cpp.

6046{
6047 return m_requiresClause;
6048}

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

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

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

4371{
4372 DString memAnchor = name();
4373 if (!m_args.empty()) memAnchor+=m_args;
4374 if (m_memSpec.isAlias()) // this is for backward compatibility
4375 {
4376 memAnchor.prepend(" = "+m_initializer);
4377 }
4378 memAnchor.prepend(definition()); // actually the method name is now included
4379 // twice, which is silly, but we keep it this way for backward
4380 // compatibility.
4381
4382 // include number of template arguments as well,
4383 // to distinguish between two template
4384 // specializations that only differ in the template parameters.
4386 {
4387 char buf[20];
4388 snprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4389 buf[19]='\0';
4390 memAnchor.prepend(buf);
4391 }
4392 if (!m_requiresClause.empty())
4393 {
4394 memAnchor+=" "+m_requiresClause;
4395 }
4396 if (m_redefineCount>0)
4397 {
4398 char buf[20];
4399 snprintf(buf,20,":%d",m_redefineCount);
4400 buf[19]='\0';
4401 memAnchor.append(buf);
4402 }
4403
4404 // convert to md5 hash
4405 m_anc = "a"+md5str(memAnchor.view());
4406}
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 5926 of file memberdef.cpp.

5927{
5928 m_annEnumType = md;
5929}

References m_annEnumType.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5904 of file memberdef.cpp.

5905{
5906 m_args = as;
5907}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5859 of file memberdef.cpp.

5860{
5861 m_bitfields = DString(s).simplifyWhiteSpace();
5862}
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 1894 of file memberdef.cpp.

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

6016{
6017 m_category = def;
6018}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6025 of file memberdef.cpp.

6026{
6027 m_categoryRelation = md;
6028}

References m_categoryRelation.

◆ setClassDefOfAnonymousType()

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

Implements MemberDefMutable.

Definition at line 2004 of file memberdef.cpp.

2005{
2006 m_anonymousType = cd;
2007}

References m_anonymousType.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 5957 of file memberdef.cpp.

5958{
5959 m_declFileName = df;
5960 m_declLine = line;
5961 m_declColumn = column;
5962}

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

5804{
5805 m_def=d;
5806}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1946 of file memberdef.cpp.

1947{
1948 m_defTmpArgLists = lists;
1949}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5985 of file memberdef.cpp.

5986{
5988}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1900 of file memberdef.cpp.

1901{
1902 m_docTransferDone = true;
1903}

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

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

5922{
5923 m_docEnumValues=value;
5924}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6030 of file memberdef.cpp.

6031{
6032 m_enumBaseType = type;
6033}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5914 of file memberdef.cpp.

5915{
5916 m_classDef = cd;
5919}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4422 of file memberdef.cpp.

4423{
4424 m_enumScope=md;
4426 if (md->getGroupDef())
4427 {
4428 m_group = md->getGroupDef();
4429 m_grouppri = md->getGroupPri();
4434 }
4435}
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 5944 of file memberdef.cpp.

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

1906{
1908}

References m_explicitInherited.

◆ setFileDef()

void MemberDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5808 of file memberdef.cpp.

5809{
5810 m_fileDef=fd;
5814}

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

5981{
5983}

References m_formalTemplateArguments.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 5990 of file memberdef.cpp.

5991{
5992 m_groupAlias = md;
5993}

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

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

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

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

1911{
1914}
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().

◆ setIncludeFile()

void MemberDefImpl::setIncludeFile ( FileDef * fd,
const DString & incName,
bool local,
bool force )
overridevirtual

Implements MemberDefMutable.

Definition at line 6382 of file memberdef.cpp.

6384{
6385 if (!force || includeName.empty()) return;
6386 //printf("MemberDefImpl::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
6387 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
6388 m_incInfo->fileDef = fd;
6389 m_incInfo->includeName = includeName;
6391}
@ IncludeLocal
Definition filedef.h:47
@ IncludeSystem
Definition filedef.h:46

References DString::empty(), IncludeLocal, IncludeSystem, and m_incInfo.

◆ setInheritsDocsFrom()

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

Implements MemberDefMutable.

Definition at line 5899 of file memberdef.cpp.

5900{
5901 m_docProvider = md;
5902}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4516 of file memberdef.cpp.

4517{
4518 size_t indent=0;
4520 int l=static_cast<int>(m_initializer.length());
4521 int p=l-1;
4522 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4526
4527 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4528}
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:5194
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 5864 of file memberdef.cpp.

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

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6005 of file memberdef.cpp.

6006{
6007 m_memDec=md;
6008}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6000 of file memberdef.cpp.

6001{
6002 m_memDef=md;
6003}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4356 of file memberdef.cpp.

4357{
4358 m_memberGroup = grp;
4359}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 5964 of file memberdef.cpp.

5965{
5966 m_grpId=id;
5967}
virtual DString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5827 of file memberdef.cpp.

5828{
5829 m_memSpec=s;
5830}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5797 of file memberdef.cpp.

5798{
5799 m_mtype=t;
5801}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5816 of file memberdef.cpp.

5817{
5818 m_moduleDef=mod;
5819}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4445 of file memberdef.cpp.

4446{
4447 m_nspace=nd;
4448 setOuterScope(nd);
4449}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5821 of file memberdef.cpp.

5822{
5823 m_prot=p;
5825}

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

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

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5872 of file memberdef.cpp.

5873{
5874 m_read=r;
5875}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6456 of file memberdef.cpp.

6457{
6458 m_redefineCount=count;
6459}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1593 of file memberdef.cpp.

1594{
1595 m_redefines = md;
1596}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5909 of file memberdef.cpp.

5910{
5911 m_relatedAlso=cd;
5912}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6040 of file memberdef.cpp.

6041{
6042 m_requiresClause = req;
6043}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4588 of file memberdef.cpp.

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

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 4996 of file memberdef.cpp.

4997{
4998 if (ti)
4999 {
5000 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5001 m_anc=ti->anchor;
5002 setReference(ti->tagName);
5004 }
5005}
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 5974 of file memberdef.cpp.

5975{
5978}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5882 of file memberdef.cpp.

5883{
5884 m_tspec=b;
5885}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4908 of file memberdef.cpp.

4909{
4910 m_type = t;
4911}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4903 of file memberdef.cpp.

4904{
4905 m_typeConstraints = al;
4906}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5832 of file memberdef.cpp.

5833{
5834 m_vhdlSpec=s;
5835}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5877 of file memberdef.cpp.

5878{
5879 m_write=w;
5880}

References m_write.

◆ sourceRefName()

DString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1659 of file memberdef.cpp.

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

5653{
5654 return m_tArgList;
5655}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5728 of file memberdef.cpp.

5729{
5730 return m_templateMaster;
5731}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6376 of file memberdef.cpp.

6377{
6378 return m_typeConstraints;
6379}

References m_typeConstraints.

◆ typeString()

DString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5039 of file memberdef.cpp.

5040{
5041 return m_type;
5042}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4594 of file memberdef.cpp.

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

4187{
4188 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4189 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4190 return (!isAnonymous() &&
4191 (!hideUndocMembers || hasDocumentation()) &&
4192 (!isStatic() || extractStatic) &&
4193 isLinkable()
4194 );
4195}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4114 of file memberdef.cpp.

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

4277{
4278 DString returnType = typeString();
4279 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4280 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=DString::npos;
4281
4282 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4283 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4284 {
4285 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4286 if (!defArgList.trailingReturnType().empty())
4287 {
4288 DString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4289 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4290 }
4291 }
4292 if (!Config_getBool(EXTRACT_ALL) &&
4293 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4294 Config_getBool(WARN_NO_PARAMDOC) &&
4295 isFunction() &&
4296 !isDeleted() &&
4297 !isReference() &&
4299 {
4301 {
4303 "parameters of member {} are not documented",
4304 qualifiedName());
4305 }
4307 hasDocumentation() && !returnType.empty() &&
4308 !( // not one of the cases where nothing is returned
4309 isVoidReturn || // void return type
4310 isFortranSubroutine || // fortran subroutine
4311 isConstructor() || // a constructor
4312 isDestructor() || // or a destructor
4313 isFriend() // or a friend
4314 )
4315 )
4316 {
4318 "return type of member {} is not documented",
4319 qualifiedName());
4320 }
4321 }
4322 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4324 (isVoidReturn || // void return type
4325 isFortranSubroutine || // fortran subroutine
4326 isConstructor() || // a constructor
4327 isDestructor())) // or destructor
4328 {
4329 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4330 qualifiedName());
4331 }
4332}
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 2204 of file memberdef.cpp.

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

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

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

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

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

3993{
3994 Definition *scope = getOuterScope();
3995 DString doxyName = name();
3996 DString doxyArgs = argsString();
3997 DString memAnchor = anchor();
3998 DString cfname = getOutputFileBase();
3999 DString cname;
4000 if (scope) cname = scope->name();
4001 if (doxyName.at(0)=='@')
4002 {
4003 doxyName="__unnamed__";
4004 }
4005
4006 LinkifyTextOptions options;
4007 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
4008
4009 if (container && container->definitionType()==Definition::TypeClass &&
4010 !(toClassDef(container))->isJavaEnum())
4011 {
4013 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4014 ol.addLabel(cfname,memAnchor);
4015
4016 bool written=false;
4017 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
4018 if (annoClassDef)
4019 {
4020 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)"); // anonymous type marker(s) including scope
4021 reg::Match amatch;
4022 std::string stype = m_type.str();
4023 if (reg::search(stype,amatch,ar))
4024 {
4025 size_t ai = amatch.position();
4026 size_t al = amatch.length();
4027 ol.writeObjectLink(annoClassDef->getReference(),annoClassDef->getOutputFileBase(),
4028 annoClassDef->anchor(),m_type.left(ai)+m_type.mid(ai+al));
4029 written=true;
4030 }
4031 }
4032 if (!written)
4033 {
4034 DString ts;
4035 if (isFunctionPtr())
4036 {
4037 ts = m_type + m_args;
4038 }
4039 else
4040 {
4041 ts = fieldType();
4042 }
4043 linkifyText(TextGeneratorOLImpl(ol),ts,options);
4044 }
4045 ol.endDoxyAnchor(cfname,memAnchor);
4047 }
4048
4050 ol.docify(doxyName);
4051 if (isVariable() && !argsString().empty() && !isObjCMethod() && !isFunctionPtr())
4052 {
4053 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
4054 }
4055 if (!m_bitfields.empty()) // add bitfields
4056 {
4057 linkifyText(TextGeneratorOLImpl(ol),m_bitfields,options);
4058 }
4059 if (hasOneLineInitializer() && !isDefine())
4060 {
4061 ol.writeString(" ");
4062 linkifyText(TextGeneratorOLImpl(ol),m_initializer.simplifyWhiteSpace(),options);
4063 }
4065
4067
4068 DString brief = briefDescription();
4069 DString detailed = documentation();
4070
4071 /* write brief description */
4072 if (!brief.empty())
4073 {
4075 briefLine(),
4076 getOuterScope()?getOuterScope():container,this,
4077 brief,
4078 DocOptions()
4079 .setSingleLine(true));
4080 }
4081
4082 /* write detailed description */
4083 if (!detailed.empty())
4084 {
4085 if (!brief.empty())
4086 {
4088 ol.lineBreak();
4090 }
4091 ol.generateDoc(docFile(),
4092 docLine(),
4093 getOuterScope()?getOuterScope():container,this,
4094 detailed+"\n",
4095 DocOptions());
4096 }
4097
4098 ol.endInlineMemberDoc();
4099}
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 4612 of file memberdef.cpp.

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

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

◆ m_annEnumType

const MemberDef* MemberDefImpl::m_annEnumType = nullptr
private

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

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

◆ m_cachedTypedefTemplSpec

DString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 472 of file memberdef.cpp.

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

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 471 of file memberdef.cpp.

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

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

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

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

◆ m_declArgList

◆ m_declColumn

size_t MemberDefImpl::m_declColumn = 1
private

Definition at line 515 of file memberdef.cpp.

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

◆ m_declFileName

DString MemberDefImpl::m_declFileName
private

Definition at line 513 of file memberdef.cpp.

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

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

Definition at line 514 of file memberdef.cpp.

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

◆ m_def

DString MemberDefImpl::m_def
private

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

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

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 508 of file memberdef.cpp.

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

◆ m_docTransferDone

bool MemberDefImpl::m_docTransferDone = false
private

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

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

◆ m_exception

DString MemberDefImpl::m_exception
private

Definition at line 429 of file memberdef.cpp.

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

◆ m_explExt

bool MemberDefImpl::m_explExt = false
private

Definition at line 505 of file memberdef.cpp.

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

◆ m_explicitInherited

bool MemberDefImpl::m_explicitInherited = false
private

Definition at line 480 of file memberdef.cpp.

Referenced by getLabels(), and setExplicitInherited().

◆ m_explicitOutputFileBase

DString MemberDefImpl::m_explicitOutputFileBase
private

Definition at line 479 of file memberdef.cpp.

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

◆ m_extraTypeChars

DString MemberDefImpl::m_extraTypeChars
private

Definition at line 431 of file memberdef.cpp.

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

◆ m_fileDef

FileDef* MemberDefImpl::m_fileDef = nullptr
private

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

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

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

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

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

◆ m_groupFileName

DString MemberDefImpl::m_groupFileName
private

Definition at line 466 of file memberdef.cpp.

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

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 507 of file memberdef.cpp.

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

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

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

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

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 467 of file memberdef.cpp.

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

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

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

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

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 496 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 488 of file memberdef.cpp.

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

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 489 of file memberdef.cpp.

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

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 504 of file memberdef.cpp.

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

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

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

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

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

Definition at line 486 of file memberdef.cpp.

Referenced by deepCopy(), init(), isImplementation(), and makeImplementationDetail().

◆ m_incInfo

std::unique_ptr<IncludeInfo> MemberDefImpl::m_incInfo
private

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

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

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

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

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

◆ m_maxInitLines

int MemberDefImpl::m_maxInitLines = 0
private

Definition at line 440 of file memberdef.cpp.

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

◆ m_memberGroup

MemberGroup* MemberDefImpl::m_memberGroup = nullptr
private

Definition at line 463 of file memberdef.cpp.

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

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 411 of file memberdef.cpp.

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

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 410 of file memberdef.cpp.

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

◆ m_memSpec

◆ m_metaData

DString MemberDefImpl::m_metaData
private

Definition at line 453 of file memberdef.cpp.

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

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

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

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

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 516 of file memberdef.cpp.

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

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

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

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

◆ m_redefineCount

int MemberDefImpl::m_redefineCount = 0
private

Definition at line 517 of file memberdef.cpp.

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

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 408 of file memberdef.cpp.

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

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

Definition at line 407 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 412 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 459 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 506 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 438 of file memberdef.cpp.

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

◆ m_virt

◆ m_write

DString MemberDefImpl::m_write
private

Definition at line 428 of file memberdef.cpp.

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


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