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
const MemberDef * anonymousMemberForDeclaration () const override
const MemberDef * anonymousMemberForDetails () 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
void setAnonymousMemberForDeclaration (const MemberDef *md) override
void setAnonymousMemberForDetails (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
const MemberDef * m_annMemberForDecl = nullptr
const MemberDef * m_annMemberForDetails = nullptr
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 1467 of file memberdef.cpp.

1472{
1473 //printf("MemberDefImpl::MemberDef(%s)\n",qPrint(na));
1474 init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
1478}
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:427

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

4723{
4724 m_isConstructorCached=1; // false
4725 if (getClassDef())
4726 {
4727 if (m_isDMember) // for D
4728 {
4729 m_isConstructorCached = name()=="this" ? 2 : 1;
4730 return;
4731 }
4732 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4733 {
4734 m_isConstructorCached = name()=="__construct" ? 2 : 1;
4735 return;
4736 }
4737 else if (name()=="__init__" &&
4738 getLanguage()==SrcLangExt::Python) // for Python
4739 {
4740 m_isConstructorCached = 2; // true
4741 return;
4742 }
4743 else // for other languages
4744 {
4745 DString locName = getClassDef()->localName();
4746 size_t i=locName.find('<');
4747 if (i==DString::npos) // not a template class
4748 {
4749 m_isConstructorCached = name()==locName ? 2 : 1;
4750 }
4751 else
4752 {
4753 m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
4754 }
4755 return;
4756 }
4757 }
4758}
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 4772 of file memberdef.cpp.

4773{
4774 bool isDestructor = false;
4775 if (m_isDMember) // for D
4776 {
4777 isDestructor = name()=="~this";
4778 }
4779 else if (getLanguage()==SrcLangExt::PHP) // for PHP
4780 {
4781 isDestructor = name()=="__destruct";
4782 }
4783 else if (name()=="__del__" &&
4784 getLanguage()==SrcLangExt::Python) // for Python
4785 {
4786 isDestructor = true;
4787 }
4788 else if (getLanguage()==SrcLangExt::Fortran) // for Fortran
4789 {
4790 isDestructor = typeString()=="final";
4791 }
4792 else // other languages
4793 {
4794 isDestructor =
4795 (name().find('~')!=DString::npos || name().find('!')!=DString::npos) // The ! is for C++/CLI
4796 && name().find("operator")==DString::npos;
4797 }
4799}
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 1828 of file memberdef.cpp.

1829{
1830 AUTO_TRACE("name={}",qualifiedName());
1831 bool extractStatic = Config_getBool(EXTRACT_STATIC);
1832 bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
1833 m_isLinkableCached = 2; // linkable
1834 //printf("MemberDefImpl::isLinkableInProject(name=%s)\n",qPrint(name()));
1835 if (isHidden())
1836 {
1837 AUTO_TRACE_ADD("is hidden");
1839 return;
1840 }
1841 if (templateMaster())
1842 {
1843 AUTO_TRACE_ADD("has master template");
1845 return;
1846 }
1847 if (isAnonymous())
1848 {
1849 AUTO_TRACE_ADD("name invalid");
1850 m_isLinkableCached = 1; // not a valid or a dummy name
1851 return;
1852 }
1853 if (!hasDocumentation() || isReference())
1854 {
1855 AUTO_TRACE_ADD("no docs or reference");
1856 m_isLinkableCached = 1; // no documentation
1857 return;
1858 }
1859 const GroupDef *groupDef = getGroupDef();
1860 const ClassDef *classDef = getClassDef();
1861 if (groupDef && !groupDef->isLinkableInProject())
1862 {
1863 AUTO_TRACE_ADD("in not linkable group");
1864 m_isLinkableCached = 1; // group but group not linkable
1865 return;
1866 }
1867 if (!groupDef && classDef && !classDef->isLinkableInProject())
1868 {
1869 AUTO_TRACE_ADD("in not linkable class");
1870 m_isLinkableCached = 1; // in class but class not linkable
1871 return;
1872 }
1873 const NamespaceDef *nspace = getNamespaceDef();
1874 const FileDef *fileDef = getFileDef();
1875 if (!groupDef && nspace /*&& m_related==Relationship::Member*/ && !nspace->isLinkableInProject()
1876 && (fileDef==nullptr || !fileDef->isLinkableInProject()))
1877 {
1878 AUTO_TRACE_ADD("in not linkable namespace");
1879 m_isLinkableCached = 1; // in namespace but namespace not linkable
1880 return;
1881 }
1882 if (!groupDef && !nspace &&
1883 /*m_related==Relationship::Member &&*/ !classDef &&
1884 fileDef && !fileDef->isLinkableInProject())
1885 {
1886 AUTO_TRACE_ADD("in not linkable file");
1887 m_isLinkableCached = 1; // in file (and not in namespace) but file not linkable
1888 return;
1889 }
1890 if ((!protectionLevelVisible(m_prot) && m_mtype!=MemberType::Friend) &&
1891 !(m_prot==Protection::Private && (m_virt!=Specifier::Normal || isOverride() || isFinal()) && extractPrivateVirtual))
1892 {
1893 AUTO_TRACE_ADD("private and invisible");
1894 m_isLinkableCached = 1; // hidden due to protection
1895 return;
1896 }
1897 if (m_stat && classDef==nullptr && !extractStatic)
1898 {
1899 AUTO_TRACE_ADD("static and invisible");
1900 m_isLinkableCached = 1; // hidden due to staticness
1901 return;
1902 }
1903 AUTO_TRACE_ADD("linkable");
1904 return; // linkable!
1905}
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:4680

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

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

5749{
5750 bool enabled = m_hasCallerGraph &&
5751 (isFunction() || isSlot() || isSignal()) &&
5752 Config_getBool(HAVE_DOT);
5753 if (enabled)
5754 {
5755 bool trivial = DotCallGraph::isTrivial(this,true);
5756 return !trivial;
5757 }
5758 return false;
5759}
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 5730 of file memberdef.cpp.

5731{
5732 bool enabled = m_hasCallGraph &&
5733 (isFunction() || isSlot() || isSignal()) &&
5734 Config_getBool(HAVE_DOT);
5735 if (enabled)
5736 {
5737 bool trivial = DotCallGraph::isTrivial(this,false);
5738 return !trivial;
5739 }
5740 return false;
5741}

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

2219{
2220 return !m_bitfields.empty() && name().startsWith("__pad"); // anonymous bitfield
2221}
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 2951 of file memberdef.cpp.

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

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

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

3100{
3101 if (getClassDef()) // this should be a member of a class/category
3102 {
3103 //printf("%s: category %s relation %s class=%s categoryOf=%s\n",
3104 // qPrint(name()),
3105 // m_category ? qPrint(m_category->name()) : "<none>",
3106 // m_categoryRelation ? qPrint(m_categoryRelation->name()) : "<none>",
3107 // qPrint(m_classDef->name()),
3108 // m_classDef->categoryOf() ? qPrint(m_classDef->categoryOf()->name()) : "<none>"
3109 // );
3110 DString text;
3111 DString ref;
3112 DString file;
3113 DString anc;
3114 DString name;
3115 size_t i=DString::npos;
3117 {
3118 if (m_category)
3119 {
3120 // this member is in a normal class and implements method categoryRelation from category
3121 // so link to method 'categoryRelation' with 'provided by category 'category' text.
3124 }
3125 else if (getClassDef()->categoryOf())
3126 {
3127 // this member is part of a category so link to the corresponding class member of the class we extend
3128 // so link to method 'categoryRelation' with 'extends class 'classDef->categoryOf()'
3129 text = theTranslator->trExtendsClass();
3131 }
3132 i=text.find("@0");
3133 if (i!=DString::npos)
3134 {
3135 const MemberDef *md = m_categoryRelation;
3136 ref = md->getReference();
3137 file = md->getOutputFileBase();
3138 anc = md->anchor();
3139 }
3140 }
3141 if (i!=DString::npos && !name.empty())
3142 {
3143 ol.startParagraph();
3144 ol.parseText(text.left(i));
3145 ol.writeObjectLink(ref,file,anc,name);
3146 ol.parseText(text.mid(i+2));
3147 ol.endParagraph();
3148 }
3149 }
3150}
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(), 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 3173 of file memberdef.cpp.

3176{
3177 // For enum, we also write the documented enum values
3178 if (isEnumerate())
3179 {
3180 bool first=true;
3181 //printf("** %s: enum values=%zu\n",qPrint(name()),enumFieldList().size());
3182 bool hasInits = false;
3183 if (hasEnumValues())
3184 {
3185 for (const auto &fmd : enumFieldList())
3186 {
3187 if (fmd->isLinkable())
3188 {
3189 if (!fmd->initializer().empty())
3190 {
3191 hasInits = true;
3192 break;
3193 }
3194 }
3195 }
3196 }
3197 for (const auto &fmd : enumFieldList())
3198 {
3199 //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
3200 if (fmd->isLinkable())
3201 {
3202 if (first)
3203 {
3205 first=false;
3206 }
3207
3208 ol.startDescTableRow();
3209 ol.addIndexItem(fmd->name(),ciname);
3210 ol.addIndexItem(ciname,fmd->name());
3211
3213 ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
3214 ol.addLabel(cfname,fmd->anchor());
3215 ol.docify(fmd->name());
3217 ol.writeString(" ");
3218 ol.enableAll();
3219 ol.endDoxyAnchor(cfname,fmd->anchor());
3220 ol.endDescTableTitle();
3221 if (hasInits)
3222 {
3223 ol.startDescTableInit();
3224 if (!fmd->initializer().empty())
3225 {
3226 DString initStr = fmd->initializer().stripWhiteSpace();
3227 if (initStr.startsWith("=")) initStr = initStr.mid(1).stripWhiteSpace();
3229 ol.writeString("(");
3230 ol.enableAll();
3231 ol.docify(initStr);
3233 ol.writeString(")");
3234 ol.enableAll();
3235 }
3236 ol.endDescTableInit();
3237 }
3238 ol.startDescTableData();
3239
3240 bool hasBrief = !fmd->briefDescription().empty();
3241 bool hasDetails = !fmd->documentation().empty();
3242
3243 if (hasBrief)
3244 {
3245 ol.generateDoc(fmd->briefFile(),
3246 fmd->briefLine(),
3247 getOuterScope()?getOuterScope():container,
3248 fmd,
3249 fmd->briefDescription(),
3250 DocOptions()
3251 .setIndexWords(true));
3252 }
3253 if (hasDetails)
3254 {
3255 ol.generateDoc(fmd->docFile(),
3256 fmd->docLine(),
3257 getOuterScope()?getOuterScope():container,
3258 fmd,
3259 fmd->documentation()+"\n",
3260 DocOptions()
3261 .setIndexWords(true));
3262 }
3263 ol.endDescTableData();
3264 ol.endDescTableRow();
3265 }
3266 }
3267 if (!first)
3268 {
3269 ol.endDescTable();
3270 }
3271 }
3272}
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 3152 of file memberdef.cpp.

3153{
3154 // write the list of examples that use this member
3155 if (hasExamples())
3156 {
3157 ol.startExamples();
3158 ol.startDescForItem();
3160 ol.endDescForItem();
3161 ol.endExamples();
3162 }
3163}
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:812

References OutputList::endDescForItem(), OutputList::endExamples(), hasExamples(), m_examples, OutputList::startDescForItem(), OutputList::startExamples(), and writeExamples().

Referenced by writeDocumentation().

◆ _writeGroupInclude()

void MemberDefImpl::_writeGroupInclude ( OutputList & ol,
bool inGroup ) const
private

Definition at line 3360 of file memberdef.cpp.

3361{
3362 SrcLangExt lang = getLanguage();
3363 bool written = false;
3364 if (m_incInfo) // explicit \headerfile command
3365 {
3366 DString nm=m_incInfo->includeName.empty() ?
3367 (m_incInfo->fileDef ?
3368 m_incInfo->fileDef->docName() : DString()
3369 ) : m_incInfo->includeName;
3370 if (!nm.empty())
3371 {
3372 ol.startParagraph();
3373 ol.startTypewriter();
3374 ol.docify(::includeStatement(lang,m_incInfo->kind));
3375 ol.docify(::includeOpen(lang,m_incInfo->kind));
3376 ol.pushGeneratorState();
3378 ol.docify(nm);
3381 if (m_incInfo->fileDef)
3382 {
3383 ol.writeObjectLink(DString(),m_incInfo->fileDef->includeName(),DString(),nm);
3384 }
3385 else
3386 {
3387 ol.docify(nm);
3388 }
3389 ol.popGeneratorState();
3390 ol.docify(::includeClose(lang,m_incInfo->kind));
3391 ol.endTypewriter();
3392 ol.endParagraph();
3393 written = true;
3394 }
3395 }
3396 if (!written) // only write out the include file if this is not part of a class or file definition
3397 {
3398 bool showGroupedMembInc = Config_getBool(SHOW_GROUPED_MEMB_INC);
3399 bool forceLocalIncludes = Config_getBool(FORCE_LOCAL_INCLUDES);
3400 const FileDef *fd = getFileDef();
3401 DString nm;
3402 if (inGroup && fd && showGroupedMembInc)
3403 {
3404 if (!Config_getList(STRIP_FROM_INC_PATH).empty())
3405 {
3407 }
3408 else
3409 {
3410 nm = fd->name();
3411 }
3412 }
3413 if (!nm.empty())
3414 {
3415 ol.startParagraph();
3416 ol.startTypewriter();
3417 bool isIDLorJava = lang==SrcLangExt::IDL || lang==SrcLangExt::Java;
3418 if (isIDLorJava)
3419 {
3420 ol.docify("import ");
3421 }
3422 else
3423 {
3424 ol.docify("#include ");
3425 }
3426
3427 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify("<");
3428
3429 if (fd && fd->isLinkable())
3430 {
3431 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),fd->anchor(),nm);
3432 }
3433 else
3434 {
3435 ol.docify(nm);
3436 }
3437
3438 if (isIDLorJava || forceLocalIncludes) ol.docify("\""); else ol.docify(">");
3439
3440 ol.endTypewriter();
3441 ol.endParagraph();
3442 }
3443 }
3444}
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 3446 of file memberdef.cpp.

3447{
3448 //printf("md=%s initLines=%d init='%s'\n",qPrint(name()),initLines,qPrint(init));
3449 ol.startBold();
3450 if (m_mtype==MemberType::Define)
3452 else
3454 ol.endBold();
3455 DString langCorrected = getDefFileExtension();
3457 if (srcLangExt == SrcLangExt::Lex)
3458 {
3459 langCorrected = ".doxygen_lex_c";
3460 srcLangExt = SrcLangExt::Cpp;
3461 }
3462 auto intf = Doxygen::parserManager->getCodeParser(langCorrected);
3463 intf->resetCodeParserState();
3464 auto &codeOL = ol.codeGenerators();
3465 codeOL.startCodeFragment("DoxyCode");
3466 intf->parseCode(codeOL,scopeName,m_initializer,srcLangExt,Config_getBool(STRIP_CODE_COMMENTS),
3467 CodeParserOptions()
3469 .setInlineFragment(true)
3470 .setMemberDef(this)
3471 .setShowLineNumbers(false)
3472 .setSearchCtx(this)
3473 );
3474 codeOL.endCodeFragment("DoxyCode");
3475}
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:4177

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

3041{
3042 const MemberVector &bml=reimplementedBy();
3043 size_t count = _countReimplementedBy();
3044 if (count>0)
3045 {
3046 auto replaceFunc = [&bml,&ol](size_t entryIndex)
3047 {
3048 size_t cnt=0;
3049 auto it = bml.begin();
3050 // find the entryIndex-th documented entry in the inheritance list.
3051 const MemberDef *bmd = nullptr;
3052 const ClassDef *bcd = nullptr;
3053 while (it!=bml.end())
3054 {
3055 bmd = *it;
3056 bcd = bmd->getClassDef();
3057 if ( bmd->isLinkable() && bcd->isLinkable())
3058 {
3059 if (cnt==entryIndex) break;
3060 cnt++;
3061 }
3062 ++it;
3063 }
3064
3065 if (bcd && bmd) // write link for marker
3066 {
3067 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
3068 // bmd->anchor(),bcd->name());
3070 bmd->anchor(),bcd->displayName());
3071
3072 if (bmd->isLinkableInProject() )
3073 {
3074 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
3075 }
3076 }
3077 };
3078
3079 DString reimplInLine;
3080 if (m_virt==Specifier::Pure || (getClassDef() && getClassDef()->compoundType()==ClassDef::Interface))
3081 {
3082 reimplInLine = theTranslator->trImplementedInList(static_cast<int>(count));
3083 }
3084 else
3085 {
3086 reimplInLine = theTranslator->trReimplementedInList(static_cast<int>(count));
3087 }
3088
3089 // write the list of classes that overwrite this member
3090 ol.startParagraph();
3091 writeMarkerList(ol,
3092 reimplInLine.str(),
3093 count,
3094 replaceFunc);
3095 ol.endParagraph();
3096 }
3097}
@ 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:761

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

2966{
2967 const MemberDef *bmd=reimplements();
2968 const ClassDef *bcd=nullptr;
2969 if (bmd && (bcd=bmd->getClassDef()))
2970 {
2971 // write class that contains a member that is reimplemented by this one
2972 if (bcd->isLinkable())
2973 {
2974 ol.startParagraph();
2975 DString reimplFromLine;
2976 if (bmd->virtualness()!=Specifier::Pure && bcd->compoundType()!=ClassDef::Interface)
2977 {
2978 reimplFromLine = theTranslator->trReimplementedFromList(1);
2979 }
2980 else
2981 {
2982 reimplFromLine = theTranslator->trImplementedFromList(1);
2983 }
2984 if (size_t markerPos = reimplFromLine.find("@0"); markerPos!=DString::npos) // should always pass this.
2985 {
2986 ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
2987 if (bmd->isLinkable()) // replace marker with link
2988 {
2989 //Definition *bd=bmd->group;
2990 //if (bd==0) bd=bcd;
2992 bmd->anchor(),bcd->displayName());
2993
2994 //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
2995 // bmd->anchor(),bcd->name());
2996 if ( bmd->isLinkableInProject() )
2997 {
2998 writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
2999 }
3000 }
3001 else
3002 {
3004 DString(),bcd->displayName());
3005 if (bcd->isLinkableInProject()/* && !Config_getBool(PDF_HYPERLINKS)*/ )
3006 {
3007 writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
3008 }
3009 }
3010 ol.parseText(reimplFromLine.right(
3011 reimplFromLine.length()-markerPos-2)); // text right from marker
3012
3013 }
3014 else
3015 {
3016 err("translation error: no marker in trReimplementsFromList()\n");
3017 }
3018 ol.endParagraph();
3019 }
3020 }
3021}
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 2175 of file memberdef.cpp.

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

3166{
3168 {
3170 }
3171}
bool hasParameters() const
Definition arguments.h:77
ArgumentList m_typeConstraints
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:4292

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

1663{
1664 //printf("%s::addExample(%s,%s,%s)\n",qPrint(name()),anchor,nameStr,file);
1665 return m_examples.inSort(Example(anchor,nameStr,file));
1666}
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 4573 of file memberdef.cpp.

4574{
4575 bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
4576 SrcLangExt lang = getLanguage();
4577 if (!isLinkableInProject()) return;
4578 DString memLabel;
4579 if (optimizeOutputForC)
4580 {
4581 memLabel=theTranslator->trGlobal(true,true);
4582 }
4583 else if (lang==SrcLangExt::Fortran)
4584 {
4585 memLabel=theTranslator->trSubprogram(true,true);
4586 }
4587 else
4588 {
4589 memLabel=theTranslator->trMember(true,true);
4590 }
4591 DString memName = name();
4592 Definition *pd=getOuterScope();
4593 DString pdName = pd->definitionType()==Definition::TypeClass ?
4594 (toClassDef(pd))->displayName() : pd->name();
4595 DString sep = getLanguageSpecificSeparator(lang,true);
4596 DString memArgs;
4597 if (!isRelated())
4598 {
4599 if (isObjCMethod())
4600 {
4601 memName = "[" + pd->name() + " " + name() + "]";
4602 }
4603 else
4604 {
4605 if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
4606 memArgs = argsString();
4607 }
4608 }
4609 const RefItemVector &xrefItems = xrefListItems();
4610 if (sep!="::")
4611 {
4612 memName = substitute(memName,"::",sep);
4613 }
4614 addRefItem(xrefItems,
4615 qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
4616 memLabel,
4617 getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
4618}
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:4638

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

5901{
5902 for (const auto &sx : qualifiers)
5903 {
5904 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5905 if (!alreadyAdded)
5906 {
5907 m_qualifiers.push_back(sx);
5908 }
5909 }
5910}
StringVector m_qualifiers

References m_qualifiers.

◆ addRequirementReferences()

void MemberDefImpl::addRequirementReferences ( const Definition * )
overridevirtual

Implements MemberDefMutable.

Definition at line 4620 of file memberdef.cpp.

4621{
4623}
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 1804 of file memberdef.cpp.

1805{
1806 DString result=m_anc;
1807 if (m_groupAlias) return m_groupAlias->anchor();
1810 if (m_enumScope && m_enumScope!=this) // avoid recursion for C#'s public enum E { E, F }
1811 {
1812 result.prepend(m_enumScope->anchor());
1813 }
1814 if (getGroupDef())
1815 {
1816 if (m_groupMember)
1817 {
1818 result=m_groupMember->anchor();
1819 }
1820 else if (getReference().empty())
1821 {
1822 result.prepend("g");
1823 }
1824 }
1825 return result;
1826}
DString getReference() const override
const MemberDef * m_enumScope
const MemberDef * m_groupAlias
const MemberDef * anonymousMemberForDetails() const override
const MemberDef * m_templateMaster
MemberDef * m_groupMember

References Definition::anchor(), anonymousMemberForDetails(), 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().

◆ anonymousMemberForDeclaration()

const MemberDef * MemberDefImpl::anonymousMemberForDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5582 of file memberdef.cpp.

5583{
5584 return m_annMemberForDecl;
5585}
const MemberDef * m_annMemberForDecl

References m_annMemberForDecl.

◆ anonymousMemberForDetails()

const MemberDef * MemberDefImpl::anonymousMemberForDetails ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5587 of file memberdef.cpp.

5588{
5589 return m_annMemberForDetails;
5590}
const MemberDef * m_annMemberForDetails

References m_annMemberForDetails.

Referenced by anchor(), and getOutputFileBase().

◆ argsString()

DString MemberDefImpl::argsString ( ) const
overridevirtual

◆ argumentList()

const ArgumentList & MemberDefImpl::argumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5647 of file memberdef.cpp.

5648{
5649 return m_defArgList;
5650}
ArgumentList m_defArgList

References m_defArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ bitfieldString()

DString MemberDefImpl::bitfieldString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5097 of file memberdef.cpp.

5098{
5099 return m_bitfields;
5100}

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

6438{
6439 if (m_templateMaster)
6440 {
6441 return m_templateMaster->briefDescription(abbr);
6442 }
6443 else
6444 {
6446 }
6447}
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 6113 of file memberdef.cpp.

6114{
6117 m_cachedTypedefTemplSpec=templSpec;
6118 m_cachedResolvedType=resolvedType;
6119 //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",qPrint(m_cachedResolvedType),m_impl);
6120}
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 6073 of file memberdef.cpp.

6074{
6075 return m_category;
6076}

References m_category.

◆ categoryRelation()

const MemberDef * MemberDefImpl::categoryRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6083 of file memberdef.cpp.

6084{
6085 return m_categoryRelation;
6086}

References m_categoryRelation.

◆ codeSymbolType()

CodeSymbolType MemberDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 6524 of file memberdef.cpp.

6525{
6526 switch (memberType())
6527 {
6528 case MemberType::Define: return CodeSymbolType::Define;
6529 case MemberType::Function: return CodeSymbolType::Function;
6530 case MemberType::Variable: return CodeSymbolType::Variable;
6531 case MemberType::Typedef: return CodeSymbolType::Typedef;
6532 case MemberType::Enumeration: return CodeSymbolType::Enumeration;
6533 case MemberType::EnumValue: return CodeSymbolType::EnumValue;
6534 case MemberType::Signal: return CodeSymbolType::Signal;
6535 case MemberType::Slot: return CodeSymbolType::Slot;
6536 case MemberType::Friend: return CodeSymbolType::Friend;
6537 case MemberType::DCOP: return CodeSymbolType::DCOP;
6538 case MemberType::Property: return CodeSymbolType::Property;
6539 case MemberType::Event: return CodeSymbolType::Event;
6540 case MemberType::Interface: return CodeSymbolType::Interface;
6541 case MemberType::Service: return CodeSymbolType::Service;
6542 case MemberType::Sequence: return CodeSymbolType::Sequence;
6543 case MemberType::Dictionary: return CodeSymbolType::Dictionary;
6544 }
6546}
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 6122 of file memberdef.cpp.

6123{
6124 {
6125 const ArgumentList &srcAl = bmd->argumentList();
6126 ArgumentList &dstAl = m_defArgList;
6127 auto srcIt = srcAl.begin();
6128 auto dstIt = dstAl.begin();
6129 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6130 {
6131 Argument &argDst = *dstIt;
6132 const Argument &argSrc = *srcIt;
6133 if (!argSrc.name.empty())
6134 {
6135 argDst.name = argSrc.name;
6136 }
6137 argDst.docs = argSrc.docs;
6138 ++srcIt;
6139 ++dstIt;
6140 }
6141 }
6142
6143 {
6144 const ArgumentList &srcAl = bmd->declArgumentList();
6145 ArgumentList &dstAl = m_declArgList;
6146 auto srcIt = srcAl.begin();
6147 auto dstIt = dstAl.begin();
6148
6149 while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
6150 {
6151 Argument &argDst = *dstIt;
6152 const Argument &argSrc = *srcIt;
6153 if (!argSrc.name.empty())
6154 {
6155 argDst.name = argSrc.name;
6156 }
6157 argDst.docs = argSrc.docs;
6158 ++srcIt;
6159 ++dstIt;
6160 }
6161 }
6162}
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 4494 of file memberdef.cpp.

4496{
4497 //printf(" Member %s %s %s\n",qPrint(typeString()),qPrint(name()),qPrint(argsString()));
4498 std::unique_ptr<ArgumentList> actualArgList = std::make_unique<ArgumentList>(m_defArgList);
4499 if (!m_defArgList.empty())
4500 {
4501 // replace formal arguments with actuals
4502 for (Argument &arg : *actualArgList)
4503 {
4504 arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs.get());
4505 }
4506 actualArgList->setTrailingReturnType(
4507 substituteTemplateArgumentsInString(actualArgList->trailingReturnType(),formalArgs,actualArgs.get()));
4508 }
4509
4510 DString methodName=name();
4511 if (methodName.startsWith("operator ")) // conversion operator
4512 {
4513 methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs.get());
4514 }
4515
4516 auto imd = createMemberDef(
4518 substituteTemplateArgumentsInString(m_type,formalArgs,actualArgs.get()),
4519 methodName,
4520 substituteTemplateArgumentsInString(m_args,formalArgs,actualArgs.get()),
4523 ArgumentList(), ArgumentList(), ""
4524 );
4525 auto mmd = toMemberDefMutable(imd.get());
4526 mmd->moveArgumentList(std::move(actualArgList));
4527 mmd->setDefinition(substituteTemplateArgumentsInString(m_def,formalArgs,actualArgs.get()));
4528 mmd->setBodyDef(getBodyDef());
4529 mmd->setBodySegment(getDefLine(),getStartBodyLine(),getEndBodyLine());
4530 mmd->setFormalTemplateArguments(formalArgs);
4531
4532 // TODO: init other member variables (if needed).
4533 // TODO: reimplemented info
4534 return imd;
4535}
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:3533

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

5068{
5069 return m_decl;
5070}

References m_decl.

◆ declArgumentList()

const ArgumentList & MemberDefImpl::declArgumentList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5652 of file memberdef.cpp.

5653{
5654 return m_declArgList;
5655}

References m_declArgList.

Referenced by detectUndocumentedParams(), and warnIfUndocumentedParams().

◆ deepCopy()

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

Implements MemberDef.

Definition at line 1480 of file memberdef.cpp.

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

5073{
5074 return m_def;
5075}

References m_def.

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

◆ definitionTemplateParameterLists()

const ArgumentLists & MemberDefImpl::definitionTemplateParameterLists ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5710 of file memberdef.cpp.

5711{
5712 return m_defTmpArgLists;
5713}

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

4256{
4257 //printf("%s:detectUndocumentedParams(%d,%d)\n",qPrint(name()),hasParamCommand,hasReturnCommand);
4258 bool isPython = getLanguage()==SrcLangExt::Python;
4259
4260 // this function is called while parsing the documentation. A member can have multiple
4261 // documentation blocks, which could be handled by multiple threads, hence this guard.
4262 std::lock_guard<std::mutex> lock(g_detectUndocumentedParamsMutex);
4263
4265 {
4266 //printf("%s:hasDocumentedParams=true;\n",qPrint(name()));
4267 m_hasDocumentedParams = true;
4268 }
4269 else if (!m_hasDocumentedParams)
4270 {
4271 const ArgumentList &al = argumentList();
4272 const ArgumentList &declAl = declArgumentList();
4273 bool allDoc=true; // no parameter => all parameters are documented
4274 if ( // member has parameters
4275 al.hasParameters() // with at least one parameter (that is not void)
4276 )
4277 {
4278 // see if all parameters have documentation
4279 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4280 {
4281 const Argument &a = *it;
4282 if (!a.name.empty() && a.type!="void" && a.name!="..." &&
4283 !(isPython && (a.name=="self" || a.name=="cls"))
4284 )
4285 {
4286 allDoc = !a.docs.empty();
4287 }
4288 //printf("a.type=%s a.name=%s doc=%s\n",
4289 // qPrint(a.type),qPrint(a.name),qPrint(a.docs));
4290 }
4291 if (!allDoc && declAl.empty()) // try declaration arguments as well
4292 {
4293 allDoc=true;
4294 for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
4295 {
4296 const Argument &a = *it;
4297 if (!a.name.empty() && a.type!="void" && a.name!="..." &&
4298 !(isPython && (a.name=="self" || a.name=="cls"))
4299 )
4300 {
4301 allDoc = !a.docs.empty();
4302 }
4303 //printf("a.name=%s doc=%s\n",qPrint(a.name),qPrint(a.docs));
4304 }
4305 }
4306 }
4307 if (allDoc)
4308 {
4309 //printf("%s:hasDocumentedParams=true;\n",qPrint(name()));
4310 m_hasDocumentedParams = true;
4311 }
4312 }
4313
4314 //printf("Member %s hasDocumentedReturnType=%d hasReturnCommand=%d\n",
4315 // qPrint(name()),m_hasDocumentedReturnType,hasReturnCommand);
4317}
const ArgumentList & argumentList() const override
const ArgumentList & declArgumentList() const override
static std::mutex g_detectUndocumentedParamsMutex
static bool hasParamCommand(const DString &doc)

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

◆ displayDefinition()

DString MemberDefImpl::displayDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 3277 of file memberdef.cpp.

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

6191{
6192 return DefinitionMixin::name();
6193}

References DefinitionMixin< Base >::name().

Referenced by addListReference(), and writeDocumentation().

◆ documentation()

DString MemberDefImpl::documentation ( ) const
overridevirtual

Returns the detailed description of this definition

Reimplemented from DefinitionMixin< MemberDefMutable >.

Definition at line 6449 of file memberdef.cpp.

6450{
6451 if (m_templateMaster)
6452 {
6454 }
6455 else
6456 {
6458 }
6459}
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 6098 of file memberdef.cpp.

6099{
6100 return m_enumBaseType;
6101}

References m_enumBaseType.

◆ enumFieldList()

const MemberVector & MemberDefImpl::enumFieldList ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5632 of file memberdef.cpp.

5633{
5634 return m_enumFields;
5635}

References m_enumFields.

Referenced by _writeEnumValues(), and warnIfUndocumented().

◆ excpString()

DString MemberDefImpl::excpString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5092 of file memberdef.cpp.

5093{
5094 return m_exception;
5095}

References m_exception.

Referenced by writeDeclaration(), and writeDocumentation().

◆ extraTypeChars()

DString MemberDefImpl::extraTypeChars ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5077 of file memberdef.cpp.

5078{
5079 return m_extraTypeChars;
5080}

References m_extraTypeChars.

◆ fieldType()

DString MemberDefImpl::fieldType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4028 of file memberdef.cpp.

4029{
4030 DString type = m_type;
4031 if (isTypedef() && getLanguage() != SrcLangExt::Slice) type.prepend("typedef ");
4032 return simplifyTypeForTable(type);
4033}
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 4956 of file memberdef.cpp.

4957{
4961}
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 5786 of file memberdef.cpp.

5787{
5789}

References m_formalTemplateArguments.

◆ getAnonymousEnumType()

const MemberDef * MemberDefImpl::getAnonymousEnumType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5577 of file memberdef.cpp.

5578{
5579 return m_annEnumType;
5580}

References m_annEnumType.

Referenced by writeDeclaration(), and writeDocumentation().

◆ getCachedResolvedTypedef()

DString MemberDefImpl::getCachedResolvedTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5806 of file memberdef.cpp.

5807{
5808 //printf("MemberDefImpl::getCachedResolvedTypedef()=%s\n",qPrint(m_cachedResolvedType));
5809 return m_cachedResolvedType;
5810}

References m_cachedResolvedType.

◆ getCachedTypedefTemplSpec()

DString MemberDefImpl::getCachedTypedefTemplSpec ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5801 of file memberdef.cpp.

5802{
5804}

References m_cachedTypedefTemplSpec.

◆ getCachedTypedefVal()

const ClassDef * MemberDefImpl::getCachedTypedefVal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5796 of file memberdef.cpp.

5797{
5798 return m_cachedTypedefValue;
5799}

References m_cachedTypedefValue.

◆ getClassDef() [1/2]

◆ getClassDef() [2/2]

ClassDef * MemberDefImpl::getClassDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5132 of file memberdef.cpp.

5133{
5134 return m_classDef;
5135}

References m_classDef.

◆ getClassDefMutable()

ClassDefMutable * MemberDefImpl::getClassDefMutable ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5137 of file memberdef.cpp.

5138{
5140}
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 2031 of file memberdef.cpp.

2032{
2033 return m_anonymousType;
2034}

References m_anonymousType.

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

◆ getDeclColumn()

size_t MemberDefImpl::getDeclColumn ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5842 of file memberdef.cpp.

5843{
5844 return m_declColumn;
5845}

References m_declColumn.

◆ getDeclFileName()

DString MemberDefImpl::getDeclFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5832 of file memberdef.cpp.

5833{
5834 return m_declFileName;
5835}

References m_declFileName.

◆ getDeclLine()

int MemberDefImpl::getDeclLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5837 of file memberdef.cpp.

5838{
5839 return m_declLine;
5840}

References m_declLine.

◆ getDeclType()

DString MemberDefImpl::getDeclType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2128 of file memberdef.cpp.

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

5598{
5599 return m_enumScope;
5600}

References m_enumScope.

Referenced by getOutputFileBase(), and writeLink().

◆ getExamples()

const ExampleList & MemberDefImpl::getExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5637 of file memberdef.cpp.

5638{
5639 return m_examples;
5640}

References m_examples.

◆ getFileDef() [1/2]

◆ getFileDef() [2/2]

FileDef * MemberDefImpl::getFileDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5147 of file memberdef.cpp.

5148{
5149 return m_fileDef;
5150}

References m_fileDef.

◆ getGroupAlias()

const MemberDef * MemberDefImpl::getGroupAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5827 of file memberdef.cpp.

5828{
5829 return m_groupAlias;
5830}

References m_groupAlias.

◆ getGroupDef() [1/2]

const GroupDef * MemberDefImpl::getGroupDef ( ) const
overridevirtual

◆ getGroupDef() [2/2]

GroupDef * MemberDefImpl::getGroupDef ( )
overridevirtual

Implements MemberDef.

Definition at line 5177 of file memberdef.cpp.

5178{
5179 return m_group;
5180}

References m_group.

◆ getGroupFileName()

DString MemberDefImpl::getGroupFileName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5192 of file memberdef.cpp.

5193{
5194 return m_groupFileName;
5195}

References m_groupFileName.

◆ getGroupHasDocs()

bool MemberDefImpl::getGroupHasDocs ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5202 of file memberdef.cpp.

5203{
5204 return m_groupHasDocs;
5205}

References m_groupHasDocs.

◆ getGroupPri()

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

Implements MemberDef.

Definition at line 5187 of file memberdef.cpp.

5188{
5189 return m_grouppri;
5190}

References m_grouppri.

◆ getGroupStartLine()

int MemberDefImpl::getGroupStartLine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5197 of file memberdef.cpp.

5198{
5199 return m_groupStartLine;
5200}

References m_groupStartLine.

◆ getLabels()

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

Implements MemberDef.

Definition at line 2769 of file memberdef.cpp.

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

5721{
5722 return m_memberGroup;
5723}

References m_memberGroup.

◆ getMemberGroupId()

int MemberDefImpl::getMemberGroupId ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5715 of file memberdef.cpp.

5716{
5717 return m_grpId;
5718}

References m_grpId.

◆ getMemberSpecifiers()

TypeSpecifier MemberDefImpl::getMemberSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5117 of file memberdef.cpp.

5118{
5119 return m_memSpec;
5120}

References m_memSpec.

◆ getModuleDef()

const ModuleDef * MemberDefImpl::getModuleDef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5182 of file memberdef.cpp.

5183{
5184 return m_moduleDef;
5185}

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

5158{
5159 return m_nspace;
5160}

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

1694{
1695 bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES);
1696 bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
1697 DString baseName;
1698
1699 //printf("Member: %s: templateMaster=%p group=%p classDef=%p nspace=%p fileDef=%p\n",
1700 // qPrint(name()),m_templateMaster,m_group,m_classDef,
1701 // m_nspace,m_fileDef);
1702 const NamespaceDef *nspace = getNamespaceDef();
1703 const FileDef *fileDef = getFileDef();
1704 const ClassDef *classDef = getClassDef();
1705 const ModuleDef *moduleDef = getModuleDef();
1706 const GroupDef *groupDef = getGroupDef();
1708 {
1710 }
1711 else if (templateMaster() && (classDef==nullptr || classDef->isImplicitTemplateInstance()))
1712 {
1714 }
1715 else if (anonymousMemberForDetails())
1716 {
1718 }
1719 else if (groupDef)
1720 {
1721 baseName=groupDef->getOutputFileBase();
1722 }
1723 else if (classDef)
1724 {
1725 baseName=classDef->getOutputFileBase();
1726 if (inlineSimpleClasses && classDef->isSimple())
1727 {
1728 return baseName;
1729 }
1730 }
1731 else if (nspace && (nspace->isLinkable() || nspace->isAnonymous()))
1732 {
1733 baseName=nspace->getOutputFileBase();
1734 }
1735 else if (fileDef)
1736 {
1737 baseName=fileDef->getOutputFileBase();
1738 }
1739 else if (moduleDef)
1740 {
1741 baseName=moduleDef->getOutputFileBase();
1742 }
1743
1744 if (baseName.empty())
1745 {
1747 "Internal inconsistency: member {} does not belong to any container!",name()
1748 );
1749 return "dummy";
1750 }
1751 else if (separateMemberPages && hasDetailedDescription())
1752 {
1753 if (getEnumScope()) // enum value, which is part of enum's documentation
1754 {
1755 baseName+="_"+getEnumScope()->anchor();
1756 }
1757 else
1758 {
1759 baseName+="_"+anchor();
1760 }
1761 }
1762 return baseName;
1763}
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(), anonymousMemberForDetails(), 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 5895 of file memberdef.cpp.

5896{
5897 return m_qualifiers;
5898}

References m_qualifiers.

◆ getReadAccessor()

DString MemberDefImpl::getReadAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5162 of file memberdef.cpp.

5163{
5164 return m_read;
5165}

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

1766{
1767 DString ref = DefinitionMixin::getReference();
1768 if (!ref.empty())
1769 {
1770 return ref;
1771 }
1772 const NamespaceDef *nspace = getNamespaceDef();
1773 const FileDef *fileDef = getFileDef();
1774 const ClassDef *classDef = getClassDef();
1775 const ModuleDef *moduleDef = getModuleDef();
1776 const GroupDef *groupDef = getGroupDef();
1777 if (templateMaster())
1778 {
1779 return templateMaster()->getReference();
1780 }
1781 else if (groupDef)
1782 {
1783 return groupDef->getReference();
1784 }
1785 else if (classDef)
1786 {
1787 return classDef->getReference();
1788 }
1789 else if (nspace)
1790 {
1791 return nspace->getReference();
1792 }
1793 else if (moduleDef)
1794 {
1795 return moduleDef->getReference();
1796 }
1797 else if (fileDef)
1798 {
1799 return fileDef->getReference();
1800 }
1801 return "";
1802}
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 4404 of file memberdef.cpp.

4405{
4406 DString result;
4407 if (isStrong()) result=name();
4408 else if (getClassDef()) result=getClassDef()->displayName();
4409 else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
4410 return result;
4411}

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

4626{
4627 auto it = m_sectionMap.find(container);
4628 return it!=m_sectionMap.end() ? it->second : nullptr;
4629}

References m_sectionMap.

◆ getVhdlSpecifiers()

VhdlSpecifier MemberDefImpl::getVhdlSpecifiers ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5122 of file memberdef.cpp.

5123{
5124 return m_vhdlSpec;
5125}

References m_vhdlSpec.

Referenced by getLabels().

◆ getWriteAccessor()

DString MemberDefImpl::getWriteAccessor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5167 of file memberdef.cpp.

5168{
5169 return m_write;
5170}

References m_write.

◆ hasCallerGraph()

bool MemberDefImpl::hasCallerGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5743 of file memberdef.cpp.

5744{
5745 return m_hasCallerGraph;
5746}

References m_hasCallerGraph.

◆ hasCallGraph()

bool MemberDefImpl::hasCallGraph ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5725 of file memberdef.cpp.

5726{
5727 return m_hasCallGraph;
5728}

References m_hasCallGraph.

◆ hasDetailedDescription()

bool MemberDefImpl::hasDetailedDescription ( ) const
overridevirtual

Implements MemberDef.

Definition at line 2631 of file memberdef.cpp.

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

4392{
4394 (m_mtype==MemberType::Enumeration && m_docEnumValues) || // has enum values
4395 (m_defArgList.hasDocumentation()|| m_tArgList.hasTemplateDocumentation()); // has doc (template) arguments
4396}
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 5572 of file memberdef.cpp.

5573{
5574 return m_docEnumValues;
5575}

References m_docEnumValues.

Referenced by hasDetailedDescription(), and writeEnumDeclaration().

◆ hasEnumValues()

bool MemberDefImpl::hasEnumValues ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5776 of file memberdef.cpp.

5777{
5778 return m_hasEnumValues;
5779}

References m_hasEnumValues.

Referenced by _writeEnumValues().

◆ hasExamples()

bool MemberDefImpl::hasExamples ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1668 of file memberdef.cpp.

1669{
1670 return !m_examples.empty();
1671}

References m_examples.

Referenced by _writeExamples(), and hasDetailedDescription().

◆ hasInlineSource()

bool MemberDefImpl::hasInlineSource ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5771 of file memberdef.cpp.

5772{
5773 return m_hasInlineSource;
5774}

References m_hasInlineSource.

Referenced by hasDetailedDescription().

◆ hasMultiLineInitializer()

bool MemberDefImpl::hasMultiLineInitializer ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4548 of file memberdef.cpp.

4549{
4550 //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
4551 // initLines,userInitLines,maxInitLines);
4552 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4553 return (m_initLines>0 || (!m_initializer.empty() && isFuncLikeMacro)) &&
4554 ((m_initLines<m_maxInitLines && m_userInitLines==-1) // implicitly enabled
4555 || m_initLines<m_userInitLines // explicitly enabled
4556 );
4557}

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

4538{
4539 //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
4540 // qPrint(name()),qPrint(m_initializer),m_initLines,
4541 // m_maxInitLines,m_userInitLines);
4542 bool isFuncLikeMacro = m_mtype==MemberType::Define && m_defArgList.hasParameters();
4543 return !m_initializer.empty() && m_initLines==0 && // one line initializer
4544 !isFuncLikeMacro &&
4545 ((m_maxInitLines>0 && m_userInitLines==-1) || m_userInitLines>0); // enabled by default or explicitly
4546}

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

5762{
5764}

References m_hasReferencedByRelation.

Referenced by hasDetailedDescription(), and writeDocumentation().

◆ hasReferencesRelation()

bool MemberDefImpl::hasReferencesRelation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5766 of file memberdef.cpp.

5767{
5769}

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

6462{
6463 if (m_templateMaster)
6464 {
6466 }
6467 else
6468 {
6470 }
6471}
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 6178 of file memberdef.cpp.

6179{
6181}

References m_numberOfFlowKW.

◆ inheritsDocsFrom()

const MemberDef * MemberDefImpl::inheritsDocsFrom ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5822 of file memberdef.cpp.

5823{
5824 return m_docProvider;
5825}

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

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

5103{
5104 return m_initializer;
5105}

References m_initializer.

Referenced by setInitializer().

◆ initializerLines()

int MemberDefImpl::initializerLines ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5107 of file memberdef.cpp.

5108{
5109 return m_initLines;
5110}

References m_initLines.

◆ insertEnumField()

void MemberDefImpl::insertEnumField ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1657 of file memberdef.cpp.

1658{
1660}
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 1612 of file memberdef.cpp.

1613{
1614 if (m_templateMaster)
1615 {
1616 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef *>(m_templateMaster));
1617 if (mdm)
1618 {
1619 mdm->insertReimplementedBy(md);
1620 }
1621 }
1622 if (!m_redefinedBy.contains(md))
1623 {
1625 }
1626}
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 6172 of file memberdef.cpp.

6173{
6176}
static void invalidateCachedTypesInArgumentList(ArgumentList &al)

References invalidateCachedTypesInArgumentList(), m_declArgList, and m_defArgList.

◆ invalidateTypedefValCache()

void MemberDefImpl::invalidateTypedefValCache ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6058 of file memberdef.cpp.

6059{
6061}

References m_isTypedefValCached.

◆ isAbstract()

bool MemberDefImpl::isAbstract ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5408 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAddable()

bool MemberDefImpl::isAddable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5358 of file memberdef.cpp.

5359{
5360 return m_memSpec.isAddable();
5361}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isAssign()

bool MemberDefImpl::isAssign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5433 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isAttribute()

bool MemberDefImpl::isAttribute ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5490 of file memberdef.cpp.

5491{
5492 return m_memSpec.isAttribute();
5493}

References m_memSpec.

Referenced by getLabels().

◆ isBound()

bool MemberDefImpl::isBound ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5505 of file memberdef.cpp.

5506{
5507 return m_memSpec.isBound();
5508}

References m_memSpec.

Referenced by getLabels().

◆ isBriefSectionVisible()

bool MemberDefImpl::isBriefSectionVisible ( ) const
overridevirtual

This methods returns true iff the brief section (also known as declaration section) is visible in the documentation.

Implements MemberDef.

Definition at line 2039 of file memberdef.cpp.

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

5557{
5558 return isFunction() ||
5559 isSlot() ||
5560 isSignal() ||
5561 isConstructor() ||
5562 isDestructor() ||
5563 isObjCMethod() ||
5564 isFriend();
5565}

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

Referenced by sourceRefName().

◆ isConstEval()

bool MemberDefImpl::isConstEval ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5622 of file memberdef.cpp.

5623{
5624 return m_memSpec.isConstEval();
5625}

References m_memSpec.

Referenced by getLabels().

◆ isConstExpr()

bool MemberDefImpl::isConstExpr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5617 of file memberdef.cpp.

5618{
5619 return m_memSpec.isConstExpr();
5620}

References m_memSpec.

Referenced by getLabels().

◆ isConstInit()

bool MemberDefImpl::isConstInit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5627 of file memberdef.cpp.

5628{
5629 return m_memSpec.isConstInit();
5630}

References m_memSpec.

Referenced by getLabels().

◆ isConstrained()

bool MemberDefImpl::isConstrained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5510 of file memberdef.cpp.

5511{
5512 return m_memSpec.isConstrained();
5513}

References m_memSpec.

Referenced by getLabels().

◆ isConstructor()

bool MemberDefImpl::isConstructor ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4760 of file memberdef.cpp.

4761{
4762 if (m_isConstructorCached==0)
4763 {
4764 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
4765 that->_computeIsConstructor();
4766 }
4768 return m_isConstructorCached==2;
4769
4770}
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 5428 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isCSharpProperty()

bool MemberDefImpl::isCSharpProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5009 of file memberdef.cpp.

5010{
5011 if (getClassDef() && getClassDef()->isCSharp() && isProperty()) return true;
5012 return false;
5013}

References getClassDef(), and isProperty().

◆ isDCOP()

bool MemberDefImpl::isDCOP ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5278 of file memberdef.cpp.

5279{
5280 return m_mtype==MemberType::DCOP;
5281}

References m_mtype.

◆ isDefault()

bool MemberDefImpl::isDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5475 of file memberdef.cpp.

5476{
5477 return m_memSpec.isDefault();
5478}

References m_memSpec.

Referenced by getLabels().

◆ isDefine()

bool MemberDefImpl::isDefine ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5268 of file memberdef.cpp.

5269{
5270 return m_mtype==MemberType::Define;
5271}

References m_mtype.

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

◆ isDelete()

bool MemberDefImpl::isDelete ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5480 of file memberdef.cpp.

5481{
5482 return m_memSpec.isDelete();
5483}

References m_memSpec.

Referenced by getLabels().

◆ isDeleted()

bool MemberDefImpl::isDeleted ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4386 of file memberdef.cpp.

4387{
4388 return m_defArgList.isDeleted();
4389}
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 4801 of file memberdef.cpp.

4802{
4803 if (m_isDestructorCached==0)
4804 {
4805 MemberDefImpl *that=const_cast<MemberDefImpl*>(this);
4806 that->_computeIsDestructor();
4807 }
4809 return m_isDestructorCached==2;
4810}
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 2751 of file memberdef.cpp.

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

5253{
5254 return m_mtype==MemberType::Dictionary;
5255}

References m_mtype.

◆ isDocsForDefinition()

bool MemberDefImpl::isDocsForDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5592 of file memberdef.cpp.

5593{
5594 return m_docsForDefinition;
5595}

References m_docsForDefinition.

Referenced by warnIfUndocumentedParams().

◆ isDocTransferDone()

bool MemberDefImpl::isDocTransferDone ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5112 of file memberdef.cpp.

5113{
5114 return m_docTransferDone;
5115}
bool m_docTransferDone

References m_docTransferDone.

◆ isDocumentedFriendClass()

bool MemberDefImpl::isDocumentedFriendClass ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4377 of file memberdef.cpp.

4378{
4379 ClassDef *fcd=nullptr;
4380 DString baseName=name();
4381 if (size_t i=baseName.find('<'); i!=DString::npos) baseName=baseName.left(i);
4382 return (isFriendClass() &&
4383 (fcd=getClass(baseName)) && fcd->isLinkable());
4384}
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 5232 of file memberdef.cpp.

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

References m_mtype.

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

◆ isEnumStruct()

bool MemberDefImpl::isEnumStruct ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5453 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getDeclType(), and writeDocumentation().

◆ isEnumValue()

bool MemberDefImpl::isEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5237 of file memberdef.cpp.

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

References m_mtype.

Referenced by displayDefinition(), and writeDocumentation().

◆ isEvent()

bool MemberDefImpl::isEvent ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5288 of file memberdef.cpp.

5289{
5290 return m_mtype==MemberType::Event;
5291}

References m_mtype.

Referenced by writeDeclaration().

◆ isExplicit()

bool MemberDefImpl::isExplicit ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5313 of file memberdef.cpp.

5314{
5315 return m_memSpec.isExplicit();
5316}

References m_memSpec.

Referenced by getLabels().

◆ isExternal()

bool MemberDefImpl::isExternal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5546 of file memberdef.cpp.

5547{
5548 return m_explExt;
5549}

References m_explExt.

Referenced by getLabels().

◆ isFinal()

bool MemberDefImpl::isFinal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5383 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isForeign()

bool MemberDefImpl::isForeign ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5298 of file memberdef.cpp.

5299{
5300 return m_related == Relationship::Foreign;
5301}

References m_related.

Referenced by isRelatedOrFriend().

◆ isFriend()

bool MemberDefImpl::isFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5273 of file memberdef.cpp.

5274{
5275 return m_mtype==MemberType::Friend;
5276}

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

6498{
6499 return isFriend() && isTypeAClassFriend(m_type);
6500}
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 6490 of file memberdef.cpp.

6491{
6492 bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
6493 bool isFriendToHide = hideFriendCompounds && isTypeAClassFriend(m_type);
6494 return isFriendToHide;
6495}
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 5257 of file memberdef.cpp.

5258{
5259 return m_mtype==MemberType::Function;
5260}

References m_mtype.

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

◆ isFunctionOrSignalSlot()

bool MemberDefImpl::isFunctionOrSignalSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6508 of file memberdef.cpp.

6509{
6510 return isFunction() || isSlot() || isSignal();
6511}

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

◆ isFunctionPtr()

bool MemberDefImpl::isFunctionPtr ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5262 of file memberdef.cpp.

5263{
5264 return m_mtype==MemberType::Variable &&
5265 DString(argsString()).find(")(")!=DString::npos;
5266}

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

Referenced by writeMemberDocSimple().

◆ isGettable()

bool MemberDefImpl::isGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5328 of file memberdef.cpp.

5329{
5330 return m_memSpec.isGettable();
5331}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isImplementation()

bool MemberDefImpl::isImplementation ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5541 of file memberdef.cpp.

5542{
5543 return m_implOnly;
5544}

References m_implOnly.

Referenced by getLabels(), and writeDeclaration().

◆ isInitonly()

bool MemberDefImpl::isInitonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5403 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isInline()

bool MemberDefImpl::isInline ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5308 of file memberdef.cpp.

5309{
5310 return m_memSpec.isInline();
5311}

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

1953{
1954 if (m_templateMaster)
1955 {
1956 return m_templateMaster->isLinkable();
1957 }
1958 else
1959 {
1960 return isLinkableInProject() || isReference();
1961 }
1962}

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

1942{
1943 if (m_isLinkableCached==0)
1944 {
1945 MemberDefImpl *that = const_cast<MemberDefImpl*>(this);
1947 }
1949 return m_isLinkableCached==2;
1950}
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 5530 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMaybeDefault()

bool MemberDefImpl::isMaybeDefault ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5525 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMaybeVoid()

bool MemberDefImpl::isMaybeVoid ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5520 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isMutable()

bool MemberDefImpl::isMutable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5318 of file memberdef.cpp.

5319{
5320 return m_memSpec.isMutable();
5321}

References m_memSpec.

Referenced by getLabels().

◆ isNew()

bool MemberDefImpl::isNew ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5388 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNoDiscard()

bool MemberDefImpl::isNoDiscard ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5612 of file memberdef.cpp.

5613{
5614 return m_memSpec.isNoDiscard();
5615}

References m_memSpec.

Referenced by getLabels().

◆ isNoExcept()

bool MemberDefImpl::isNoExcept ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5485 of file memberdef.cpp.

5486{
5487 return m_memSpec.isNoExcept();
5488}

References m_memSpec.

Referenced by getLabels().

◆ isNonAtomic()

bool MemberDefImpl::isNonAtomic ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5423 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isNotFriend()

bool MemberDefImpl::isNotFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6503 of file memberdef.cpp.

6504{
6505 return !(isFriend() && isFriendToHide());
6506}

References isFriend(), and isFriendToHide().

◆ isObjCMethod()

bool MemberDefImpl::isObjCMethod ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4997 of file memberdef.cpp.

4998{
4999 if (getClassDef() && getClassDef()->isObjectiveC() && isFunction()) return true;
5000 return false;
5001}

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

5004{
5005 if (getClassDef() && getClassDef()->isObjectiveC() && isProperty()) return true;
5006 return false;
5007}

References getClassDef(), and isProperty().

Referenced by getLabels(), and writeDeclaration().

◆ isOptional()

bool MemberDefImpl::isOptional ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5413 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isOverride()

bool MemberDefImpl::isOverride ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5398 of file memberdef.cpp.

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

References m_memSpec.

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

◆ isPrivateGettable()

bool MemberDefImpl::isPrivateGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5333 of file memberdef.cpp.

5334{
5335 return m_memSpec.isPrivateGettable();
5336}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrivateSettable()

bool MemberDefImpl::isPrivateSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5348 of file memberdef.cpp.

5349{
5350 return m_memSpec.isPrivateSettable();
5351}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProperty()

bool MemberDefImpl::isProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5283 of file memberdef.cpp.

5284{
5285 return m_mtype==MemberType::Property;
5286}

References m_mtype.

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

◆ isProtectedGettable()

bool MemberDefImpl::isProtectedGettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5338 of file memberdef.cpp.

5339{
5340 return m_memSpec.isProtectedGettable();
5341}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isProtectedSettable()

bool MemberDefImpl::isProtectedSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5353 of file memberdef.cpp.

5354{
5355 return m_memSpec.isProtectedSettable();
5356}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isPrototype()

bool MemberDefImpl::isPrototype ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5642 of file memberdef.cpp.

5643{
5644 return m_proto;
5645}

References m_proto.

◆ isPublished()

bool MemberDefImpl::isPublished ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5535 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRaisable()

bool MemberDefImpl::isRaisable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5368 of file memberdef.cpp.

5369{
5370 return m_memSpec.isRaisable();
5371}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isReadable()

bool MemberDefImpl::isReadable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5373 of file memberdef.cpp.

5374{
5375 return m_memSpec.isReadable();
5376}

References m_memSpec.

Referenced by getLabels().

◆ isReadonly()

bool MemberDefImpl::isReadonly ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5500 of file memberdef.cpp.

5501{
5502 return m_memSpec.isReadonly();
5503}

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

6519{
6522}
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 1638 of file memberdef.cpp.

1639{
1640 if (cd)
1641 {
1642 for (const auto &md : m_redefinedBy)
1643 {
1644 const ClassDef *mcd = md->getClassDef();
1645 if (mcd)
1646 {
1647 if (cd==mcd || cd->isBaseClass(mcd,true))
1648 {
1649 return true;
1650 }
1651 }
1652 }
1653 }
1654 return false;
1655}
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 5293 of file memberdef.cpp.

5294{
5295 return m_related == Relationship::Related;
5296}

References m_related.

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

◆ isRelatedOrFriend()

bool MemberDefImpl::isRelatedOrFriend ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6513 of file memberdef.cpp.

6514{
6515 return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
6516}
bool isForeign() const override

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

◆ isRemovable()

bool MemberDefImpl::isRemovable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5363 of file memberdef.cpp.

5364{
5365 return m_memSpec.isRemovable();
5366}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isRequired()

bool MemberDefImpl::isRequired ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5418 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isRetain()

bool MemberDefImpl::isRetain ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5438 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSealed()

bool MemberDefImpl::isSealed ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5393 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isSequence()

bool MemberDefImpl::isSequence ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5247 of file memberdef.cpp.

5248{
5249 return m_mtype==MemberType::Sequence;
5250}

References m_mtype.

◆ isSettable()

bool MemberDefImpl::isSettable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5343 of file memberdef.cpp.

5344{
5345 return m_memSpec.isSettable();
5346}

References m_memSpec.

Referenced by getLabels(), and writeDeclaration().

◆ isSignal()

bool MemberDefImpl::isSignal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5217 of file memberdef.cpp.

5218{
5219 return m_mtype==MemberType::Signal;
5220}

References m_mtype.

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

◆ isSliceLocal()

bool MemberDefImpl::isSliceLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5607 of file memberdef.cpp.

5608{
5609 return m_memSpec.isLocal();
5610}

References m_memSpec.

Referenced by displayDefinition(), and writeDocumentation().

◆ isSlot()

bool MemberDefImpl::isSlot ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5222 of file memberdef.cpp.

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

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

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

References m_memSpec.

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

◆ isStrongEnumValue()

bool MemberDefImpl::isStrongEnumValue ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5458 of file memberdef.cpp.

5459{
5460 return m_mtype==MemberType::EnumValue &&
5461 m_enumScope &&
5463}
virtual bool isStrong() const =0

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

◆ isTemplateSpecialization()

bool MemberDefImpl::isTemplateSpecialization ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5551 of file memberdef.cpp.

5552{
5553 return m_tspec;
5554}

References m_tspec.

Referenced by writeDocumentation().

◆ isThreadLocal()

bool MemberDefImpl::isThreadLocal ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5323 of file memberdef.cpp.

5324{
5325 return m_memSpec.isThreadLocal();
5326}

References m_memSpec.

Referenced by getLabels().

◆ isTransient()

bool MemberDefImpl::isTransient ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5515 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isTypeAlias()

bool MemberDefImpl::isTypeAlias ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5470 of file memberdef.cpp.

5471{
5472 return m_memSpec.isAlias();
5473}

References m_memSpec.

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

◆ isTypedef()

bool MemberDefImpl::isTypedef ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5242 of file memberdef.cpp.

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

References m_mtype.

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

◆ isTypedefValCached()

bool MemberDefImpl::isTypedefValCached ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5791 of file memberdef.cpp.

5792{
5793 return m_isTypedefValCached;
5794}

References m_isTypedefValCached.

◆ isUNOProperty()

bool MemberDefImpl::isUNOProperty ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5495 of file memberdef.cpp.

5496{
5497 return m_memSpec.isProperty();
5498}

References m_memSpec.

Referenced by getLabels().

◆ isUnretained()

bool MemberDefImpl::isUnretained ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5465 of file memberdef.cpp.

5466{
5467 return m_memSpec.isUnretained();
5468}

References m_memSpec.

Referenced by getLabels().

◆ isVariable()

bool MemberDefImpl::isVariable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5227 of file memberdef.cpp.

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

References m_mtype.

Referenced by writeDocumentation(), and writeMemberDocSimple().

◆ isWeak()

bool MemberDefImpl::isWeak ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5443 of file memberdef.cpp.

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

References m_memSpec.

Referenced by getLabels().

◆ isWritable()

bool MemberDefImpl::isWritable ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5378 of file memberdef.cpp.

5379{
5380 return m_memSpec.isWritable();
5381}

References m_memSpec.

Referenced by getLabels().

◆ livesInsideEnum()

bool MemberDefImpl::livesInsideEnum ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5602 of file memberdef.cpp.

5603{
5604 return m_livesInsideEnum;
5605}

References m_livesInsideEnum.

Referenced by setEnumScope().

◆ makeForeign()

void MemberDefImpl::makeForeign ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5946 of file memberdef.cpp.

5947{
5948 m_related = Relationship::Foreign;
5950}

References m_isLinkableCached, and m_related.

◆ makeImplementationDetail()

void MemberDefImpl::makeImplementationDetail ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 6032 of file memberdef.cpp.

6033{
6034 m_implOnly=true;
6035}

References m_implOnly.

◆ makeRelated()

void MemberDefImpl::makeRelated ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 5940 of file memberdef.cpp.

5941{
5942 m_related = Relationship::Related;
5944}

References m_isLinkableCached, and m_related.

◆ memberDeclaration()

MemberDef * MemberDefImpl::memberDeclaration ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5817 of file memberdef.cpp.

5818{
5819 return m_memDec;
5820}

References m_memDec.

◆ memberDefinition()

MemberDef * MemberDefImpl::memberDefinition ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5812 of file memberdef.cpp.

5813{
5814 return m_memDef;
5815}

References m_memDef.

◆ memberType()

MemberType MemberDefImpl::memberType ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5212 of file memberdef.cpp.

5213{
5214 return m_mtype;
5215}

References m_mtype.

Referenced by codeSymbolType().

◆ memberTypeName()

DString MemberDefImpl::memberTypeName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4144 of file memberdef.cpp.

4145{
4146 if (m_mtype == MemberType::Define)
4147 {
4148 return "macro definition";
4149 }
4150 else if (m_mtype == MemberType::Enumeration)
4151 {
4152 return "enumeration";
4153 }
4154 return to_string_lower(m_mtype);
4155}

References m_mtype.

Referenced by warnIfUndocumented().

◆ mergeMemberSpecifiers()

void MemberDefImpl::mergeMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5890 of file memberdef.cpp.

5891{
5892 m_memSpec.merge(s);
5893}

References m_memSpec.

◆ moveArgumentList()

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

Implements MemberDefMutable.

Definition at line 4936 of file memberdef.cpp.

4937{
4938 m_defArgList = *al;
4939}

References m_defArgList.

◆ moveDeclArgumentList()

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

Implements MemberDefMutable.

Definition at line 4941 of file memberdef.cpp.

4942{
4943 m_declArgList = *al;
4944}

References m_declArgList.

◆ moveTo()

void MemberDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements MemberDef.

Definition at line 1583 of file memberdef.cpp.

1584{
1585 setOuterScope(scope);
1587 {
1588 m_classDef = toClassDef(scope);
1589 }
1590 else if (scope->definitionType()==Definition::TypeFile)
1591 {
1592 m_fileDef = toFileDef(scope);
1593 }
1594 else if (scope->definitionType()==Definition::TypeModule)
1595 {
1596 m_moduleDef = toModuleDef(scope);
1597 }
1598 else if (scope->definitionType()==Definition::TypeNamespace)
1599 {
1600 m_nspace = toNamespaceDef(scope);
1601 }
1604}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:2033
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 6183 of file memberdef.cpp.

6184{
6185 return m_numberOfFlowKW;
6186}

References m_numberOfFlowKW.

◆ objCMethodName()

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

Implements MemberDef.

Definition at line 5050 of file memberdef.cpp.

5051{
5052 DString qm;
5053 if (showStatic)
5054 {
5055 if (isStatic()) qm="+ "; else qm="- ";
5056 }
5057 qm+=name();
5058 if (!localLink) // link to method of same class
5059 {
5060 qm+=" (";
5061 qm+=getClassDef()->name();
5062 qm+=")";
5063 }
5064 return qm;
5065}

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

◆ overrideCallerGraph()

void MemberDefImpl::overrideCallerGraph ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4969 of file memberdef.cpp.

4970{
4972 if (e) Doxygen::parseSourcesNeeded = true;
4973}
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 4963 of file memberdef.cpp.

4964{
4966 if (e) Doxygen::parseSourcesNeeded = true;
4967}

References m_hasCallGraph, and Doxygen::parseSourcesNeeded.

◆ overrideEnumValues()

void MemberDefImpl::overrideEnumValues ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4987 of file memberdef.cpp.

4988{
4990}

References m_hasEnumValues.

◆ overrideInlineSource()

void MemberDefImpl::overrideInlineSource ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4992 of file memberdef.cpp.

4993{
4995}

References m_hasInlineSource.

◆ overrideReferencedByRelation()

void MemberDefImpl::overrideReferencedByRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4975 of file memberdef.cpp.

4976{
4978 if (e) Doxygen::parseSourcesNeeded = true;
4979}

References m_hasReferencedByRelation, and Doxygen::parseSourcesNeeded.

◆ overrideReferencesRelation()

void MemberDefImpl::overrideReferencesRelation ( bool e)
overridevirtual

Implements MemberDefMutable.

Definition at line 4981 of file memberdef.cpp.

4982{
4984 if (e) Doxygen::parseSourcesNeeded = true;
4985}

References m_hasReferencesRelation, and Doxygen::parseSourcesNeeded.

◆ protection()

Protection MemberDefImpl::protection ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5207 of file memberdef.cpp.

5208{
5209 return m_prot;
5210}

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

5016{
5017 if (isObjCMethod())
5018 {
5019 DString qm;
5020 if (isStatic()) qm="+"; else qm="-";
5021 qm+="[";
5022 qm+=getClassDef()->name()+" ";
5023 qm+=name();
5024 qm+="]";
5025 return qm;
5026 }
5027 else if (m_enumScope && m_enumScope->isStrong())
5028 {
5029 return m_enumScope->qualifiedName()+
5031 localName();
5032 }
5033 else
5034 {
5036 }
5037}
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 6548 of file memberdef.cpp.

6549{
6550 return m_redefineCount;
6551}

References m_redefineCount.

◆ reimplementedBy()

const MemberVector & MemberDefImpl::reimplementedBy ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1633 of file memberdef.cpp.

1634{
1635 return m_redefinedBy;
1636}

References m_redefinedBy.

Referenced by _countReimplementedBy(), and _writeReimplementedBy().

◆ reimplements()

const MemberDef * MemberDefImpl::reimplements ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1628 of file memberdef.cpp.

1629{
1630 return m_redefines;
1631}

References m_redefines.

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

◆ relatedAlso()

ClassDef * MemberDefImpl::relatedAlso ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5567 of file memberdef.cpp.

5568{
5569 return m_relatedAlso;
5570}

References m_relatedAlso.

◆ requiresClause()

DString MemberDefImpl::requiresClause ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6108 of file memberdef.cpp.

6109{
6110 return m_requiresClause;
6111}

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

5658{
5659 ArgumentList &decAl = m_declArgList;
5660 ArgumentList &defAl = m_defArgList;
5661 const ArgumentList &decAlSrc = md->declArgumentList();
5662 const ArgumentList &defAlSrc = md->argumentList();
5663 auto decSrc = decAlSrc.begin(), defSrc = defAlSrc.begin();
5664 for (auto decIt = decAl.begin(), defIt = defAl.begin();
5665 decIt != decAl.end() && defIt != defAl.end() && decSrc != decAlSrc.end() && defSrc != defAlSrc.end();
5666 ++decIt, ++defIt, ++decSrc, ++defSrc++)
5667 {
5668 Argument &decA = *decIt;
5669 Argument &defA = *defIt;
5670 const Argument &decAS = *decSrc;
5671 const Argument &defAS = *defSrc;
5672 if (decA.name.empty())
5673 {
5674 if (!defA.name.empty())
5675 {
5676 decA.name = defA.name;
5677 }
5678 else if (!decAS.name.empty())
5679 {
5680 decA.name = decAS.name;
5681 }
5682 else if (!defAS.name.empty())
5683 {
5684 decA.name = defAS.name;
5685 }
5686 }
5687 if (defA.name.empty())
5688 {
5689 if (!decA.name.empty())
5690 {
5691 defA.name = decA.name;
5692 }
5693 else if (!decAS.name.empty())
5694 {
5695 defA.name = decAS.name;
5696 }
5697 else if (!defAS.name.empty())
5698 {
5699 defA.name = defAS.name;
5700 }
5701 }
5702 }
5703}

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

4414{
4415 DString memAnchor = name();
4416 if (!m_args.empty()) memAnchor+=m_args;
4417 if (m_memSpec.isAlias()) // this is for backward compatibility
4418 {
4419 memAnchor.prepend(" = "+m_initializer);
4420 }
4421 memAnchor.prepend(definition()); // actually the method name is now included
4422 // twice, which is silly, but we keep it this way for backward
4423 // compatibility.
4424
4425 // include number of template arguments as well,
4426 // to distinguish between two template
4427 // specializations that only differ in the template parameters.
4429 {
4430 char buf[20];
4431 snprintf(buf,20,"%d:",static_cast<int>(m_tArgList.size()));
4432 buf[19]='\0';
4433 memAnchor.prepend(buf);
4434 }
4435 if (!m_requiresClause.empty())
4436 {
4437 memAnchor+=" "+m_requiresClause;
4438 }
4439 if (m_redefineCount>0)
4440 {
4441 char buf[20];
4442 snprintf(buf,20,":%d",m_redefineCount);
4443 buf[19]='\0';
4444 memAnchor.append(buf);
4445 }
4446
4447 // convert to md5 hash
4448 m_anc = "a"+md5str(memAnchor.view());
4449}
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 5979 of file memberdef.cpp.

5980{
5981 m_annEnumType = md;
5982}

References m_annEnumType.

◆ setAnonymousMemberForDeclaration()

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

Implements MemberDefMutable.

Definition at line 5984 of file memberdef.cpp.

5985{
5986 m_annMemberForDecl = md;
5987}

References m_annMemberForDecl.

◆ setAnonymousMemberForDetails()

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

Implements MemberDefMutable.

Definition at line 5989 of file memberdef.cpp.

5990{
5992}

References m_annMemberForDetails.

◆ setArgsString()

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

Implements MemberDefMutable.

Definition at line 5957 of file memberdef.cpp.

5958{
5959 m_args = as;
5960}

References m_args.

◆ setBitfields()

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

Implements MemberDefMutable.

Definition at line 5912 of file memberdef.cpp.

5913{
5914 m_bitfields = DString(s).simplifyWhiteSpace();
5915}
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 1913 of file memberdef.cpp.

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

6079{
6080 m_category = def;
6081}

References m_category.

◆ setCategoryRelation()

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

Implements MemberDefMutable.

Definition at line 6088 of file memberdef.cpp.

6089{
6090 m_categoryRelation = md;
6091}

References m_categoryRelation.

◆ setClassDefOfAnonymousType()

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

Implements MemberDefMutable.

Definition at line 2023 of file memberdef.cpp.

2024{
2025 m_anonymousType = cd;
2026}

References m_anonymousType.

◆ setDeclFile()

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

Implements MemberDefMutable.

Definition at line 6020 of file memberdef.cpp.

6021{
6022 m_declFileName = df;
6023 m_declLine = line;
6024 m_declColumn = column;
6025}

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

5857{
5858 m_def=d;
5859}

References m_def.

◆ setDefinitionTemplateParameterLists()

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

Implements MemberDefMutable.

Definition at line 1965 of file memberdef.cpp.

1966{
1967 m_defTmpArgLists = lists;
1968}

References m_defTmpArgLists.

◆ setDocsForDefinition()

void MemberDefImpl::setDocsForDefinition ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 6048 of file memberdef.cpp.

6049{
6051}

References m_docsForDefinition.

◆ setDocTransferDone()

void MemberDefImpl::setDocTransferDone ( )
overridevirtual

Implements MemberDefMutable.

Definition at line 1919 of file memberdef.cpp.

1920{
1921 m_docTransferDone = true;
1922}

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

1908{
1911}
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 5974 of file memberdef.cpp.

5975{
5976 m_docEnumValues=value;
5977}

References m_docEnumValues.

◆ setEnumBaseType()

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

Implements MemberDefMutable.

Definition at line 6093 of file memberdef.cpp.

6094{
6095 m_enumBaseType = type;
6096}

References m_enumBaseType.

◆ setEnumClassScope()

void MemberDefImpl::setEnumClassScope ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5967 of file memberdef.cpp.

5968{
5969 m_classDef = cd;
5972}

References m_classDef, m_isConstructorCached, and m_isLinkableCached.

◆ setEnumScope()

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

Implements MemberDefMutable.

Definition at line 4465 of file memberdef.cpp.

4466{
4467 m_enumScope=md;
4469 if (md->getGroupDef())
4470 {
4471 m_group = md->getGroupDef();
4472 m_grouppri = md->getGroupPri();
4477 }
4478}
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 6007 of file memberdef.cpp.

6008{
6009 m_explExt=b;
6010 if (b)
6011 {
6012 setDeclFile(df,line,column);
6013 }
6014 else
6015 {
6016 setDefFile(df,line,column);
6017 }
6018}
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 1924 of file memberdef.cpp.

1925{
1927}

References m_explicitInherited.

◆ setFileDef()

void MemberDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5861 of file memberdef.cpp.

5862{
5863 m_fileDef=fd;
5867}

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

6044{
6046}

References m_formalTemplateArguments.

◆ setGroupAlias()

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

Implements MemberDefMutable.

Definition at line 6053 of file memberdef.cpp.

6054{
6055 m_groupAlias = md;
6056}

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

4454{
4455 //printf("%s MemberDefImpl::setGroupDef(%s)\n",qPrint(name()),qPrint(gd->name()));
4456 m_group=gd;
4457 m_grouppri=pri;
4458 m_groupFileName=fileName;
4459 m_groupStartLine=startLine;
4460 m_groupHasDocs=hasDocs;
4461 m_groupMember=member;
4463}

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

1936{
1939}
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 1929 of file memberdef.cpp.

1930{
1933}
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 6479 of file memberdef.cpp.

6481{
6482 if (!force || includeName.empty()) return;
6483 //printf("MemberDefImpl::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
6484 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
6485 m_incInfo->fileDef = fd;
6486 m_incInfo->includeName = includeName;
6488}
@ 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 5952 of file memberdef.cpp.

5953{
5954 m_docProvider = md;
5955}

References m_docProvider.

◆ setInitializer()

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

Implements MemberDefMutable.

Definition at line 4559 of file memberdef.cpp.

4560{
4561 size_t indent=0;
4563 int l=static_cast<int>(m_initializer.length());
4564 int p=l-1;
4565 while (p>=0 && isspace(static_cast<uint8_t>(m_initializer.at(p)))) p--;
4569
4570 //printf("%s::setInitializer(%s)\n",qPrint(name()),qPrint(m_initializer));
4571}
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:5203
void stripIndentationVerbatim(DString &doc, size_t indentationLevel, bool skipFirstLine)
Definition util.cpp:4781

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

5918{
5919 if (lines!=-1)
5920 {
5921 m_userInitLines=lines;
5922 }
5923}

References m_userInitLines.

◆ setMemberClass()

void MemberDefImpl::setMemberClass ( ClassDef * cd)
overridevirtual

◆ setMemberDeclaration()

void MemberDefImpl::setMemberDeclaration ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6068 of file memberdef.cpp.

6069{
6070 m_memDec=md;
6071}

References m_memDec.

◆ setMemberDefinition()

void MemberDefImpl::setMemberDefinition ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 6063 of file memberdef.cpp.

6064{
6065 m_memDef=md;
6066}

References m_memDef.

◆ setMemberGroup()

void MemberDefImpl::setMemberGroup ( MemberGroup * grp)
overridevirtual

Implements MemberDef.

Definition at line 4399 of file memberdef.cpp.

4400{
4401 m_memberGroup = grp;
4402}

References m_memberGroup.

◆ setMemberGroupId()

void MemberDefImpl::setMemberGroupId ( int id)
overridevirtual

Implements MemberDefMutable.

Definition at line 6027 of file memberdef.cpp.

6028{
6029 m_grpId=id;
6030}
virtual DString id() const =0

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

◆ setMemberSpecifiers()

void MemberDefImpl::setMemberSpecifiers ( TypeSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5880 of file memberdef.cpp.

5881{
5882 m_memSpec=s;
5883}

References m_memSpec.

◆ setMemberType()

void MemberDefImpl::setMemberType ( MemberType t)
overridevirtual

Implements MemberDefMutable.

Definition at line 5850 of file memberdef.cpp.

5851{
5852 m_mtype=t;
5854}

References m_isLinkableCached, and m_mtype.

◆ setModuleDef()

void MemberDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements MemberDefMutable.

Definition at line 5869 of file memberdef.cpp.

5870{
5871 m_moduleDef=mod;
5872}

References m_moduleDef.

◆ setNamespace()

void MemberDefImpl::setNamespace ( NamespaceDef * nd)
overridevirtual

Implements MemberDefMutable.

Definition at line 4488 of file memberdef.cpp.

4489{
4490 m_nspace=nd;
4491 setOuterScope(nd);
4492}

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

◆ setProtection()

void MemberDefImpl::setProtection ( Protection p)
overridevirtual

Implements MemberDefMutable.

Definition at line 5874 of file memberdef.cpp.

5875{
5876 m_prot=p;
5878}

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

5995{
5996 m_proto=p;
5997 if (p)
5998 {
5999 setDeclFile(df,line,column);
6000 }
6001 else
6002 {
6003 setDefFile(df,line,column);
6004 }
6005}

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

◆ setReadAccessor()

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

Implements MemberDefMutable.

Definition at line 5925 of file memberdef.cpp.

5926{
5927 m_read=r;
5928}

References m_read.

◆ setRedefineCount()

void MemberDefImpl::setRedefineCount ( int count)
overridevirtual

Implements MemberDefMutable.

Definition at line 6553 of file memberdef.cpp.

6554{
6555 m_redefineCount=count;
6556}

References m_redefineCount.

◆ setReimplements()

void MemberDefImpl::setReimplements ( MemberDef * md)
overridevirtual

Implements MemberDefMutable.

Definition at line 1607 of file memberdef.cpp.

1608{
1609 m_redefines = md;
1610}

References m_redefines.

◆ setRelatedAlso()

void MemberDefImpl::setRelatedAlso ( ClassDef * cd)
overridevirtual

Implements MemberDefMutable.

Definition at line 5962 of file memberdef.cpp.

5963{
5964 m_relatedAlso=cd;
5965}

References m_relatedAlso.

◆ setRequiresClause()

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

Implements MemberDefMutable.

Definition at line 6103 of file memberdef.cpp.

6104{
6105 m_requiresClause = req;
6106}

References m_requiresClause.

◆ setSectionList()

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

Implements MemberDefMutable.

Definition at line 4631 of file memberdef.cpp.

4632{
4633 //printf("MemberDefImpl::setSectionList(%s,%p) name=%s\n",qPrint(d->name()),sl,qPrint(name()));
4634 m_sectionMap.emplace(container,sl);
4635}

References m_sectionMap.

◆ setTagInfo()

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

Implements MemberDefMutable.

Definition at line 5039 of file memberdef.cpp.

5040{
5041 if (ti)
5042 {
5043 //printf("%s: Setting tag name=%s anchor=%s\n",qPrint(name()),qPrint(ti->tagName),qPrint(ti->anchor));
5044 m_anc=ti->anchor;
5045 setReference(ti->tagName);
5047 }
5048}
void setReference(const DString &r) override
DString stripExtension(const DString &fName)
Definition util.cpp:3964

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

6038{
6041}

References m_isLinkableCached, and m_templateMaster.

◆ setTemplateSpecialization()

void MemberDefImpl::setTemplateSpecialization ( bool b)
overridevirtual

Implements MemberDefMutable.

Definition at line 5935 of file memberdef.cpp.

5936{
5937 m_tspec=b;
5938}

References m_tspec.

◆ setType()

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

Implements MemberDefMutable.

Definition at line 4951 of file memberdef.cpp.

4952{
4953 m_type = t;
4954}

References m_type.

◆ setTypeConstraints()

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

Implements MemberDefMutable.

Definition at line 4946 of file memberdef.cpp.

4947{
4948 m_typeConstraints = al;
4949}

References m_typeConstraints.

◆ setVhdlSpecifiers()

void MemberDefImpl::setVhdlSpecifiers ( VhdlSpecifier s)
overridevirtual

Implements MemberDefMutable.

Definition at line 5885 of file memberdef.cpp.

5886{
5887 m_vhdlSpec=s;
5888}

References m_vhdlSpec.

◆ setWriteAccessor()

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

Implements MemberDefMutable.

Definition at line 5930 of file memberdef.cpp.

5931{
5932 m_write=w;
5933}

References m_write.

◆ sourceRefName()

DString MemberDefImpl::sourceRefName ( ) const
overridevirtual

Implements MemberDef.

Definition at line 1673 of file memberdef.cpp.

1674{
1675 DString n = name();
1676 DString s = getScopeString();
1677
1678 if (!s.empty())
1679 {
1680 n.prepend(s+"::");
1681 }
1682 else if (isStatic() && getFileDef())
1683 {
1684 n.prepend(getFileDef()->name()+":");
1685 }
1686 if (isCallable())
1687 {
1688 n.append(argsString());
1689 }
1690 return n;
1691}
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 5705 of file memberdef.cpp.

5706{
5707 return m_tArgList;
5708}

References m_tArgList.

◆ templateMaster()

const MemberDef * MemberDefImpl::templateMaster ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5781 of file memberdef.cpp.

5782{
5783 return m_templateMaster;
5784}

References m_templateMaster.

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

◆ typeConstraints()

const ArgumentList & MemberDefImpl::typeConstraints ( ) const
overridevirtual

Implements MemberDef.

Definition at line 6473 of file memberdef.cpp.

6474{
6475 return m_typeConstraints;
6476}

References m_typeConstraints.

◆ typeString()

DString MemberDefImpl::typeString ( ) const
overridevirtual

Implements MemberDef.

Definition at line 5082 of file memberdef.cpp.

5083{
5084 return m_type;
5085}

References m_type.

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

◆ virtualness()

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

Implements MemberDef.

Definition at line 4637 of file memberdef.cpp.

4638{
4639 if (count>25)
4640 {
4642 "Internal inconsistency: recursion detected in overload relation for member {}!",name());
4643 return Specifier::Normal;
4644 }
4645 Specifier v = m_virt;
4646 const MemberDef *rmd = reimplements();
4647 while (rmd && v==Specifier::Normal)
4648 {
4649 v = rmd->virtualness(count+1)==Specifier::Normal ? Specifier::Normal : Specifier::Virtual;
4650 rmd = rmd->reimplements();
4651 }
4652 return v;
4653}
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 4229 of file memberdef.cpp.

4230{
4231 bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
4232 bool extractStatic = Config_getBool(EXTRACT_STATIC);
4233 return (!isAnonymous() &&
4234 (!hideUndocMembers || hasDocumentation()) &&
4235 (!isStatic() || extractStatic) &&
4236 isLinkable()
4237 );
4238}

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

◆ warnIfUndocumented()

void MemberDefImpl::warnIfUndocumented ( ) const
overridevirtual

Implements MemberDef.

Definition at line 4157 of file memberdef.cpp.

4158{
4159 /*
4160 * Removed bug_303020:
4161 * if (m_memberGroup) return;
4162 */
4163 const ClassDef *cd = getClassDef();
4164 const NamespaceDef *nd = getNamespaceDef();
4165 const FileDef *fd = getFileDef();
4166 const GroupDef *gd = getGroupDef();
4167 const Definition *d=nullptr;
4168 DString t;
4169 if (cd)
4170 {
4171 t=cd->compoundTypeString();
4172 d=cd;
4173 }
4174 else if (nd)
4175 {
4176 t=nd->compoundTypeString();
4177 d=nd;
4178 }
4179 else if (gd)
4180 {
4181 t="group";
4182 d=gd;
4183 }
4184 else
4185 {
4186 t="file";
4187 d=fd;
4188 }
4189 bool extractAll = Config_getBool(EXTRACT_ALL);
4190
4191 //printf("%s:warnIfUndoc: hasUserDocs=%d isFriendClass=%d protection=%d isRef=%d isDel=%d\n",
4192 // qPrint(name()),
4193 // hasUserDocumentation(),isFriendClass(),protectionLevelVisible(m_prot),isReference(),isDeleted());
4194 if ((!hasUserDocumentation() && !extractAll) &&
4195 !isFriendClass() &&
4196 name().find('@')==DString::npos && d && d->name().find('@')==DString::npos &&
4199 !isReference() && !isDeleted()
4200 )
4201 {
4202 SrcLangExt lang = getLanguage();
4203 DString sep = getLanguageSpecificSeparator(lang,true);
4204 warn_undoc(getDefFileName(),getDefLine(),"Member {}{} ({}) of {} {} is not documented.",
4206 substitute(d->name(),"::",sep));
4207 }
4208 else if (!hasDetailedDescription())
4209 {
4211 }
4212
4213 // if it is an enum, we check that its members are documented
4214 if (!extractAll && isEnumerate() && Config_getBool(WARN_IF_UNDOC_ENUM_VAL))
4215 {
4216 for (const auto &fmd : enumFieldList())
4217 {
4218 if (!fmd->isLinkableInProject())
4219 {
4220 SrcLangExt lang = getLanguage();
4221 DString sep = getLanguageSpecificSeparator(lang,true);
4222 warn(fmd->getDefFileName(),fmd->getDefLine(), "Documentation for enum member '{}{}{}' is missing.",
4223 qualifiedName(),sep,fmd->name());
4224 }
4225 }
4226 }
4227}
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 4319 of file memberdef.cpp.

4320{
4321 DString returnType = typeString();
4322 bool isFortran = getLanguage()==SrcLangExt::Fortran;
4323 bool isFortranSubroutine = isFortran && returnType.find("subroutine")!=DString::npos;
4324
4325 bool isVoidReturn = returnType=="void" || returnType.endsWith(" void");
4326 if (!isVoidReturn && (returnType=="auto" || returnType.endsWith(" auto")))
4327 {
4328 const ArgumentList &defArgList=isDocsForDefinition() ? argumentList() : declArgumentList();
4329 if (!defArgList.trailingReturnType().empty())
4330 {
4331 DString strippedTrailingReturn = stripTrailingReturn(defArgList.trailingReturnType());
4332 isVoidReturn = (strippedTrailingReturn=="void") || (strippedTrailingReturn.endsWith(" void"));
4333 }
4334 }
4335 if (!Config_getBool(EXTRACT_ALL) &&
4336 Config_getBool(WARN_IF_UNDOCUMENTED) &&
4337 Config_getBool(WARN_NO_PARAMDOC) &&
4338 isFunction() &&
4339 !isDeleted() &&
4340 !isReference() &&
4342 {
4344 {
4346 "parameters of member {} are not documented",
4347 qualifiedName());
4348 }
4350 hasDocumentation() && !returnType.empty() &&
4351 !( // not one of the cases where nothing is returned
4352 isVoidReturn || // void return type
4353 isFortranSubroutine || // fortran subroutine
4354 isConstructor() || // a constructor
4355 isDestructor() || // or a destructor
4356 isFriend() // or a friend
4357 )
4358 )
4359 {
4361 "return type of member {} is not documented",
4362 qualifiedName());
4363 }
4364 }
4365 if (Config_getBool(WARN_IF_DOC_ERROR) &&
4367 (isVoidReturn || // void return type
4368 isFortranSubroutine || // fortran subroutine
4369 isConstructor() || // a constructor
4370 isDestructor())) // or destructor
4371 {
4372 warn_doc_error(docFile(),docLine(),"found documented return type for {} that does not return anything",
4373 qualifiedName());
4374 }
4375}
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 2223 of file memberdef.cpp.

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

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

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

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

1973{
1974 SrcLangExt lang = getLanguage();
1975 bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
1976 DString sep = getLanguageSpecificSeparator(lang,true);
1977 DString n = name();
1978 const ClassDef *classDef = getClassDef();
1979 const NamespaceDef *nspace = getNamespaceDef();
1980 if (!hideScopeNames)
1981 {
1982 if (m_enumScope && m_livesInsideEnum && getGroupDef()!=nullptr)
1983 {
1985 }
1986 if (classDef && (gd || mod) && !isRelated())
1987 {
1988 n.prepend(classDef->displayName()+sep);
1989 }
1990 else if (nspace && (gd || fd || mod))
1991 {
1992 n.prepend(nspace->displayName()+sep);
1993 }
1994 }
1995
1996 if (isObjCMethod())
1997 {
1998 if (isStatic()) ol.docify("+ "); else ol.docify("- ");
1999 }
2000 if (!onlyText && (isLinkable() || hasDetailedDescription())) // write link
2001 {
2002 if (m_mtype==MemberType::EnumValue && getGroupDef()==nullptr && // enum value is not grouped
2003 getEnumScope() && getEnumScope()->getGroupDef()) // but its container is
2004 {
2005 const GroupDef *enumValGroup = getEnumScope()->getGroupDef();
2006 ol.writeObjectLink(enumValGroup->getReference(),
2007 enumValGroup->getOutputFileBase(),
2008 anchor(),n);
2009 }
2010 else
2011 {
2013 }
2014 }
2015 else // write only text
2016 {
2017 ol.startBold();
2018 ol.docify(n);
2019 ol.endBold();
2020 }
2021}

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

4036{
4037 Definition *scope = getOuterScope();
4038 DString doxyName = name();
4039 DString doxyArgs = argsString();
4040 DString memAnchor = anchor();
4041 DString cfname = getOutputFileBase();
4042 DString cname;
4043 if (scope) cname = scope->name();
4044 if (doxyName.at(0)=='@')
4045 {
4046 doxyName="__unnamed__";
4047 }
4048
4049 LinkifyTextOptions options;
4050 options.setScope(scope).setFileScope(getBodyDef()).setSelf(this);
4051
4052 if (container && container->definitionType()==Definition::TypeClass &&
4053 !(toClassDef(container))->isJavaEnum())
4054 {
4056 ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
4057 ol.addLabel(cfname,memAnchor);
4058
4059 bool written=false;
4060 const ClassDef *annoClassDef=getClassDefOfAnonymousType();
4061 if (annoClassDef)
4062 {
4063 static const reg::Ex ar(R"([\w@:]*@\d+[\w@:]*)"); // anonymous type marker(s) including scope
4064 reg::Match amatch;
4065 std::string stype = m_type.str();
4066 if (reg::search(stype,amatch,ar))
4067 {
4068 size_t ai = amatch.position();
4069 size_t al = amatch.length();
4070 ol.writeObjectLink(annoClassDef->getReference(),annoClassDef->getOutputFileBase(),
4071 annoClassDef->anchor(),m_type.left(ai)+m_type.mid(ai+al));
4072 written=true;
4073 }
4074 }
4075 if (!written)
4076 {
4077 DString ts;
4078 if (isFunctionPtr())
4079 {
4080 ts = m_type + m_args;
4081 }
4082 else
4083 {
4084 ts = fieldType();
4085 }
4086 linkifyText(TextGeneratorOLImpl(ol),ts,options);
4087 }
4088 ol.endDoxyAnchor(cfname,memAnchor);
4090 }
4091
4093 ol.docify(doxyName);
4094 if (isVariable() && !argsString().empty() && !isObjCMethod() && !isFunctionPtr())
4095 {
4096 linkifyText(TextGeneratorOLImpl(ol),argsString(),LinkifyTextOptions(options).setArgumentList(&m_defArgList));
4097 }
4098 if (!m_bitfields.empty()) // add bitfields
4099 {
4100 linkifyText(TextGeneratorOLImpl(ol),m_bitfields,options);
4101 }
4102 if (hasOneLineInitializer() && !isDefine())
4103 {
4104 ol.writeString(" ");
4105 linkifyText(TextGeneratorOLImpl(ol),m_initializer.simplifyWhiteSpace(),options);
4106 }
4108
4110
4111 DString brief = briefDescription();
4112 DString detailed = documentation();
4113
4114 /* write brief description */
4115 if (!brief.empty())
4116 {
4118 briefLine(),
4119 getOuterScope()?getOuterScope():container,this,
4120 brief,
4121 DocOptions()
4122 .setSingleLine(true));
4123 }
4124
4125 /* write detailed description */
4126 if (!detailed.empty())
4127 {
4128 if (!brief.empty())
4129 {
4131 ol.lineBreak();
4133 }
4134 ol.generateDoc(docFile(),
4135 docLine(),
4136 getOuterScope()?getOuterScope():container,this,
4137 detailed+"\n",
4138 DocOptions());
4139 }
4140
4141 ol.endInlineMemberDoc();
4142}
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 4655 of file memberdef.cpp.

4656{
4657 if (!isLinkableInProject()) return;
4658 if (!showNamespaceMembers && getNamespaceDef()) return;
4659 tagFile << " <member kind=\"";
4660 if (m_mtype == MemberType::Enumeration)
4661 {
4662 tagFile << "enumeration";
4663 }
4664 else
4665 {
4666 tagFile << to_string_lower(m_mtype);
4667 }
4668 if (m_prot!=Protection::Public)
4669 {
4670 tagFile << "\" protection=\"";
4671 if (m_prot==Protection::Protected) tagFile << "protected";
4672 else if (m_prot==Protection::Package) tagFile << "package";
4673 else /* Private */ tagFile << "private";
4674 }
4675 if (m_virt!=Specifier::Normal)
4676 {
4677 tagFile << "\" virtualness=\"";
4678 if (m_virt==Specifier::Virtual) tagFile << "virtual";
4679 else /* Pure */ tagFile << "pure";
4680 }
4681 if (isStatic())
4682 {
4683 tagFile << "\" static=\"yes";
4684 }
4685 tagFile << "\">\n";
4686 if (typeString()!=DString("@"))
4687 {
4688 tagFile << " <type>" << convertToXML(typeString()) << "</type>\n";
4689 }
4690 DString fn = getOutputFileBase();
4692 tagFile << " <name>" << convertToXML(useQualifiedName ? qualifiedName() : name()) << "</name>\n";
4693 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
4694 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
4695 DString idStr = id();
4696 if (!idStr.empty())
4697 {
4698 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
4699 }
4700 tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>\n";
4701 if (isStrong())
4702 {
4703 for (const auto &fmd : m_enumFields)
4704 {
4705 if (!fmd->isReference())
4706 {
4707 tagFile << " <enumvalue file=\"" << convertToXML(fn);
4708 tagFile << "\" anchor=\"" << convertToXML(fmd->anchor());
4709 idStr = fmd->id();
4710 if (!idStr.empty())
4711 {
4712 tagFile << "\" clangid=\"" << convertToXML(idStr);
4713 }
4714 tagFile << "\">" << convertToXML(fmd->name()) << "</enumvalue>\n";
4715 }
4716 }
4717 }
4718 writeDocAnchorsToTagFile(tagFile);
4719 tagFile << " </member>\n";
4720}
void writeDocAnchorsToTagFile(TextStream &fs) const override
void addHtmlExtensionIfMissing(DString &fName)
Definition util.cpp:3940
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
Definition util.cpp:3241

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

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

◆ m_annEnumType

const MemberDef* MemberDefImpl::m_annEnumType = nullptr
private

Definition at line 408 of file memberdef.cpp.

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

◆ m_annMemberForDecl

const MemberDef* MemberDefImpl::m_annMemberForDecl = nullptr
private

◆ m_annMemberForDetails

const MemberDef* MemberDefImpl::m_annMemberForDetails = nullptr
private

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

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

◆ m_cachedTypedefTemplSpec

DString MemberDefImpl::m_cachedTypedefTemplSpec
private

Definition at line 478 of file memberdef.cpp.

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

◆ m_cachedTypedefValue

const ClassDef* MemberDefImpl::m_cachedTypedefValue = nullptr
private

Definition at line 477 of file memberdef.cpp.

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

◆ m_category

ClassDef* MemberDefImpl::m_category = nullptr
private

Definition at line 517 of file memberdef.cpp.

Referenced by _writeCategoryRelation(), category(), deepCopy(), and setCategory().

◆ m_categoryRelation

const MemberDef* MemberDefImpl::m_categoryRelation = nullptr
private

◆ m_classDef

ClassDef* MemberDefImpl::m_classDef = nullptr
private

◆ m_decl

DString MemberDefImpl::m_decl
private

Definition at line 430 of file memberdef.cpp.

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

◆ m_declArgList

◆ m_declColumn

size_t MemberDefImpl::m_declColumn = 1
private

Definition at line 521 of file memberdef.cpp.

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

◆ m_declFileName

DString MemberDefImpl::m_declFileName
private

Definition at line 519 of file memberdef.cpp.

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

◆ m_declLine

int MemberDefImpl::m_declLine = -1
private

Definition at line 520 of file memberdef.cpp.

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

◆ m_def

DString MemberDefImpl::m_def
private

Definition at line 426 of file memberdef.cpp.

Referenced by createTemplateInstanceMember(), deepCopy(), definition(), and setDefinition().

◆ m_defArgList

◆ m_defTmpArgLists

ArgumentLists MemberDefImpl::m_defTmpArgLists
private

◆ m_detailedDescriptionCachedValue

bool MemberDefImpl::m_detailedDescriptionCachedValue = false
mutableprivate

Definition at line 503 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_docEnumValues

bool MemberDefImpl::m_docEnumValues = false
private

◆ m_docProvider

const MemberDef* MemberDefImpl::m_docProvider = nullptr
private

Definition at line 482 of file memberdef.cpp.

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

◆ m_docsForDefinition

bool MemberDefImpl::m_docsForDefinition = false
private

Definition at line 514 of file memberdef.cpp.

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

◆ m_docTransferDone

bool MemberDefImpl::m_docTransferDone = false
private

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

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

◆ m_exception

DString MemberDefImpl::m_exception
private

Definition at line 435 of file memberdef.cpp.

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

◆ m_explExt

bool MemberDefImpl::m_explExt = false
private

Definition at line 511 of file memberdef.cpp.

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

◆ m_explicitInherited

bool MemberDefImpl::m_explicitInherited = false
private

Definition at line 486 of file memberdef.cpp.

Referenced by getLabels(), and setExplicitInherited().

◆ m_explicitOutputFileBase

DString MemberDefImpl::m_explicitOutputFileBase
private

Definition at line 485 of file memberdef.cpp.

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

◆ m_extraTypeChars

DString MemberDefImpl::m_extraTypeChars
private

Definition at line 437 of file memberdef.cpp.

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

◆ m_fileDef

FileDef* MemberDefImpl::m_fileDef = nullptr
private

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

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

◆ m_group

GroupDef* MemberDefImpl::m_group = nullptr
private

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

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

◆ m_groupFileName

DString MemberDefImpl::m_groupFileName
private

Definition at line 472 of file memberdef.cpp.

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

◆ m_groupHasDocs

bool MemberDefImpl::m_groupHasDocs = false
private

Definition at line 513 of file memberdef.cpp.

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

◆ m_groupMember

MemberDef* MemberDefImpl::m_groupMember = nullptr
private

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

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

◆ m_groupStartLine

int MemberDefImpl::m_groupStartLine = 0
private

Definition at line 473 of file memberdef.cpp.

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

◆ m_grpId

int MemberDefImpl::m_grpId = 0
private

Definition at line 468 of file memberdef.cpp.

Referenced by deepCopy(), getMemberGroupId(), init(), and setMemberGroupId().

◆ m_hasCallerGraph

bool MemberDefImpl::m_hasCallerGraph = false
private

◆ m_hasCallGraph

bool MemberDefImpl::m_hasCallGraph = false
private

Definition at line 505 of file memberdef.cpp.

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

◆ m_hasDetailedDescriptionCached

bool MemberDefImpl::m_hasDetailedDescriptionCached = false
mutableprivate

Definition at line 502 of file memberdef.cpp.

Referenced by deepCopy(), and hasDetailedDescription().

◆ m_hasDocumentedParams

bool MemberDefImpl::m_hasDocumentedParams = false
mutableprivate

Definition at line 494 of file memberdef.cpp.

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

◆ m_hasDocumentedReturnType

bool MemberDefImpl::m_hasDocumentedReturnType = false
mutableprivate

Definition at line 495 of file memberdef.cpp.

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

◆ m_hasEnumValues

bool MemberDefImpl::m_hasEnumValues = false
private

Definition at line 510 of file memberdef.cpp.

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

◆ m_hasInlineSource

bool MemberDefImpl::m_hasInlineSource = false
private

Definition at line 509 of file memberdef.cpp.

Referenced by deepCopy(), hasInlineSource(), init(), and overrideInlineSource().

◆ m_hasReferencedByRelation

bool MemberDefImpl::m_hasReferencedByRelation = false
private

◆ m_hasReferencesRelation

bool MemberDefImpl::m_hasReferencesRelation = false
private

Definition at line 508 of file memberdef.cpp.

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

◆ m_implOnly

bool MemberDefImpl::m_implOnly = false
private

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

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

◆ m_isDMember

bool MemberDefImpl::m_isDMember = false
private

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

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

◆ m_maxInitLines

int MemberDefImpl::m_maxInitLines = 0
private

Definition at line 446 of file memberdef.cpp.

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

◆ m_memberGroup

MemberGroup* MemberDefImpl::m_memberGroup = nullptr
private

Definition at line 469 of file memberdef.cpp.

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

◆ m_memDec

MemberDef* MemberDefImpl::m_memDec = nullptr
private

Definition at line 417 of file memberdef.cpp.

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

◆ m_memDef

MemberDef* MemberDefImpl::m_memDef = nullptr
private

Definition at line 416 of file memberdef.cpp.

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

◆ m_memSpec

◆ m_metaData

DString MemberDefImpl::m_metaData
private

Definition at line 459 of file memberdef.cpp.

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

◆ m_moduleDef

ModuleDef* MemberDefImpl::m_moduleDef = nullptr
private

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

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

◆ m_numberOfFlowKW

int MemberDefImpl::m_numberOfFlowKW = 0
private

Definition at line 522 of file memberdef.cpp.

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

◆ m_prot

◆ m_proto

bool MemberDefImpl::m_proto = false
private

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

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

◆ m_redefineCount

int MemberDefImpl::m_redefineCount = 0
private

Definition at line 523 of file memberdef.cpp.

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

◆ m_redefinedBy

MemberVector MemberDefImpl::m_redefinedBy
private

Definition at line 414 of file memberdef.cpp.

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

◆ m_redefines

MemberDef* MemberDefImpl::m_redefines = nullptr
private

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

Referenced by deepCopy(), init(), isTemplateSpecialization(), and setTemplateSpecialization().

◆ m_type

◆ m_typeConstraints

ArgumentList MemberDefImpl::m_typeConstraints
private

◆ m_userInitLines

int MemberDefImpl::m_userInitLines = 0
private

◆ m_vhdlSpec

VhdlSpecifier MemberDefImpl::m_vhdlSpec
private

Definition at line 444 of file memberdef.cpp.

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

◆ m_virt

◆ m_write

DString MemberDefImpl::m_write
private

Definition at line 434 of file memberdef.cpp.

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


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