Doxygen
Loading...
Searching...
No Matches
ClassDefImpl Class Reference

Implementation of the ClassDef interface. More...

Inheritance diagram for ClassDefImpl:
Collaboration diagram for ClassDefImpl:

Public Member Functions

 ClassDefImpl (const QCString &fileName, int startLine, int startColumn, const QCString &name, CompoundType ct, const QCString &ref=QCString(), const QCString &fName=QCString(), bool isSymbol=TRUE, bool isJavaEnum=FALSE)
DefType definitionType () const override
std::unique_ptr< ClassDefdeepCopy (const QCString &name) const override
void moveTo (Definition *) override
CodeSymbolType codeSymbolType () const override
QCString getOutputFileBase () const override
QCString getInstanceOutputFileBase () const override
QCString getSourceFileBase () const override
QCString getReference () const override
bool isReference () const override
bool isLocal () const override
 Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES.
ClassLinkedRefMap getClasses () const override
 returns the classes nested into this class
bool hasDocumentation () const override
bool hasDetailedDescription () const override
 returns TRUE if this class has a non-empty detailed description
QCString collaborationGraphFileName () const override
 returns the file name to use for the collaboration graph
QCString inheritanceGraphFileName () const override
 returns the file name to use for the inheritance graph
QCString displayName (bool includeScope=TRUE) const override
CompoundType compoundType () const override
 Returns the type of compound this is, i.e.
QCString compoundTypeString () const override
 Returns the type of compound as a string.
const BaseClassListbaseClasses () const override
 Returns the list of base classes from which this class directly inherits.
void updateBaseClasses (const BaseClassList &bcd) override
 Update the list of base classes to the one passed.
const BaseClassListsubClasses () const override
 Returns the list of sub classes that directly derive from this class.
void updateSubClasses (const BaseClassList &bcd) override
 Update the list of sub classes to the one passed.
const MemberNameInfoLinkedMapmemberNameInfoLinkedMap () const override
 Returns a dictionary of all members.
Protection protection () const override
 Return the protection level (Public,Protected,Private) in which this compound was found.
bool isLinkableInProject () const override
bool isLinkable () const override
bool isVisibleInHierarchy () const override
bool visibleInParentsDeclList () const override
 show this class in the declaration section of its parent?
const ArgumentListtemplateArguments () const override
 Returns the template arguments of this class.
FileDefgetFileDef () const override
 Returns the namespace this compound is in, or 0 if it has a global scope.
ModuleDefgetModuleDef () const override
 Returns the C++20 module in which this compound's definition can be found.
const MemberDefgetMemberByName (const QCString &) const override
 Returns the member with the given name.
int isBaseClass (const ClassDef *bcd, bool followInstances, const QCString &templSpec) const override
 Returns TRUE iff bcd is a direct or indirect base class of this class.
bool isSubClass (ClassDef *bcd, int level=0) const override
 Returns TRUE iff bcd is a direct or indirect sub class of this class.
bool isAccessibleMember (const MemberDef *md) const override
 returns TRUE iff md is a member of this class or of the the public/protected members of a base class
const TemplateInstanceListgetTemplateInstances () const override
 Returns a sorted dictionary with all template instances found for this template class.
const ClassDeftemplateMaster () const override
 Returns the template master of which this class is an instance.
bool isTemplate () const override
 Returns TRUE if this class is a template.
const IncludeInfoincludeInfo () const override
const UsesClassListusedImplementationClasses () const override
const UsesClassListusedByImplementationClasses () const override
const ConstraintClassListtemplateTypeConstraints () const override
bool isTemplateArgument () const override
const DefinitionfindInnerCompound (const QCString &name) const override
ArgumentLists getTemplateParameterLists () const override
 Returns the template parameter lists that form the template declaration of this class.
QCString qualifiedNameWithTemplateParameters (const ArgumentLists *actualParams=nullptr, uint32_t *actualParamIndex=nullptr) const override
bool isAbstract () const override
 Returns TRUE if there is at least one pure virtual member in this class.
bool isObjectiveC () const override
 Returns TRUE if this class is implemented in Objective-C.
bool isFortran () const override
 Returns TRUE if this class is implemented in Fortran.
bool isCSharp () const override
 Returns TRUE if this class is implemented in C#.
bool isFinal () const override
 Returns TRUE if this class is marked as final.
bool isSealed () const override
 Returns TRUE if this class is marked as sealed.
bool isPublished () const override
 Returns TRUE if this class is marked as published.
bool isExtension () const override
 Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category).
bool isForwardDeclared () const override
 Returns TRUE if this class represents a forward declaration of a template class.
bool isInterface () const override
 Returns TRUE if this class represents an interface.
ClassDefcategoryOf () const override
 Returns the class of which this is a category (Objective-C only).
QCString className () const override
 Returns the name of the class including outer classes, but not including namespaces.
MemberListgetMemberList (MemberListType lt) const override
 Returns the members in the list identified by lt.
const MemberListsgetMemberLists () const override
 Returns the list containing the list of members sorted per type.
const MemberGroupListgetMemberGroups () const override
 Returns the member groups defined for this class.
const TemplateNameMapgetTemplateBaseClassNames () const override
bool isUsedOnly () const override
QCString anchor () const override
bool isEmbeddedInOuterScope () const override
bool isSimple () const override
const ClassDeftagLessReference () const override
const MemberDefisSmartPointer () const override
bool isJavaEnum () const override
QCString title () const override
QCString generatedFromFiles () const override
const FileListusedFiles () const override
const ArgumentListtypeConstraints () const override
const ExampleListgetExamples () const override
bool hasExamples () const override
QCString getMemberListFileName () const override
bool subGrouping () const override
bool isSliceLocal () const override
bool hasNonReferenceSuperClass () const override
QCString requiresClause () const override
StringVector getQualifiers () const override
bool containsOverload (const MemberDef *md) const override
bool isImplicitTemplateInstance () const override
ClassDefinsertTemplateInstance (const QCString &fileName, int startLine, int startColumn, const QCString &templSpec, bool &freshInstance) override
void insertBaseClass (ClassDef *, const QCString &name, Protection p, Specifier s, const QCString &t=QCString()) override
void insertSubClass (ClassDef *, Protection p, Specifier s, const QCString &t=QCString()) override
void insertExplicitTemplateInstance (ClassDef *instance, const QCString &spec) override
void setIncludeFile (FileDef *fd, const QCString &incName, bool local, bool force) override
void insertMember (MemberDef *) override
void insertUsedFile (const FileDef *) override
bool addExample (const QCString &anchor, const QCString &name, const QCString &file) override
void mergeCategory (ClassDef *category) override
void setFileDef (FileDef *fd) override
void setModuleDef (ModuleDef *mod) override
void setSubGrouping (bool enabled) override
void setProtection (Protection p) override
void setGroupDefForAllMembers (GroupDef *g, Grouping::GroupPri_t pri, const QCString &fileName, int startLine, bool hasDocs) override
void addInnerCompound (Definition *d) override
void addUsedClass (ClassDef *cd, const QCString &accessName, Protection prot) override
void addUsedByClass (ClassDef *cd, const QCString &accessName, Protection prot) override
void setIsStatic (bool b) override
void setCompoundType (CompoundType t) override
void setClassName (const QCString &name) override
void setClassSpecifier (TypeSpecifier spec) override
void addQualifiers (const StringVector &qualifiers) override
void setTemplateArguments (const ArgumentList &al) override
void setTemplateBaseClassNames (const TemplateNameMap &templateNames) override
void setTemplateMaster (const ClassDef *tm) override
void setImplicitTemplateInstance (bool b) override
void setTypeConstraints (const ArgumentList &al) override
void addMemberToTemplateInstance (const MemberDef *md, const ArgumentList &templateArguments, const QCString &templSpec) override
void addMembersToTemplateInstance (const ClassDef *cd, const ArgumentList &templateArguments, const QCString &templSpec) override
void makeTemplateArgument (bool b=TRUE) override
void setCategoryOf (ClassDef *cd) override
void setUsedOnly (bool b) override
void setTagLessReference (const ClassDef *cd) override
void setMetaData (const QCString &md) override
void findSectionsInDocumentation () override
void addMembersToMemberGroup () override
void addListReferences () override
void addRequirementReferences () override
void addTypeConstraints () override
void computeAnchors () override
void mergeMembers () override
void sortMemberLists () override
void distributeMemberGroupDocumentation () override
void writeDocumentation (OutputList &ol) const override
void writeDocumentationForInnerClasses (OutputList &ol) const override
void writeMemberPages (OutputList &ol) const override
void writeMemberList (OutputList &ol) const override
void writeDeclaration (OutputList &ol, const MemberDef *md, bool inGroup, int indentLevel, const ClassDef *inheritedFrom, const QCString &inheritId) const override
void writeQuickMemberLinks (OutputList &ol, const MemberDef *md) const override
void writePageNavigation (OutputList &ol) const override
void writeSummaryLinks (OutputList &ol) const override
void reclassifyMember (MemberDefMutable *md, MemberType t) override
void writeInlineDocumentation (OutputList &ol) const override
 Write class documentation inside another container (i.e.
void writeDeclarationLink (OutputList &ol, bool &found, const QCString &header, bool localNames) const override
void removeMemberFromLists (MemberDef *md) override
void setAnonymousEnumType () override
void countMembers () override
void sortAllMembersList () override
void addGroupedInheritedMembers (OutputList &ol, MemberListType lt, const ClassDef *inheritedFrom, const QCString &inheritId) const override
void writeTagFile (TextStream &) const override
int countMembersIncludingGrouped (MemberListType lt, const ClassDef *inheritedFrom, bool additional) const override
int countMemberDeclarations (MemberListType lt, const ClassDef *inheritedFrom, MemberListType lt2, bool invert, bool showAlways, ClassDefSet &visitedClasses) const override
void writeMemberDeclarations (OutputList &ol, ClassDefSet &visitedClasses, MemberListType lt, const QCString &title, const QCString &subTitle=QCString(), bool showInline=FALSE, const ClassDef *inheritedFrom=nullptr, MemberListType lt2=MemberListType::Invalid(), bool invert=FALSE, bool showAlways=FALSE) const override
void setRequiresClause (const QCString &req) override
void setPrimaryConstructorParams (const ArgumentList &list) override
CLASS_GRAPH_t hasInheritanceGraph () const override
void overrideInheritanceGraph (CLASS_GRAPH_t e) override
bool hasCollaborationGraph () const override
void overrideCollaborationGraph (bool e) override
Public Member Functions inherited from DefinitionMixin< ClassDefMutable >
 DefinitionMixin (const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
DefinitionMixinoperator= (const DefinitionMixin &other)
 ~DefinitionMixin () override=default
bool isAlias () const override
const QCStringname () const override
bool isAnonymous () const override
const QCStringlocalName () const override
QCString qualifiedName () const override
QCString symbolName () const override
QCString getSourceFileBase () const override
QCString getSourceAnchor () const override
QCString documentation () const override
int docLine () const override
QCString docFile () const override
QCString briefDescription (bool abbreviate=FALSE) const override
QCString briefDescriptionAsTooltip () const override
int briefLine () const override
QCString inbodyDocumentation () const override
QCString inbodyFile () const override
int inbodyLine () const override
QCString briefFile () const override
QCString getDefFileName () const override
QCString getDefFileExtension () const override
int getDefLine () const override
int getDefColumn () const override
bool hasDocumentation () const override
bool hasUserDocumentation () const override
bool isVisibleInProject () const override
bool isVisible () const override
bool isHidden () const override
bool isArtificial () const override
bool isExported () const override
QCString getReference () const override
bool isReference () const override
QCString externalReference (const QCString &relPath) const override
int getStartDefLine () const override
int getStartBodyLine () const override
int getEndBodyLine () const override
const FileDefgetBodyDef () const override
SrcLangExt getLanguage () const override
const GroupListpartOfGroups () const override
bool isLinkableViaGroup () const override
const RefItemVectorxrefListItems () const override
const RequirementRefsrequirementReferences () const override
const DefinitionfindInnerCompound (const QCString &name) const override
DefinitiongetOuterScope () const override
const MemberVectorgetReferencesMembers () const override
const MemberVectorgetReferencedByMembers () const override
bool hasSections () const override
bool hasSources () const override
bool hasBriefDescription () const override
QCString id () const override
const SectionRefsgetSectionRefs () const override
void setName (const QCString &name) override
void setId (const QCString &name) override
void setDefFile (const QCString &df, int defLine, int defColumn) override
void setDocumentation (const QCString &doc, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE) override
void setBriefDescription (const QCString &brief, const QCString &briefFile, int briefLine) override
void setInbodyDocumentation (const QCString &doc, const QCString &docFile, int docLine) override
void setReference (const QCString &r) override
void addSectionsToDefinition (const std::vector< const SectionInfo * > &anchorList) override
void setBodySegment (int defLine, int bls, int ble) override
void setBodyDef (const FileDef *fd) override
void addSourceReferencedBy (MemberDef *md, const QCString &sourceRefName) override
void addSourceReferences (MemberDef *md, const QCString &sourceRefName) override
void setRefItems (const RefItemVector &sli) override
void setRequirementReferences (const RequirementRefs &rqli) override
void mergeRefItems (Definition *def) override
void mergeReferences (const Definition *other) override
void mergeReferencedBy (const Definition *other) override
void addInnerCompound (Definition *def) override
void setOuterScope (Definition *def) override
void setHidden (bool b) override
void setArtificial (bool b) override
void setExported (bool b) override
void setLanguage (SrcLangExt lang) override
void writeSourceDef (OutputList &ol) const override
void writeInlineCode (OutputList &ol, const QCString &scopeName) const override
bool hasSourceRefs () const override
bool hasSourceReffedBy () const override
void writeSourceRefs (OutputList &ol, const QCString &scopeName) const override
void writeSourceReffedBy (OutputList &ol, const QCString &scopeName) const override
bool hasRequirementRefs () const override
void writeRequirementRefs (OutputList &ol) const override
void makePartOfGroup (GroupDef *gd) override
void writeNavigationPath (OutputList &ol) const override
QCString navigationPathAsString () const override
void writeQuickMemberLinks (OutputList &ol, const MemberDef *md) const override
void writeSummaryLinks (OutputList &ol) const override
void writePageNavigation (OutputList &ol) const override
QCString pathFragment () const override
void writeDocAnchorsToTagFile (TextStream &fs) const override
void setLocalName (const QCString &name) override
void writeToc (OutputList &ol, const LocalToc &lt) const override
void computeTooltip () override
void _setSymbolName (const QCString &name) override
QCString _symbolName () const override

Private Member Functions

int countInheritedByNodes () const
int countInheritsNodes () const
int countInheritanceNodes () const
void addUsedInterfaceClasses (MemberDef *md, const QCString &typeStr)
void showUsedFiles (OutputList &ol) const
void writeDocumentationContents (OutputList &ol, const QCString &pageTitle) const
void internalInsertMember (MemberDef *md, Protection prot, bool addToAllList)
void addMemberToList (MemberListType lt, MemberDef *md, bool isBrief)
void writeInheritedMemberDeclarations (OutputList &ol, ClassDefSet &visitedClasses, MemberListType lt, MemberListType lt2, const QCString &title, const ClassDef *inheritedFrom, bool invert, bool showAlways) const
void writeMemberDocumentation (OutputList &ol, MemberListType lt, const QCString &title, bool showInline=FALSE) const
void writeSimpleMemberDocumentation (OutputList &ol, MemberListType lt) const
void writePlainMemberDeclaration (OutputList &ol, MemberListType lt, bool inGroup, int indentLevel, const ClassDef *inheritedFrom, const QCString &inheritId) const
void writeBriefDescription (OutputList &ol, bool exampleFlag) const
void writeDetailedDescription (OutputList &ol, const QCString &pageType, bool exampleFlag, const QCString &title, const QCString &anchor=QCString()) const
void writeIncludeFiles (OutputList &ol) const
void writeIncludeFilesForSlice (OutputList &ol) const
void writeInheritanceGraph (OutputList &ol) const
void writeCollaborationGraph (OutputList &ol) const
void writeMemberGroups (OutputList &ol, bool showInline=FALSE) const
void writeNestedClasses (OutputList &ol, const QCString &title) const
void writeInlineClasses (OutputList &ol) const
void startMemberDeclarations (OutputList &ol) const
void endMemberDeclarations (OutputList &ol) const
void startMemberDocumentation (OutputList &ol) const
void endMemberDocumentation (OutputList &ol) const
void writeAuthorSection (OutputList &ol) const
void writeMoreLink (OutputList &ol, const QCString &anchor) const
void writeDetailedDocumentationBody (OutputList &ol) const
int countAdditionalInheritedMembers () const
void writeAdditionalInheritedMembers (OutputList &ol) const
void addClassAttributes (OutputList &ol) const
int countInheritedDecMembers (MemberListType lt, const ClassDef *inheritedFrom, bool invert, bool showAlways, ClassDefSet &visitedClasses) const
void getTitleForMemberListType (MemberListType type, QCString &title, QCString &subtitle) const
void addTypeConstraint (const QCString &typeConstraint, const QCString &type)
void writeTemplateSpec (OutputList &ol, const Definition *d, const QCString &type, SrcLangExt lang) const
void mergeMembersFromBaseClasses (bool mergeVirtualBaseClass)
void hideDerivedVariablesInPython (ClassDefMutable *cls)

Private Attributes

QCString m_fileName
QCString m_memberListFileName
QCString m_collabFileName
QCString m_inheritFileName
std::unique_ptr< IncludeInfom_incInfo
BaseClassList m_inherits
BaseClassList m_inheritedBy
FileDefm_fileDef = nullptr
ModuleDefm_moduleDef = nullptr
MemberNameInfoLinkedMap m_allMemberNameInfoLinkedMap
ArgumentList m_tempArgs
ArgumentList m_typeConstraints
FileList m_files
ExampleList m_examples
ClassDef::CompoundType m_compType
Protection m_prot
ClassLinkedRefMap m_innerClasses
UsesClassList m_usesImplClassList
UsesClassList m_usedByImplClassList
ConstraintClassList m_constraintClassList
TemplateInstanceList m_templateInstances
TemplateNameMap m_templBaseClassNames
const ClassDefm_templateMaster = nullptr
QCString m_className
ClassDefm_categoryOf = nullptr
MemberLists m_memberLists
MemberGroupList m_memberGroups
bool m_isAbstract = false
bool m_isStatic = false
bool m_membersMerged = false
bool m_isLocal = false
bool m_isTemplArg = false
bool m_subGrouping = false
bool m_usedOnly = false
 Reason of existence is a "use" relation.
StringSet m_vhdlSummaryTitles
 List of titles to use for the summary.
bool m_isSimple = false
 Is this a simple (non-nested) C structure?
const MemberDefm_arrowOperator = nullptr
 Does this class overloaded the -> operator?
const ClassDefm_tagLessRef = nullptr
bool m_isJavaEnum = false
 Does this class represent a Java style enum?
TypeSpecifier m_spec
QCString m_metaData
QCString m_requiresClause
 C++20 requires clause.
StringVector m_qualifiers
bool m_hasCollaborationGraph = false
CLASS_GRAPH_t m_typeInheritanceGraph = CLASS_GRAPH_t::NO
bool m_implicitTemplateInstance = false
ArgumentList m_primaryConstructorParams

Additional Inherited Members

Public Types inherited from ClassDef
enum  CompoundType {
  Class , Struct , Union , Interface ,
  Protocol , Category , Exception , Service ,
  Singleton
}
 The various compound types. More...
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

Implementation of the ClassDef interface.

Definition at line 184 of file classdef.cpp.

Constructor & Destructor Documentation

◆ ClassDefImpl()

ClassDefImpl::ClassDefImpl ( const QCString & fileName,
int startLine,
int startColumn,
const QCString & name,
CompoundType ct,
const QCString & ref = QCString(),
const QCString & fName = QCString(),
bool isSymbol = TRUE,
bool isJavaEnum = FALSE )

Definition at line 804 of file classdef.cpp.

809 : DefinitionMixin(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),nullptr,nullptr,isSymbol)
810{
811 AUTO_TRACE("name={}",name());
812 setReference(lref);
813 m_compType = ct;
815 QCString compTypeString = getCompoundTypeString(getLanguage(),ct,isJavaEnum);
816 if (!fName.isEmpty())
817 {
819 }
820 else
821 {
822 m_fileName=compTypeString+name();
823 }
824 m_prot=Protection::Public;
825 //nspace=nullptr;
826 m_fileDef=nullptr;
827 m_moduleDef=nullptr;
828 m_subGrouping=Config_getBool(SUBGROUPING);
829 m_templateMaster =nullptr;
834 m_categoryOf = nullptr;
836 m_isSimple = Config_getBool(INLINE_SIMPLE_STRUCTS);
837 m_arrowOperator = nullptr;
838 m_tagLessRef = nullptr;
839 m_spec=TypeSpecifier();
840 //QCString ns;
841 //extractNamespaceName(name,className,ns);
842 //printf("m_name=%s m_className=%s ns=%s\n",qPrint(m_name),qPrint(m_className),qPrint(ns));
843
844 // we cannot use getLanguage at this point, as setLanguage has not been called.
845 SrcLangExt lang = getLanguageFromFileName(defFileName);
846 if ((lang==SrcLangExt::Cpp || lang==SrcLangExt::ObjC) && guessSection(defFileName).isSource())
847 {
849 }
850 else
851 {
853 }
854 m_hasCollaborationGraph = Config_getBool(COLLABORATION_GRAPH);
856 m_memberListFileName = convertNameToFile(compTypeString+name()+"-members");
859 if (lref.isEmpty())
860 {
862 }
863 AUTO_TRACE_EXIT("m_fileName='{}'",m_fileName);
864}
QCString m_collabFileName
Definition classdef.cpp:421
QCString m_fileName
Definition classdef.cpp:415
const MemberDef * m_arrowOperator
Does this class overloaded the -> operator?
Definition classdef.cpp:539
TypeSpecifier m_spec
Definition classdef.cpp:546
ClassDef * m_categoryOf
Definition classdef.cpp:502
const ClassDef * m_tagLessRef
Definition classdef.cpp:541
Protection m_prot
Definition classdef.cpp:473
QCString m_inheritFileName
Definition classdef.cpp:424
const ClassDef * m_templateMaster
Definition classdef.cpp:494
bool m_membersMerged
Definition classdef.cpp:516
bool m_isJavaEnum
Does this class represent a Java style enum?
Definition classdef.cpp:544
ModuleDef * m_moduleDef
Definition classdef.cpp:449
bool isJavaEnum() const override
bool m_isSimple
Is this a simple (non-nested) C structure?
Definition classdef.cpp:536
CLASS_GRAPH_t m_typeInheritanceGraph
Definition classdef.cpp:556
bool m_isAbstract
Definition classdef.cpp:510
FileDef * m_fileDef
Definition classdef.cpp:446
ClassDef::CompoundType m_compType
Definition classdef.cpp:467
bool m_hasCollaborationGraph
Definition classdef.cpp:555
bool m_isTemplArg
Definition classdef.cpp:521
bool m_usedOnly
Reason of existence is a "use" relation.
Definition classdef.cpp:530
QCString m_memberListFileName
Definition classdef.cpp:418
bool m_subGrouping
Definition classdef.cpp:527
const QCString & name() const override
void setReference(const QCString &r) override
DefinitionMixin(const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
SrcLangExt getLanguage() const override
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
static QCString getCompoundTypeString(SrcLangExt lang, ClassDef::CompoundType compType, bool isJavaEnum)
Definition classdef.cpp:146
#define Config_getBool(name)
Definition config.h:33
#define Config_getEnum(name)
Definition config.h:35
#define AUTO_TRACE(...)
Definition docnode.cpp:47
#define AUTO_TRACE_EXIT(...)
Definition docnode.cpp:49
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
SrcLangExt
Definition types.h:207
QCString removeRedundantWhiteSpace(const QCString &s)
Definition util.cpp:567
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5214
QCString stripExtension(const QCString &fName)
Definition util.cpp:4947
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:3508
EntryType guessSection(const QCString &name)
Definition util.cpp:338

References AUTO_TRACE, AUTO_TRACE_EXIT, Config_getBool, Config_getEnum, convertNameToFile(), DefinitionMixin< ClassDefMutable >::DefinitionMixin(), FALSE, getCompoundTypeString(), DefinitionMixin< ClassDefMutable >::getLanguage(), getLanguageFromFileName(), guessSection(), QCString::isEmpty(), isJavaEnum(), m_arrowOperator, m_categoryOf, m_collabFileName, m_compType, m_fileDef, m_fileName, m_hasCollaborationGraph, m_inheritFileName, m_isAbstract, m_isJavaEnum, m_isLocal, m_isSimple, m_isStatic, m_isTemplArg, m_memberListFileName, m_membersMerged, m_moduleDef, m_prot, m_spec, m_subGrouping, m_tagLessRef, m_templateMaster, m_typeInheritanceGraph, m_usedOnly, DefinitionMixin< ClassDefMutable >::name(), removeRedundantWhiteSpace(), DefinitionMixin< ClassDefMutable >::setReference(), stripExtension(), and TRUE.

Referenced by addTypeConstraint(), and insertTemplateInstance().

Member Function Documentation

◆ addClassAttributes()

void ClassDefImpl::addClassAttributes ( OutputList & ol) const
private

Definition at line 2724 of file classdef.cpp.

2725{
2726 StringVector sl;
2727 if (isFinal()) sl.emplace_back("final");
2728 if (isSealed()) sl.emplace_back("sealed");
2729 if (isAbstract()) sl.emplace_back("abstract");
2730 if (isExported()) sl.emplace_back("export");
2731 if (getLanguage()==SrcLangExt::IDL && isPublished()) sl.emplace_back("published");
2732
2733 for (const auto &sx : m_qualifiers)
2734 {
2735 bool alreadyAdded = std::find(sl.begin(), sl.end(), sx) != sl.end();
2736 if (!alreadyAdded)
2737 {
2738 sl.push_back(sx);
2739 }
2740 }
2741
2742 ol.pushGeneratorState();
2744 if (!sl.empty())
2745 {
2746 ol.startLabels();
2747 size_t i=0;
2748 for (const auto &s : sl)
2749 {
2750 i++;
2751 ol.writeLabel(s,i==sl.size());
2752 }
2753 ol.endLabels();
2754 }
2755 ol.popGeneratorState();
2756}
bool isFinal() const override
Returns TRUE if this class is marked as final.
bool isPublished() const override
Returns TRUE if this class is marked as published.
StringVector m_qualifiers
Definition classdef.cpp:553
bool isAbstract() const override
Returns TRUE if there is at least one pure virtual member in this class.
bool isSealed() const override
Returns TRUE if this class is marked as sealed.
void pushGeneratorState()
void disableAllBut(OutputType o)
void popGeneratorState()
void endLabels()
Definition outputlist.h:742
void writeLabel(const QCString &l, bool isLast)
Definition outputlist.h:740
void startLabels()
Definition outputlist.h:738
std::vector< std::string > StringVector
Definition containers.h:33

References OutputList::disableAllBut(), OutputList::endLabels(), DefinitionMixin< ClassDefMutable >::getLanguage(), Html, isAbstract(), DefinitionMixin< ClassDefMutable >::isExported(), isFinal(), isPublished(), isSealed(), m_qualifiers, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startLabels(), and OutputList::writeLabel().

Referenced by writeDocumentation().

◆ addExample()

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

Implements ClassDefMutable.

Definition at line 3416 of file classdef.cpp.

3417{
3418 return m_examples.inSort(Example(anchor,nameStr,file));
3419}
ExampleList m_examples
Definition classdef.cpp:464
QCString anchor() const override

References anchor(), and m_examples.

◆ addGroupedInheritedMembers()

void ClassDefImpl::addGroupedInheritedMembers ( OutputList & ol,
MemberListType lt,
const ClassDef * inheritedFrom,
const QCString & inheritId ) const
overridevirtual

Implements ClassDef.

Definition at line 4952 of file classdef.cpp.

4954{
4955 //printf("** %s::addGroupedInheritedMembers() inheritId=%s\n",qPrint(name()),qPrint(inheritId));
4956 for (const auto &mg : m_memberGroups)
4957 {
4958 if (!mg->allMembersInSameSection() || !m_subGrouping) // group is in its own section
4959 {
4960 mg->addGroupedInheritedMembers(ol,this,lt,inheritedFrom,inheritId);
4961 }
4962 }
4963}
MemberGroupList m_memberGroups
Definition classdef.cpp:507

References m_memberGroups, and m_subGrouping.

◆ addInnerCompound()

void ClassDefImpl::addInnerCompound ( Definition * d)
overridevirtual

Implements DefinitionMutable.

Definition at line 4335 of file classdef.cpp.

4336{
4337 //printf("**** %s::addInnerCompound(%s)\n",qPrint(name()),qPrint(d->name()));
4338 if (d->definitionType()==Definition::TypeClass) // only classes can be
4339 // nested in classes.
4340 {
4341 m_innerClasses.add(d->localName(),toClassDef(d));
4342 }
4343}
ClassLinkedRefMap m_innerClasses
Definition classdef.cpp:478
virtual const QCString & localName() const =0
virtual DefType definitionType() const =0
ClassDef * toClassDef(Definition *d)

References Definition::definitionType(), Definition::localName(), m_innerClasses, toClassDef(), and Definition::TypeClass.

◆ addListReferences()

void ClassDefImpl::addListReferences ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4543 of file classdef.cpp.

4544{
4545 if (!isLinkableInProject()) return;
4546 SrcLangExt lang = getLanguage();
4548 qualifiedName(),
4551 displayName(),
4552 QCString(),
4553 this
4554 );
4555 for (const auto &mg : m_memberGroups)
4556 {
4557 mg->addListReferences(this);
4558 }
4559 for (auto &ml : m_memberLists)
4560 {
4561 if (ml->listType().isDetailed())
4562 {
4563 ml->addListReferences(this);
4564 }
4565 }
4566}
bool isLinkableInProject() const override
MemberLists m_memberLists
Definition classdef.cpp:504
QCString getOutputFileBase() const override
QCString displayName(bool includeScope=TRUE) const override
Definition classdef.cpp:993
CompoundType compoundType() const override
Returns the type of compound this is, i.e.
QCString qualifiedName() const override
const RefItemVector & xrefListItems() const override
virtual QCString trCompoundType(ClassDef::CompoundType compType, SrcLangExt lang)=0
Translator * theTranslator
Definition language.cpp:71
void addRefItem(const RefItemVector &sli, const QCString &key, const QCString &prefix, const QCString &name, const QCString &title, const QCString &args, const Definition *scope)
Definition util.cpp:4828

References addRefItem(), compoundType(), displayName(), DefinitionMixin< ClassDefMutable >::getLanguage(), getOutputFileBase(), isLinkableInProject(), m_memberGroups, m_memberLists, DefinitionMixin< ClassDefMutable >::qualifiedName(), theTranslator, and DefinitionMixin< ClassDefMutable >::xrefListItems().

◆ addMembersToMemberGroup()

void ClassDefImpl::addMembersToMemberGroup ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 1018 of file classdef.cpp.

1019{
1020 for (auto &ml : m_memberLists)
1021 {
1022 if (!ml->listType().isDetailed())
1023 {
1025 }
1026 }
1027
1028 // add members inside sections to their groups
1029 for (const auto &mg : m_memberGroups)
1030 {
1031 if (mg->allMembersInSameSection() && m_subGrouping)
1032 {
1033 //printf("addToDeclarationSection(%s)\n",qPrint(mg->header()));
1034 mg->addToDeclarationSection();
1035 }
1036 }
1037}
void addMembersToMemberGroup() override

References addMembersToMemberGroup(), m_memberGroups, m_memberLists, and m_subGrouping.

Referenced by addMembersToMemberGroup().

◆ addMembersToTemplateInstance()

void ClassDefImpl::addMembersToTemplateInstance ( const ClassDef * cd,
const ArgumentList & templateArguments,
const QCString & templSpec )
overridevirtual

Implements ClassDefMutable.

Definition at line 4455 of file classdef.cpp.

4456{
4457 AUTO_TRACE("this={} cd={} templSpec={}",name(),cd->name(),templSpec);
4458 //printf("%s::addMembersToTemplateInstance(%s,%s)\n",qPrint(name()),qPrint(cd->name()),templSpec);
4459 for (const auto &mni : cd->memberNameInfoLinkedMap())
4460 {
4461 for (const auto &mi : *mni)
4462 {
4463 const MemberDef *md = mi->memberDef();
4464 if (m_allMemberNameInfoLinkedMap.find(md->name())==nullptr) // only insert the member if not hidden by one with the same name (#11541)
4465 {
4467 }
4468 }
4469 }
4470 // also instantatie members for nested classes
4471 for (const auto &innerCd : cd->getClasses())
4472 {
4473 ClassDefMutable *ncd = toClassDefMutable(m_innerClasses.find(innerCd->localName()));
4474 if (ncd)
4475 {
4476 ncd->addMembersToTemplateInstance(innerCd,cd->templateArguments(),templSpec);
4477 }
4478 }
4479}
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.
virtual const MemberNameInfoLinkedMap & memberNameInfoLinkedMap() const =0
Returns a dictionary of all members.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
void addMemberToTemplateInstance(const MemberDef *md, const ArgumentList &templateArguments, const QCString &templSpec) override
const ArgumentList & templateArguments() const override
Returns the template arguments of this class.
MemberNameInfoLinkedMap m_allMemberNameInfoLinkedMap
Definition classdef.cpp:452
virtual void addMembersToTemplateInstance(const ClassDef *cd, const ArgumentList &templateArguments, const QCString &templSpec)=0
virtual const QCString & name() const =0
ClassDefMutable * toClassDefMutable(Definition *d)

References ClassDefMutable::addMembersToTemplateInstance(), addMemberToTemplateInstance(), AUTO_TRACE, ClassDef::getClasses(), m_allMemberNameInfoLinkedMap, m_innerClasses, ClassDef::memberNameInfoLinkedMap(), Definition::name(), DefinitionMixin< ClassDefMutable >::name(), ClassDef::templateArguments(), templateArguments(), and toClassDefMutable().

◆ addMemberToList()

void ClassDefImpl::addMemberToList ( MemberListType lt,
MemberDef * md,
bool isBrief )
private

Definition at line 4627 of file classdef.cpp.

4628{
4629 AUTO_TRACE("{} md={} lt={} isBrief={}",name(),md->name(),lt,isBrief);
4630 bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
4631 bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
4632 const auto &ml = m_memberLists.get(lt,MemberListContainer::Class);
4633 ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs));
4634 ml->push_back(md);
4635
4636 // for members in the declaration lists we set the section, needed for member grouping
4637 if (!ml->listType().isDetailed())
4638 {
4639 MemberDefMutable *mdm = toMemberDefMutable(md);
4640 if (mdm)
4641 {
4642 mdm->setSectionList(this,ml.get());
4643 }
4644 }
4645}
virtual void setSectionList(const Definition *container, const MemberList *sl)=0
MemberDefMutable * toMemberDefMutable(Definition *d)

References AUTO_TRACE, Class, Config_getBool, m_memberLists, Definition::name(), DefinitionMixin< ClassDefMutable >::name(), MemberDefMutable::setSectionList(), and toMemberDefMutable().

Referenced by internalInsertMember().

◆ addMemberToTemplateInstance()

void ClassDefImpl::addMemberToTemplateInstance ( const MemberDef * md,
const ArgumentList & templateArguments,
const QCString & templSpec )
overridevirtual

Implements ClassDefMutable.

Definition at line 4429 of file classdef.cpp.

4432{
4433 AUTO_TRACE("this={} md={}",name(),md->name());
4434 auto actualArguments_p = stringToArgumentList(getLanguage(),templSpec);
4435 auto imd = md->createTemplateInstanceMember(templateArguments,actualArguments_p);
4436 auto mmd = toMemberDefMutable(imd.get());
4437 mmd->setMemberClass(this);
4438 mmd->setTemplateMaster(md);
4439 mmd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
4440 mmd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
4441 mmd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
4442 mmd->setMemberSpecifiers(md->getMemberSpecifiers());
4443 mmd->setMemberGroupId(md->getMemberGroupId());
4444 mmd->setArtificial(true);
4445 insertMember(imd.get());
4446 //printf("Adding member=%s %s%s to class %s templSpec %s\n",
4447 // imd->typeString(),qPrint(imd->name()),imd->argsString(),
4448 // qPrint(imd->getClassDef()->name()),templSpec);
4449 // insert imd in the list of all members
4450 //printf("Adding member=%s class=%s\n",qPrint(imd->name()),qPrint(name()));
4451 MemberName *mn = Doxygen::memberNameLinkedMap->add(imd->name());
4452 mn->push_back(std::move(imd));
4453}
void insertMember(MemberDef *) override
virtual QCString docFile() const =0
virtual int docLine() const =0
virtual int inbodyLine() const =0
virtual int briefLine() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString documentation() const =0
virtual QCString briefFile() const =0
virtual QCString inbodyDocumentation() const =0
virtual QCString inbodyFile() const =0
static MemberNameLinkedMap * memberNameLinkedMap
Definition doxygen.h:110
T * add(const char *k, Args &&... args)
Definition linkedmap.h:90
virtual int getMemberGroupId() const =0
virtual std::unique_ptr< MemberDef > createTemplateInstanceMember(const ArgumentList &formalArgs, const std::unique_ptr< ArgumentList > &actualArgs) const =0
virtual TypeSpecifier getMemberSpecifiers() const =0
void push_back(Ptr &&p)
Definition membername.h:54
std::unique_ptr< ArgumentList > stringToArgumentList(SrcLangExt lang, const QCString &argsString, QCString *extraTypeChars=nullptr)
Definition defargs.l:822

References AUTO_TRACE, Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), MemberDef::createTemplateInstanceMember(), Definition::docFile(), Definition::docLine(), Definition::documentation(), DefinitionMixin< ClassDefMutable >::getLanguage(), MemberDef::getMemberGroupId(), MemberDef::getMemberSpecifiers(), Definition::inbodyDocumentation(), Definition::inbodyFile(), Definition::inbodyLine(), insertMember(), Doxygen::memberNameLinkedMap, Definition::name(), DefinitionMixin< ClassDefMutable >::name(), MemberName::push_back(), stringToArgumentList(), templateArguments(), and toMemberDefMutable().

Referenced by addMembersToTemplateInstance().

◆ addQualifiers()

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

Implements ClassDefMutable.

Definition at line 5327 of file classdef.cpp.

5328{
5329 for (const auto &sx : qualifiers)
5330 {
5331 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5332 if (!alreadyAdded)
5333 {
5334 m_qualifiers.push_back(sx);
5335 }
5336 }
5337}

References m_qualifiers.

◆ addRequirementReferences()

void ClassDefImpl::addRequirementReferences ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4568 of file classdef.cpp.

4569{
4570 if (!isLinkableInProject()) return;
4572 for (const auto &mg : m_memberGroups)
4573 {
4574 mg->addRequirementReferences(this);
4575 }
4576 for (auto &ml : m_memberLists)
4577 {
4578 if (ml->listType().isDetailed())
4579 {
4580 ml->addRequirementReferences(this);
4581 }
4582 }
4583}
static RequirementManager & instance()
void addRequirementRefsForSymbol(const Definition *symbol)

References RequirementManager::addRequirementRefsForSymbol(), RequirementManager::instance(), isLinkableInProject(), m_memberGroups, and m_memberLists.

◆ addTypeConstraint()

void ClassDefImpl::addTypeConstraint ( const QCString & typeConstraint,
const QCString & type )
private

Definition at line 3427 of file classdef.cpp.

3428{
3429 //printf("addTypeConstraint(%s,%s)\n",qPrint(type),qPrint(typeConstraint));
3430 bool hideUndocRelation = Config_getBool(HIDE_UNDOC_RELATIONS);
3431 if (typeConstraint.isEmpty() || type.isEmpty()) return;
3432 SymbolResolver resolver(getFileDef());
3433 ClassDefMutable *cd = resolver.resolveClassMutable(this,typeConstraint);
3434 if (cd==nullptr && !hideUndocRelation)
3435 {
3436 cd = toClassDefMutable(
3437 Doxygen::hiddenClassLinkedMap->add(typeConstraint,
3438 std::unique_ptr<ClassDef>(
3439 new ClassDefImpl(
3441 getDefColumn(),
3442 typeConstraint,
3443 ClassDef::Class))));
3444 if (cd)
3445 {
3446 cd->setUsedOnly(TRUE);
3447 cd->setLanguage(getLanguage());
3448 //printf("Adding undocumented constraint '%s' to class %s on type %s\n",
3449 // qPrint(typeConstraint),qPrint(name()),qPrint(type));
3450 }
3451 }
3452 if (cd)
3453 {
3454 auto it = std::find_if(m_constraintClassList.begin(),
3456 [&cd](const auto &ccd) { return ccd.classDef==cd; });
3457
3458 if (it==m_constraintClassList.end())
3459 {
3460 m_constraintClassList.emplace_back(cd);
3461 it = m_constraintClassList.end()-1;
3462 }
3463 (*it).addAccessor(type);
3464 //printf("Adding constraint '%s' to class %s on type %s\n",
3465 // qPrint(typeConstraint),qPrint(name()),qPrint(type));
3466 }
3467}
FileDef * getFileDef() const override
Returns the namespace this compound is in, or 0 if it has a global scope.
ClassDefImpl(const QCString &fileName, int startLine, int startColumn, const QCString &name, CompoundType ct, const QCString &ref=QCString(), const QCString &fName=QCString(), bool isSymbol=TRUE, bool isJavaEnum=FALSE)
Definition classdef.cpp:804
ConstraintClassList m_constraintClassList
Definition classdef.cpp:484
virtual void setUsedOnly(bool b)=0
QCString getDefFileName() const override
virtual void setLanguage(SrcLangExt lang)=0
static ClassLinkedMap * hiddenClassLinkedMap
Definition doxygen.h:96

References ClassDef::Class, ClassDefImpl(), Config_getBool, DefinitionMixin< ClassDefMutable >::getDefColumn(), DefinitionMixin< ClassDefMutable >::getDefFileName(), DefinitionMixin< ClassDefMutable >::getDefLine(), getFileDef(), DefinitionMixin< ClassDefMutable >::getLanguage(), Doxygen::hiddenClassLinkedMap, QCString::isEmpty(), m_constraintClassList, SymbolResolver::resolveClassMutable(), DefinitionMutable::setLanguage(), ClassDefMutable::setUsedOnly(), toClassDefMutable(), and TRUE.

Referenced by addTypeConstraints().

◆ addTypeConstraints()

void ClassDefImpl::addTypeConstraints ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 3470 of file classdef.cpp.

3471{
3472 for (const Argument &a : m_tempArgs)
3473 {
3474 if (!a.typeConstraint.isEmpty())
3475 {
3476 QCString typeConstraint;
3477 int i=0,p=0;
3478 while ((i=a.typeConstraint.find('&',p))!=-1) // typeConstraint="A &I" for C<T extends A & I>
3479 {
3480 typeConstraint = a.typeConstraint.mid(p,i-p).stripWhiteSpace();
3481 addTypeConstraint(typeConstraint,a.type);
3482 p=i+1;
3483 }
3484 typeConstraint = a.typeConstraint.right(a.typeConstraint.length()-p).stripWhiteSpace();
3485 addTypeConstraint(typeConstraint,a.type);
3486 }
3487 }
3488}
void addTypeConstraint(const QCString &typeConstraint, const QCString &type)
ArgumentList m_tempArgs
Definition classdef.cpp:455
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:260
QCString right(size_t len) const
Definition qcstring.h:234

References addTypeConstraint(), m_tempArgs, QCString::mid(), QCString::right(), and QCString::stripWhiteSpace().

◆ addUsedByClass()

void ClassDefImpl::addUsedByClass ( ClassDef * cd,
const QCString & accessName,
Protection prot )
overridevirtual

Implements ClassDefMutable.

Definition at line 4222 of file classdef.cpp.

4224{
4225 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
4226 bool umlLook = Config_getBool(UML_LOOK);
4227 if (prot==Protection::Private && !extractPrivate) return;
4228 //printf("%s::addUsedByClass(%s,%s)\n",qPrint(name()),qPrint(cd->name()),accessName);
4229 //
4230 auto it = std::find_if(m_usedByImplClassList.begin(),
4232 [&cd](const auto &ucd) { return ucd.classDef==cd; });
4233 if (it==m_usedByImplClassList.end())
4234 {
4235 m_usedByImplClassList.emplace_back(cd);
4236 //printf("Adding used by class %s to class %s\n",
4237 // qPrint(cd->name()),qPrint(name()));
4238 it = m_usedByImplClassList.end()-1;
4239 }
4240 QCString acc = accessName;
4241 if (umlLook)
4242 {
4243 switch(prot)
4244 {
4245 case Protection::Public: acc.prepend("+"); break;
4246 case Protection::Private: acc.prepend("-"); break;
4247 case Protection::Protected: acc.prepend("#"); break;
4248 case Protection::Package: acc.prepend("~"); break;
4249 }
4250 }
4251 (*it).addAccessor(acc);
4252}
UsesClassList m_usedByImplClassList
Definition classdef.cpp:482
QCString & prepend(const char *s)
Definition qcstring.h:422

References Config_getBool, m_usedByImplClassList, and QCString::prepend().

◆ addUsedClass()

void ClassDefImpl::addUsedClass ( ClassDef * cd,
const QCString & accessName,
Protection prot )
overridevirtual

Implements ClassDefMutable.

Definition at line 4190 of file classdef.cpp.

4192{
4193 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
4194 bool umlLook = Config_getBool(UML_LOOK);
4195 if (prot==Protection::Private && !extractPrivate) return;
4196 //printf("%s::addUsedClass(%s,%s)\n",qPrint(name()),qPrint(cd->name()),accessName);
4197
4198 auto it = std::find_if(m_usesImplClassList.begin(),
4199 m_usesImplClassList.end(),
4200 [&cd](const auto &ucd) { return ucd.classDef==cd; });
4201 if (it==m_usesImplClassList.end())
4202 {
4203 m_usesImplClassList.emplace_back(cd);
4204 //printf("Adding used class %s to class %s via accessor %s\n",
4205 // qPrint(cd->name()),qPrint(name()),accessName);
4206 it = m_usesImplClassList.end()-1;
4207 }
4208 QCString acc = accessName;
4209 if (umlLook)
4210 {
4211 switch(prot)
4212 {
4213 case Protection::Public: acc.prepend("+"); break;
4214 case Protection::Private: acc.prepend("-"); break;
4215 case Protection::Protected: acc.prepend("#"); break;
4216 case Protection::Package: acc.prepend("~"); break;
4217 }
4218 }
4219 (*it).addAccessor(acc);
4220}
UsesClassList m_usesImplClassList
Definition classdef.cpp:481

References Config_getBool, m_usesImplClassList, and QCString::prepend().

◆ addUsedInterfaceClasses()

void ClassDefImpl::addUsedInterfaceClasses ( MemberDef * md,
const QCString & typeStr )
private

References anchor(), FALSE, and title().

◆ anchor()

QCString ClassDefImpl::anchor ( ) const
overridevirtual

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

Implements Definition.

Definition at line 5251 of file classdef.cpp.

5252{
5253 QCString anc;
5255 {
5257 {
5258 // point to the template of which this class is an instance
5259 anc = m_templateMaster->getOutputFileBase();
5260 }
5261 else
5262 {
5263 anc = m_fileName;
5264 }
5265 }
5266 return anc;
5267}
bool m_implicitTemplateInstance
Definition classdef.cpp:558
bool isEmbeddedInOuterScope() const override
static bool generatingXmlOutput
Definition doxygen.h:133

References Doxygen::generatingXmlOutput, isEmbeddedInOuterScope(), m_fileName, m_implicitTemplateInstance, and m_templateMaster.

Referenced by addExample(), addUsedInterfaceClasses(), writeBriefDescription(), writeDeclarationLink(), writeDetailedDescription(), writeInlineDocumentation(), writeMemberList(), writeMoreLink(), and writeTagFile().

◆ baseClasses()

const BaseClassList & ClassDefImpl::baseClasses ( ) const
overridevirtual

Returns the list of base classes from which this class directly inherits.

Implements ClassDef.

Definition at line 5006 of file classdef.cpp.

5007{
5008 return m_inherits;
5009}
BaseClassList m_inherits
Definition classdef.cpp:434

References m_inherits.

Referenced by isBaseClass(), mergeMembers(), and mergeMembersFromBaseClasses().

◆ categoryOf()

ClassDef * ClassDefImpl::categoryOf ( ) const
overridevirtual

Returns the class of which this is a category (Objective-C only).

Implements ClassDef.

Definition at line 5156 of file classdef.cpp.

5157{
5158 return m_categoryOf;
5159}

References m_categoryOf.

◆ className()

QCString ClassDefImpl::className ( ) const
overridevirtual

Returns the name of the class including outer classes, but not including namespaces.

Implements ClassDef.

Definition at line 4527 of file classdef.cpp.

4528{
4529 QCString name = m_className.isEmpty() ? localName() : m_className;
4530 auto lang = getLanguage();
4531 if (lang==SrcLangExt::CSharp)
4532 {
4534 }
4535 return name;
4536}
QCString m_className
Definition classdef.cpp:497
const QCString & localName() const override
QCString tempArgListToString(const ArgumentList &al, SrcLangExt lang, bool includeDefault)
Definition util.cpp:1299
QCString demangleCSharpGenericName(const QCString &name, const QCString &templArgs)
Definition util.cpp:6946

References demangleCSharpGenericName(), DefinitionMixin< ClassDefMutable >::getLanguage(), DefinitionMixin< ClassDefMutable >::localName(), m_className, DefinitionMixin< ClassDefMutable >::name(), tempArgListToString(), and templateArguments().

◆ codeSymbolType()

CodeSymbolType ClassDefImpl::codeSymbolType ( ) const
overridevirtual

Used for syntax highlighting symbol class

Implements Definition.

Definition at line 5430 of file classdef.cpp.

5431{
5432 switch (compoundType())
5433 {
5434 case Class: return CodeSymbolType::Class; break;
5435 case Struct: return CodeSymbolType::Struct; break;
5436 case Union: return CodeSymbolType::Union; break;
5437 case Interface: return CodeSymbolType::Interface; break;
5438 case Protocol: return CodeSymbolType::Protocol; break;
5439 case Category: return CodeSymbolType::Category; break;
5440 case Exception: return CodeSymbolType::Exception; break;
5441 case Service: return CodeSymbolType::Service; break;
5442 case Singleton: return CodeSymbolType::Singleton; break;
5443 }
5444 return CodeSymbolType::Class;
5445}
@ Singleton
Definition classdef.h:117
@ Interface
Definition classdef.h:112
@ Exception
Definition classdef.h:115

References ClassDef::Category, Category, ClassDef::Class, Class, compoundType(), ClassDef::Exception, Exception, ClassDef::Interface, Interface, ClassDef::Protocol, Protocol, ClassDef::Service, Service, ClassDef::Singleton, Singleton, ClassDef::Struct, Struct, ClassDef::Union, and Union.

◆ collaborationGraphFileName()

QCString ClassDefImpl::collaborationGraphFileName ( ) const
overridevirtual

returns the file name to use for the collaboration graph

Implements ClassDef.

Definition at line 5410 of file classdef.cpp.

5411{
5412 return m_collabFileName;
5413}

References m_collabFileName.

◆ compoundType()

ClassDefImpl::CompoundType ClassDefImpl::compoundType ( ) const
overridevirtual

Returns the type of compound this is, i.e.

class/struct/union/..

Implements ClassDef.

Definition at line 5001 of file classdef.cpp.

5002{
5003 return m_compType;
5004}

References m_compType.

Referenced by addListReferences(), codeSymbolType(), deepCopy(), writeDeclarationLink(), writeDocumentation(), and writeMemberList().

◆ compoundTypeString()

QCString ClassDefImpl::compoundTypeString ( ) const
overridevirtual

◆ computeAnchors()

void ClassDefImpl::computeAnchors ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 1351 of file classdef.cpp.

1352{
1353 for (auto &ml : m_memberLists)
1354 {
1355 if (!ml->listType().isDetailed())
1356 {
1357 ml->setAnchors();
1358 }
1359 }
1360
1361 for (const auto &mg : m_memberGroups)
1362 {
1363 mg->setAnchors();
1364 }
1365}

References m_memberGroups, and m_memberLists.

◆ containsOverload()

bool ClassDefImpl::containsOverload ( const MemberDef * md) const
overridevirtual

Implements ClassDef.

Definition at line 5344 of file classdef.cpp.

5345{
5346 AUTO_TRACE("name={}",md->name());
5347 const auto &mni = m_allMemberNameInfoLinkedMap.find(md->name());
5348 if (mni)
5349 {
5350 for (const auto &mi : *mni)
5351 {
5352 const MemberDef *classMd = mi->memberDef();
5353 const ArgumentList &classAl = classMd->argumentList();
5354 const ArgumentList &al = md->argumentList();
5355 bool found = matchArguments2(
5356 classMd->getOuterScope(),classMd->getFileDef(),classMd->typeString(),&classAl,
5357 md->getOuterScope(),md->getFileDef(),md->typeString(),&al,
5358 true,getLanguage()
5359 );
5360 if (found)
5361 {
5362 AUTO_TRACE_EXIT("true");
5363 return true;
5364 }
5365 }
5366 }
5367 AUTO_TRACE_EXIT("false");
5368 return false;
5369}
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual Definition * getOuterScope() const =0
virtual QCString typeString() const =0
virtual const FileDef * getFileDef() const =0
virtual const ArgumentList & argumentList() const =0
bool matchArguments2(const Definition *srcScope, const FileDef *srcFileScope, const QCString &srcReturnType, const ArgumentList *srcAl, const Definition *dstScope, const FileDef *dstFileScope, const QCString &dstReturnType, const ArgumentList *dstAl, bool checkCV, SrcLangExt lang)
Definition util.cpp:2021

References MemberDef::argumentList(), AUTO_TRACE, AUTO_TRACE_EXIT, MemberDef::getFileDef(), DefinitionMixin< ClassDefMutable >::getLanguage(), Definition::getOuterScope(), m_allMemberNameInfoLinkedMap, matchArguments2(), Definition::name(), and MemberDef::typeString().

◆ countAdditionalInheritedMembers()

int ClassDefImpl::countAdditionalInheritedMembers ( ) const
private

Definition at line 4801 of file classdef.cpp.

4802{
4803 int totalCount=0;
4804 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4805 {
4806 if (lde->kind()==LayoutDocEntry::MemberDecl)
4807 {
4808 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4809 if (lmd && lmd->type!=MemberListType::Friends()) // friendship is not inherited
4810 {
4811 ClassDefSet visited;
4812 totalCount+=countInheritedDecMembers(lmd->type,this,TRUE,FALSE,visited);
4813 }
4814 }
4815 }
4816 //printf("countAdditionalInheritedMembers()=%d\n",totalCount);
4817 return totalCount;
4818}
int countInheritedDecMembers(MemberListType lt, const ClassDef *inheritedFrom, bool invert, bool showAlways, ClassDefSet &visitedClasses) const
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition layout.cpp:1437
std::unordered_set< const ClassDef * > ClassDefSet
Definition classdef.h:95
MemberListType type
Definition layout.h:118

References countInheritedDecMembers(), FALSE, LayoutDocManager::instance(), TRUE, and LayoutDocEntryMemberDecl::type.

Referenced by endMemberDeclarations().

◆ countInheritanceNodes()

int ClassDefImpl::countInheritanceNodes ( ) const
private

Definition at line 1828 of file classdef.cpp.

1829{
1831}
int countInheritsNodes() const
int countInheritedByNodes() const

References countInheritedByNodes(), and countInheritsNodes().

Referenced by writeInheritanceGraph().

◆ countInheritedByNodes()

int ClassDefImpl::countInheritedByNodes ( ) const
private

Definition at line 1806 of file classdef.cpp.

1807{
1808 int count=0;
1809 for (const auto &ibcd : m_inheritedBy)
1810 {
1811 const ClassDef *icd=ibcd.classDef;
1812 if ( icd->isVisibleInHierarchy()) count++;
1813 }
1814 return count;
1815}
virtual bool isVisibleInHierarchy() const =0
the class is visible in a class diagram, or class hierarchy
BaseClassList m_inheritedBy
Definition classdef.cpp:438

References ClassDef::isVisibleInHierarchy(), and m_inheritedBy.

Referenced by countInheritanceNodes(), and writeInheritanceGraph().

◆ countInheritedDecMembers()

int ClassDefImpl::countInheritedDecMembers ( MemberListType lt,
const ClassDef * inheritedFrom,
bool invert,
bool showAlways,
ClassDefSet & visitedClasses ) const
private

Definition at line 4744 of file classdef.cpp.

4747{
4748 int inhCount = 0;
4749 int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE);
4750 bool process = count>0;
4751 //printf("%s: countInheritedDecMembers: lt=%s process=%d count=%d invert=%d\n",
4752 // qPrint(name()),lt.to_string(),process,count,invert);
4753 if ((process^invert) || showAlways)
4754 {
4755 for (const auto &ibcd : m_inherits)
4756 {
4757 ClassDefMutable *icd = toClassDefMutable(ibcd.classDef);
4758 MemberListType lt1 = MemberListType::Invalid();
4759 MemberListType lt2 = MemberListType::Invalid();
4760 if (icd && icd->isLinkable())
4761 {
4762 convertProtectionLevel(lt,ibcd.prot,&lt1,&lt2);
4763 //printf("%s: convert %s->(%s,%s) prot=%d\n",
4764 // qPrint(icd->name()),lt.to_string(),lt1.to_string(),lt2.to_string(),ibcd.prot);
4765 if (visitedClasses.find(icd)==visitedClasses.end())
4766 {
4767 visitedClasses.insert(icd); // guard for multiple virtual inheritance
4768 if (!lt1.isInvalid())
4769 {
4770 inhCount+=icd->countMemberDeclarations(lt1,inheritedFrom,lt2,FALSE,TRUE,visitedClasses);
4771 }
4772 }
4773 }
4774 }
4775 }
4776 //printf("%s: count=%d\n",qPrint(name()),inhCount);
4777 return inhCount;
4778}
virtual int countMemberDeclarations(MemberListType lt, const ClassDef *inheritedFrom, MemberListType lt2, bool invert, bool showAlways, ClassDefSet &visitedClasses) const =0
int countMembersIncludingGrouped(MemberListType lt, const ClassDef *inheritedFrom, bool additional) const override
virtual bool isLinkable() const =0
constexpr bool isInvalid() const noexcept
Definition types.h:372
static constexpr MemberListType Invalid() noexcept
Definition types.h:371
void convertProtectionLevel(MemberListType inListType, Protection inProt, MemberListType *outListType1, MemberListType *outListType2)
Computes for a given list type inListType, which are the the corresponding list type(s) in the base c...
Definition util.cpp:6252

References convertProtectionLevel(), ClassDef::countMemberDeclarations(), countMembersIncludingGrouped(), FALSE, MemberListType::Invalid(), MemberListType::isInvalid(), Definition::isLinkable(), m_inherits, toClassDefMutable(), and TRUE.

Referenced by countAdditionalInheritedMembers(), and countMemberDeclarations().

◆ countInheritsNodes()

int ClassDefImpl::countInheritsNodes ( ) const
private

Definition at line 1817 of file classdef.cpp.

1818{
1819 int count=0;
1820 for (const auto &ibcd : m_inherits)
1821 {
1822 const ClassDef *icd=ibcd.classDef;
1823 if ( icd->isVisibleInHierarchy()) count++;
1824 }
1825 return count;
1826}

References ClassDef::isVisibleInHierarchy(), and m_inherits.

Referenced by countInheritanceNodes(), and writeInheritanceGraph().

◆ countMemberDeclarations()

int ClassDefImpl::countMemberDeclarations ( MemberListType lt,
const ClassDef * inheritedFrom,
MemberListType lt2,
bool invert,
bool showAlways,
ClassDefSet & visitedClasses ) const
overridevirtual

Implements ClassDef.

Definition at line 4666 of file classdef.cpp.

4668{
4669 //printf("%s: countMemberDeclarations for %s and %s\n",qPrint(name()),lt.to_string(),lt2.to_string());
4670 int count=0;
4671 MemberList * ml = getMemberList(lt);
4672 MemberList * ml2 = getMemberList(lt2);
4673 if (getLanguage()!=SrcLangExt::VHDL) // use specific declarations function
4674 {
4675 if (ml)
4676 {
4677 count+=ml->numDecMembers(inheritedFrom);
4678 //printf("-> ml=%d\n",ml->numDecMembers());
4679 }
4680 if (ml2)
4681 {
4682 count+=ml2->numDecMembers(inheritedFrom);
4683 //printf("-> ml2=%d\n",ml2->numDecMembers());
4684 }
4685 // also include grouped members that have their own section in the class (see bug 722759)
4686 if (inheritedFrom)
4687 {
4688 for (const auto &mg : m_memberGroups)
4689 {
4690 count+=mg->countGroupedInheritedMembers(lt);
4691 if (!lt2.isInvalid()) count+=mg->countGroupedInheritedMembers(lt2);
4692 }
4693 }
4694 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
4695 if (!inlineInheritedMembers) // show inherited members as separate lists
4696 {
4697 count+=countInheritedDecMembers(lt,inheritedFrom,invert,showAlways,visitedClasses);
4698 }
4699 }
4700 //printf("-> %d\n",count);
4701 return count;
4702}
MemberList * getMemberList(MemberListType lt) const override
Returns the members in the list identified by lt.
int numDecMembers(const ClassDef *inheritedFrom) const
Definition memberlist.h:133

References Config_getBool, countInheritedDecMembers(), DefinitionMixin< ClassDefMutable >::getLanguage(), getMemberList(), MemberListType::isInvalid(), m_memberGroups, and MemberList::numDecMembers().

◆ countMembers()

void ClassDefImpl::countMembers ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4730 of file classdef.cpp.

4731{
4732 for (auto &ml : m_memberLists)
4733 {
4734 ml->countDecMembers();
4735 ml->countDocMembers();
4736 }
4737 for (const auto &mg : m_memberGroups)
4738 {
4739 mg->countDecMembers();
4740 mg->countDocMembers();
4741 }
4742}

References m_memberGroups, and m_memberLists.

◆ countMembersIncludingGrouped()

int ClassDefImpl::countMembersIncludingGrouped ( MemberListType lt,
const ClassDef * inheritedFrom,
bool additional ) const
overridevirtual

Implements ClassDef.

Definition at line 4837 of file classdef.cpp.

4839{
4840 int count=0;
4841 MemberList *ml = getMemberList(lt);
4842 if (ml)
4843 {
4844 count=ml->countInheritableMembers(inheritedFrom);
4845 }
4846 //printf("%s:countMembersIncludingGrouped: count=%d\n",qPrint(name()),count);
4847 for (const auto &mg : m_memberGroups)
4848 {
4849 bool hasOwnSection = !mg->allMembersInSameSection() ||
4850 !m_subGrouping; // group is in its own section
4851 if ((additional && hasOwnSection) || (!additional && !hasOwnSection))
4852 {
4853 count+=mg->countGroupedInheritedMembers(lt);
4854 }
4855 }
4856 //printf("%s:countMembersIncludingGrouped(lt=%s,%s)=%d\n",
4857 // qPrint(name()),qPrint(lt.to_string()),ml?qPrint(ml->listType().to_string()):"<none>",count);
4858 return count;
4859}
int countInheritableMembers(const ClassDef *inheritedFrom) const

References MemberList::countInheritableMembers(), getMemberList(), m_memberGroups, and m_subGrouping.

Referenced by countInheritedDecMembers(), and writeInheritedMemberDeclarations().

◆ deepCopy()

std::unique_ptr< ClassDef > ClassDefImpl::deepCopy ( const QCString & name) const
overridevirtual

Implements ClassDef.

Definition at line 866 of file classdef.cpp.

867{
868 AUTO_TRACE("name='{}'",name);
869 auto result = std::make_unique<ClassDefImpl>(
871 std::string(),std::string(),true,m_isJavaEnum);
872 result->setBriefDescription(briefDescription(),briefFile(),briefLine());
873 result->setDocumentation(documentation(),docFile(),docLine());
874 result->setInbodyDocumentation(inbodyDocumentation(),inbodyFile(),inbodyLine());
875 result->setBodySegment(getStartDefLine(),getStartBodyLine(),getEndBodyLine());
876 result->setBodyDef(getBodyDef());
877 result->setLanguage(getLanguage());
878
879 // copy other members
880 result->m_memberListFileName = m_memberListFileName;
881 result->m_collabFileName = m_collabFileName;
882 result->m_inheritFileName = m_inheritFileName;
883 if (m_incInfo)
884 {
885 result->m_incInfo = std::make_unique<IncludeInfo>();
886 *(result->m_incInfo) = *m_incInfo;
887 }
888 result->m_inherits = m_inherits;
889 result->m_inheritedBy = m_inheritedBy;
890 result->m_fileDef = m_fileDef;
891 result->m_moduleDef = m_moduleDef;
892 result->m_tempArgs = m_tempArgs;
893 result->m_typeConstraints = m_typeConstraints;
894 result->m_files = m_files;
895 result->m_examples = m_examples;
896 result->m_compType = m_compType;
897 result->m_prot = m_prot;
898 result->m_usesImplClassList = m_usesImplClassList;
899 result->m_usedByImplClassList = m_usedByImplClassList;
900 result->m_constraintClassList = m_constraintClassList;
901 result->m_templateInstances = m_templateInstances;
902 result->m_templBaseClassNames = m_templBaseClassNames;
903 result->m_templateMaster = m_templateMaster;
904 result->m_className = m_className;
905 result->m_categoryOf = m_categoryOf;
906 result->m_isAbstract = m_isAbstract;
907 result->m_isStatic = m_isStatic;
908 result->m_membersMerged = m_membersMerged;
909 result->m_isLocal = m_isLocal;
910 result->m_isTemplArg = m_isTemplArg;
911 result->m_subGrouping = m_subGrouping;
912 result->m_usedOnly = m_usedOnly;
913 result->m_vhdlSummaryTitles = m_vhdlSummaryTitles;
914 result->m_isSimple = m_isSimple;
915 result->m_arrowOperator = m_arrowOperator;
916 result->m_tagLessRef = m_tagLessRef;
917 result->m_isJavaEnum = m_isJavaEnum;
918 result->m_spec = m_spec;
919 result->m_metaData = m_metaData;
920 result->m_requiresClause = m_requiresClause;
921 result->m_qualifiers = m_qualifiers;
922 result->m_hasCollaborationGraph = m_hasCollaborationGraph;
923 result->m_typeInheritanceGraph = m_typeInheritanceGraph;
924
925 // set new file name
926 QCString compTypeString = getCompoundTypeString(getLanguage(),m_compType,m_isJavaEnum);
927 result->m_fileName = compTypeString+name;
928 result->m_memberListFileName = convertNameToFile(compTypeString+name+"-members");
929 result->m_collabFileName = convertNameToFile(result->m_fileName+"_coll_graph");
930 result->m_inheritFileName = convertNameToFile(result->m_fileName+"_inherit_graph");
931 result->m_fileName = convertNameToFile(result->m_fileName);
932
933 // deep copy nested classes
934 for (const auto &innerCd : m_innerClasses)
935 {
936 QCString innerName = name+"::"+innerCd->localName();
937 if (Doxygen::classLinkedMap->find(innerName)==nullptr)
938 {
939 auto cd = Doxygen::classLinkedMap->add(innerName,innerCd->deepCopy(innerName));
940 result->addInnerCompound(cd);
941 ClassDefMutable *cdm = toClassDefMutable(cd);
942 if (cdm)
943 {
944 cdm->setOuterScope(result.get());
945 }
946 }
947 }
948
949 // copy all member list (and make deep copies of members)
950 for (auto &mni : m_allMemberNameInfoLinkedMap)
951 {
952 for (auto &mi : *mni)
953 {
954 const MemberDef *md=mi->memberDef();
955 auto newMd = md->deepCopy();
956 if (newMd)
957 {
958 auto mmd = toMemberDefMutable(newMd.get());
959 AUTO_TRACE_ADD("Copying member {}",mmd->name());
960 mmd->moveTo(result.get());
961
962 result->internalInsertMember(newMd.get(),newMd->protection(),true);
963
964 // also add to the global list (which will own newMd)
965 MemberName *mn = Doxygen::memberNameLinkedMap->add(newMd->name());
966 mn->push_back(std::move(newMd));
967 }
968 }
969 }
970
971 return result;
972}
TemplateInstanceList m_templateInstances
Definition classdef.cpp:489
ArgumentList m_typeConstraints
Definition classdef.cpp:458
StringSet m_vhdlSummaryTitles
List of titles to use for the summary.
Definition classdef.cpp:533
FileList m_files
Definition classdef.cpp:461
QCString m_requiresClause
C++20 requires clause.
Definition classdef.cpp:551
TemplateNameMap m_templBaseClassNames
Definition classdef.cpp:491
std::unique_ptr< IncludeInfo > m_incInfo
Definition classdef.cpp:429
QCString m_metaData
Definition classdef.cpp:548
QCString inbodyFile() const override
QCString docFile() const override
QCString briefFile() const override
QCString briefDescription(bool abbreviate=FALSE) const override
const FileDef * getBodyDef() const override
int getStartBodyLine() const override
QCString inbodyDocumentation() const override
QCString documentation() const override
virtual void setOuterScope(Definition *d)=0
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:95
virtual std::unique_ptr< MemberDef > deepCopy() const =0
#define AUTO_TRACE_ADD(...)
Definition docnode.cpp:48

References AUTO_TRACE, AUTO_TRACE_ADD, DefinitionMixin< ClassDefMutable >::briefDescription(), DefinitionMixin< ClassDefMutable >::briefFile(), DefinitionMixin< ClassDefMutable >::briefLine(), Doxygen::classLinkedMap, compoundType(), convertNameToFile(), MemberDef::deepCopy(), DefinitionMixin< ClassDefMutable >::docFile(), DefinitionMixin< ClassDefMutable >::docLine(), DefinitionMixin< ClassDefMutable >::documentation(), DefinitionMixin< ClassDefMutable >::getBodyDef(), getCompoundTypeString(), DefinitionMixin< ClassDefMutable >::getDefColumn(), DefinitionMixin< ClassDefMutable >::getDefFileName(), DefinitionMixin< ClassDefMutable >::getDefLine(), DefinitionMixin< ClassDefMutable >::getEndBodyLine(), DefinitionMixin< ClassDefMutable >::getLanguage(), DefinitionMixin< ClassDefMutable >::getStartBodyLine(), DefinitionMixin< ClassDefMutable >::getStartDefLine(), DefinitionMixin< ClassDefMutable >::inbodyDocumentation(), DefinitionMixin< ClassDefMutable >::inbodyFile(), DefinitionMixin< ClassDefMutable >::inbodyLine(), m_allMemberNameInfoLinkedMap, m_arrowOperator, m_categoryOf, m_className, m_collabFileName, m_compType, m_constraintClassList, m_examples, m_fileDef, m_files, m_hasCollaborationGraph, m_incInfo, m_inheritedBy, m_inheritFileName, m_inherits, m_innerClasses, m_isAbstract, m_isJavaEnum, m_isLocal, m_isSimple, m_isStatic, m_isTemplArg, m_memberListFileName, m_membersMerged, m_metaData, m_moduleDef, m_prot, m_qualifiers, m_requiresClause, m_spec, m_subGrouping, m_tagLessRef, m_tempArgs, m_templateInstances, m_templateMaster, m_templBaseClassNames, m_typeConstraints, m_typeInheritanceGraph, m_usedByImplClassList, m_usedOnly, m_usesImplClassList, m_vhdlSummaryTitles, Doxygen::memberNameLinkedMap, DefinitionMixin< ClassDefMutable >::name(), MemberName::push_back(), DefinitionMutable::setOuterScope(), toClassDefMutable(), and toMemberDefMutable().

◆ definitionType()

DefType ClassDefImpl::definitionType ( ) const
inlineoverridevirtual

Use this for dynamic inspection of the type of the derived class

Implements Definition.

Definition at line 192 of file classdef.cpp.

192{ return TypeClass; }

References Definition::TypeClass.

◆ displayName()

QCString ClassDefImpl::displayName ( bool includeScope = TRUE) const
overridevirtual

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

Implements Definition.

Definition at line 993 of file classdef.cpp.

994{
995 return makeDisplayName(this,includeScope);
996}
static QCString makeDisplayName(const ClassDef *cd, bool includeScope)
Definition classdef.cpp:107

References makeDisplayName().

Referenced by addListReferences(), title(), writeCollaborationGraph(), writeDeclaration(), writeDeclarationLink(), writeDocumentation(), writeInheritanceGraph(), writeMemberDocumentation(), writeMemberList(), writeMemberPages(), and writeTagFile().

◆ distributeMemberGroupDocumentation()

void ClassDefImpl::distributeMemberGroupDocumentation ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 1367 of file classdef.cpp.

1368{
1369 for (const auto &mg : m_memberGroups)
1370 {
1371 mg->distributeMemberGroupDocumentation();
1372 }
1373}

References m_memberGroups.

◆ endMemberDeclarations()

void ClassDefImpl::endMemberDeclarations ( OutputList & ol) const
private

Definition at line 2223 of file classdef.cpp.

2224{
2225 //printf("%s: ClassDefImpl::endMemberDeclarations()\n",qPrint(name()));
2226 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
2227 if (!inlineInheritedMembers && countAdditionalInheritedMembers()>0)
2228 {
2229 ol.startMemberHeader("inherited");
2231 ol.endMemberHeader();
2233 }
2234 ol.endMemberSections();
2235}
int countAdditionalInheritedMembers() const
void writeAdditionalInheritedMembers(OutputList &ol) const
void endMemberHeader()
Definition outputlist.h:471
void parseText(const QCString &textStr)
void startMemberHeader(const QCString &anchor, int typ=2)
Definition outputlist.h:469
void endMemberSections()
Definition outputlist.h:463
virtual QCString trAdditionalInheritedMembers()=0

References Config_getBool, countAdditionalInheritedMembers(), OutputList::endMemberHeader(), OutputList::endMemberSections(), OutputList::parseText(), OutputList::startMemberHeader(), theTranslator, and writeAdditionalInheritedMembers().

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ endMemberDocumentation()

void ClassDefImpl::endMemberDocumentation ( OutputList & ol) const
private

Definition at line 2207 of file classdef.cpp.

2208{
2209 //printf("%s: ClassDefImpl::endMemberDocumentation()\n",qPrint(name()));
2210 if (Config_getBool(SEPARATE_MEMBER_PAGES))
2211 {
2214 }
2215}
static bool suppressDocWarnings
Definition doxygen.h:129
void enable(OutputType o)

References Config_getBool, OutputList::enable(), FALSE, Html, and Doxygen::suppressDocWarnings.

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ findInnerCompound()

const Definition * ClassDefImpl::findInnerCompound ( const QCString & name) const
overridevirtual

Implements Definition.

Definition at line 4345 of file classdef.cpp.

4346{
4347 return m_innerClasses.find(name);
4348}

References m_innerClasses, and DefinitionMixin< ClassDefMutable >::name().

◆ findSectionsInDocumentation()

void ClassDefImpl::findSectionsInDocumentation ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 1375 of file classdef.cpp.

1376{
1380 for (const auto &mg : m_memberGroups)
1381 {
1382 mg->findSectionsInDocumentation(this);
1383 }
1384 for (auto &ml : m_memberLists)
1385 {
1386 if (!ml->listType().isDetailed())
1387 {
1388 ml->findSectionsInDocumentation(this);
1389 }
1390 }
1391}
void docFindSections(const QCString &input, const Definition *d, const QCString &fileName)

References DefinitionMixin< ClassDefMutable >::briefDescription(), DefinitionMixin< ClassDefMutable >::docFile(), docFindSections(), DefinitionMixin< ClassDefMutable >::documentation(), DefinitionMixin< ClassDefMutable >::inbodyDocumentation(), m_memberGroups, and m_memberLists.

◆ generatedFromFiles()

QCString ClassDefImpl::generatedFromFiles ( ) const
overridevirtual

Implements ClassDef.

Definition at line 1696 of file classdef.cpp.

1697{
1698 QCString result;
1699 SrcLangExt lang = getLanguage();
1700 size_t numFiles = m_files.size();
1701 if (lang==SrcLangExt::Fortran)
1702 {
1704 getLanguage()==SrcLangExt::ObjC && m_compType==Interface ? Class : m_compType,
1705 numFiles==1);
1706 }
1707 else if (isJavaEnum())
1708 {
1709 result = theTranslator->trEnumGeneratedFromFiles(numFiles==1);
1710 }
1711 else if (m_compType==Service)
1712 {
1713 result = theTranslator->trServiceGeneratedFromFiles(numFiles==1);
1714 }
1715 else if (m_compType==Singleton)
1716 {
1717 result = theTranslator->trSingletonGeneratedFromFiles(numFiles==1);
1718 }
1719 else
1720 {
1722 getLanguage()==SrcLangExt::ObjC && m_compType==Interface ? Class : m_compType,
1723 numFiles==1);
1724 }
1725 return result;
1726}
virtual QCString trServiceGeneratedFromFiles(bool single)=0
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)=0
virtual QCString trSingletonGeneratedFromFiles(bool single)=0
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single)=0
virtual QCString trEnumGeneratedFromFiles(bool single)=0

References ClassDef::Class, DefinitionMixin< ClassDefMutable >::getLanguage(), ClassDef::Interface, isJavaEnum(), m_compType, m_files, ClassDef::Service, ClassDef::Singleton, and theTranslator.

Referenced by showUsedFiles().

◆ getClasses()

ClassLinkedRefMap ClassDefImpl::getClasses ( ) const
overridevirtual

returns the classes nested into this class

Implements ClassDef.

Definition at line 4996 of file classdef.cpp.

4997{
4998 return m_innerClasses;
4999}

References m_innerClasses.

◆ getExamples()

const ExampleList & ClassDefImpl::getExamples ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5390 of file classdef.cpp.

5391{
5392 return m_examples;
5393}

References m_examples.

◆ getFileDef()

FileDef * ClassDefImpl::getFileDef ( ) const
overridevirtual

Returns the namespace this compound is in, or 0 if it has a global scope.

Returns the file in which this compound's definition can be found. Should not return 0 (but it might be a good idea to check anyway).

Implements ClassDef.

Definition at line 5051 of file classdef.cpp.

5052{
5053 return m_fileDef;
5054}

References m_fileDef.

Referenced by addTypeConstraint(), getOutputFileBase(), isEmbeddedInOuterScope(), and writeTemplateSpec().

◆ getInstanceOutputFileBase()

QCString ClassDefImpl::getInstanceOutputFileBase ( ) const
overridevirtual

Implements ClassDef.

Definition at line 4298 of file classdef.cpp.

4299{
4300 return m_fileName;
4301}

References m_fileName.

◆ getMemberByName()

const MemberDef * ClassDefImpl::getMemberByName ( const QCString & ) const
overridevirtual

Returns the member with the given name.

Implements ClassDef.

Definition at line 4585 of file classdef.cpp.

4586{
4587 const MemberDef *xmd = nullptr;
4588 const MemberNameInfo *mni = m_allMemberNameInfoLinkedMap.find(name);
4589 if (mni)
4590 {
4591 const int maxInheritanceDepth = 100000;
4592 int mdist=maxInheritanceDepth;
4593 for (auto &mi : *mni)
4594 {
4595 const ClassDef *mcd=mi->memberDef()->getClassDef();
4596 int m=minClassDistance(this,mcd);
4597 //printf("found member in %s linkable=%d m=%d\n",
4598 // qPrint(mcd->name()),mcd->isLinkable(),m);
4599 if (m<mdist)
4600 {
4601 mdist=m;
4602 xmd=mi->memberDef();
4603 }
4604 }
4605 }
4606 //printf("getMemberByName(%s)=%p\n",qPrint(name),xmd);
4607 return xmd;
4608}
int minClassDistance(const ClassDef *cd, const ClassDef *bcd, int level)

References m_allMemberNameInfoLinkedMap, minClassDistance(), and DefinitionMixin< ClassDefMutable >::name().

◆ getMemberGroups()

const MemberGroupList & ClassDefImpl::getMemberGroups ( ) const
overridevirtual

Returns the member groups defined for this class.

Implements ClassDef.

Definition at line 5166 of file classdef.cpp.

5167{
5168 return m_memberGroups;
5169}

References m_memberGroups.

◆ getMemberList()

MemberList * ClassDefImpl::getMemberList ( MemberListType lt) const
overridevirtual

Returns the members in the list identified by lt.

Implements ClassDef.

Definition at line 4615 of file classdef.cpp.

4616{
4617 for (auto &ml : m_memberLists)
4618 {
4619 if (ml->listType()==lt)
4620 {
4621 return ml.get();
4622 }
4623 }
4624 return nullptr;
4625}

References m_memberLists.

Referenced by countMemberDeclarations(), countMembersIncludingGrouped(), setAnonymousEnumType(), writeMemberDeclarations(), writeMemberDocumentation(), writePlainMemberDeclaration(), writeSimpleMemberDocumentation(), writeSummaryLinks(), and writeTagFile().

◆ getMemberListFileName()

QCString ClassDefImpl::getMemberListFileName ( ) const
overridevirtual

Implements ClassDef.

Definition at line 988 of file classdef.cpp.

989{
991}

References m_memberListFileName.

Referenced by writeDocumentation(), writeMemberList(), and writeSummaryLinks().

◆ getMemberLists()

const MemberLists & ClassDefImpl::getMemberLists ( ) const
overridevirtual

Returns the list containing the list of members sorted per type.

Implements ClassDef.

Definition at line 5161 of file classdef.cpp.

5162{
5163 return m_memberLists;
5164}

References m_memberLists.

◆ getModuleDef()

ModuleDef * ClassDefImpl::getModuleDef ( ) const
overridevirtual

Returns the C++20 module in which this compound's definition can be found.

Implements ClassDef.

Definition at line 5056 of file classdef.cpp.

5057{
5058 return m_moduleDef;
5059}

References m_moduleDef.

◆ getOutputFileBase()

QCString ClassDefImpl::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 4260 of file classdef.cpp.

4261{
4262 bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
4263 bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
4265 {
4266 Definition *scope=nullptr;
4267 if (inlineGroupedClasses && !partOfGroups().empty())
4268 {
4269 // point to the group that embeds this class
4270 return partOfGroups().front()->getOutputFileBase();
4271 }
4272 else if (inlineSimpleClasses && m_isSimple && !partOfGroups().empty())
4273 {
4274 // point to simple struct inside a group
4275 return partOfGroups().front()->getOutputFileBase();
4276 }
4277 else if (inlineSimpleClasses && m_isSimple && (scope=getOuterScope()))
4278 {
4279 if (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) // simple struct embedded in file
4280 {
4281 return getFileDef()->getOutputFileBase();
4282 }
4283 else if (scope->isLinkableInProject()) // simple struct embedded in other container (namespace/group/class)
4284 {
4285 return getOuterScope()->getOutputFileBase();
4286 }
4287 }
4288 }
4289 AUTO_TRACE("name='{}' m_templateMaster={} m_implicitTemplateInstance={}",name(),(void*)m_templateMaster,m_implicitTemplateInstance);
4291 {
4292 // point to the template of which this class is an instance
4293 return m_templateMaster->getOutputFileBase();
4294 }
4295 return m_fileName;
4296}
virtual bool isLinkableInProject() const =0
virtual QCString getOutputFileBase() const =0
Definition * getOuterScope() const override
const GroupList & partOfGroups() const override
static NamespaceDefMutable * globalScope
Definition doxygen.h:120

References AUTO_TRACE, Config_getBool, Doxygen::generatingXmlOutput, getFileDef(), DefinitionMixin< ClassDefMutable >::getOuterScope(), Definition::getOutputFileBase(), Doxygen::globalScope, isLinkableInProject(), Definition::isLinkableInProject(), m_fileName, m_implicitTemplateInstance, m_isSimple, m_templateMaster, DefinitionMixin< ClassDefMutable >::name(), and DefinitionMixin< ClassDefMutable >::partOfGroups().

Referenced by addListReferences(), writeDeclarationLink(), writeDetailedDescription(), writeDocumentation(), writeInheritanceGraph(), writeInlineDocumentation(), writeMemberList(), writeMoreLink(), and writeTagFile().

◆ getQualifiers()

StringVector ClassDefImpl::getQualifiers ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5339 of file classdef.cpp.

5340{
5341 return m_qualifiers;
5342}

References m_qualifiers.

◆ getReference()

QCString ClassDefImpl::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

Implements Definition.

Definition at line 4481 of file classdef.cpp.

4482{
4484 {
4485 return m_templateMaster->getReference();
4486 }
4487 else
4488 {
4490 }
4491}
QCString getReference() const override

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

Referenced by writeDeclarationLink(), and writeMemberList().

◆ getSourceFileBase()

QCString ClassDefImpl::getSourceFileBase ( ) const
overridevirtual

Returns the name of the source listing of this definition.

Implements Definition.

Definition at line 4303 of file classdef.cpp.

4304{
4306 {
4307 return m_templateMaster->getSourceFileBase();
4308 }
4309 else
4310 {
4312 }
4313}
QCString getSourceFileBase() const override

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

◆ getTemplateBaseClassNames()

const TemplateNameMap & ClassDefImpl::getTemplateBaseClassNames ( ) const
overridevirtual

Implements ClassDef.

Definition at line 4424 of file classdef.cpp.

4425{
4426 return m_templBaseClassNames;
4427}

References m_templBaseClassNames.

◆ getTemplateInstances()

const TemplateInstanceList & ClassDefImpl::getTemplateInstances ( ) const
overridevirtual

Returns a sorted dictionary with all template instances found for this template class.

Returns 0 if not a template or no instances.

Implements ClassDef.

Definition at line 5061 of file classdef.cpp.

5062{
5063 return m_templateInstances;
5064}

References m_templateInstances.

Referenced by internalInsertMember().

◆ getTemplateParameterLists()

ArgumentLists ClassDefImpl::getTemplateParameterLists ( ) const
overridevirtual

Returns the template parameter lists that form the template declaration of this class.

Example: template<class T> class TC {} = 0; will return a list with one ArgumentList containing one argument with type="class" and name="T".

Implements ClassDef.

Definition at line 4505 of file classdef.cpp.

4506{
4507 ArgumentLists result;
4508 Definition *d=getOuterScope();
4509 while (d && d->definitionType()==Definition::TypeClass)
4510 {
4511 result.insert(result.begin(),toClassDef(d)->templateArguments());
4512 d = d->getOuterScope();
4513 }
4514 if (!templateArguments().empty())
4515 {
4516 result.push_back(templateArguments());
4517 }
4518 return result;
4519}
std::vector< ArgumentList > ArgumentLists
Definition arguments.h:147

References Definition::definitionType(), Definition::getOuterScope(), DefinitionMixin< ClassDefMutable >::getOuterScope(), templateArguments(), toClassDef(), and Definition::TypeClass.

◆ getTitleForMemberListType()

void ClassDefImpl::getTitleForMemberListType ( MemberListType type,
QCString & title,
QCString & subtitle ) const
private

Definition at line 4780 of file classdef.cpp.

4782{
4783 SrcLangExt lang = getLanguage();
4784 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4785 {
4786 if (lde->kind()==LayoutDocEntry::MemberDecl)
4787 {
4788 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4789 if (lmd && lmd->type==type)
4790 {
4791 title = lmd->title(lang);
4792 subtitle = lmd->subtitle(lang);
4793 return;
4794 }
4795 }
4796 }
4797 title="";
4798 subtitle="";
4799}
QCString title() const override
QCString title(SrcLangExt lang) const
Definition layout.cpp:1788
QCString subtitle(SrcLangExt lang) const
Definition layout.cpp:1793

References DefinitionMixin< ClassDefMutable >::getLanguage(), LayoutDocManager::instance(), LayoutDocEntryMemberDecl::subtitle(), title(), LayoutDocEntryMemberDecl::title(), and LayoutDocEntryMemberDecl::type.

◆ hasCollaborationGraph()

bool ClassDefImpl::hasCollaborationGraph ( ) const
overridevirtual

Implements ClassDefMutable.

Definition at line 5452 of file classdef.cpp.

5453{
5455}

References m_hasCollaborationGraph.

◆ hasDetailedDescription()

bool ClassDefImpl::hasDetailedDescription ( ) const
overridevirtual

returns TRUE if this class has a non-empty detailed description

Implements ClassDef.

Definition at line 1649 of file classdef.cpp.

1650{
1651 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
1652 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1653 return ((!briefDescription().isEmpty() && repeatBrief) ||
1654 (!documentation().isEmpty() || m_tempArgs.hasTemplateDocumentation()) ||
1655 (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef()) ||
1657}
virtual int getStartBodyLine() const =0
bool hasRequirementRefs() const override

References DefinitionMixin< ClassDefMutable >::briefDescription(), Config_getBool, DefinitionMixin< ClassDefMutable >::documentation(), DefinitionMixin< ClassDefMutable >::getBodyDef(), DefinitionMixin< ClassDefMutable >::getStartBodyLine(), DefinitionMixin< ClassDefMutable >::hasRequirementRefs(), and m_tempArgs.

Referenced by writeBriefDescription(), and writeDetailedDescription().

◆ hasDocumentation()

bool ClassDefImpl::hasDocumentation ( ) const
overridevirtual

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

See also
hasUserDocumentation()

Implements Definition.

Definition at line 3677 of file classdef.cpp.

3678{
3680}
bool hasDocumentation() const override

References DefinitionMixin< Base >::hasDocumentation().

Referenced by isLinkableInProject(), and isVisibleInHierarchy().

◆ hasExamples()

bool ClassDefImpl::hasExamples ( ) const
overridevirtual

Implements ClassDef.

Definition at line 3422 of file classdef.cpp.

3423{
3424 return !m_examples.empty();
3425}

References m_examples.

Referenced by writeDetailedDocumentationBody(), and writeDocumentationContents().

◆ hasInheritanceGraph()

CLASS_GRAPH_t ClassDefImpl::hasInheritanceGraph ( ) const
overridevirtual

Implements ClassDefMutable.

Definition at line 5425 of file classdef.cpp.

5426{
5428}

References m_typeInheritanceGraph.

◆ hasNonReferenceSuperClass()

bool ClassDefImpl::hasNonReferenceSuperClass ( ) const
overridevirtual

Returns TRUE iff this class or a class inheriting from this class is not defined in an external tag file.

Implements ClassDef.

Definition at line 3539 of file classdef.cpp.

3540{
3541 return hasNonReferenceSuperClassRec(this,0);
3542}
static bool hasNonReferenceSuperClassRec(const ClassDef *cd, int level)

References hasNonReferenceSuperClassRec().

Referenced by isVisibleInHierarchy().

◆ hideDerivedVariablesInPython()

void ClassDefImpl::hideDerivedVariablesInPython ( ClassDefMutable * cls)
private

Definition at line 3985 of file classdef.cpp.

3986{
3987 //printf("hideDerivedVariableInPython()\n");
3988 if (bClass)
3989 {
3990 const MemberNameInfoLinkedMap &srcMnd = bClass->memberNameInfoLinkedMap();
3991 MemberNameInfoLinkedMap &dstMnd = m_allMemberNameInfoLinkedMap;
3992
3993 // recurse up the inheritance hierarchy
3994 for (const auto &bcd : bClass->baseClasses())
3995 {
3997 }
3998
3999 for (auto &srcMni : srcMnd) // for each member in a base class
4000 {
4001 //printf(" candidate(%s)\n",qPrint(srcMni->memberName()));
4002 MemberNameInfo *dstMni=dstMnd.find(srcMni->memberName());
4003 if (dstMni) // that is also in this class
4004 {
4006 //printf("%s member in %s and %s\n",qPrint(name()),qPrint(bClass->name()),qPrint(name()));
4007 for (it=dstMni->begin();it!=dstMni->end();)
4008 {
4009 MemberDefMutable *dstMd = toMemberDefMutable((*it)->memberDef());
4010 if (dstMd && dstMd->isVariable() && !dstMd->name().startsWith("__"))
4011 {
4012 //printf(" hiding member %s\n",qPrint(dstMd->name()));
4013 // hide a member variable if it is already defined in a base class, unless
4014 // it is a __private variable
4015 removeMemberFromLists(dstMd);
4016 it = dstMni->erase(it);
4017 }
4018 else
4019 {
4020 ++it;
4021 }
4022 }
4023 if (dstMni->empty()) // if the list has become empty, remove the entry from the dictionary
4024 {
4025 dstMnd.del(srcMni->memberName());
4026 }
4027 }
4028 }
4029 }
4030}
void hideDerivedVariablesInPython(ClassDefMutable *cls)
void removeMemberFromLists(MemberDef *md) override
bool del(const QCString &key)
Definition linkedmap.h:183
const T * find(const std::string &key) const
Definition linkedmap.h:47
virtual bool isVariable() const =0
bool empty() const
Definition membername.h:135
iterator begin()
Definition membername.h:131
iterator end()
Definition membername.h:132
typename Vec::iterator iterator
Definition membername.h:125
iterator erase(iterator pos)
Definition membername.h:142
bool startsWith(const char *s) const
Definition qcstring.h:507

References ClassDef::baseClasses(), MemberNameInfo::begin(), LinkedMap< T, Hash, KeyEqual, Map >::del(), MemberNameInfo::empty(), MemberNameInfo::end(), MemberNameInfo::erase(), LinkedMap< T, Hash, KeyEqual, Map >::find(), hideDerivedVariablesInPython(), MemberDef::isVariable(), m_allMemberNameInfoLinkedMap, ClassDef::memberNameInfoLinkedMap(), Definition::name(), removeMemberFromLists(), QCString::startsWith(), toClassDefMutable(), and toMemberDefMutable().

Referenced by hideDerivedVariablesInPython(), and mergeMembers().

◆ includeInfo()

const IncludeInfo * ClassDefImpl::includeInfo ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5086 of file classdef.cpp.

5087{
5088 return m_incInfo.get();
5089}

References m_incInfo.

◆ inheritanceGraphFileName()

QCString ClassDefImpl::inheritanceGraphFileName ( ) const
overridevirtual

returns the file name to use for the inheritance graph

Implements ClassDef.

Definition at line 5415 of file classdef.cpp.

5416{
5417 return m_inheritFileName;
5418}

References m_inheritFileName.

◆ insertBaseClass()

void ClassDefImpl::insertBaseClass ( ClassDef * cd,
const QCString & name,
Protection p,
Specifier s,
const QCString & t = QCString() )
overridevirtual

Implements ClassDefMutable.

Definition at line 999 of file classdef.cpp.

1001{
1002 //printf("*** insert base class %s into %s\n",qPrint(cd->name()),qPrint(name()));
1003 m_inherits.emplace_back(cd,n,p,s,t);
1004 m_isSimple = FALSE;
1005}

References FALSE, m_inherits, and m_isSimple.

Referenced by mergeCategory().

◆ insertExplicitTemplateInstance()

void ClassDefImpl::insertExplicitTemplateInstance ( ClassDef * instance,
const QCString & spec )
overridevirtual

Implements ClassDefMutable.

Definition at line 4413 of file classdef.cpp.

4414{
4415 AUTO_TRACE("this={} cd={} templSpec={}",name(),templateClass->name(),templSpec);
4416 m_templateInstances.emplace_back(templSpec,templateClass);
4417}

References AUTO_TRACE, m_templateInstances, Definition::name(), and DefinitionMixin< ClassDefMutable >::name().

◆ insertMember()

void ClassDefImpl::insertMember ( MemberDef * md)
overridevirtual

Implements ClassDefMutable.

Definition at line 1345 of file classdef.cpp.

1346{
1348}
void internalInsertMember(MemberDef *md, Protection prot, bool addToAllList)
virtual Protection protection() const =0

References internalInsertMember(), MemberDef::protection(), and TRUE.

Referenced by addMemberToTemplateInstance(), and reclassifyMember().

◆ insertSubClass()

void ClassDefImpl::insertSubClass ( ClassDef * cd,
Protection p,
Specifier s,
const QCString & t = QCString() )
overridevirtual

Implements ClassDefMutable.

Definition at line 1008 of file classdef.cpp.

1010{
1011 //printf("*** insert sub class %s into %s\n",qPrint(cd->name()),qPrint(name()));
1012 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
1013 if (!extractPrivate && cd->protection()==Protection::Private) return;
1014 m_inheritedBy.emplace_back(cd,QCString(),p,s,t);
1015 m_isSimple = FALSE;
1016}
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.

References Config_getBool, FALSE, m_inheritedBy, m_isSimple, and ClassDef::protection().

◆ insertTemplateInstance()

ClassDef * ClassDefImpl::insertTemplateInstance ( const QCString & fileName,
int startLine,
int startColumn,
const QCString & templSpec,
bool & freshInstance )
overridevirtual

Implements ClassDefMutable.

Definition at line 4350 of file classdef.cpp.

4352{
4353 freshInstance = FALSE;
4354 auto it = std::find_if(m_templateInstances.begin(),
4355 m_templateInstances.end(),
4356 [&templSpec](const auto &ti) { return templSpec==ti.templSpec; });
4357 ClassDefMutable *templateClass=nullptr;
4358 if (it!=m_templateInstances.end())
4359 {
4360 templateClass = toClassDefMutable((*it).classDef);
4361 }
4362 if (templateClass==nullptr)
4363 {
4364 QCString tcname = removeRedundantWhiteSpace(name()+templSpec);
4365 AUTO_TRACE("New template instance class name='{}' templSpec='{}' inside '{}' hidden={}",
4366 name(),templSpec,name(),isHidden());
4367
4368 ClassDef *foundCd = Doxygen::classLinkedMap->find(tcname);
4369 if (foundCd)
4370 {
4371 return foundCd;
4372 }
4373 templateClass =
4375 Doxygen::classLinkedMap->add(tcname,
4376 std::unique_ptr<ClassDef>(
4377 new ClassDefImpl(fileName,startLine,startColumn,tcname,ClassDef::Class))));
4378 if (templateClass)
4379 {
4380 templateClass->setTemplateMaster(this);
4381 ArgumentList tal = *stringToArgumentList(getLanguage(),templSpec);
4382 templateClass->setTemplateArguments(tal);
4383 templateClass->setOuterScope(getOuterScope());
4384 templateClass->setHidden(isHidden());
4385 templateClass->setArtificial(isArtificial());
4386 templateClass->setImplicitTemplateInstance(true);
4387 m_templateInstances.emplace_back(templSpec,templateClass);
4388
4389 // also add nested classes
4390 for (const auto &innerCd : m_innerClasses)
4391 {
4392 QCString innerName = tcname+"::"+innerCd->localName();
4393 ClassDefMutable *innerClass =
4395 Doxygen::classLinkedMap->add(innerName,
4396 std::unique_ptr<ClassDef>(
4397 new ClassDefImpl(fileName,startLine,startColumn,innerName,ClassDef::Class))));
4398 if (innerClass)
4399 {
4400 templateClass->addInnerCompound(innerClass);
4401 innerClass->setOuterScope(templateClass);
4402 innerClass->setHidden(isHidden());
4403 innerClass->setArtificial(TRUE);
4404 innerClass->setImplicitTemplateInstance(true);
4405 }
4406 }
4407 freshInstance=TRUE;
4408 }
4409 }
4410 return templateClass;
4411}
virtual void setTemplateArguments(const ArgumentList &al)=0
virtual void setTemplateMaster(const ClassDef *tm)=0
virtual void setImplicitTemplateInstance(bool b)=0
virtual void setHidden(bool b)=0
virtual void addInnerCompound(Definition *d)=0
virtual void setArtificial(bool b)=0

References DefinitionMutable::addInnerCompound(), AUTO_TRACE, ClassDef::Class, ClassDefImpl(), Doxygen::classLinkedMap, FALSE, DefinitionMixin< ClassDefMutable >::getLanguage(), DefinitionMixin< ClassDefMutable >::getOuterScope(), DefinitionMixin< ClassDefMutable >::isArtificial(), DefinitionMixin< ClassDefMutable >::isHidden(), m_innerClasses, m_templateInstances, DefinitionMixin< ClassDefMutable >::name(), removeRedundantWhiteSpace(), DefinitionMutable::setArtificial(), DefinitionMutable::setHidden(), ClassDefMutable::setImplicitTemplateInstance(), DefinitionMutable::setOuterScope(), ClassDefMutable::setTemplateArguments(), ClassDefMutable::setTemplateMaster(), stringToArgumentList(), toClassDefMutable(), and TRUE.

◆ insertUsedFile()

void ClassDefImpl::insertUsedFile ( const FileDef * fd)
overridevirtual

Implements ClassDefMutable.

Definition at line 1395 of file classdef.cpp.

1396{
1397 if (fd == nullptr) return;
1398
1399 if (std::find(m_files.begin(), m_files.end(), fd) == m_files.end()) m_files.push_back(fd);
1400
1401 for (const auto &ti : m_templateInstances)
1402 {
1403 if (ClassDefMutable *cdm = toClassDefMutable(ti.classDef)) cdm->insertUsedFile(fd);
1404 }
1405}

References m_files, m_templateInstances, and toClassDefMutable().

◆ internalInsertMember()

void ClassDefImpl::internalInsertMember ( MemberDef * md,
Protection prot,
bool addToAllList )
private

isReference()

Definition at line 1040 of file classdef.cpp.

1044{
1045 AUTO_TRACE("{} name={} isHidden={}",name(),md->name(),md->isHidden());
1046 if (md->isHidden()) return;
1047
1048 if (getLanguage()==SrcLangExt::VHDL)
1049 {
1051 m_vhdlSummaryTitles.insert(title.str());
1052 }
1053
1054 if (1 /*!isReference()*/) // changed to 1 for showing members of external
1055 // classes when HAVE_DOT and UML_LOOK are enabled.
1056 {
1057 bool isSimple=FALSE;
1058
1059 /********************************************/
1060 /* insert member in the declaration section */
1061 /********************************************/
1062 if (md->isRelated() && protectionLevelVisible(prot))
1063 {
1064 addMemberToList(MemberListType::Related(),md,TRUE);
1065 }
1066 else if (md->isFriend())
1067 {
1068 addMemberToList(MemberListType::Friends(),md,TRUE);
1069 }
1070 else
1071 {
1072 switch (md->memberType())
1073 {
1074 case MemberType::Service: // UNO IDL
1075 addMemberToList(MemberListType::Services(),md,TRUE);
1076 break;
1077 case MemberType::Interface: // UNO IDL
1078 addMemberToList(MemberListType::Interfaces(),md,TRUE);
1079 break;
1080 case MemberType::Signal: // Qt specific
1081 addMemberToList(MemberListType::Signals(),md,TRUE);
1082 break;
1083 case MemberType::DCOP: // KDE2 specific
1084 addMemberToList(MemberListType::DcopMethods(),md,TRUE);
1085 break;
1087 addMemberToList(MemberListType::Properties(),md,TRUE);
1088 break;
1089 case MemberType::Event:
1090 addMemberToList(MemberListType::Events(),md,TRUE);
1091 break;
1092 case MemberType::Slot: // Qt specific
1093 switch (prot)
1094 {
1095 case Protection::Protected:
1096 case Protection::Package: // slots in packages are not possible!
1097 addMemberToList(MemberListType::ProSlots(),md,TRUE);
1098 break;
1099 case Protection::Public:
1100 addMemberToList(MemberListType::PubSlots(),md,TRUE);
1101 break;
1102 case Protection::Private:
1103 addMemberToList(MemberListType::PriSlots(),md,TRUE);
1104 break;
1105 }
1106 break;
1107 default: // any of the other members
1108 if (md->isStatic())
1109 {
1110 if (md->isVariable())
1111 {
1112 switch (prot)
1113 {
1114 case Protection::Protected:
1115 addMemberToList(MemberListType::ProStaticAttribs(),md,TRUE);
1116 break;
1117 case Protection::Package:
1118 addMemberToList(MemberListType::PacStaticAttribs(),md,TRUE);
1119 break;
1120 case Protection::Public:
1121 addMemberToList(MemberListType::PubStaticAttribs(),md,TRUE);
1122 break;
1123 case Protection::Private:
1124 addMemberToList(MemberListType::PriStaticAttribs(),md,TRUE);
1125 break;
1126 }
1127 }
1128 else // function
1129 {
1130 switch (prot)
1131 {
1132 case Protection::Protected:
1133 addMemberToList(MemberListType::ProStaticMethods(),md,TRUE);
1134 break;
1135 case Protection::Package:
1136 addMemberToList(MemberListType::PacStaticMethods(),md,TRUE);
1137 break;
1138 case Protection::Public:
1139 addMemberToList(MemberListType::PubStaticMethods(),md,TRUE);
1140 break;
1141 case Protection::Private:
1142 addMemberToList(MemberListType::PriStaticMethods(),md,TRUE);
1143 break;
1144 }
1145 }
1146 }
1147 else // not static
1148 {
1149 if (md->isVariable())
1150 {
1151 switch (prot)
1152 {
1153 case Protection::Protected:
1154 addMemberToList(MemberListType::ProAttribs(),md,TRUE);
1155 break;
1156 case Protection::Package:
1157 addMemberToList(MemberListType::PacAttribs(),md,TRUE);
1158 break;
1159 case Protection::Public:
1160 {
1161 addMemberToList(MemberListType::PubAttribs(),md,TRUE);
1162 const int MAX_CELL_SIZE=60;
1163 isSimple=md->typeString().length()+md->name().length()+md->argsString().length()<=MAX_CELL_SIZE;
1164 }
1165 break;
1166 case Protection::Private:
1167 addMemberToList(MemberListType::PriAttribs(),md,TRUE);
1168 break;
1169 }
1170 }
1171 else if (md->isTypedef() || md->isEnumerate() || md->isEnumValue())
1172 {
1173 switch (prot)
1174 {
1175 case Protection::Protected:
1176 addMemberToList(MemberListType::ProTypes(),md,TRUE);
1177 break;
1178 case Protection::Package:
1179 addMemberToList(MemberListType::PacTypes(),md,TRUE);
1180 break;
1181 case Protection::Public:
1182 addMemberToList(MemberListType::PubTypes(),md,TRUE);
1183 isSimple=!md->isEnumerate() &&
1184 !md->isEnumValue() &&
1185 md->typeString().find(")(")==-1; // func ptr typedef
1186 break;
1187 case Protection::Private:
1188 addMemberToList(MemberListType::PriTypes(),md,TRUE);
1189 break;
1190 }
1191 }
1192 else // member function
1193 {
1194 switch (prot)
1195 {
1196 case Protection::Protected:
1197 addMemberToList(MemberListType::ProMethods(),md,TRUE);
1198 break;
1199 case Protection::Package:
1200 addMemberToList(MemberListType::PacMethods(),md,TRUE);
1201 break;
1202 case Protection::Public:
1203 addMemberToList(MemberListType::PubMethods(),md,TRUE);
1204 break;
1205 case Protection::Private:
1206 addMemberToList(MemberListType::PriMethods(),md,TRUE);
1207 break;
1208 }
1209 }
1210 }
1211 break;
1212 }
1213 }
1214 if (!isSimple) // not a simple field -> not a simple struct
1215 {
1216 m_isSimple = FALSE;
1217 }
1218 //printf("adding %s simple=%d total_simple=%d\n",qPrint(name()),isSimple,m_isSimple);
1219
1220 /*******************************************************/
1221 /* insert member in the detailed documentation section */
1222 /*******************************************************/
1223 if ((md->isRelated() && protectionLevelVisible(prot)) || md->isFriend())
1224 {
1225 addMemberToList(MemberListType::RelatedMembers(),md,FALSE);
1226 }
1227 else if (md->isFunction() &&
1228 md->protection()==Protection::Private &&
1229 (md->virtualness()!=Specifier::Normal || md->isOverride() || md->isFinal()) &&
1230 Config_getBool(EXTRACT_PRIV_VIRTUAL))
1231 {
1232 addMemberToList(MemberListType::FunctionMembers(),md,FALSE);
1233 }
1234 else
1235 {
1236 switch (md->memberType())
1237 {
1238 case MemberType::Service: // UNO IDL
1239 addMemberToList(MemberListType::ServiceMembers(),md,FALSE);
1240 break;
1241 case MemberType::Interface: // UNO IDL
1242 addMemberToList(MemberListType::InterfaceMembers(),md,FALSE);
1243 break;
1245 addMemberToList(MemberListType::PropertyMembers(),md,FALSE);
1246 break;
1247 case MemberType::Event:
1248 addMemberToList(MemberListType::EventMembers(),md,FALSE);
1249 break;
1250 case MemberType::Signal: // fall through
1251 case MemberType::DCOP:
1252 addMemberToList(MemberListType::FunctionMembers(),md,FALSE);
1253 break;
1254 case MemberType::Slot:
1255 if (protectionLevelVisible(prot))
1256 {
1257 addMemberToList(MemberListType::FunctionMembers(),md,FALSE);
1258 }
1259 break;
1260 default: // any of the other members
1261 if (protectionLevelVisible(prot))
1262 {
1263 switch (md->memberType())
1264 {
1266 addMemberToList(MemberListType::TypedefMembers(),md,FALSE);
1267 break;
1269 addMemberToList(MemberListType::EnumMembers(),md,FALSE);
1270 break;
1272 addMemberToList(MemberListType::EnumValMembers(),md,FALSE);
1273 break;
1275 if (md->isConstructor() || md->isDestructor())
1276 {
1277 m_memberLists.get(MemberListType::Constructors(),MemberListContainer::Class)->push_back(md);
1278 }
1279 else
1280 {
1281 addMemberToList(MemberListType::FunctionMembers(),md,FALSE);
1282 }
1283 break;
1285 addMemberToList(MemberListType::VariableMembers(),md,FALSE);
1286 break;
1287 case MemberType::Define:
1288 warn(md->getDefFileName(),md->getDefLine()-1,"A define ({}) cannot be made a member of {}",
1289 md->name(), this->name());
1290 break;
1291 default:
1292 err("Unexpected member type '{}' found!\n",md->memberTypeName());
1293 }
1294 }
1295 break;
1296 }
1297 }
1298
1299 /*************************************************/
1300 /* insert member in the appropriate member group */
1301 /*************************************************/
1302 // Note: this must be done AFTER inserting the member in the
1303 // regular groups
1304 //addMemberToGroup(md,groupId);
1305
1306 }
1307
1308 if (md->virtualness()==Specifier::Pure)
1309 {
1310 m_isAbstract=true;
1311 }
1312
1313 if (md->name()=="operator->")
1314 {
1315 m_arrowOperator=md;
1316 }
1317
1318 if (addToAllList &&
1319 !(Config_getBool(HIDE_FRIEND_COMPOUNDS) &&
1320 md->isFriend() &&
1321 (md->typeString()=="friend class" ||
1322 md->typeString()=="friend struct" ||
1323 md->typeString()=="friend union")))
1324 {
1325 //printf("=======> adding member %s to class %s\n",qPrint(md->name()),qPrint(name()));
1326
1327 MemberNameInfo *mni = m_allMemberNameInfoLinkedMap.add(md->name());
1328 mni->push_back(std::make_unique<MemberInfo>(md,prot,md->virtualness(),false,false));
1329 }
1330
1331 // if we already created template instances before inserting this member (i.e. due to a typedef or using statement)
1332 // then we also need to insert the member in the template instance.
1333 for (const auto &ti : getTemplateInstances())
1334 {
1335 AUTO_TRACE_ADD("member {} of class {} with template instance {}\n",md->name(),name(),ti.templSpec);
1336 ClassDefMutable *cdm = toClassDefMutable(ti.classDef);
1337 if (cdm)
1338 {
1339 cdm->addMemberToTemplateInstance(md,templateArguments(),ti.templSpec);
1340 }
1341 }
1342
1343}
void addMemberToList(MemberListType lt, MemberDef *md, bool isBrief)
const TemplateInstanceList & getTemplateInstances() const override
Returns a sorted dictionary with all template instances found for this template class.
bool isSimple() const override
virtual void addMemberToTemplateInstance(const MemberDef *md, const ArgumentList &templateArguments, const QCString &templSpec)=0
virtual QCString getDefFileName() const =0
virtual int getDefLine() const =0
virtual bool isHidden() const =0
virtual bool isDestructor() const =0
virtual bool isConstructor() const =0
virtual bool isFriend() const =0
virtual bool isRelated() const =0
virtual bool isOverride() const =0
virtual bool isTypedef() const =0
virtual VhdlSpecifier getVhdlSpecifiers() const =0
virtual bool isFunction() const =0
virtual bool isStatic() const =0
virtual bool isEnumerate() const =0
virtual MemberType memberType() const =0
virtual QCString memberTypeName() const =0
virtual QCString argsString() const =0
virtual Specifier virtualness(int count=0) const =0
virtual bool isFinal() const =0
virtual bool isEnumValue() const =0
void push_back(Ptr &&p)
Definition membername.h:141
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
virtual QCString trVhdlType(VhdlSpecifier type, bool single)=0
#define warn(file, line, fmt,...)
Definition message.h:97
#define err(fmt,...)
Definition message.h:127
@ Enumeration
Definition types.h:557
@ EnumValue
Definition types.h:558
@ Interface
Definition types.h:565
@ Variable
Definition types.h:555
@ Property
Definition types.h:563
@ Typedef
Definition types.h:556
@ Function
Definition types.h:554
@ Service
Definition types.h:566
bool protectionLevelVisible(Protection prot)
Definition util.cpp:5960

References addMemberToList(), ClassDefMutable::addMemberToTemplateInstance(), MemberDef::argsString(), AUTO_TRACE, AUTO_TRACE_ADD, Class, Config_getBool, DCOP, Define, Enumeration, EnumValue, err, Event, FALSE, QCString::find(), Function, Definition::getDefFileName(), Definition::getDefLine(), DefinitionMixin< ClassDefMutable >::getLanguage(), getTemplateInstances(), MemberDef::getVhdlSpecifiers(), Interface, MemberDef::isConstructor(), MemberDef::isDestructor(), MemberDef::isEnumerate(), MemberDef::isEnumValue(), MemberDef::isFinal(), MemberDef::isFriend(), MemberDef::isFunction(), Definition::isHidden(), MemberDef::isOverride(), MemberDef::isRelated(), isSimple(), MemberDef::isStatic(), MemberDef::isTypedef(), MemberDef::isVariable(), QCString::length(), m_allMemberNameInfoLinkedMap, m_arrowOperator, m_isAbstract, m_isSimple, m_memberLists, m_vhdlSummaryTitles, MemberDef::memberType(), MemberDef::memberTypeName(), Definition::name(), DefinitionMixin< ClassDefMutable >::name(), Property, MemberDef::protection(), protectionLevelVisible(), MemberNameInfo::push_back(), Service, Signal, Slot, templateArguments(), theTranslator, title(), toClassDefMutable(), TRUE, Typedef, MemberDef::typeString(), Variable, MemberDef::virtualness(), and warn.

Referenced by insertMember(), mergeCategory(), and mergeMembersFromBaseClasses().

◆ isAbstract()

bool ClassDefImpl::isAbstract ( ) const
overridevirtual

Returns TRUE if there is at least one pure virtual member in this class.

Implements ClassDef.

Definition at line 5111 of file classdef.cpp.

5112{
5113 return m_isAbstract || m_spec.isAbstract();
5114}

References m_isAbstract, and m_spec.

Referenced by addClassAttributes().

◆ isAccessibleMember()

bool ClassDefImpl::isAccessibleMember ( const MemberDef * md) const
overridevirtual

returns TRUE iff md is a member of this class or of the the public/protected members of a base class

Implements ClassDef.

Definition at line 4610 of file classdef.cpp.

4611{
4612 return md->getClassDef() && isBaseClass(md->getClassDef(),TRUE,QCString());
4613}
int isBaseClass(const ClassDef *bcd, bool followInstances, const QCString &templSpec) const override
Returns TRUE iff bcd is a direct or indirect base class of this class.
virtual const ClassDef * getClassDef() const =0

References MemberDef::getClassDef(), isBaseClass(), and TRUE.

◆ isBaseClass()

int ClassDefImpl::isBaseClass ( const ClassDef * bcd,
bool followInstances,
const QCString & templSpec ) const
overridevirtual

Returns TRUE iff bcd is a direct or indirect base class of this class.

This function will recursively traverse all branches of the inheritance tree.

Implements ClassDef.

Definition at line 3687 of file classdef.cpp.

3688{
3689 int distance=0;
3690 //printf("isBaseClass(cd=%s) looking for %s templSpec=%s\n",qPrint(name()),qPrint(bcd->name()),qPrint(templSpec));
3691 for (const auto &bclass : baseClasses())
3692 {
3693 const ClassDef *ccd = bclass.classDef;
3694 if (!followInstances && ccd->templateMaster())
3695 {
3696 ccd=ccd->templateMaster();
3697 }
3698 if (ccd==bcd && (templSpec.isEmpty() || templSpec==bclass.templSpecifiers))
3699 {
3700 distance=1;
3701 break; // no shorter path possible
3702 }
3703 else
3704 {
3705 int d = ccd->isBaseClass(bcd,followInstances,templSpec);
3706 if (d>256)
3707 {
3708 err("Possible recursive class relation while inside {} and looking for base class {}\n",name(),bcd->name());
3709 return 0;
3710 }
3711 else if (d>0) // path found
3712 {
3713 if (distance==0 || d+1<distance) // update if no path found yet or shorter path found
3714 {
3715 distance=d+1;
3716 }
3717 }
3718 }
3719 }
3720 return distance;
3721}
virtual int isBaseClass(const ClassDef *bcd, bool followInstances, const QCString &templSpec=QCString()) const =0
Returns TRUE iff bcd is a direct or indirect base class of this class.
virtual const ClassDef * templateMaster() const =0
Returns the template master of which this class is an instance.
const BaseClassList & baseClasses() const override
Returns the list of base classes from which this class directly inherits.

References baseClasses(), err, ClassDef::isBaseClass(), QCString::isEmpty(), Definition::name(), DefinitionMixin< ClassDefMutable >::name(), and ClassDef::templateMaster().

Referenced by isAccessibleMember().

◆ isCSharp()

bool ClassDefImpl::isCSharp ( ) const
overridevirtual

Returns TRUE if this class is implemented in C#.

Implements ClassDef.

Definition at line 5151 of file classdef.cpp.

5152{
5153 return getLanguage()==SrcLangExt::CSharp;
5154}

References DefinitionMixin< ClassDefMutable >::getLanguage().

◆ isEmbeddedInOuterScope()

bool ClassDefImpl::isEmbeddedInOuterScope ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5269 of file classdef.cpp.

5270{
5271 bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
5272 bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
5273
5274 Definition *container = getOuterScope();
5275
5276 bool containerLinkable =
5277 container &&
5278 (
5279 (container==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || // global class in documented file
5280 container->isLinkableInProject() // class in documented scope
5281 );
5282
5283 // inline because of INLINE_GROUPED_CLASSES=YES ?
5284 bool b1 = (inlineGroupedClasses && !partOfGroups().empty()); // a grouped class
5285 // inline because of INLINE_SIMPLE_STRUCTS=YES ?
5286 bool b2 = (inlineSimpleClasses && m_isSimple && // a simple class
5287 (containerLinkable || // in a documented container
5288 !partOfGroups().empty() // or part of a group
5289 )
5290 );
5291 //printf("%s::isEmbeddedInOuterScope(): inlineGroupedClasses=%d "
5292 // "inlineSimpleClasses=%d partOfGroups()=%p m_isSimple=%d "
5293 // "getOuterScope()=%s b1=%d b2=%d\n",
5294 // qPrint(name()),inlineGroupedClasses,inlineSimpleClasses,
5295 // partOfGroups().pointer(),m_isSimple,getOuterScope()?qPrint(getOuterScope()->name()):"<none>",b1,b2);
5296 return b1 || b2; // either reason will do
5297}

References Config_getBool, getFileDef(), DefinitionMixin< ClassDefMutable >::getOuterScope(), Doxygen::globalScope, Definition::isLinkableInProject(), m_isSimple, and DefinitionMixin< ClassDefMutable >::partOfGroups().

Referenced by anchor().

◆ isExtension()

bool ClassDefImpl::isExtension ( ) const
overridevirtual

Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category).

Implements ClassDef.

Definition at line 5371 of file classdef.cpp.

5372{
5373 QCString n = name();
5374 int si = n.find('(');
5375 int ei = n.find(')');
5376 bool b = ei>si && n.mid(si+1,ei-si-1).stripWhiteSpace().isEmpty();
5377 return b;
5378}

References QCString::find(), QCString::isEmpty(), QCString::mid(), DefinitionMixin< ClassDefMutable >::name(), and QCString::stripWhiteSpace().

Referenced by mergeCategory(), and visibleInParentsDeclList().

◆ isFinal()

bool ClassDefImpl::isFinal ( ) const
overridevirtual

Returns TRUE if this class is marked as final.

Implements ClassDef.

Definition at line 5116 of file classdef.cpp.

5117{
5118 return m_spec.isFinal();
5119}

References m_spec.

Referenced by addClassAttributes().

◆ isFortran()

bool ClassDefImpl::isFortran ( ) const
overridevirtual

Returns TRUE if this class is implemented in Fortran.

Implements ClassDef.

Definition at line 5146 of file classdef.cpp.

5147{
5148 return getLanguage()==SrcLangExt::Fortran;
5149}

References DefinitionMixin< ClassDefMutable >::getLanguage().

Referenced by writeTagFile().

◆ isForwardDeclared()

bool ClassDefImpl::isForwardDeclared ( ) const
overridevirtual

Returns TRUE if this class represents a forward declaration of a template class.

Implements ClassDef.

Definition at line 5131 of file classdef.cpp.

5132{
5133 return m_spec.isForwardDecl();
5134}

References m_spec.

◆ isImplicitTemplateInstance()

bool ClassDefImpl::isImplicitTemplateInstance ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5071 of file classdef.cpp.

5072{
5074}

References m_implicitTemplateInstance.

◆ isInterface()

bool ClassDefImpl::isInterface ( ) const
overridevirtual

Returns TRUE if this class represents an interface.

Implements ClassDef.

Definition at line 5136 of file classdef.cpp.

5137{
5138 return m_spec.isInterface();
5139}

References m_spec.

◆ isJavaEnum()

bool ClassDefImpl::isJavaEnum ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5317 of file classdef.cpp.

5318{
5319 return m_isJavaEnum;
5320}

References m_isJavaEnum.

Referenced by ClassDefImpl(), compoundTypeString(), generatedFromFiles(), and title().

◆ isLinkable()

bool ClassDefImpl::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 3639 of file classdef.cpp.

3640{
3642 {
3643 return m_templateMaster->isLinkable();
3644 }
3645 else
3646 {
3647 return isReference() || isLinkableInProject();
3648 }
3649}
bool isReference() const override

References isLinkableInProject(), isReference(), m_implicitTemplateInstance, and m_templateMaster.

Referenced by visibleInParentsDeclList(), writeDeclaration(), and writeDeclarationLink().

◆ isLinkableInProject()

bool ClassDefImpl::isLinkableInProject ( ) const
overridevirtual

a link to this class is possible within this project

Implements Definition.

Definition at line 3607 of file classdef.cpp.

3608{
3609 bool extractLocal = Config_getBool(EXTRACT_LOCAL_CLASSES);
3610 bool extractStatic = Config_getBool(EXTRACT_STATIC);
3611 bool hideUndoc = Config_getBool(HIDE_UNDOC_CLASSES);
3613 {
3614 return m_templateMaster->isLinkableInProject();
3615 }
3616 else
3617 {
3618 //printf("%s::isLinkableInProject() conditions: artificial=%d hidden=%d anonymous=%d protection=%d local=%d docs=%d static=%d ref=%d\n",
3619 // qPrint(name()),
3620 // !isArtificial(),
3621 // !isHidden(),
3622 // !isAnonymous(),
3623 // m_prot,
3624 // !m_isLocal || extractLocal,
3625 // hasDocumentation() || m_tempArgs.hasTemplateDocumentation() || !hideUndoc,
3626 // !m_isStatic || extractStatic,
3627 // !isReference());
3628 return
3629 !isArtificial() && !isHidden() && /* not hidden */
3630 !isAnonymous() && /* not anonymous */
3631 protectionLevelVisible(m_prot) && /* private/internal */
3632 (!m_isLocal || extractLocal) && /* local */
3633 (hasDocumentation() || m_tempArgs.hasTemplateDocumentation() || !hideUndoc) && /* documented */
3634 (!m_isStatic || extractStatic) && /* static */
3635 !isReference(); /* not an external reference */
3636 }
3637}
bool hasDocumentation() const override

References Config_getBool, hasDocumentation(), DefinitionMixin< ClassDefMutable >::isAnonymous(), DefinitionMixin< ClassDefMutable >::isArtificial(), DefinitionMixin< ClassDefMutable >::isHidden(), isReference(), m_implicitTemplateInstance, m_isLocal, m_isStatic, m_prot, m_tempArgs, m_templateMaster, and protectionLevelVisible().

Referenced by addListReferences(), addRequirementReferences(), getOutputFileBase(), isLinkable(), writeDeclarationLink(), and writeTagFile().

◆ isLocal()

bool ClassDefImpl::isLocal ( ) const
overridevirtual

Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES.

Implements ClassDef.

Definition at line 4991 of file classdef.cpp.

4992{
4993 return m_isLocal;
4994}

References m_isLocal.

Referenced by visibleInParentsDeclList().

◆ isObjectiveC()

bool ClassDefImpl::isObjectiveC ( ) const
overridevirtual

Returns TRUE if this class is implemented in Objective-C.

Implements ClassDef.

Definition at line 5141 of file classdef.cpp.

5142{
5143 return getLanguage()==SrcLangExt::ObjC;
5144}

References DefinitionMixin< ClassDefMutable >::getLanguage().

Referenced by writeTagFile().

◆ isPublished()

bool ClassDefImpl::isPublished ( ) const
overridevirtual

Returns TRUE if this class is marked as published.

Implements ClassDef.

Definition at line 5126 of file classdef.cpp.

5127{
5128 return m_spec.isPublished();
5129}

References m_spec.

Referenced by addClassAttributes().

◆ isReference()

bool ClassDefImpl::isReference ( ) const
overridevirtual

Returns TRUE if this definition is imported via a tag file.

Implements Definition.

Definition at line 4493 of file classdef.cpp.

4494{
4496 {
4497 return m_templateMaster->isReference();
4498 }
4499 else
4500 {
4502 }
4503}
bool isReference() const override

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

Referenced by isLinkable(), isLinkableInProject(), and isVisibleInHierarchy().

◆ isSealed()

bool ClassDefImpl::isSealed ( ) const
overridevirtual

Returns TRUE if this class is marked as sealed.

Implements ClassDef.

Definition at line 5121 of file classdef.cpp.

5122{
5123 return m_spec.isSealed();
5124}

References m_spec.

Referenced by addClassAttributes().

◆ isSimple()

bool ClassDefImpl::isSimple ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5231 of file classdef.cpp.

5232{
5233 return m_isSimple;
5234}

References m_isSimple.

Referenced by internalInsertMember(), and writeInlineDocumentation().

◆ isSliceLocal()

bool ClassDefImpl::isSliceLocal ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5400 of file classdef.cpp.

5401{
5402 return m_spec.isLocal();
5403}

References m_spec.

Referenced by title(), and writeDeclarationLink().

◆ isSmartPointer()

const MemberDef * ClassDefImpl::isSmartPointer ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5236 of file classdef.cpp.

5237{
5238 return m_arrowOperator;
5239}

References m_arrowOperator.

◆ isSubClass()

bool ClassDefImpl::isSubClass ( ClassDef * bcd,
int level = 0 ) const
overridevirtual

Returns TRUE iff bcd is a direct or indirect sub class of this class.

Implements ClassDef.

Definition at line 3725 of file classdef.cpp.

3726{
3727 bool found=FALSE;
3728 if (level>256)
3729 {
3730 err("Possible recursive class relation while inside {} and looking for derived class {}\n",name(),cd->name());
3731 return FALSE;
3732 }
3733 for (const auto &iscd : subClasses())
3734 {
3735 ClassDef *ccd=iscd.classDef;
3736 found = (ccd==cd) || ccd->isSubClass(cd,level+1);
3737 if (found) break;
3738 }
3739 return found;
3740}
virtual bool isSubClass(ClassDef *bcd, int level=0) const =0
Returns TRUE iff bcd is a direct or indirect sub class of this class.
const BaseClassList & subClasses() const override
Returns the list of sub classes that directly derive from this class.

References err, FALSE, ClassDef::isSubClass(), Definition::name(), DefinitionMixin< ClassDefMutable >::name(), and subClasses().

◆ isTemplate()

bool ClassDefImpl::isTemplate ( ) const
overridevirtual

Returns TRUE if this class is a template.

Implements ClassDef.

Definition at line 5081 of file classdef.cpp.

5082{
5083 return !m_tempArgs.empty();
5084}

References m_tempArgs.

◆ isTemplateArgument()

bool ClassDefImpl::isTemplateArgument ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5106 of file classdef.cpp.

5107{
5108 return m_isTemplArg;
5109}

References m_isTemplArg.

◆ isUsedOnly()

bool ClassDefImpl::isUsedOnly ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5226 of file classdef.cpp.

5227{
5228 return m_usedOnly;
5229}

References m_usedOnly.

◆ isVisibleInHierarchy()

bool ClassDefImpl::isVisibleInHierarchy ( ) const
overridevirtual

the class is visible in a class diagram, or class hierarchy

Implements ClassDef.

Definition at line 3653 of file classdef.cpp.

3654{
3655 bool allExternals = Config_getBool(ALLEXTERNALS);
3656 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
3657 bool extractStatic = Config_getBool(EXTRACT_STATIC);
3658
3659 return // show all classes or a subclass is visible
3660 ((allExternals && !isArtificial()) || hasNonReferenceSuperClass()) &&
3661 // and not an anonymous compound
3662 !isAnonymous() &&
3663 // and not privately inherited
3665 // documented or shown anyway or documentation is external
3666 (hasDocumentation() ||
3667 !hideUndocClasses ||
3668 (m_templateMaster && m_templateMaster->hasDocumentation()) ||
3669 isReference()
3670 ) &&
3671 // if this is an implicit template instance then it most be part of the inheritance hierarchy
3672 (!m_implicitTemplateInstance || !m_inherits.empty() || !m_inheritedBy.empty()) &&
3673 // is not part of an unnamed namespace or shown anyway
3674 (!m_isStatic || extractStatic);
3675}
bool hasNonReferenceSuperClass() const override

References Config_getBool, hasDocumentation(), hasNonReferenceSuperClass(), DefinitionMixin< ClassDefMutable >::isAnonymous(), DefinitionMixin< ClassDefMutable >::isArtificial(), isReference(), m_implicitTemplateInstance, m_inheritedBy, m_inherits, m_isStatic, m_prot, m_templateMaster, and protectionLevelVisible().

◆ makeTemplateArgument()

void ClassDefImpl::makeTemplateArgument ( bool b = TRUE)
overridevirtual

Implements ClassDefMutable.

Definition at line 5211 of file classdef.cpp.

5212{
5213 m_isTemplArg = b;
5214}

References m_isTemplArg.

◆ memberNameInfoLinkedMap()

const MemberNameInfoLinkedMap & ClassDefImpl::memberNameInfoLinkedMap ( ) const
overridevirtual

Returns a dictionary of all members.

This includes any inherited members. Members are sorted alphabetically.

Implements ClassDef.

Definition at line 5026 of file classdef.cpp.

5027{
5029}

References m_allMemberNameInfoLinkedMap.

◆ mergeCategory()

void ClassDefImpl::mergeCategory ( ClassDef * cat)
overridevirtual

Merges the members of a Objective-C category into this class.

Implements ClassDefMutable.

Definition at line 4078 of file classdef.cpp.

4079{
4080 AUTO_TRACE();
4081 ClassDefMutable *category = toClassDefMutable(cat);
4082 if (category)
4083 {
4084 bool extractLocalMethods = Config_getBool(EXTRACT_LOCAL_METHODS);
4085 bool makePrivate = category->isLocal();
4086 // in case extract local methods is not enabled we don't add the methods
4087 // of the category in case it is defined in the .m file.
4088 if (makePrivate && !extractLocalMethods) return;
4089 bool isExtension = category->isExtension();
4090
4091 category->setCategoryOf(this);
4092 if (isExtension)
4093 {
4094 category->setArtificial(TRUE);
4095
4096 // copy base classes/protocols from extension
4097 for (const auto &bcd : category->baseClasses())
4098 {
4099 insertBaseClass(bcd.classDef,bcd.usedName,bcd.prot,bcd.virt,bcd.templSpecifiers);
4100 // correct bcd.classDef so that they do no longer derive from
4101 // category, but from this class!
4102 BaseClassList scl = bcd.classDef->subClasses();
4103 for (auto &scd : scl)
4104 {
4105 if (scd.classDef==category)
4106 {
4107 scd.classDef=this;
4108 }
4109 }
4110 bcd.classDef->updateSubClasses(scl);
4111 }
4112 }
4113 // make methods private for categories defined in the .m file
4114 //printf("%s::mergeCategory makePrivate=%d\n",qPrint(name()),makePrivate);
4115
4116 const MemberNameInfoLinkedMap &srcMnd = category->memberNameInfoLinkedMap();
4117 MemberNameInfoLinkedMap &dstMnd = m_allMemberNameInfoLinkedMap;
4118
4119 for (auto &srcMni : srcMnd)
4120 {
4121 MemberNameInfo *dstMni=dstMnd.find(srcMni->memberName());
4122 if (dstMni) // method is already defined in the class
4123 {
4124 AUTO_TRACE_ADD("Existing member {}",srcMni->memberName());
4125 const auto &dstMi = dstMni->front();
4126 const auto &srcMi = srcMni->front();
4127 if (srcMi && dstMi)
4128 {
4129 MemberDefMutable *smdm = toMemberDefMutable(srcMi->memberDef());
4130 MemberDefMutable *dmdm = toMemberDefMutable(dstMi->memberDef());
4131 if (smdm && dmdm)
4132 {
4134 dmdm->setCategory(category);
4135 dmdm->setCategoryRelation(smdm);
4136 smdm->setCategoryRelation(dmdm);
4137 }
4138 }
4139 }
4140 else // new method name
4141 {
4142 AUTO_TRACE_ADD("New member {}",srcMni->memberName());
4143 // create a deep copy of the list
4144 MemberNameInfo *newMni = dstMnd.add(srcMni->memberName());
4145
4146 // copy the member(s) from the category to this class
4147 for (auto &mi : *srcMni)
4148 {
4149 //printf("Adding '%s'\n",qPrint(mi->memberDef->name()));
4150 Protection prot = mi->prot();
4151 //if (makePrivate) prot = Private;
4152 auto newMd = mi->memberDef()->deepCopy();
4153 if (newMd)
4154 {
4155 auto mmd = toMemberDefMutable(newMd.get());
4156 AUTO_TRACE_ADD("Copying member {}",mmd->name());
4157 mmd->moveTo(this);
4158
4159 auto newMi=std::make_unique<MemberInfo>(newMd.get(),prot,mi->virt(),mi->inherited(),mi->virtualBaseClass());
4160 newMi->setScopePath(mi->scopePath());
4161 newMi->setAmbigClass(mi->ambigClass());
4162 newMi->setAmbiguityResolutionScope(mi->ambiguityResolutionScope());
4163 newMni->push_back(std::move(newMi));
4164
4165 // also add the newly created member to the global members list
4166
4167 QCString name = newMd->name();
4168 MemberName *mn = Doxygen::memberNameLinkedMap->add(name);
4169
4170 mmd->setCategory(category);
4171 mmd->setCategoryRelation(mi->memberDef());
4172 auto miMmd = toMemberDefMutable(mi->memberDef());
4173 if (miMmd) miMmd->setCategoryRelation(newMd.get());
4174
4175 if (makePrivate || isExtension)
4176 {
4177 mmd->makeImplementationDetail();
4178 }
4179 internalInsertMember(newMd.get(),prot,FALSE);
4180 mn->push_back(std::move(newMd));
4181 }
4182 }
4183 }
4184 }
4185 }
4186}
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual bool isLocal() const =0
Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES.
virtual bool isExtension() const =0
Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category).
bool isExtension() const override
Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category).
void insertBaseClass(ClassDef *, const QCString &name, Protection p, Specifier s, const QCString &t=QCString()) override
Definition classdef.cpp:999
virtual void setCategoryOf(ClassDef *cd)=0
virtual void setCategory(ClassDef *)=0
virtual void setCategoryRelation(const MemberDef *)=0
std::vector< BaseClassDef > BaseClassList
Definition classdef.h:81
void combineDeclarationAndDefinition(MemberDefMutable *mdec, MemberDefMutable *mdef)
Protection
Definition types.h:32

References LinkedMap< T, Hash, KeyEqual, Map >::add(), AUTO_TRACE, AUTO_TRACE_ADD, ClassDef::baseClasses(), combineDeclarationAndDefinition(), Config_getBool, FALSE, LinkedMap< T, Hash, KeyEqual, Map >::find(), MemberNameInfo::front(), insertBaseClass(), internalInsertMember(), ClassDef::isExtension(), isExtension(), ClassDef::isLocal(), m_allMemberNameInfoLinkedMap, ClassDef::memberNameInfoLinkedMap(), Doxygen::memberNameLinkedMap, DefinitionMixin< ClassDefMutable >::name(), MemberName::push_back(), MemberNameInfo::push_back(), DefinitionMutable::setArtificial(), MemberDefMutable::setCategory(), ClassDefMutable::setCategoryOf(), MemberDefMutable::setCategoryRelation(), toClassDefMutable(), toMemberDefMutable(), and TRUE.

◆ mergeMembers()

void ClassDefImpl::mergeMembers ( )
overridevirtual

recursively merges the 'all members' lists of a class base with that of this class. Must only be called for classes without subclasses!

Implements ClassDefMutable.

Definition at line 4037 of file classdef.cpp.

4038{
4039 if (m_membersMerged) return;
4040 if (getLanguage()==SrcLangExt::Python)
4041 {
4042 for (const auto &bcd : baseClasses())
4043 {
4044 ClassDefMutable *bClass=toClassDefMutable(bcd.classDef);
4046 }
4047 }
4048
4049 //printf("> %s::mergeMembers()\n",qPrint(name()));
4050
4052
4053 // first merge the members of the base class recursively
4054 for (const auto &bcd : baseClasses())
4055 {
4056 ClassDefMutable *bClass=toClassDefMutable(bcd.classDef);
4057 if (bClass)
4058 {
4059 // merge the members in the base class of this inheritance branch first
4060 bClass->mergeMembers();
4061 }
4062 }
4063
4064 // first merge the member that are not inherited via a virtual base class
4065 // (as this can end up reimplemented via multiple paths, see #10717 for examples)
4067 // then process the member that are inherited via a virtual base class to add the
4068 // ones that are not reimplemented via any path
4070
4071 //printf("< %s::mergeMembers()\n",qPrint(name()));
4072}
void mergeMembersFromBaseClasses(bool mergeVirtualBaseClass)
virtual void mergeMembers()=0

References baseClasses(), DefinitionMixin< ClassDefMutable >::getLanguage(), hideDerivedVariablesInPython(), m_membersMerged, ClassDefMutable::mergeMembers(), mergeMembersFromBaseClasses(), toClassDefMutable(), and TRUE.

◆ mergeMembersFromBaseClasses()

void ClassDefImpl::mergeMembersFromBaseClasses ( bool mergeVirtualBaseClass)
private

Definition at line 3751 of file classdef.cpp.

3752{
3753 SrcLangExt lang = getLanguage();
3754 QCString sep=getLanguageSpecificSeparator(lang,TRUE);
3755 size_t sepLen = sep.length();
3756 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
3757 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
3758
3759 //printf(" mergeMembers for %s mergeVirtualBaseClass=%d\n",qPrint(name()),mergeVirtualBaseClass);
3760 // the merge the base members with this class' members
3761 for (const auto &bcd : baseClasses())
3762 {
3763 ClassDefMutable *bClass=toClassDefMutable(bcd.classDef);
3764 if (bClass)
3765 {
3766 const MemberNameInfoLinkedMap &srcMnd = bClass->memberNameInfoLinkedMap();
3767 MemberNameInfoLinkedMap &dstMnd = m_allMemberNameInfoLinkedMap;
3768
3769 for (auto &srcMni : srcMnd)
3770 {
3771 MemberNameInfo *dstMni=dstMnd.find(srcMni->memberName());
3772 if (dstMni)
3773 // a member with that name is already in the class.
3774 // the member may hide or reimplement the one in the sub class
3775 // or there may be another path to the base class that is already
3776 // visited via another branch in the class hierarchy.
3777 {
3778 //printf(" %s hides member name %s\n",qPrint(bClass->name()),qPrint(srcMni->memberName()));
3779 for (auto &srcMi : *srcMni)
3780 {
3781 MemberDef *srcMd = srcMi->memberDef();
3782 bool found=FALSE;
3783 bool ambiguous=FALSE;
3784 bool hidden=FALSE;
3785 const ClassDef *srcCd = srcMd->getClassDef();
3786 for (auto &dstMi : *dstMni)
3787 {
3788 const MemberDef *dstMd = dstMi->memberDef();
3789 if (srcMd!=dstMd) // different members
3790 {
3791 const ClassDef *dstCd = dstMd->getClassDef();
3792 //printf(" Is %s a base class of %s?\n",qPrint(srcCd->name()),qPrint(dstCd->name()));
3793 if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
3794 // member is in the same or a base class
3795 {
3796 const ArgumentList &srcAl = srcMd->argumentList();
3797 const ArgumentList &dstAl = dstMd->argumentList();
3798 found=matchArguments2(
3799 srcMd->getOuterScope(),srcMd->getFileDef(),srcMd->typeString(),&srcAl,
3800 dstMd->getOuterScope(),dstMd->getFileDef(),dstMd->typeString(),&dstAl,
3801 TRUE,lang
3802 );
3803 //printf(" Yes, matching (%s<->%s): %d\n",
3804 // qPrint(argListToString(srcMd->argumentList())),
3805 // qPrint(argListToString(dstMd->argumentList())),
3806 // found);
3807 hidden = hidden || !found;
3808 }
3809 else // member is in a non base class => multiple inheritance
3810 // using the same base class.
3811 {
3812 //printf(" $$ Existing member %s %s add scope %s\n",
3813 // qPrint(dstMi->ambiguityResolutionScope()),
3814 // qPrint(dstMd->name()),
3815 // qPrint(dstMi->scopePath().left(dstMi->scopePath().find("::")+2)));
3816
3817 QCString scope=dstMi->scopePath().left(dstMi->scopePath().find(sep)+sepLen);
3818 if (scope!=dstMi->ambiguityResolutionScope().left(scope.length()))
3819 {
3820 dstMi->setAmbiguityResolutionScope(scope+dstMi->ambiguityResolutionScope());
3821 }
3822 ambiguous=TRUE;
3823 }
3824 }
3825 else // same members
3826 {
3827 // do not add if base class is virtual or
3828 // if scope paths are equal or
3829 // if base class is an interface (and thus implicitly virtual).
3830 //printf(" same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt(),dstMi->virt());
3831 if ((srcMi->virt()!=Specifier::Normal && dstMi->virt()!=Specifier::Normal) ||
3832 bClass->name()+sep+srcMi->scopePath() == dstMi->scopePath() ||
3834 )
3835 {
3836 found=TRUE;
3837 }
3838 else // member can be reached via multiple paths in the
3839 // inheritance tree
3840 {
3841 //printf(" $$ Existing member %s %s add scope %s\n",
3842 // qPrint(dstMi->ambiguityResolutionScope()),
3843 // qPrint(dstMd->name()),
3844 // qPrint(dstMi->scopePath().left(dstMi->scopePath().find("::")+2)));
3845
3846 QCString scope=dstMi->scopePath().left(dstMi->scopePath().find(sep)+sepLen);
3847 if (scope!=dstMi->ambiguityResolutionScope().left(scope.length()))
3848 {
3849 dstMi->setAmbiguityResolutionScope(dstMi->ambiguityResolutionScope()+scope);
3850 }
3851 ambiguous=TRUE;
3852 }
3853 }
3854 if (found) break;
3855 }
3856 //printf(" member %s::%s hidden %d ambiguous %d srcMi->ambigClass=%p found=%d\n",
3857 // qPrint(srcCd->name()),qPrint(srcMd->name()),hidden,ambiguous,
3858 // (void*)srcMi->ambigClass(),found);
3859
3860 // TODO: fix the case where a member is hidden by inheritance
3861 // of a member with the same name but with another prototype,
3862 // while there is more than one path to the member in the
3863 // base class due to multiple inheritance. In this case
3864 // it seems that the member is not reachable by prefixing a
3865 // scope name either (according to my compiler). Currently,
3866 // this case is shown anyway.
3867 if (!found && srcMd->protection()!=Protection::Private && !srcMd->isFriend() &&
3868 srcMi->virtualBaseClass()==mergeVirtualBaseClass && lang!=SrcLangExt::Python)
3869 {
3870 Protection prot = srcMd->protection();
3871 if (bcd.prot==Protection::Protected && prot==Protection::Public)
3872 {
3873 prot = bcd.prot;
3874 }
3875 else if (bcd.prot==Protection::Private)
3876 {
3877 prot = bcd.prot;
3878 }
3879
3880 if (inlineInheritedMembers)
3881 {
3882 if (!isStandardFunc(srcMd))
3883 {
3884 //printf(" %s::insertMember(%s)\n",qPrint(name()),qPrint(srcMd->name()));
3885 internalInsertMember(srcMd,prot,FALSE);
3886 }
3887 }
3888
3889 Specifier virt=srcMi->virt();
3890 if (virt==Specifier::Normal && bcd.virt!=Specifier::Normal) virt=bcd.virt;
3891 bool virtualBaseClass = bcd.virt!=Specifier::Normal;
3892
3893 auto newMi = std::make_unique<MemberInfo>(srcMd,prot,virt,TRUE,virtualBaseClass);
3894 newMi->setScopePath(bClass->name()+sep+srcMi->scopePath());
3895 if (ambiguous)
3896 {
3897 //printf("$$ New member %s %s add scope %s::\n",
3898 // qPrint(srcMi->ambiguityResolutionScope),
3899 // qPrint(srcMd->name()),
3900 // qPrint(bClass->name()));
3901
3902 QCString scope=bClass->name()+sep;
3903 if (scope!=srcMi->ambiguityResolutionScope().left(scope.length()))
3904 {
3905 newMi->setAmbiguityResolutionScope(scope+srcMi->ambiguityResolutionScope());
3906 }
3907 }
3908 if (hidden)
3909 {
3910 if (srcMi->ambigClass()==nullptr)
3911 {
3912 newMi->setAmbigClass(bClass);
3913 newMi->setAmbiguityResolutionScope(bClass->name()+sep);
3914 }
3915 else
3916 {
3917 newMi->setAmbigClass(srcMi->ambigClass());
3918 newMi->setAmbiguityResolutionScope(srcMi->ambigClass()->name()+sep);
3919 }
3920 }
3921 dstMni->push_back(std::move(newMi));
3922 }
3923 }
3924 }
3925 else // base class has a member that is not in the sub class => copy
3926 {
3927 //printf(" %s adds member name %s\n",qPrint(bClass->name()),qPrint(srcMni->memberName()));
3928 // create a deep copy of the list (only the MemberInfo's will be
3929 // copied, not the actual MemberDef's)
3930 MemberNameInfo *newMni = dstMnd.add(srcMni->memberName());
3931
3932 // copy the member(s) from the base to the sub class
3933 for (auto &mi : *srcMni)
3934 {
3935 if (mi->virtualBaseClass()==mergeVirtualBaseClass && !mi->memberDef()->isFriend()) // don't inherit friends
3936 {
3937 Protection prot = mi->prot();
3938 if (bcd.prot==Protection::Protected)
3939 {
3940 if (prot==Protection::Public) prot=Protection::Protected;
3941 }
3942 else if (bcd.prot==Protection::Private)
3943 {
3944 prot=Protection::Private;
3945 }
3946 Specifier virt=mi->virt();
3947 bool virtualBaseClass = bcd.virt!=Specifier::Normal || mi->virtualBaseClass();
3948 if (virt==Specifier::Normal && bcd.virt!=Specifier::Normal) virt=bcd.virt;
3949 //printf(" %s::%s: [mi.prot=%d, bcd.prot=%d => prot=%d], [mi.virt=%d, bcd.virt=%d => virt=%d] virtualBase=%d\n",
3950 // qPrint(name()),qPrint(mi->memberDef()->name()),
3951 // mi->prot(),bcd.prot,prot,
3952 // mi->virt(),bcd.virt,virt,
3953 // virtualBaseClass
3954 // );
3955
3956 if (prot!=Protection::Private || extractPrivate)
3957 {
3958
3959 if (inlineInheritedMembers)
3960 {
3961 if (!isStandardFunc(mi->memberDef()))
3962 {
3963 //printf(" %s::insertMember '%s'\n",qPrint(name()),qPrint(mi->memberDef()->name()));
3964 internalInsertMember(mi->memberDef(),prot,FALSE);
3965 }
3966 }
3967 //printf("Adding!\n");
3968 std::unique_ptr<MemberInfo> newMi = std::make_unique<MemberInfo>(mi->memberDef(),prot,virt,TRUE,virtualBaseClass);
3969 newMi->setScopePath(bClass->name()+sep+mi->scopePath());
3970 newMi->setAmbigClass(mi->ambigClass());
3971 newMi->setAmbiguityResolutionScope(mi->ambiguityResolutionScope());
3972 newMni->push_back(std::move(newMi));
3973 }
3974 }
3975 }
3976 }
3977 }
3978 }
3979 }
3980}
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
QCString left(size_t len) const
Definition qcstring.h:229
static bool isStandardFunc(const MemberDef *md)
Specifier
Definition types.h:80
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5920

References LinkedMap< T, Hash, KeyEqual, Map >::add(), MemberDef::argumentList(), baseClasses(), ClassDef::compoundType(), Config_getBool, FALSE, LinkedMap< T, Hash, KeyEqual, Map >::find(), MemberDef::getClassDef(), MemberDef::getFileDef(), DefinitionMixin< ClassDefMutable >::getLanguage(), getLanguageSpecificSeparator(), Definition::getOuterScope(), ClassDef::Interface, internalInsertMember(), ClassDef::isBaseClass(), MemberDef::isFriend(), isStandardFunc(), QCString::left(), QCString::length(), m_allMemberNameInfoLinkedMap, matchArguments2(), ClassDef::memberNameInfoLinkedMap(), Definition::name(), MemberDef::protection(), MemberNameInfo::push_back(), toClassDefMutable(), TRUE, and MemberDef::typeString().

Referenced by mergeMembers().

◆ moveTo()

void ClassDefImpl::moveTo ( Definition * scope)
overridevirtual

Implements ClassDef.

Definition at line 974 of file classdef.cpp.

975{
976 //printf("%s::moveTo(%s)\n",qPrint(name()),qPrint(scope->name()));
977 setOuterScope(scope);
979 {
980 m_fileDef = toFileDef(scope);
981 }
982 else if (scope->definitionType()==Definition::TypeModule)
983 {
984 m_moduleDef = toModuleDef(scope);
985 }
986}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1966
ModuleDef * toModuleDef(Definition *d)

References Definition::definitionType(), m_fileDef, m_moduleDef, DefinitionMixin< ClassDefMutable >::setOuterScope(), toFileDef(), toModuleDef(), Definition::TypeFile, and Definition::TypeModule.

◆ overrideCollaborationGraph()

void ClassDefImpl::overrideCollaborationGraph ( bool e)
overridevirtual

Implements ClassDefMutable.

Definition at line 5447 of file classdef.cpp.

5448{
5450}

References m_hasCollaborationGraph.

◆ overrideInheritanceGraph()

void ClassDefImpl::overrideInheritanceGraph ( CLASS_GRAPH_t e)
overridevirtual

Implements ClassDefMutable.

Definition at line 5420 of file classdef.cpp.

5421{
5423}

References m_typeInheritanceGraph.

◆ protection()

Protection ClassDefImpl::protection ( ) const
overridevirtual

Return the protection level (Public,Protected,Private) in which this compound was found.

Implements ClassDef.

Definition at line 5041 of file classdef.cpp.

5042{
5043 return m_prot;
5044}

References m_prot.

Referenced by visibleInParentsDeclList(), and writeDeclarationLink().

◆ qualifiedNameWithTemplateParameters()

QCString ClassDefImpl::qualifiedNameWithTemplateParameters ( const ArgumentLists * actualParams = nullptr,
uint32_t * actualParamIndex = nullptr ) const
overridevirtual

Implements ClassDef.

Definition at line 4521 of file classdef.cpp.

4523{
4524 return makeQualifiedNameWithTemplateParameters(this,actualParams,actualParamIndex);
4525}
static QCString makeQualifiedNameWithTemplateParameters(const ClassDef *cd, const ArgumentLists *actualParams, uint32_t *actualParamIndex)
Definition classdef.cpp:56

References makeQualifiedNameWithTemplateParameters().

◆ reclassifyMember()

void ClassDefImpl::reclassifyMember ( MemberDefMutable * md,
MemberType t )
overridevirtual

Implements ClassDefMutable.

Definition at line 5241 of file classdef.cpp.

5242{
5243 md->setMemberType(t);
5244 for (auto &ml : m_memberLists)
5245 {
5246 ml->remove(md);
5247 }
5248 insertMember(md);
5249}
virtual void setMemberType(MemberType t)=0

References insertMember(), m_memberLists, and MemberDefMutable::setMemberType().

◆ removeMemberFromLists()

void ClassDefImpl::removeMemberFromLists ( MemberDef * md)
overridevirtual

Implements ClassDefMutable.

Definition at line 5309 of file classdef.cpp.

5310{
5311 for (auto &ml : m_memberLists)
5312 {
5313 ml->remove(md);
5314 }
5315}

References m_memberLists.

Referenced by hideDerivedVariablesInPython().

◆ requiresClause()

QCString ClassDefImpl::requiresClause ( ) const
overridevirtual

Implements ClassDef.

Definition at line 3544 of file classdef.cpp.

3545{
3546 return m_requiresClause;
3547}

References m_requiresClause.

◆ setAnonymousEnumType()

void ClassDefImpl::setAnonymousEnumType ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4704 of file classdef.cpp.

4705{
4706 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4707 {
4708 if (lde->kind()==LayoutDocEntry::MemberDecl)
4709 {
4710 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4711 if (lmd)
4712 {
4713 MemberList * ml = getMemberList(lmd->type);
4714 if (ml)
4715 {
4717 }
4718 }
4719 }
4720 else if (lde->kind()==LayoutDocEntry::MemberGroups)
4721 {
4722 for (const auto &mg : m_memberGroups)
4723 {
4724 mg->setAnonymousEnumType();
4725 }
4726 }
4727 }
4728}
void setAnonymousEnumType()

References getMemberList(), LayoutDocManager::instance(), m_memberGroups, MemberList::setAnonymousEnumType(), and LayoutDocEntryMemberDecl::type.

◆ setCategoryOf()

void ClassDefImpl::setCategoryOf ( ClassDef * cd)
overridevirtual

Implements ClassDefMutable.

Definition at line 5216 of file classdef.cpp.

5217{
5218 m_categoryOf = cd;
5219}

References m_categoryOf.

◆ setClassName()

void ClassDefImpl::setClassName ( const QCString & name)
overridevirtual

Implements ClassDefMutable.

Definition at line 4538 of file classdef.cpp.

4539{
4540 m_className = name;
4541}

References m_className, and DefinitionMixin< ClassDefMutable >::name().

◆ setClassSpecifier()

void ClassDefImpl::setClassSpecifier ( TypeSpecifier spec)
overridevirtual

Implements ClassDefMutable.

Definition at line 5322 of file classdef.cpp.

5323{
5324 m_spec = spec;
5325}

References m_spec.

◆ setCompoundType()

void ClassDefImpl::setCompoundType ( CompoundType t)
overridevirtual

Implements ClassDefMutable.

Definition at line 5200 of file classdef.cpp.

5201{
5202 m_compType = t;
5203}

References m_compType.

◆ setFileDef()

void ClassDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements ClassDefMutable.

Definition at line 5171 of file classdef.cpp.

5172{
5173 m_fileDef = fd;
5174}

References m_fileDef.

◆ setGroupDefForAllMembers()

void ClassDefImpl::setGroupDefForAllMembers ( GroupDef * g,
Grouping::GroupPri_t pri,
const QCString & fileName,
int startLine,
bool hasDocs )
overridevirtual

Implements ClassDefMutable.

Definition at line 4315 of file classdef.cpp.

4316{
4317 gd->addClass(this);
4318 //printf("ClassDefImpl::setGroupDefForAllMembers(%s)\n",qPrint(gd->name()));
4319 for (auto &mni : m_allMemberNameInfoLinkedMap)
4320 {
4321 for (auto &mi : *mni)
4322 {
4323 MemberDefMutable *md = toMemberDefMutable(mi->memberDef());
4324 if (md)
4325 {
4326 md->setGroupDef(gd,pri,fileName,startLine,hasDocs);
4327 gd->insertMember(md,TRUE);
4328 ClassDefMutable *innerClass = toClassDefMutable(md->getClassDefOfAnonymousType());
4329 if (innerClass) innerClass->setGroupDefForAllMembers(gd,pri,fileName,startLine,hasDocs);
4330 }
4331 }
4332 }
4333}
virtual void setGroupDefForAllMembers(GroupDef *g, Grouping::GroupPri_t pri, const QCString &fileName, int startLine, bool hasDocs)=0
virtual ClassDef * getClassDefOfAnonymousType() const =0
virtual void setGroupDef(GroupDef *gd, Grouping::GroupPri_t pri, const QCString &fileName, int startLine, bool hasDocs, MemberDef *member=nullptr)=0

References GroupDef::addClass(), MemberDef::getClassDefOfAnonymousType(), GroupDef::insertMember(), m_allMemberNameInfoLinkedMap, MemberDefMutable::setGroupDef(), ClassDefMutable::setGroupDefForAllMembers(), toClassDefMutable(), toMemberDefMutable(), and TRUE.

◆ setImplicitTemplateInstance()

void ClassDefImpl::setImplicitTemplateInstance ( bool b)
overridevirtual

Implements ClassDefMutable.

Definition at line 5076 of file classdef.cpp.

5077{
5079}

References m_implicitTemplateInstance.

◆ setIncludeFile()

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

Implements ClassDefMutable.

Definition at line 1429 of file classdef.cpp.

1431{
1432 //printf("ClassDefImpl::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
1433 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
1434 if ((!includeName.isEmpty() && m_incInfo->includeName.isEmpty()) ||
1435 (fd!=nullptr && m_incInfo->fileDef==nullptr)
1436 )
1437 {
1438 //printf("Setting file info\n");
1439 m_incInfo->fileDef = fd;
1440 m_incInfo->includeName = includeName;
1442 }
1443 if (force && !includeName.isEmpty())
1444 {
1445 m_incInfo->includeName = includeName;
1447 }
1448}
@ IncludeLocal
Definition filedef.h:50
@ IncludeSystem
Definition filedef.h:49

References IncludeLocal, IncludeSystem, QCString::isEmpty(), and m_incInfo.

◆ setIsStatic()

void ClassDefImpl::setIsStatic ( bool b)
overridevirtual

Implements ClassDefMutable.

Definition at line 5195 of file classdef.cpp.

5196{
5197 m_isStatic=b;
5198}

References m_isStatic.

◆ setMetaData()

void ClassDefImpl::setMetaData ( const QCString & md)
overridevirtual

Implements ClassDefMutable.

Definition at line 5405 of file classdef.cpp.

5406{
5407 m_metaData = md;
5408}

References m_metaData.

◆ setModuleDef()

void ClassDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements ClassDefMutable.

Definition at line 5176 of file classdef.cpp.

5177{
5178 m_moduleDef = mod;
5179}

References m_moduleDef.

◆ setPrimaryConstructorParams()

void ClassDefImpl::setPrimaryConstructorParams ( const ArgumentList & list)
overridevirtual

Implements ClassDefMutable.

Definition at line 3554 of file classdef.cpp.

3555{
3557}
ArgumentList m_primaryConstructorParams
Definition classdef.cpp:560

References m_primaryConstructorParams.

◆ setProtection()

void ClassDefImpl::setProtection ( Protection p)
overridevirtual

Implements ClassDefMutable.

Definition at line 5186 of file classdef.cpp.

5187{
5188 m_prot=p;
5189 if (getLanguage()==SrcLangExt::VHDL && VhdlDocGen::convert(p)==VhdlDocGen::ARCHITECTURECLASS)
5190 {
5191 m_className = name();
5192 }
5193}
@ ARCHITECTURECLASS
Definition vhdldocgen.h:77
static VhdlClasses convert(Protection prot)
Definition vhdldocgen.h:80

References VhdlDocGen::ARCHITECTURECLASS, VhdlDocGen::convert(), DefinitionMixin< ClassDefMutable >::getLanguage(), m_className, m_prot, and DefinitionMixin< ClassDefMutable >::name().

◆ setRequiresClause()

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

Implements ClassDefMutable.

Definition at line 3549 of file classdef.cpp.

3550{
3551 m_requiresClause = req;
3552}

References m_requiresClause.

◆ setSubGrouping()

void ClassDefImpl::setSubGrouping ( bool enabled)
overridevirtual

Implements ClassDefMutable.

Definition at line 5181 of file classdef.cpp.

5182{
5183 m_subGrouping = enabled;
5184}

References m_subGrouping.

◆ setTagLessReference()

void ClassDefImpl::setTagLessReference ( const ClassDef * cd)
overridevirtual

Implements ClassDefMutable.

Definition at line 5304 of file classdef.cpp.

5305{
5306 m_tagLessRef = cd;
5307}

References m_tagLessRef.

◆ setTemplateArguments()

void ClassDefImpl::setTemplateArguments ( const ArgumentList & al)
overridevirtual

Implements ClassDefMutable.

Definition at line 3496 of file classdef.cpp.

3497{
3498 m_tempArgs = al;
3499}

References m_tempArgs.

◆ setTemplateBaseClassNames()

void ClassDefImpl::setTemplateBaseClassNames ( const TemplateNameMap & templateNames)
overridevirtual

Implements ClassDefMutable.

Definition at line 4419 of file classdef.cpp.

4420{
4421 m_templBaseClassNames = templateNames;
4422}

References m_templBaseClassNames.

◆ setTemplateMaster()

void ClassDefImpl::setTemplateMaster ( const ClassDef * tm)
overridevirtual

Implements ClassDefMutable.

Definition at line 5205 of file classdef.cpp.

5206{
5207 assert(tm!=this);
5209}

References m_templateMaster.

◆ setTypeConstraints()

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

Implements ClassDefMutable.

Definition at line 3491 of file classdef.cpp.

3492{
3493 m_typeConstraints = al;
3494}

References m_typeConstraints.

◆ setUsedOnly()

void ClassDefImpl::setUsedOnly ( bool b)
overridevirtual

Implements ClassDefMutable.

Definition at line 5221 of file classdef.cpp.

5222{
5223 m_usedOnly = b;
5224}

References m_usedOnly.

◆ showUsedFiles()

void ClassDefImpl::showUsedFiles ( OutputList & ol) const
private

Definition at line 1728 of file classdef.cpp.

1729{
1730 ol.pushGeneratorState();
1732
1733
1734 ol.writeRuler();
1735 ol.pushGeneratorState();
1737 ol.startParagraph();
1739 ol.endParagraph();
1740 ol.popGeneratorState();
1744
1745 bool first=TRUE;
1746 for (const auto &fd : m_files)
1747 {
1748 if (first)
1749 {
1750 first=FALSE;
1751 ol.startItemList();
1752 }
1753
1754 ol.startItemListItem();
1755 QCString path=fd->getPath();
1756 if (Config_getBool(FULL_PATH_NAMES))
1757 {
1758 ol.docify(stripFromPath(path));
1759 }
1760
1761 QCString fname = fd->name();
1762 if (!fd->getVersion().isEmpty()) // append version if available
1763 {
1764 fname += " (" + fd->getVersion() + ")";
1765 }
1766
1767 // for HTML
1768 ol.pushGeneratorState();
1770 if (fd->generateSourceFile())
1771 {
1772 ol.writeObjectLink(QCString(),fd->getSourceFileBase(),QCString(),fname);
1773 }
1774 else if (fd->isLinkable())
1775 {
1776 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fname);
1777 }
1778 else
1779 {
1780 ol.startBold();
1781 ol.docify(fname);
1782 ol.endBold();
1783 }
1784 ol.popGeneratorState();
1785
1786 // for other output formats
1787 ol.pushGeneratorState();
1789 if (fd->isLinkable())
1790 {
1791 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fname);
1792 }
1793 else
1794 {
1795 ol.docify(fname);
1796 }
1797 ol.popGeneratorState();
1798
1799 ol.endItemListItem();
1800 }
1801 if (!first) ol.endItemList();
1802
1803 ol.popGeneratorState();
1804}
QCString generatedFromFiles() const override
void startItemList()
Definition outputlist.h:429
void disable(OutputType o)
void writeRuler()
Definition outputlist.h:521
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void docify(const QCString &s)
Definition outputlist.h:437
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:407
void endParagraph()
Definition outputlist.h:409
void startItemListItem()
Definition outputlist.h:457
void endItemListItem()
Definition outputlist.h:459
void startBold()
Definition outputlist.h:561
void endBold()
Definition outputlist.h:563
void endItemList()
Definition outputlist.h:431
static QCString stripFromPath(const QCString &p, const StringVector &l)
Definition util.cpp:298

References Config_getBool, OutputList::disable(), OutputList::disableAllBut(), Docbook, OutputList::docify(), OutputList::enable(), OutputList::endBold(), OutputList::endItemList(), OutputList::endItemListItem(), OutputList::endParagraph(), FALSE, generatedFromFiles(), Html, m_files, Man, OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startBold(), OutputList::startItemList(), OutputList::startItemListItem(), OutputList::startParagraph(), stripFromPath(), TRUE, OutputList::writeObjectLink(), and OutputList::writeRuler().

Referenced by writeDocumentationContents().

◆ sortAllMembersList()

void ClassDefImpl::sortAllMembersList ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 5031 of file classdef.cpp.

5032{
5033 std::stable_sort(m_allMemberNameInfoLinkedMap.begin(),
5035 [](const auto &m1,const auto &m2)
5036 {
5037 return qstricmp_sort(m1->memberName(),m2->memberName())<0;
5038 });
5039}

References m_allMemberNameInfoLinkedMap.

◆ sortMemberLists()

void ClassDefImpl::sortMemberLists ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4647 of file classdef.cpp.

4648{
4649 for (auto &ml : m_memberLists)
4650 {
4651 if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
4652 }
4653 if (Config_getBool(SORT_BRIEF_DOCS))
4654 {
4655 std::stable_sort(m_innerClasses.begin(),
4656 m_innerClasses.end(),
4657 [](const auto &c1,const auto &c2)
4658 {
4659 return Config_getBool(SORT_BY_SCOPE_NAME) ?
4660 qstricmp_sort(c1->name(), c2->name() )<0 :
4661 qstricmp_sort(c1->className(), c2->className())<0 ;
4662 });
4663 }
4664}

References Config_getBool, FALSE, m_innerClasses, and m_memberLists.

◆ startMemberDeclarations()

void ClassDefImpl::startMemberDeclarations ( OutputList & ol) const
private

Definition at line 2217 of file classdef.cpp.

2218{
2219 //printf("%s: ClassDefImpl::startMemberDeclarations()\n",qPrint(name()));
2221}
void startMemberSections()
Definition outputlist.h:461

References OutputList::startMemberSections().

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ startMemberDocumentation()

void ClassDefImpl::startMemberDocumentation ( OutputList & ol) const
private

Definition at line 2197 of file classdef.cpp.

2198{
2199 //printf("%s: ClassDefImpl::startMemberDocumentation()\n",qPrint(name()));
2200 if (Config_getBool(SEPARATE_MEMBER_PAGES))
2201 {
2204 }
2205}

References Config_getBool, OutputList::disable(), Html, Doxygen::suppressDocWarnings, and TRUE.

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ subClasses()

const BaseClassList & ClassDefImpl::subClasses ( ) const
overridevirtual

Returns the list of sub classes that directly derive from this class.

Implements ClassDef.

Definition at line 5016 of file classdef.cpp.

5017{
5018 return m_inheritedBy;
5019}

References m_inheritedBy.

Referenced by isSubClass().

◆ subGrouping()

bool ClassDefImpl::subGrouping ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5395 of file classdef.cpp.

5396{
5397 return m_subGrouping;
5398}

References m_subGrouping.

◆ tagLessReference()

const ClassDef * ClassDefImpl::tagLessReference ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5299 of file classdef.cpp.

5300{
5301 return m_tagLessRef;
5302}

References m_tagLessRef.

◆ templateArguments()

const ArgumentList & ClassDefImpl::templateArguments ( ) const
overridevirtual

Returns the template arguments of this class.

Implements ClassDef.

Definition at line 5046 of file classdef.cpp.

5047{
5048 return m_tempArgs;
5049}

References m_tempArgs.

Referenced by addMembersToTemplateInstance(), addMemberToTemplateInstance(), className(), getTemplateParameterLists(), and internalInsertMember().

◆ templateMaster()

const ClassDef * ClassDefImpl::templateMaster ( ) const
overridevirtual

Returns the template master of which this class is an instance.

Returns 0 if not applicable.

Implements ClassDef.

Definition at line 5066 of file classdef.cpp.

5067{
5068 return m_templateMaster;
5069}

References m_templateMaster.

◆ templateTypeConstraints()

const ConstraintClassList & ClassDefImpl::templateTypeConstraints ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5101 of file classdef.cpp.

5102{
5103 return m_constraintClassList;
5104}

References m_constraintClassList.

◆ title()

QCString ClassDefImpl::title ( ) const
overridevirtual

Implements ClassDef.

Definition at line 2904 of file classdef.cpp.

2905{
2906 QCString pageTitle;
2907 SrcLangExt lang = getLanguage();
2908
2909 auto getReferenceTitle = [this](std::function<QCString()> translateFunc) -> QCString
2910 {
2911 return Config_getBool(HIDE_COMPOUND_REFERENCE) ? displayName() : translateFunc();
2912 };
2913
2914 if (lang==SrcLangExt::Fortran)
2915 {
2916 pageTitle = getReferenceTitle([this](){
2918 });
2919 }
2920 else if (lang==SrcLangExt::Slice)
2921 {
2922 pageTitle = getReferenceTitle([this](){
2924 });
2925 }
2926 else if (lang==SrcLangExt::VHDL)
2927 {
2928 pageTitle = getReferenceTitle([this](){
2930 });
2931 }
2932 else if (lang==SrcLangExt::CSharp && !m_primaryConstructorParams.empty())
2933 {
2934 pageTitle = getReferenceTitle([this](){
2936 m_compType,
2937 !m_tempArgs.empty());
2938 });
2939 }
2940 else if (isJavaEnum())
2941 {
2942 pageTitle = getReferenceTitle([this](){
2944 });
2945 }
2946 else if (m_compType==Service)
2947 {
2948 pageTitle = getReferenceTitle([this](){
2950 });
2951 }
2952 else if (m_compType==Singleton)
2953 {
2954 pageTitle = getReferenceTitle([this](){
2956 });
2957 }
2958 else
2959 {
2960 pageTitle = getReferenceTitle([this](){
2962 m_compType == Interface && getLanguage()==SrcLangExt::ObjC ? Class : m_compType,
2963 !m_tempArgs.empty());
2964 });
2965 }
2966 return pageTitle;
2967}
bool isSliceLocal() const override
virtual QCString trCompoundReference(const QCString &clName, ClassDef::CompoundType compType, bool isTemplate)=0
virtual QCString trEnumReference(const QCString &name)=0
virtual QCString trSingletonReference(const QCString &sName)=0
virtual QCString trServiceReference(const QCString &sName)=0
virtual QCString trCustomReference(const QCString &name)=0
virtual QCString trCompoundReferenceFortran(const QCString &clName, ClassDef::CompoundType compType, bool isTemplate)=0
virtual QCString trCompoundReferenceSlice(const QCString &clName, ClassDef::CompoundType compType, bool isLocal)=0
static QCString getClassTitle(const ClassDef *)
QCString argListToString(const ArgumentList &al, bool useCanonicalType, bool showDefVals)
Definition util.cpp:1254

References argListToString(), ClassDef::Class, Config_getBool, displayName(), VhdlDocGen::getClassTitle(), DefinitionMixin< ClassDefMutable >::getLanguage(), ClassDef::Interface, isJavaEnum(), isSliceLocal(), m_compType, m_primaryConstructorParams, m_tempArgs, ClassDef::Service, ClassDef::Singleton, and theTranslator.

Referenced by addUsedInterfaceClasses(), getTitleForMemberListType(), internalInsertMember(), writeDetailedDescription(), writeDocumentation(), writeInheritedMemberDeclarations(), writeMemberDeclarations(), writeMemberDocumentation(), and writeNestedClasses().

◆ typeConstraints()

const ArgumentList & ClassDefImpl::typeConstraints ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5385 of file classdef.cpp.

5386{
5387 return m_typeConstraints;
5388}

References m_typeConstraints.

◆ updateBaseClasses()

void ClassDefImpl::updateBaseClasses ( const BaseClassList & bcd)
overridevirtual

Update the list of base classes to the one passed.

Implements ClassDef.

Definition at line 5011 of file classdef.cpp.

5012{
5013 m_inherits = bcd;
5014}

References m_inherits.

◆ updateSubClasses()

void ClassDefImpl::updateSubClasses ( const BaseClassList & bcd)
overridevirtual

Update the list of sub classes to the one passed.

Implements ClassDef.

Definition at line 5021 of file classdef.cpp.

5022{
5023 m_inheritedBy = bcd;
5024}

References m_inheritedBy.

◆ usedByImplementationClasses()

const UsesClassList & ClassDefImpl::usedByImplementationClasses ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5096 of file classdef.cpp.

5097{
5098 return m_usedByImplClassList;
5099}

References m_usedByImplClassList.

◆ usedFiles()

const FileList & ClassDefImpl::usedFiles ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5380 of file classdef.cpp.

5381{
5382 return m_files;
5383}

References m_files.

◆ usedImplementationClasses()

const UsesClassList & ClassDefImpl::usedImplementationClasses ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5091 of file classdef.cpp.

5092{
5093 return m_usesImplClassList;
5094}

References m_usesImplClassList.

◆ visibleInParentsDeclList()

bool ClassDefImpl::visibleInParentsDeclList ( ) const
overridevirtual

show this class in the declaration section of its parent?

Implements ClassDef.

Definition at line 2594 of file classdef.cpp.

2595{
2596 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2597 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
2598 bool extractLocalClasses = Config_getBool(EXTRACT_LOCAL_CLASSES);
2599 bool linkable = isLinkable();
2600 return (!isAnonymous() && !isExtension() &&
2601 (protection()!=Protection::Private || extractPrivate) &&
2602 (linkable || (!hideUndocClasses && (!isLocal() || extractLocalClasses)))
2603 );
2604}
bool isLocal() const override
Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES.
bool isLinkable() const override
Protection protection() const override
Return the protection level (Public,Protected,Private) in which this compound was found.

References Config_getBool, DefinitionMixin< ClassDefMutable >::isAnonymous(), isExtension(), isLinkable(), isLocal(), and protection().

Referenced by writeDeclarationLink().

◆ writeAdditionalInheritedMembers()

void ClassDefImpl::writeAdditionalInheritedMembers ( OutputList & ol) const
private

Definition at line 4820 of file classdef.cpp.

4821{
4822 //printf("**** writeAdditionalInheritedMembers()\n");
4823 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4824 {
4825 if (lde->kind()==LayoutDocEntry::MemberDecl)
4826 {
4827 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4828 if (lmd && lmd->type!=MemberListType::Friends())
4829 {
4830 ClassDefSet visited;
4832 }
4833 }
4834 }
4835}
void writeInheritedMemberDeclarations(OutputList &ol, ClassDefSet &visitedClasses, MemberListType lt, MemberListType lt2, const QCString &title, const ClassDef *inheritedFrom, bool invert, bool showAlways) const

References FALSE, DefinitionMixin< ClassDefMutable >::getLanguage(), LayoutDocManager::instance(), MemberListType::Invalid(), LayoutDocEntryMemberDecl::title(), TRUE, LayoutDocEntryMemberDecl::type, and writeInheritedMemberDeclarations().

Referenced by endMemberDeclarations().

◆ writeAuthorSection()

void ClassDefImpl::writeAuthorSection ( OutputList & ol) const
private

Definition at line 2237 of file classdef.cpp.

2238{
2239 ol.pushGeneratorState();
2241 ol.writeString("\n");
2242 ol.startGroupHeader();
2244 ol.endGroupHeader();
2246 ol.popGeneratorState();
2247}
void writeString(const QCString &text)
Definition outputlist.h:411
void startGroupHeader(const QCString &id=QCString(), int extraLevels=0)
Definition outputlist.h:453
void endGroupHeader(int extraLevels=0)
Definition outputlist.h:455
virtual QCString trGeneratedAutomatically(const QCString &s)=0
virtual QCString trAuthor(bool first_capital, bool singular)=0
#define Config_getString(name)
Definition config.h:32

References Config_getString, OutputList::disableAllBut(), OutputList::endGroupHeader(), Man, OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startGroupHeader(), theTranslator, TRUE, and OutputList::writeString().

Referenced by writeDocumentationContents().

◆ writeBriefDescription()

void ClassDefImpl::writeBriefDescription ( OutputList & ol,
bool exampleFlag ) const
private

Definition at line 1551 of file classdef.cpp.

1552{
1553 if (hasBriefDescription())
1554 {
1555 ol.startParagraph();
1556 ol.pushGeneratorState();
1558 ol.writeString(" - ");
1559 ol.popGeneratorState();
1561 briefLine(),
1562 this,
1563 nullptr,
1565 DocOptions()
1566 .setIndexWords(true)
1567 .setSingleLine(true));
1568 ol.pushGeneratorState();
1570 ol.writeString(" \n");
1572 ol.popGeneratorState();
1573
1574 if (hasDetailedDescription() || exampleFlag)
1575 {
1576 writeMoreLink(ol,anchor());
1577 }
1578
1579 ol.endParagraph();
1580 }
1581 ol.writeSynopsis();
1582}
void writeMoreLink(OutputList &ol, const QCString &anchor) const
bool hasDetailedDescription() const override
returns TRUE if this class has a non-empty detailed description
bool hasBriefDescription() const override
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void writeSynopsis()
Definition outputlist.h:592

References anchor(), DefinitionMixin< ClassDefMutable >::briefDescription(), DefinitionMixin< ClassDefMutable >::briefFile(), DefinitionMixin< ClassDefMutable >::briefLine(), OutputList::disable(), OutputList::disableAllBut(), OutputList::enable(), OutputList::endParagraph(), OutputList::generateDoc(), DefinitionMixin< ClassDefMutable >::hasBriefDescription(), hasDetailedDescription(), Man, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), RTF, OutputList::startParagraph(), writeMoreLink(), OutputList::writeString(), and OutputList::writeSynopsis().

Referenced by writeDocumentationContents().

◆ writeCollaborationGraph()

void ClassDefImpl::writeCollaborationGraph ( OutputList & ol) const
private

Definition at line 1968 of file classdef.cpp.

1969{
1970 if (Config_getBool(HAVE_DOT) && m_hasCollaborationGraph /*&& Config_getBool(COLLABORATION_GRAPH)*/)
1971 {
1972 DotClassGraph usageImplGraph(this,GraphType::Collaboration);
1973 if (usageImplGraph.isTooBig())
1974 {
1975 warn_uncond("Collaboration graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
1976 name(), usageImplGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
1977 }
1978 else if (!usageImplGraph.isTrivial())
1979 {
1980 ol.pushGeneratorState();
1982 ol.startDotGraph();
1984 ol.endDotGraph(usageImplGraph);
1985 ol.popGeneratorState();
1986 }
1987 }
1988}
void endDotGraph(DotClassGraph &g)
Definition outputlist.h:650
void startDotGraph()
Definition outputlist.h:648
virtual QCString trCollaborationDiagram(const QCString &clName)=0
#define Config_getInt(name)
Definition config.h:34
@ Collaboration
Definition dotgraph.h:31
#define warn_uncond(fmt,...)
Definition message.h:122

References Collaboration, Config_getBool, Config_getInt, OutputList::disable(), displayName(), OutputList::endDotGraph(), DotClassGraph::isTooBig(), DotClassGraph::isTrivial(), m_hasCollaborationGraph, Man, DefinitionMixin< ClassDefMutable >::name(), DotClassGraph::numNodes(), OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startDotGraph(), theTranslator, and warn_uncond.

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ writeDeclaration()

void ClassDefImpl::writeDeclaration ( OutputList & ol,
const MemberDef * md,
bool inGroup,
int indentLevel,
const ClassDef * inheritedFrom,
const QCString & inheritId ) const
overridevirtual

called from MemberDef::writeDeclaration() to (recursively) write the definition of an anonymous struct, union or class.

Implements ClassDef.

Definition at line 3562 of file classdef.cpp.

3564{
3565 //printf("ClassName='%s' inGroup=%d\n",qPrint(name()),inGroup);
3566
3568 QCString cn = displayName(FALSE);
3569 if (!cn.isEmpty())
3570 {
3571 ol.docify(" ");
3572 if (md && isLinkable())
3573 {
3574 ol.writeObjectLink(QCString(),QCString(),md->anchor(),cn);
3575 }
3576 else
3577 {
3578 ol.startBold();
3579 ol.docify(cn);
3580 ol.endBold();
3581 }
3582 }
3583 ol.docify(" {");
3585 ol.endMemberDeclaration(md ? md->anchor() : QCString(),inheritId);
3586
3587 // write user defined member groups
3588 for (const auto &mg : m_memberGroups)
3589 {
3590 mg->writePlainDeclarations(ol,inGroup,this,nullptr,nullptr,nullptr,nullptr,indentLevel,inheritedFrom,inheritId);
3591 }
3592
3593 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
3594 {
3595 if (lde->kind()==LayoutDocEntry::MemberDecl)
3596 {
3597 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
3598 if (lmd)
3599 {
3600 writePlainMemberDeclaration(ol,lmd->type,inGroup,indentLevel,inheritedFrom,inheritId);
3601 }
3602 }
3603 }
3604}
QCString compoundTypeString() const override
Returns the type of compound as a string.
void writePlainMemberDeclaration(OutputList &ol, MemberListType lt, bool inGroup, int indentLevel, const ClassDef *inheritedFrom, const QCString &inheritId) const
virtual QCString anchor() const =0
void endMemberItem(OutputGenerator::MemberItemType type)
Definition outputlist.h:495
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId)
Definition outputlist.h:571

References Definition::anchor(), OutputGenerator::AnonymousStart, compoundTypeString(), displayName(), OutputList::docify(), OutputList::endBold(), OutputList::endMemberDeclaration(), OutputList::endMemberItem(), FALSE, LayoutDocManager::instance(), QCString::isEmpty(), isLinkable(), m_memberGroups, OutputList::startBold(), LayoutDocEntryMemberDecl::type, OutputList::writeObjectLink(), and writePlainMemberDeclaration().

◆ writeDeclarationLink()

void ClassDefImpl::writeDeclarationLink ( OutputList & ol,
bool & found,
const QCString & header,
bool localNames ) const
overridevirtual

Implements ClassDef.

Definition at line 2606 of file classdef.cpp.

2607{
2608 //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
2609 //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
2610 bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE);
2611 SrcLangExt lang = getLanguage();
2613 {
2614 if (!found) // first class
2615 {
2616 if (sliceOpt)
2617 {
2618 if (compoundType()==Interface)
2619 {
2620 ol.startMemberHeader("interfaces");
2621 }
2622 else if (compoundType()==Struct)
2623 {
2624 ol.startMemberHeader("structs");
2625 }
2626 else if (compoundType()==Exception)
2627 {
2628 ol.startMemberHeader("exceptions");
2629 }
2630 else // compoundType==Class
2631 {
2632 ol.startMemberHeader("nested-classes");
2633 }
2634 }
2635 else // non-Slice optimization: single header for class/struct/..
2636 {
2637 ol.startMemberHeader("nested-classes");
2638 }
2639 if (!header.isEmpty())
2640 {
2641 ol.parseText(header);
2642 }
2643 else if (lang==SrcLangExt::VHDL)
2644 {
2646 }
2647 else
2648 {
2649 ol.parseText(lang==SrcLangExt::Fortran ?
2652 }
2653 ol.endMemberHeader();
2654 ol.startMemberList();
2655 found=TRUE;
2656 }
2658 QCString ctype = compoundTypeString();
2659 QCString cname = displayName(!localNames);
2660 QCString anc = anchor();
2661 if (anc.isEmpty()) anc = cname; else anc.prepend(cname+"_");
2663
2664 if (lang!=SrcLangExt::VHDL) // for VHDL we swap the name and the type
2665 {
2666 if (isSliceLocal())
2667 {
2668 ol.writeString("local ");
2669 }
2670 ol.writeString(ctype);
2671 ol.writeString(" ");
2672 ol.insertMemberAlign();
2673 }
2674 if (isLinkable())
2675 {
2678 anchor(),
2679 cname
2680 );
2681 }
2682 else
2683 {
2684 ol.startBold();
2685 ol.docify(cname);
2686 ol.endBold();
2687 }
2688 if (lang==SrcLangExt::VHDL) // now write the type
2689 {
2690 ol.writeString(" ");
2691 ol.insertMemberAlign();
2693 }
2695
2696 // add the brief description if available
2697 if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
2698 {
2699 auto parser { createDocParser() };
2700 auto ast { validatingParseDoc(*parser.get(),
2701 briefFile(),
2702 briefLine(),
2703 this,
2704 nullptr,
2706 DocOptions()
2707 .setSingleLine(true))
2708 };
2709 if (!ast->isEmpty())
2710 {
2712 ol.writeDoc(ast.get(),this,nullptr);
2713 if (isLinkableInProject())
2714 {
2715 writeMoreLink(ol,anchor());
2716 }
2718 }
2719 }
2720 ol.endMemberDeclaration(anchor(),QCString());
2721 }
2722}
QCString getReference() const override
bool visibleInParentsDeclList() const override
show this class in the declaration section of its parent?
void writeDoc(const IDocNodeAST *ast, const Definition *ctx, const MemberDef *md, int sectionLevel=-1)
Definition outputlist.h:383
void startMemberDeclaration()
Definition outputlist.h:569
void endMemberDescription()
Definition outputlist.h:567
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
Definition outputlist.h:565
void startMemberList()
Definition outputlist.h:481
void insertMemberAlign(bool templ=FALSE)
Definition outputlist.h:517
void startMemberItem(const QCString &anchor, OutputGenerator::MemberItemType type, const QCString &id=QCString())
Definition outputlist.h:493
virtual QCString trDataTypes()=0
virtual QCString trCompounds()=0
static QCString getProtectionName(int prot)
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, const DocOptions &options)
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55

References anchor(), ARCHITECTURE, DefinitionMixin< ClassDefMutable >::briefDescription(), DefinitionMixin< ClassDefMutable >::briefFile(), DefinitionMixin< ClassDefMutable >::briefLine(), compoundType(), compoundTypeString(), Config_getBool, VhdlDocGen::convert(), createDocParser(), displayName(), OutputList::docify(), OutputList::endBold(), OutputList::endMemberDeclaration(), OutputList::endMemberDescription(), OutputList::endMemberHeader(), OutputList::endMemberItem(), ClassDef::Exception, FALSE, DefinitionMixin< ClassDefMutable >::getLanguage(), getOutputFileBase(), VhdlDocGen::getProtectionName(), getReference(), OutputList::insertMemberAlign(), ClassDef::Interface, QCString::isEmpty(), isLinkable(), isLinkableInProject(), isSliceLocal(), OutputGenerator::Normal, OutputList::parseText(), QCString::prepend(), protection(), OutputList::startBold(), OutputList::startMemberDeclaration(), OutputList::startMemberDescription(), OutputList::startMemberHeader(), OutputList::startMemberItem(), OutputList::startMemberList(), ClassDef::Struct, theTranslator, TRUE, validatingParseDoc(), visibleInParentsDeclList(), OutputList::writeDoc(), writeMoreLink(), OutputList::writeObjectLink(), and OutputList::writeString().

◆ writeDetailedDescription()

void ClassDefImpl::writeDetailedDescription ( OutputList & ol,
const QCString & pageType,
bool exampleFlag,
const QCString & title,
const QCString & anchor = QCString() ) const
private

Definition at line 1660 of file classdef.cpp.

1662{
1663 if (hasDetailedDescription() || exampleFlag)
1664 {
1665 ol.pushGeneratorState();
1667 ol.writeRuler();
1668 ol.popGeneratorState();
1669
1670 ol.pushGeneratorState();
1672 ol.writeAnchor(QCString(),anchor.isEmpty() ? QCString("details") : anchor);
1673 ol.popGeneratorState();
1674
1675 if (!anchor.isEmpty())
1676 {
1677 ol.pushGeneratorState();
1681 ol.popGeneratorState();
1682 }
1683
1684 ol.startGroupHeader("details");
1685 ol.parseText(title);
1686 ol.endGroupHeader();
1687
1689 }
1690 else
1691 {
1692 //writeTemplateSpec(ol,this,pageType);
1693 }
1694}
void writeDetailedDocumentationBody(OutputList &ol) const
void writeAnchor(const QCString &fileName, const QCString &name)
Definition outputlist.h:523

References anchor(), OutputList::disable(), OutputList::disableAllBut(), OutputList::endGroupHeader(), getOutputFileBase(), hasDetailedDescription(), Html, Man, OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startGroupHeader(), title(), OutputList::writeAnchor(), writeDetailedDocumentationBody(), and OutputList::writeRuler().

Referenced by writeDocumentationContents().

◆ writeDetailedDocumentationBody()

void ClassDefImpl::writeDetailedDocumentationBody ( OutputList & ol) const
private

Definition at line 1584 of file classdef.cpp.

1585{
1586 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
1587
1588 ol.startTextBlock();
1589
1590 if (getLanguage()==SrcLangExt::Cpp)
1591 {
1592 writeTemplateSpec(ol,this,compoundTypeString(),SrcLangExt::Cpp);
1593 }
1594
1595 // repeat brief description
1596 if (!briefDescription().isEmpty() && repeatBrief)
1597 {
1599 briefLine(),
1600 this,
1601 nullptr,
1603 DocOptions());
1604 }
1605 if (!briefDescription().isEmpty() && repeatBrief &&
1606 !documentation().isEmpty())
1607 {
1608 ol.pushGeneratorState();
1610 ol.writeString("\n\n");
1611 ol.popGeneratorState();
1612 }
1613 // write documentation
1614 if (!documentation().isEmpty())
1615 {
1616 ol.generateDoc(docFile(),
1617 docLine(),
1618 this,
1619 nullptr,
1620 documentation(),
1621 DocOptions()
1622 .setIndexWords(true));
1623 }
1624 // write type constraints
1626
1627 ol.generateDoc(
1628 docFile(),docLine(),
1629 this,
1630 nullptr, // memberDef
1632 DocOptions()
1633 .setIndexWords(true));
1634
1635 // write examples
1636 if (hasExamples())
1637 {
1638 ol.startExamples();
1639 ol.startDescForItem();
1641 ol.endDescForItem();
1642 ol.endExamples();
1643 }
1644 writeSourceDef(ol);
1646 ol.endTextBlock();
1647}
void writeTemplateSpec(OutputList &ol, const Definition *d, const QCString &type, SrcLangExt lang) const
bool hasExamples() const override
void writeSourceDef(OutputList &ol) const override
void writeRequirementRefs(OutputList &ol) const override
void endTextBlock(bool paraBreak=FALSE)
Definition outputlist.h:672
void endDescForItem()
Definition outputlist.h:549
void startTextBlock(bool dense=FALSE)
Definition outputlist.h:670
void endExamples()
Definition outputlist.h:580
void startExamples()
Definition outputlist.h:578
void startDescForItem()
Definition outputlist.h:547
void writeTypeConstraints(OutputList &ol, const Definition *d, const ArgumentList &al)
Definition util.cpp:5462
QCString inlineTemplateArgListToDoc(const ArgumentList &al)
Definition util.cpp:1227
void writeExamples(OutputList &ol, const ExampleList &list)
Definition util.cpp:1175

References DefinitionMixin< ClassDefMutable >::briefDescription(), DefinitionMixin< ClassDefMutable >::briefFile(), DefinitionMixin< ClassDefMutable >::briefLine(), compoundTypeString(), Config_getBool, OutputList::disable(), DefinitionMixin< ClassDefMutable >::docFile(), DefinitionMixin< ClassDefMutable >::docLine(), DefinitionMixin< ClassDefMutable >::documentation(), OutputList::endDescForItem(), OutputList::endExamples(), OutputList::endTextBlock(), OutputList::generateDoc(), DefinitionMixin< ClassDefMutable >::getLanguage(), hasExamples(), DefinitionMixin< ClassDefMutable >::hasRequirementRefs(), Html, inlineTemplateArgListToDoc(), m_examples, m_tempArgs, m_typeConstraints, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startDescForItem(), OutputList::startExamples(), OutputList::startTextBlock(), writeExamples(), DefinitionMixin< ClassDefMutable >::writeRequirementRefs(), DefinitionMixin< ClassDefMutable >::writeSourceDef(), OutputList::writeString(), writeTemplateSpec(), and writeTypeConstraints().

Referenced by writeDetailedDescription(), and writeInlineDocumentation().

◆ writeDocumentation()

void ClassDefImpl::writeDocumentation ( OutputList & ol) const
overridevirtual

Implements ClassDef.

Definition at line 2970 of file classdef.cpp.

2971{
2972 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
2973 //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
2974 //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
2975 bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE);
2976 QCString pageTitle = title();
2977
2979 if (sliceOpt)
2980 {
2981 if (compoundType()==Interface)
2982 {
2984 }
2985 else if (compoundType()==Struct)
2986 {
2988 }
2989 else if (compoundType()==Exception)
2990 {
2992 }
2993 else
2994 {
2996 }
2997 }
2998 else
2999 {
3001 }
3002
3003 AUTO_TRACE("name='{}' getOutputFileBase='{}'",name(),getOutputFileBase());
3004 bool hasAllMembersLink=false;
3005 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
3006 {
3007 if (lde->kind()==LayoutDocEntry::ClassAllMembersLink)
3008 {
3009 hasAllMembersLink = true;
3010 break;
3011 }
3012 }
3013 QCString memListFile;
3014 if (hasAllMembersLink && !m_allMemberNameInfoLinkedMap.empty() && !Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
3015 {
3016 memListFile = getMemberListFileName();
3017 }
3018 startFile(ol,getOutputFileBase(),false,name(),pageTitle,hli,!generateTreeView,QCString(),0,memListFile);
3019 if (!generateTreeView)
3020 {
3022 {
3024 }
3025 ol.endQuickIndices();
3026 }
3027
3028 startTitle(ol,getOutputFileBase(),this);
3029 ol.parseText(pageTitle);
3031 addGroupListToTitle(ol,this);
3033 writeDocumentationContents(ol,pageTitle);
3034
3035 endFileWithNavPath(ol,this);
3036
3037 if (Config_getBool(SEPARATE_MEMBER_PAGES))
3038 {
3039 writeMemberPages(ol);
3040 }
3041}
void addClassAttributes(OutputList &ol) const
void writeMemberPages(OutputList &ol) const override
QCString getMemberListFileName() const override
Definition classdef.cpp:988
void writeDocumentationContents(OutputList &ol, const QCString &pageTitle) const
void writeNavigationPath(OutputList &ol) const override
void endQuickIndices()
Definition outputlist.h:604
void startTitle(OutputList &ol, const QCString &fileName, const DefinitionMutable *def)
Definition index.cpp:386
void endTitle(OutputList &ol, const QCString &fileName, const QCString &name)
Definition index.cpp:396
void startFile(OutputList &ol, const QCString &name, bool isSource, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel, const QCString &allMembersFile)
Definition index.cpp:403
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
Definition index.cpp:450
HighlightedItem
Definition index.h:59
@ InterfaceVisible
Definition index.h:89
@ ExceptionVisible
Definition index.h:91
void addGroupListToTitle(OutputList &ol, const Definition *d)
Definition util.cpp:4915

References addClassAttributes(), addGroupListToTitle(), AUTO_TRACE, ClassVisible, compoundType(), Config_getBool, displayName(), endFileWithNavPath(), OutputList::endQuickIndices(), endTitle(), ClassDef::Exception, ExceptionVisible, getMemberListFileName(), DefinitionMixin< ClassDefMutable >::getOuterScope(), getOutputFileBase(), Doxygen::globalScope, LayoutDocManager::instance(), ClassDef::Interface, InterfaceVisible, m_allMemberNameInfoLinkedMap, DefinitionMixin< ClassDefMutable >::name(), None, OutputList::parseText(), startFile(), startTitle(), ClassDef::Struct, StructVisible, title(), writeDocumentationContents(), writeMemberPages(), and DefinitionMixin< ClassDefMutable >::writeNavigationPath().

◆ writeDocumentationContents()

void ClassDefImpl::writeDocumentationContents ( OutputList & ol,
const QCString & pageTitle ) const
private

Definition at line 2758 of file classdef.cpp.

2759{
2760 ol.startContents();
2761
2762 QCString pageType = " ";
2763 pageType += compoundTypeString();
2764
2765 bool exampleFlag=hasExamples();
2766
2767 //---------------------------------------- start flexible part -------------------------------
2768
2769 SrcLangExt lang = getLanguage();
2770
2771 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
2772 {
2773 switch (lde->kind())
2774 {
2775 case LayoutDocEntry::BriefDesc:
2776 writeBriefDescription(ol,exampleFlag);
2777 break;
2778 case LayoutDocEntry::ClassIncludes:
2779 if (lang==SrcLangExt::Slice)
2780 {
2782 }
2783 else
2784 {
2786 }
2787 break;
2788 case LayoutDocEntry::ClassInheritanceGraph:
2790 break;
2791 case LayoutDocEntry::ClassCollaborationGraph:
2793 break;
2794 case LayoutDocEntry::ClassAllMembersLink:
2795 //writeAllMembersLink(ol); // this is now part of the summary links
2796 break;
2797 case LayoutDocEntry::MemberDeclStart:
2799 break;
2800 case LayoutDocEntry::MemberGroups:
2802 break;
2803 case LayoutDocEntry::MemberDecl:
2804 {
2805 ClassDefSet visitedClasses;
2806 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
2807 if (lmd)
2808 {
2809 writeMemberDeclarations(ol,visitedClasses,lmd->type,lmd->title(lang),lmd->subtitle(lang));
2810 }
2811 }
2812 break;
2813 case LayoutDocEntry::ClassNestedClasses:
2814 {
2815 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
2816 if (ls)
2817 {
2818 writeNestedClasses(ol,ls->title(lang));
2819 }
2820 }
2821 break;
2822 case LayoutDocEntry::MemberDeclEnd:
2824 break;
2825 case LayoutDocEntry::DetailedDesc:
2826 {
2827 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
2828 if (ls)
2829 {
2830 writeDetailedDescription(ol,pageType,exampleFlag,ls->title(lang));
2831 }
2832 }
2833 break;
2834 case LayoutDocEntry::MemberDefStart:
2836 break;
2837 case LayoutDocEntry::ClassInlineClasses:
2839 break;
2840 case LayoutDocEntry::MemberDef:
2841 {
2842 const LayoutDocEntryMemberDef *lmd = dynamic_cast<const LayoutDocEntryMemberDef*>(lde.get());
2843 if (lmd)
2844 {
2845 writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
2846 }
2847 }
2848 break;
2849 case LayoutDocEntry::MemberDefEnd:
2851 break;
2852 case LayoutDocEntry::ClassUsedFiles:
2853 showUsedFiles(ol);
2854 break;
2855 case LayoutDocEntry::AuthorSection:
2857 break;
2858 case LayoutDocEntry::NamespaceNestedNamespaces:
2859 case LayoutDocEntry::NamespaceNestedConstantGroups:
2860 case LayoutDocEntry::NamespaceClasses:
2861 case LayoutDocEntry::NamespaceConcepts:
2862 case LayoutDocEntry::NamespaceInterfaces:
2863 case LayoutDocEntry::NamespaceStructs:
2864 case LayoutDocEntry::NamespaceExceptions:
2865 case LayoutDocEntry::NamespaceInlineClasses:
2866 case LayoutDocEntry::ConceptDefinition:
2867 case LayoutDocEntry::FileClasses:
2868 case LayoutDocEntry::FileConcepts:
2869 case LayoutDocEntry::FileInterfaces:
2870 case LayoutDocEntry::FileStructs:
2871 case LayoutDocEntry::FileExceptions:
2872 case LayoutDocEntry::FileNamespaces:
2873 case LayoutDocEntry::FileConstantGroups:
2874 case LayoutDocEntry::FileIncludes:
2875 case LayoutDocEntry::FileIncludeGraph:
2876 case LayoutDocEntry::FileIncludedByGraph:
2877 case LayoutDocEntry::FileSourceLink:
2878 case LayoutDocEntry::FileInlineClasses:
2879 case LayoutDocEntry::GroupClasses:
2880 case LayoutDocEntry::GroupConcepts:
2881 case LayoutDocEntry::GroupModules:
2882 case LayoutDocEntry::GroupInlineClasses:
2883 case LayoutDocEntry::GroupNamespaces:
2884 case LayoutDocEntry::GroupDirs:
2885 case LayoutDocEntry::GroupNestedGroups:
2886 case LayoutDocEntry::GroupFiles:
2887 case LayoutDocEntry::GroupGraph:
2888 case LayoutDocEntry::GroupPageDocs:
2889 case LayoutDocEntry::ModuleExports:
2890 case LayoutDocEntry::ModuleClasses:
2891 case LayoutDocEntry::ModuleConcepts:
2892 case LayoutDocEntry::ModuleUsedFiles:
2893 case LayoutDocEntry::DirSubDirs:
2894 case LayoutDocEntry::DirFiles:
2895 case LayoutDocEntry::DirGraph:
2896 err("Internal inconsistency: member '{}' should not be part of LayoutDocManager::Class entry list\n",lde->entryToString());
2897 break;
2898 }
2899 }
2900
2901 ol.endContents();
2902}
void writeIncludeFilesForSlice(OutputList &ol) const
void writeInheritanceGraph(OutputList &ol) const
void writeMemberDeclarations(OutputList &ol, ClassDefSet &visitedClasses, MemberListType lt, const QCString &title, const QCString &subTitle=QCString(), bool showInline=FALSE, const ClassDef *inheritedFrom=nullptr, MemberListType lt2=MemberListType::Invalid(), bool invert=FALSE, bool showAlways=FALSE) const override
void writeBriefDescription(OutputList &ol, bool exampleFlag) const
void writeInlineClasses(OutputList &ol) const
void endMemberDeclarations(OutputList &ol) const
void writeCollaborationGraph(OutputList &ol) const
void writeAuthorSection(OutputList &ol) const
void writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag, const QCString &title, const QCString &anchor=QCString()) const
void endMemberDocumentation(OutputList &ol) const
void writeIncludeFiles(OutputList &ol) const
void writeMemberGroups(OutputList &ol, bool showInline=FALSE) const
void writeNestedClasses(OutputList &ol, const QCString &title) const
void writeMemberDocumentation(OutputList &ol, MemberListType lt, const QCString &title, bool showInline=FALSE) const
void startMemberDeclarations(OutputList &ol) const
void showUsedFiles(OutputList &ol) const
void startMemberDocumentation(OutputList &ol) const
void endContents()
Definition outputlist.h:620
void startContents()
Definition outputlist.h:618
MemberListType type
Definition layout.h:137
QCString title(SrcLangExt lang) const
Definition layout.cpp:1800
QCString title(SrcLangExt lang) const
Definition layout.cpp:1781

References compoundTypeString(), OutputList::endContents(), endMemberDeclarations(), endMemberDocumentation(), err, DefinitionMixin< ClassDefMutable >::getLanguage(), hasExamples(), LayoutDocManager::instance(), showUsedFiles(), OutputList::startContents(), startMemberDeclarations(), startMemberDocumentation(), LayoutDocEntryMemberDecl::subtitle(), LayoutDocEntryMemberDecl::title(), LayoutDocEntryMemberDef::title(), LayoutDocEntrySection::title(), LayoutDocEntryMemberDecl::type, LayoutDocEntryMemberDef::type, writeAuthorSection(), writeBriefDescription(), writeCollaborationGraph(), writeDetailedDescription(), writeIncludeFiles(), writeIncludeFilesForSlice(), writeInheritanceGraph(), writeInlineClasses(), writeMemberDeclarations(), writeMemberDocumentation(), writeMemberGroups(), and writeNestedClasses().

Referenced by writeDocumentation().

◆ writeDocumentationForInnerClasses()

void ClassDefImpl::writeDocumentationForInnerClasses ( OutputList & ol) const
overridevirtual

Implements ClassDef.

Definition at line 3108 of file classdef.cpp.

3109{
3110 // write inner classes after the parent, so the tag files contain
3111 // the definition in proper order!
3112 for (const auto &innerCd : m_innerClasses)
3113 {
3114 if (
3115 innerCd->isLinkableInProject() && !innerCd->isImplicitTemplateInstance() &&
3116 protectionLevelVisible(innerCd->protection()) &&
3117 !innerCd->isEmbeddedInOuterScope()
3118 )
3119 {
3120 msg("Generating docs for nested compound {}...\n",innerCd->displayName());
3121 innerCd->writeDocumentation(ol);
3122 innerCd->writeMemberList(ol);
3123 }
3124 innerCd->writeDocumentationForInnerClasses(ol);
3125 }
3126}
#define msg(fmt,...)
Definition message.h:94

References m_innerClasses, msg, and protectionLevelVisible().

◆ writeIncludeFiles()

void ClassDefImpl::writeIncludeFiles ( OutputList & ol) const
private

Definition at line 2132 of file classdef.cpp.

2133{
2134 if (m_incInfo /*&& Config_getBool(SHOW_HEADERFILE)*/)
2135 {
2136 SrcLangExt lang = getLanguage();
2137 QCString nm=m_incInfo->includeName.isEmpty() ?
2138 (m_incInfo->fileDef ?
2139 m_incInfo->fileDef->docName() : QCString()
2140 ) :
2141 m_incInfo->includeName;
2142 if (!nm.isEmpty())
2143 {
2144 ol.startParagraph();
2145 ol.startTypewriter();
2146 ol.docify(::includeStatement(lang,m_incInfo->kind));
2147 ol.docify(::includeOpen(lang,m_incInfo->kind));
2148 ol.pushGeneratorState();
2150 ol.docify(nm);
2153 if (m_incInfo->fileDef)
2154 {
2155 ol.writeObjectLink(QCString(),m_incInfo->fileDef->includeName(),QCString(),nm);
2156 }
2157 else
2158 {
2159 ol.docify(nm);
2160 }
2161 ol.popGeneratorState();
2162 ol.docify(::includeClose(lang,m_incInfo->kind));
2163 ol.endTypewriter();
2164 ol.endParagraph();
2165 }
2166 }
2167}
void startTypewriter()
Definition outputlist.h:449
void endTypewriter()
Definition outputlist.h:451
QCString includeClose(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:85
QCString includeStatement(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:55
QCString includeOpen(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:72

References OutputList::disable(), OutputList::disableAllBut(), OutputList::docify(), OutputList::enable(), OutputList::endParagraph(), OutputList::endTypewriter(), DefinitionMixin< ClassDefMutable >::getLanguage(), Html, includeClose(), includeOpen(), includeStatement(), QCString::isEmpty(), m_incInfo, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startParagraph(), OutputList::startTypewriter(), and OutputList::writeObjectLink().

Referenced by writeDocumentationContents().

◆ writeIncludeFilesForSlice()

void ClassDefImpl::writeIncludeFilesForSlice ( OutputList & ol) const
private

Definition at line 1991 of file classdef.cpp.

1992{
1993 if (m_incInfo)
1994 {
1995 QCString nm;
1996 const StringVector &paths = Config_getList(STRIP_FROM_PATH);
1997 if (!paths.empty() && m_incInfo->fileDef)
1998 {
1999 QCString abs = m_incInfo->fileDef->absFilePath();
2000 QCString potential;
2001 size_t length = 0;
2002 for (const auto &s : paths)
2003 {
2004 FileInfo info(s);
2005 if (info.exists())
2006 {
2007 QCString prefix = info.absFilePath();
2008 if (prefix.at(prefix.length() - 1) != '/')
2009 {
2010 prefix += '/';
2011 }
2012
2013 if (prefix.length() > length &&
2014 qstricmp(abs.left(prefix.length()).data(), prefix.data()) == 0) // case insensitive compare
2015 {
2016 length = prefix.length();
2017 potential = abs.right(abs.length() - prefix.length());
2018 }
2019 }
2020 }
2021
2022 if (length > 0)
2023 {
2024 nm = potential;
2025 }
2026 }
2027
2028 if (nm.isEmpty())
2029 {
2030 nm = m_incInfo->includeName;
2031 }
2032
2033 ol.startParagraph();
2034 ol.docify(theTranslator->trDefinedIn()+" ");
2035 ol.startTypewriter();
2036 ol.docify("<");
2037 if (m_incInfo->fileDef)
2038 {
2039 ol.writeObjectLink(QCString(),m_incInfo->fileDef->includeName(),QCString(),nm);
2040 }
2041 else
2042 {
2043 ol.docify(nm);
2044 }
2045 ol.docify(">");
2046 ol.endTypewriter();
2047 ol.endParagraph();
2048 }
2049
2050 // Write a summary of the Slice definition including metadata.
2051 ol.startParagraph();
2052 ol.startTypewriter();
2053 if (!m_metaData.isEmpty())
2054 {
2055 ol.docify(m_metaData);
2056 ol.lineBreak();
2057 }
2058 if (m_spec.isLocal())
2059 {
2060 ol.docify("local ");
2061 }
2062 if (m_spec.isInterface())
2063 {
2064 ol.docify("interface ");
2065 }
2066 else if (m_spec.isStruct())
2067 {
2068 ol.docify("struct ");
2069 }
2070 else if (m_spec.isException())
2071 {
2072 ol.docify("exception ");
2073 }
2074 else
2075 {
2076 ol.docify("class ");
2077 }
2078 ol.docify(stripScope(name()));
2079 if (!m_inherits.empty())
2080 {
2081 if (m_spec.isInterface() || m_spec.isException())
2082 {
2083 ol.docify(" extends ");
2084 bool first=true;
2085 for (const auto &ibcd : m_inherits)
2086 {
2087 if (!first) ol.docify(", ");
2088 ClassDef *icd = ibcd.classDef;
2089 ol.docify(icd->name());
2090 first=false;
2091 }
2092 }
2093 else
2094 {
2095 // Must be a class.
2096 bool implements = false;
2097 for (const auto &ibcd : m_inherits)
2098 {
2099 ClassDef *icd = ibcd.classDef;
2100 if (icd->isInterface())
2101 {
2102 implements = true;
2103 }
2104 else
2105 {
2106 ol.docify(" extends ");
2107 ol.docify(icd->name());
2108 }
2109 }
2110 if (implements)
2111 {
2112 ol.docify(" implements ");
2113 bool first = true;
2114 for (const auto &ibcd : m_inherits)
2115 {
2116 ClassDef *icd = ibcd.classDef;
2117 if (icd->isInterface())
2118 {
2119 if (!first) ol.docify(", ");
2120 first = false;
2121 ol.docify(icd->name());
2122 }
2123 }
2124 }
2125 }
2126 }
2127 ol.docify(" { ... }");
2128 ol.endTypewriter();
2129 ol.endParagraph();
2130}
constexpr auto prefix
Definition anchor.cpp:44
virtual bool isInterface() const =0
Returns TRUE if this class represents an interface.
void lineBreak(const QCString &style=QCString())
Definition outputlist.h:559
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
virtual QCString trDefinedIn()=0
#define Config_getList(name)
Definition config.h:38
int qstricmp(const char *s1, const char *s2)
Definition qcstring.cpp:530
QCString stripScope(const QCString &name)
Definition util.cpp:3783

References FileInfo::absFilePath(), Config_getList, QCString::data(), OutputList::docify(), OutputList::endParagraph(), OutputList::endTypewriter(), FileInfo::exists(), QCString::isEmpty(), ClassDef::isInterface(), QCString::left(), QCString::length(), OutputList::lineBreak(), m_incInfo, m_inherits, m_metaData, m_spec, Definition::name(), DefinitionMixin< ClassDefMutable >::name(), prefix, qstricmp(), QCString::right(), OutputList::startParagraph(), OutputList::startTypewriter(), stripScope(), theTranslator, and OutputList::writeObjectLink().

Referenced by writeDocumentationContents().

◆ writeInheritanceGraph()

void ClassDefImpl::writeInheritanceGraph ( OutputList & ol) const
private

Definition at line 1833 of file classdef.cpp.

1834{
1835 bool haveDot = Config_getBool(HAVE_DOT);
1836 auto classGraph = m_typeInheritanceGraph;
1837
1838 if (classGraph == CLASS_GRAPH_t::NO) return;
1839 // count direct inheritance relations
1840 int count=countInheritanceNodes();
1841
1842 bool renderDiagram = FALSE;
1843 if (haveDot && (classGraph==CLASS_GRAPH_t::YES || classGraph==CLASS_GRAPH_t::GRAPH))
1844 // write class diagram using dot
1845 {
1846 DotClassGraph inheritanceGraph(this,GraphType::Inheritance);
1847 if (inheritanceGraph.isTooBig())
1848 {
1849 warn_uncond("Inheritance graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
1850 name(), inheritanceGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
1851 }
1852 else if (!inheritanceGraph.isTrivial())
1853 {
1854 ol.pushGeneratorState();
1856 ol.startDotGraph();
1858 ol.endDotGraph(inheritanceGraph);
1859 ol.popGeneratorState();
1860 renderDiagram = TRUE;
1861 }
1862 }
1863 else if ((classGraph==CLASS_GRAPH_t::YES || classGraph==CLASS_GRAPH_t::GRAPH || classGraph==CLASS_GRAPH_t::BUILTIN) && count>0)
1864 // write class diagram using built-in generator
1865 {
1866 ClassDiagram diagram(this); // create a diagram of this class.
1867 ol.startClassDiagram();
1872 renderDiagram = TRUE;
1873 }
1874
1875 if (renderDiagram) // if we already show the inheritance relations graphically,
1876 // then hide the text version
1877 {
1879 }
1880
1881 count = countInheritsNodes();
1882 if (count>0)
1883 {
1884 auto replaceFunc = [this,&ol](size_t entryIndex)
1885 {
1886 for (size_t index=0; index<m_inherits.size() ; index++)
1887 {
1888 const BaseClassDef &bcd=m_inherits[index];
1889 const ClassDef *cd=bcd.classDef;
1890
1891 if (cd->isVisibleInHierarchy()) // filter on the class we want to show
1892 {
1893 if (index==entryIndex) // found the requested index
1894 {
1895 // use the class name but with the template arguments as given
1896 // in the inheritance relation
1898 cd->displayName(),bcd.templSpecifiers);
1899
1900 if (cd->isLinkable())
1901 {
1903 cd->getOutputFileBase(),
1904 cd->anchor(),
1905 displayName);
1906 }
1907 else
1908 {
1909 ol.docify(displayName);
1910 }
1911 return;
1912 }
1913 }
1914 }
1915 };
1916
1917 ol.startParagraph();
1918 writeMarkerList(ol,
1920 static_cast<size_t>(count),
1921 replaceFunc);
1922 ol.endParagraph();
1923 }
1924
1925 // write subclasses
1926 count = countInheritedByNodes();
1927 if (count>0)
1928 {
1929 auto replaceFunc = [this,&ol](size_t entryIndex)
1930 {
1931 for (size_t index=0; index<m_inheritedBy.size() ; index++)
1932 {
1933 const BaseClassDef &bcd=m_inheritedBy[index];
1934 const ClassDef *cd=bcd.classDef;
1935 if (cd->isVisibleInHierarchy()) // filter on the class we want to show
1936 {
1937 if (index==entryIndex) // found the requested index
1938 {
1939 if (cd->isLinkable())
1940 {
1943 }
1944 else
1945 {
1946 ol.docify(cd->displayName());
1947 }
1948 return;
1949 }
1950 }
1951 }
1952 };
1953
1954 ol.startParagraph();
1955 writeMarkerList(ol,
1957 static_cast<size_t>(count),
1958 replaceFunc);
1959 ol.endParagraph();
1960 }
1961
1962 if (renderDiagram)
1963 {
1964 ol.enableAll();
1965 }
1966}
int countInheritanceNodes() const
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
void startClassDiagram()
Definition outputlist.h:594
void endClassDiagram(const ClassDiagram &d, const QCString &f, const QCString &n)
Definition outputlist.h:596
void enableAll()
const std::string & str() const
Definition qcstring.h:552
virtual QCString trInheritsList(int numEntries)=0
virtual QCString trInheritedByList(int numEntries)=0
virtual QCString trClassDiagram(const QCString &clName)=0
static void writeInheritanceSpecifier(OutputList &ol, const BaseClassDef &bcd)
@ Inheritance
Definition dotgraph.h:31
ClassDef * classDef
Class definition that this relation inherits from.
Definition classdef.h:60
QCString templSpecifiers
Template arguments used for the base class.
Definition classdef.h:78
QCString insertTemplateSpecifierInScope(const QCString &scope, const QCString &templ)
Definition util.cpp:3750
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1124

References Definition::anchor(), BaseClassDef::classDef, Config_getBool, Config_getInt, countInheritanceNodes(), countInheritedByNodes(), countInheritsNodes(), OutputList::disable(), OutputList::disableAllBut(), displayName(), Definition::displayName(), OutputList::docify(), OutputList::enable(), OutputList::enableAll(), OutputList::endClassDiagram(), OutputList::endDotGraph(), OutputList::endParagraph(), FALSE, getOutputFileBase(), Definition::getOutputFileBase(), Definition::getReference(), Inheritance, insertTemplateSpecifierInScope(), Definition::isLinkable(), DotClassGraph::isTooBig(), DotClassGraph::isTrivial(), ClassDef::isVisibleInHierarchy(), m_inheritedBy, m_inherits, m_typeInheritanceGraph, Man, DefinitionMixin< ClassDefMutable >::name(), DotClassGraph::numNodes(), OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startClassDiagram(), OutputList::startDotGraph(), OutputList::startParagraph(), BaseClassDef::templSpecifiers, theTranslator, TRUE, warn_uncond, writeInheritanceSpecifier(), writeMarkerList(), and OutputList::writeObjectLink().

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ writeInheritedMemberDeclarations()

void ClassDefImpl::writeInheritedMemberDeclarations ( OutputList & ol,
ClassDefSet & visitedClasses,
MemberListType lt,
MemberListType lt2,
const QCString & title,
const ClassDef * inheritedFrom,
bool invert,
bool showAlways ) const
private

Definition at line 4862 of file classdef.cpp.

4865{
4866 int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE);
4867 bool process = count>0;
4868 //printf("%s: writeInheritedMemberDec: lt=%s process=%d invert=%d always=%d\n",
4869 // qPrint(name()),qPrint(lt.to_string()),process,invert,showAlways);
4870 if ((process^invert) || showAlways)
4871 {
4872 for (const auto &ibcd : m_inherits)
4873 {
4874 ClassDefMutable *icd=toClassDefMutable(ibcd.classDef);
4875 if (icd && icd->isLinkable())
4876 {
4877 MemberListType lt1 = MemberListType::Invalid();
4878 MemberListType lt3 = MemberListType::Invalid();
4879 convertProtectionLevel(lt,ibcd.prot,&lt1,&lt3);
4880 if (lt2.isInvalid() && !lt3.isInvalid())
4881 {
4882 lt2=lt3;
4883 }
4884 //printf("%s:convert %s->(%s,%s) prot=%d\n",qPrint(icd->name()),qPrint(lt.to_string()),
4885 // qPrint(lt1.to_string()),qPrint(lt2.to_string()),ibcd.prot);
4886 if (visitedClasses.find(icd)==visitedClasses.end())
4887 {
4888 visitedClasses.insert(icd); // guard for multiple virtual inheritance
4889 if (!lt1.isInvalid())
4890 {
4891 //printf("--> writeMemberDeclarations for type %s\n",qPrint(lt1.to_string()));
4892 icd->writeMemberDeclarations(ol,visitedClasses,lt1,
4893 title,QCString(),FALSE,inheritedFrom,lt2,FALSE,TRUE);
4894 }
4895 }
4896 else
4897 {
4898 //printf("%s: class already visited!\n",qPrint(icd->name()));
4899 }
4900 }
4901 }
4902 }
4903}
virtual void writeMemberDeclarations(OutputList &ol, ClassDefSet &visitedClasses, MemberListType lt, const QCString &title, const QCString &subTitle=QCString(), bool showInline=FALSE, const ClassDef *inheritedFrom=nullptr, MemberListType lt2=MemberListType::Invalid(), bool invert=FALSE, bool showAlways=FALSE) const =0

References convertProtectionLevel(), countMembersIncludingGrouped(), FALSE, MemberListType::Invalid(), MemberListType::isInvalid(), Definition::isLinkable(), m_inherits, title(), toClassDefMutable(), TRUE, and ClassDef::writeMemberDeclarations().

Referenced by writeAdditionalInheritedMembers(), and writeMemberDeclarations().

◆ writeInlineClasses()

void ClassDefImpl::writeInlineClasses ( OutputList & ol) const
private

Definition at line 2192 of file classdef.cpp.

2193{
2194 m_innerClasses.writeDocumentation(ol,this);
2195}

References m_innerClasses.

Referenced by writeDocumentationContents().

◆ writeInlineDocumentation()

void ClassDefImpl::writeInlineDocumentation ( OutputList & ol) const
overridevirtual

Write class documentation inside another container (i.e.

a group)

Implements ClassDef.

Definition at line 2429 of file classdef.cpp.

2430{
2431 bool isSimple = m_isSimple;
2432
2433 ol.addIndexItem(name(),QCString());
2434 //printf("ClassDefImpl::writeInlineDocumentation(%s)\n",qPrint(name()));
2435
2436 // part 1: anchor and title
2437 QCString s = compoundTypeString()+" "+name();
2438
2439 // part 1a
2440 ol.pushGeneratorState();
2442 { // only HTML only
2443 ol.writeAnchor(QCString(),anchor());
2444 ol.startMemberDoc(QCString(),QCString(),anchor(),name(),1,1,FALSE);
2446 ol.parseText(s);
2447 ol.endMemberDocName();
2448 ol.endMemberDoc(FALSE);
2449 ol.writeString("</div>");
2450 ol.startIndent();
2451 }
2452 ol.popGeneratorState();
2453
2454 // part 1b
2455 ol.pushGeneratorState();
2458 { // for LaTeX/RTF only
2460 }
2461 ol.popGeneratorState();
2462
2463 // part 1c
2464 ol.pushGeneratorState();
2466 {
2467 // for LaTeX/RTF/Man
2468 ol.startGroupHeader("",1);
2469 ol.parseText(s);
2470 ol.endGroupHeader(1);
2471 }
2472 ol.popGeneratorState();
2473
2474 SrcLangExt lang=getLanguage();
2475
2476 // part 2: the header and detailed description
2477 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
2478 {
2479 switch (lde->kind())
2480 {
2481 case LayoutDocEntry::BriefDesc:
2482 {
2483 // since we already shown the brief description in the
2484 // declaration part of the container, so we use this to
2485 // show the details on top.
2487 }
2488 break;
2489 case LayoutDocEntry::ClassInheritanceGraph:
2491 break;
2492 case LayoutDocEntry::ClassCollaborationGraph:
2494 break;
2495 case LayoutDocEntry::MemberDeclStart:
2497 break;
2498 case LayoutDocEntry::MemberDecl:
2499 {
2500 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
2501 if (lmd)
2502 {
2503 ClassDefSet visitedClasses;
2504 if (!isSimple) writeMemberDeclarations(ol,visitedClasses,lmd->type,lmd->title(lang),lmd->subtitle(lang),TRUE);
2505 }
2506 }
2507 break;
2508 case LayoutDocEntry::MemberGroups:
2510 break;
2511 case LayoutDocEntry::MemberDeclEnd:
2513 break;
2514 case LayoutDocEntry::MemberDefStart:
2516 break;
2517 case LayoutDocEntry::MemberDef:
2518 {
2519 const LayoutDocEntryMemberDef *lmd = dynamic_cast<const LayoutDocEntryMemberDef*>(lde.get());
2520 if (lmd)
2521 {
2522 if (isSimple)
2523 {
2525 }
2526 else
2527 {
2528 writeMemberDocumentation(ol,lmd->type,lmd->title(lang),TRUE);
2529 }
2530 }
2531 }
2532 break;
2533 case LayoutDocEntry::MemberDefEnd:
2535 break;
2536 default:
2537 break;
2538 }
2539 }
2540
2541 // part 3: close the block
2542 ol.pushGeneratorState();
2544 { // HTML only
2545 ol.endIndent();
2546 }
2547 ol.popGeneratorState();
2548}
void writeSimpleMemberDocumentation(OutputList &ol, MemberListType lt) const
void endIndent()
Definition outputlist.h:584
void startMemberDoc(const QCString &clName, const QCString &memName, const QCString &anchor, const QCString &title, int memCount, int memTotal, bool showInline)
Definition outputlist.h:531
void startMemberDocName(bool align)
Definition outputlist.h:680
void endMemberDocName()
Definition outputlist.h:682
void endMemberDoc(bool hasArgs)
Definition outputlist.h:535
void startIndent()
Definition outputlist.h:582
void addIndexItem(const QCString &s1, const QCString &s2)
Definition outputlist.h:590

References OutputList::addIndexItem(), anchor(), compoundTypeString(), OutputList::disable(), OutputList::disableAllBut(), OutputList::endGroupHeader(), OutputList::endIndent(), endMemberDeclarations(), OutputList::endMemberDoc(), OutputList::endMemberDocName(), endMemberDocumentation(), FALSE, DefinitionMixin< ClassDefMutable >::getLanguage(), getOutputFileBase(), Html, LayoutDocManager::instance(), isSimple(), m_isSimple, Man, DefinitionMixin< ClassDefMutable >::name(), OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startGroupHeader(), OutputList::startIndent(), startMemberDeclarations(), OutputList::startMemberDoc(), OutputList::startMemberDocName(), startMemberDocumentation(), LayoutDocEntryMemberDecl::subtitle(), LayoutDocEntryMemberDecl::title(), LayoutDocEntryMemberDef::title(), TRUE, LayoutDocEntryMemberDecl::type, LayoutDocEntryMemberDef::type, OutputList::writeAnchor(), writeCollaborationGraph(), writeDetailedDocumentationBody(), writeInheritanceGraph(), writeMemberDeclarations(), writeMemberDocumentation(), writeMemberGroups(), writeSimpleMemberDocumentation(), and OutputList::writeString().

◆ writeMemberDeclarations()

void ClassDefImpl::writeMemberDeclarations ( OutputList & ol,
ClassDefSet & visitedClasses,
MemberListType lt,
const QCString & title,
const QCString & subTitle = QCString(),
bool showInline = FALSE,
const ClassDef * inheritedFrom = nullptr,
MemberListType lt2 = MemberListType::Invalid(),
bool invert = FALSE,
bool showAlways = FALSE ) const
overridevirtual

Implements ClassDef.

Definition at line 4905 of file classdef.cpp.

4909{
4910 //printf("%s: ClassDefImpl::writeMemberDeclarations lt=%s lt2=%s\n",qPrint(name()),qPrint(lt.to_string()),qPrint(lt2.to_string()));
4911 MemberList * ml = getMemberList(lt);
4912 MemberList * ml2 = getMemberList(lt2);
4913 if (getLanguage()==SrcLangExt::VHDL) // use specific declarations function
4914 {
4915 static const ClassDef *cdef;
4916 if (cdef!=this)
4917 { // only one inline link
4919 cdef=this;
4920 }
4921 if (ml)
4922 {
4923 VhdlDocGen::writeVhdlDeclarations(ml,ol,nullptr,this,nullptr,nullptr,nullptr);
4924 }
4925 }
4926 else
4927 {
4928 //printf("%s::writeMemberDeclarations(%s) ml=%p ml2=%p\n",qPrint(name()),qPrint(title),(void*)ml,(void*)ml2);
4929 QCString tt = title, st = subTitle;
4930 if (ml)
4931 {
4932 //printf(" writeDeclarations ml type=%s count=%d\n",qPrint(lt.to_string()),ml->numDecMembers(inheritedFrom));
4933 ml->writeDeclarations(ol,this,nullptr,nullptr,nullptr,nullptr,tt,st,FALSE,showInline,inheritedFrom,lt,true);
4934 tt.clear();
4935 st.clear();
4936 }
4937 if (ml2)
4938 {
4939 //printf(" writeDeclarations ml2 type=%s count=%d\n",qPrint(lt2.to_string()),ml2->numDecMembers(inheritedFrom));
4940 ml2->writeDeclarations(ol,this,nullptr,nullptr,nullptr,nullptr,tt,st,FALSE,showInline,inheritedFrom,lt,ml==nullptr);
4941 }
4942 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
4943 if (!inlineInheritedMembers) // show inherited members as separate lists
4944 {
4945 writeInheritedMemberDeclarations(ol,visitedClasses,lt,lt2,title,
4946 inheritedFrom ? inheritedFrom : this,
4947 invert,showAlways);
4948 }
4949 }
4950}
void writeDeclarations(OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, const QCString &title, const QCString &subtitle, bool showEnumValues=FALSE, bool showInline=FALSE, const ClassDef *inheritedFrom=nullptr, MemberListType lt=MemberListType::PubMethods(), bool showSectionTitle=true) const
Writes the list of members to the output.
void clear()
Definition qcstring.h:182
static void writeInlineClassLink(const ClassDef *, OutputList &ol)
static void writeVhdlDeclarations(const MemberList *, OutputList &, const GroupDef *, const ClassDef *, const FileDef *, const NamespaceDef *, const ModuleDef *)

References QCString::clear(), Config_getBool, FALSE, DefinitionMixin< ClassDefMutable >::getLanguage(), getMemberList(), title(), MemberList::writeDeclarations(), writeInheritedMemberDeclarations(), VhdlDocGen::writeInlineClassLink(), and VhdlDocGen::writeVhdlDeclarations().

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ writeMemberDocumentation()

void ClassDefImpl::writeMemberDocumentation ( OutputList & ol,
MemberListType lt,
const QCString & title,
bool showInline = FALSE ) const
private

Definition at line 4965 of file classdef.cpp.

4966{
4967 //printf("%s: ClassDefImpl::writeMemberDocumentation()\n",qPrint(name()));
4968 MemberList * ml = getMemberList(lt);
4969 if (ml) ml->writeDocumentation(ol,displayName(),this,title,ml->listType().toLabel(),FALSE,showInline);
4970}
MemberListType listType() const
Definition memberlist.h:130
void writeDocumentation(OutputList &ol, const QCString &scopeName, const Definition *container, const QCString &title, const QCString &anchor, bool showEnumValues=FALSE, bool showInline=FALSE) const
constexpr const char * toLabel() const noexcept
Definition types.h:402

References displayName(), FALSE, getMemberList(), MemberList::listType(), title(), MemberListType::toLabel(), and MemberList::writeDocumentation().

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ writeMemberGroups()

void ClassDefImpl::writeMemberGroups ( OutputList & ol,
bool showInline = FALSE ) const
private

Definition at line 2169 of file classdef.cpp.

2170{
2171 // write user defined member groups
2172 for (const auto &mg : m_memberGroups)
2173 {
2174 if (!mg->allMembersInSameSection() || !m_subGrouping) // group is in its own section
2175 {
2176 mg->writeDeclarations(ol,this,nullptr,nullptr,nullptr,nullptr,showInline);
2177 }
2178 else // add this group to the corresponding member section
2179 {
2180 //printf("addToDeclarationSection(%s)\n",qPrint(mg->header()));
2181 //mg->addToDeclarationSection();
2182 }
2183 }
2184}

References m_memberGroups, and m_subGrouping.

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ writeMemberList()

void ClassDefImpl::writeMemberList ( OutputList & ol) const
overridevirtual

Implements ClassDef.

Definition at line 3129 of file classdef.cpp.

3130{
3131 bool cOpt = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
3132 //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
3133 bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE);
3134 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
3135 if (m_allMemberNameInfoLinkedMap.empty() || cOpt) return;
3136 // only for HTML
3137 ol.pushGeneratorState();
3139
3141 if (sliceOpt)
3142 {
3143 if (compoundType()==Interface)
3144 {
3146 }
3147 else if (compoundType()==Struct)
3148 {
3150 }
3151 else if (compoundType()==Exception)
3152 {
3154 }
3155 else
3156 {
3158 }
3159 }
3160 else
3161 {
3163 }
3164
3165 QCString memListFile = getMemberListFileName();
3166 startFile(ol,memListFile,false,memListFile,theTranslator->trMemberList(),hli,!generateTreeView,getOutputFileBase());
3167 if (!generateTreeView)
3168 {
3170 {
3172 }
3173 ol.endQuickIndices();
3174 }
3175 startTitle(ol,QCString());
3177 endTitle(ol,QCString(),QCString());
3178 ol.startContents();
3179 ol.startParagraph();
3181 ol.docify(" ");
3184 ol.endParagraph();
3185
3186 //ol.startItemList();
3187
3188 bool first = true; // to prevent empty table
3189 int idx=0;
3190 for (auto &mni : m_allMemberNameInfoLinkedMap)
3191 {
3192 for (auto &mi : *mni)
3193 {
3194 const MemberDef *md=mi->memberDef();
3195 const ClassDef *cd=md->getClassDef();
3196 Protection prot = mi->prot();
3197 Specifier virt=md->virtualness();
3198
3199 //printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
3200 // qPrint(name()),qPrint(md->name()),qPrint(cd->name()),md->protection(),mi->prot,prot,mi->inherited);
3201
3202 if (cd && !md->name().isEmpty() && !md->isAnonymous())
3203 {
3204 bool memberWritten=FALSE;
3205 if (cd->isLinkable() && md->isLinkable())
3206 // create a link to the documentation
3207 {
3208 QCString name=mi->ambiguityResolutionScope()+md->name();
3209 //ol.writeListItem();
3210 if (first)
3211 {
3212 ol.writeString("<table class=\"directory\">\n");
3213 first = false;
3214 }
3215 ol.writeString(" <tr");
3216 if ((idx&1)==0) ol.writeString(" class=\"even\""); else ol.writeString(" class=\"odd\"");
3217 idx++;
3218 ol.writeString("><td class=\"entry\">");
3219 if (cd->isObjectiveC())
3220 {
3221 if (md->isObjCMethod())
3222 {
3223 if (md->isStatic())
3224 ol.writeString("+&#160;</td><td>");
3225 else
3226 ol.writeString("-&#160;</td><td>");
3227 }
3228 else
3229 ol.writeString("</td><td class=\"entry\">");
3230 }
3231 if (md->isObjCMethod())
3232 {
3234 md->getOutputFileBase(),
3235 md->anchor(),md->name());
3236 }
3237 else
3238 {
3239 //Definition *bd = md->getGroupDef();
3240 //if (bd==nullptr) bd=cd;
3242 md->getOutputFileBase(),
3243 md->anchor(),name);
3244
3245 if ( md->isFunction() || md->isSignal() || md->isSlot() ||
3246 (md->isFriend() && !md->argsString().isEmpty()))
3247 ol.docify(md->argsString());
3248 else if (md->isEnumerate())
3250 else if (md->isEnumValue())
3252 else if (md->isTypedef())
3253 ol.docify(" typedef");
3254 else if (md->isFriend() && md->typeString()=="friend class")
3255 ol.docify(" class");
3256 //ol.writeString("\n");
3257 }
3258 ol.writeString("</td>");
3259 memberWritten=TRUE;
3260 }
3261 else if (!cd->isArtificial() &&
3262 !Config_getBool(HIDE_UNDOC_MEMBERS) &&
3264 ) // no documentation,
3265 // generate link to the class instead.
3266 {
3267 //ol.writeListItem();
3268 if (first)
3269 {
3270 ol.writeString("<table class=\"directory\">\n");
3271 first = false;
3272 }
3273 ol.writeString(" <tr bgcolor=\"#f0f0f0\"");
3274 if ((idx&1)==0) ol.writeString(" class=\"even\""); else ol.writeString(" class=\"odd\"");
3275 idx++;
3276 ol.writeString("><td class=\"entry\">");
3277 if (cd->isObjectiveC())
3278 {
3279 if (md->isObjCMethod())
3280 {
3281 if (md->isStatic())
3282 ol.writeString("+&#160;</td><td class=\"entry\">");
3283 else
3284 ol.writeString("-&#160;</td><td class=\"entry\">");
3285 }
3286 else
3287 ol.writeString("</td><td class=\"entry\">");
3288 }
3289 ol.startBold();
3290 ol.docify(md->name());
3291 ol.endBold();
3292 if (!md->isObjCMethod())
3293 {
3294 if ( md->isFunction() || md->isSignal() || md->isSlot() )
3295 ol.docify(md->argsString());
3296 else if (md->isEnumerate())
3298 else if (md->isEnumValue())
3300 else if (md->isTypedef())
3301 ol.docify(" typedef");
3302 }
3303 ol.writeString(" (");
3305 if (cd->isLinkable())
3306 {
3307 ol.writeObjectLink(
3308 cd->getReference(),
3309 cd->getOutputFileBase(),
3310 cd->anchor(),
3311 cd->displayName());
3312 }
3313 else
3314 {
3315 ol.startBold();
3316 ol.docify(cd->displayName());
3317 ol.endBold();
3318 }
3319 ol.writeString(")");
3320 ol.writeString("</td>");
3321 memberWritten=TRUE;
3322 }
3323 if (memberWritten)
3324 {
3325 ol.writeString("<td class=\"entry\">");
3327 cd->getOutputFileBase(),
3328 cd->anchor(),
3329 md->category() ?
3330 md->category()->displayName() :
3331 cd->displayName());
3332 ol.writeString("</td>");
3333 ol.writeString("<td class=\"entry\">");
3334 }
3335 SrcLangExt lang = md->getLanguage();
3336 if (
3337 (prot!=Protection::Public || (virt!=Specifier::Normal && getLanguage()!=SrcLangExt::ObjC) ||
3338 md->isFriend() || md->isRelated() || md->isExplicit() ||
3339 md->isMutable() || (md->isInline() && Config_getBool(INLINE_INFO)) ||
3340 md->isSignal() || md->isSlot() || md->isThreadLocal() ||
3341 (getLanguage()==SrcLangExt::IDL &&
3342 (md->isOptional() || md->isAttribute() || md->isUNOProperty())) ||
3343 md->isStatic() || lang==SrcLangExt::VHDL
3344 )
3345 && memberWritten)
3346 {
3347 StringVector sl;
3348 if (lang==SrcLangExt::VHDL)
3349 {
3350 sl.push_back(theTranslator->trVhdlType(md->getVhdlSpecifiers(),TRUE).str()); //append vhdl type
3351 }
3352 else if (md->isFriend()) sl.emplace_back("friend");
3353 else if (md->isRelated()) sl.emplace_back("related");
3354 else
3355 {
3356 if (Config_getBool(INLINE_INFO) && md->isInline())
3357 sl.emplace_back("inline");
3358 if (md->isExplicit()) sl.emplace_back("explicit");
3359 if (md->isMutable()) sl.emplace_back("mutable");
3360 if (md->isThreadLocal()) sl.emplace_back("thread_local");
3361 if (prot==Protection::Protected) sl.emplace_back("protected");
3362 else if (prot==Protection::Private) sl.emplace_back("private");
3363 else if (prot==Protection::Package) sl.emplace_back("package");
3364 if (virt==Specifier::Virtual && getLanguage()!=SrcLangExt::ObjC)
3365 sl.emplace_back("virtual");
3366 else if (virt==Specifier::Pure) sl.emplace_back("pure virtual");
3367 if (md->isStatic()) sl.emplace_back("static");
3368 if (md->isSignal()) sl.emplace_back("signal");
3369 if (md->isSlot()) sl.emplace_back("slot");
3370// this is the extra member page
3371 if (md->isOptional()) sl.emplace_back("optional");
3372 if (md->isAttribute()) sl.emplace_back("attribute");
3373 if (md->isUNOProperty()) sl.emplace_back("property");
3374 if (md->isReadonly()) sl.emplace_back("readonly");
3375 if (md->isBound()) sl.emplace_back("bound");
3376 if (md->isRemovable()) sl.emplace_back("removable");
3377 if (md->isConstrained()) sl.emplace_back("constrained");
3378 if (md->isTransient()) sl.emplace_back("transient");
3379 if (md->isMaybeVoid()) sl.emplace_back("maybevoid");
3380 if (md->isMaybeDefault()) sl.emplace_back("maybedefault");
3381 if (md->isMaybeAmbiguous()) sl.emplace_back("maybeambiguous");
3382 }
3383 bool firstSpan=true;
3384 for (const auto &s : sl)
3385 {
3386 if (!firstSpan)
3387 {
3388 ol.writeString("</span><span class=\"mlabel\">");
3389 }
3390 else
3391 {
3392 ol.writeString("<span class=\"mlabel\">");
3393 firstSpan=false;
3394 }
3395 ol.docify(s);
3396 }
3397 if (!firstSpan) ol.writeString("</span>");
3398 }
3399 if (memberWritten)
3400 {
3401 ol.writeString("</td>");
3402 ol.writeString("</tr>\n");
3403 }
3404 }
3405 }
3406 }
3407 //ol.endItemList();
3408
3409 if (!first) ol.writeString("</table>");
3410
3411 endFile(ol);
3412 ol.popGeneratorState();
3413}
virtual bool isObjectiveC() const =0
Returns TRUE if this class is implemented in Objective-C.
virtual bool isAnonymous() const =0
virtual bool isArtificial() const =0
virtual bool isSignal() const =0
virtual bool isExplicit() const =0
virtual bool isObjCMethod() const =0
virtual bool isMaybeVoid() const =0
virtual ClassDef * category() const =0
virtual bool isSlot() const =0
virtual bool isInline() const =0
virtual bool isMaybeAmbiguous() const =0
virtual bool isAttribute() const =0
virtual bool isMaybeDefault() const =0
virtual bool isRemovable() const =0
virtual bool isConstrained() const =0
virtual bool isReadonly() const =0
virtual bool isBound() const =0
virtual bool isThreadLocal() const =0
virtual bool isTransient() const =0
virtual bool isOptional() const =0
virtual bool isUNOProperty() const =0
virtual bool isMutable() const =0
virtual QCString trMemberList()=0
virtual QCString trIncludingInheritedMembers()=0
virtual QCString trThisIsTheListOfAllMembers()=0
virtual QCString trEnumName()=0
virtual QCString trEnumValue()=0
void endFile(OutputList &ol, bool skipNavIndex, bool skipEndContents, const QCString &navPath)
Definition index.cpp:429

References anchor(), Definition::anchor(), MemberDef::argsString(), MemberDef::category(), ClassVisible, compoundType(), Config_getBool, OutputList::disableAllBut(), displayName(), Definition::displayName(), OutputList::docify(), OutputList::endBold(), endFile(), OutputList::endParagraph(), OutputList::endQuickIndices(), endTitle(), ClassDef::Exception, ExceptionVisible, FALSE, MemberDef::getClassDef(), Definition::getLanguage(), DefinitionMixin< ClassDefMutable >::getLanguage(), getMemberListFileName(), DefinitionMixin< ClassDefMutable >::getOuterScope(), getOutputFileBase(), Definition::getOutputFileBase(), getReference(), Definition::getReference(), MemberDef::getVhdlSpecifiers(), Doxygen::globalScope, Html, ClassDef::Interface, InterfaceVisible, Definition::isAnonymous(), Definition::isArtificial(), MemberDef::isAttribute(), MemberDef::isBound(), MemberDef::isConstrained(), QCString::isEmpty(), MemberDef::isEnumerate(), MemberDef::isEnumValue(), MemberDef::isExplicit(), MemberDef::isFriend(), MemberDef::isFunction(), MemberDef::isInline(), Definition::isLinkable(), MemberDef::isMaybeAmbiguous(), MemberDef::isMaybeDefault(), MemberDef::isMaybeVoid(), MemberDef::isMutable(), MemberDef::isObjCMethod(), ClassDef::isObjectiveC(), MemberDef::isOptional(), MemberDef::isReadonly(), MemberDef::isRelated(), MemberDef::isRemovable(), MemberDef::isSignal(), MemberDef::isSlot(), MemberDef::isStatic(), MemberDef::isThreadLocal(), MemberDef::isTransient(), MemberDef::isTypedef(), MemberDef::isUNOProperty(), m_allMemberNameInfoLinkedMap, Definition::name(), DefinitionMixin< ClassDefMutable >::name(), None, OutputList::parseText(), OutputList::popGeneratorState(), MemberDef::protection(), protectionLevelVisible(), OutputList::pushGeneratorState(), OutputList::startBold(), OutputList::startContents(), startFile(), OutputList::startParagraph(), startTitle(), ClassDef::Struct, StructVisible, theTranslator, TRUE, MemberDef::typeString(), MemberDef::virtualness(), DefinitionMixin< ClassDefMutable >::writeNavigationPath(), OutputList::writeObjectLink(), and OutputList::writeString().

◆ writeMemberPages()

void ClassDefImpl::writeMemberPages ( OutputList & ol) const
overridevirtual

Implements ClassDef.

Definition at line 3043 of file classdef.cpp.

3044{
3045 ///////////////////////////////////////////////////////////////////////////
3046 //// Member definitions on separate pages
3047 ///////////////////////////////////////////////////////////////////////////
3048
3049 ol.pushGeneratorState();
3051
3052 for (const auto &ml : m_memberLists)
3053 {
3054 if (ml->numDocMembers()>ml->numDocEnumValues() && ml->listType().isDetailed())
3055 {
3056 ml->writeDocumentationPage(ol,displayName(),this);
3057 }
3058 }
3059
3060 ol.popGeneratorState();
3061}

References OutputList::disableAllBut(), displayName(), Html, m_memberLists, OutputList::popGeneratorState(), and OutputList::pushGeneratorState().

Referenced by writeDocumentation().

◆ writeMoreLink()

void ClassDefImpl::writeMoreLink ( OutputList & ol,
const QCString & anchor ) const
private

Definition at line 2550 of file classdef.cpp.

2551{
2552 // TODO: clean up this mess by moving it to
2553 // the output generators...
2554 bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
2555 bool rtfHyperlinks = Config_getBool(RTF_HYPERLINKS);
2556 bool usePDFLatex = Config_getBool(USE_PDFLATEX);
2557
2558 // HTML only
2559 ol.pushGeneratorState();
2561 ol.docify(" ");
2563 anchor.isEmpty() ? QCString("details") : anchor);
2565 ol.endTextLink();
2566 ol.popGeneratorState();
2567
2568 if (!anchor.isEmpty())
2569 {
2570 ol.pushGeneratorState();
2571 // LaTeX + RTF
2575 if (!(usePDFLatex && pdfHyperlinks))
2576 {
2578 }
2579 if (!rtfHyperlinks)
2580 {
2582 }
2583 ol.docify(" ");
2586 ol.endTextLink();
2587 // RTF only
2589 ol.writeString("\\par");
2590 ol.popGeneratorState();
2591 }
2592}
void endTextLink()
Definition outputlist.h:444
void startTextLink(const QCString &file, const QCString &anchor)
Definition outputlist.h:442
virtual QCString trMore()=0

References anchor(), Config_getBool, OutputList::disable(), OutputList::disableAllBut(), Docbook, OutputList::docify(), OutputList::endTextLink(), getOutputFileBase(), Html, Latex, Man, OutputList::parseText(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), RTF, OutputList::startTextLink(), theTranslator, and OutputList::writeString().

Referenced by writeBriefDescription(), and writeDeclarationLink().

◆ writeNestedClasses()

void ClassDefImpl::writeNestedClasses ( OutputList & ol,
const QCString & title ) const
private

Definition at line 2186 of file classdef.cpp.

2187{
2188 // nested classes
2189 m_innerClasses.writeDeclaration(ol,nullptr,title,TRUE);
2190}

References m_innerClasses, title(), and TRUE.

Referenced by writeDocumentationContents().

◆ writePageNavigation()

void ClassDefImpl::writePageNavigation ( OutputList & ol) const
overridevirtual

Implements DefinitionMutable.

Definition at line 2319 of file classdef.cpp.

2320{
2321 ol.writePageOutline();
2322}
void writePageOutline()
Definition outputlist.h:616

References OutputList::writePageOutline().

◆ writePlainMemberDeclaration()

void ClassDefImpl::writePlainMemberDeclaration ( OutputList & ol,
MemberListType lt,
bool inGroup,
int indentLevel,
const ClassDef * inheritedFrom,
const QCString & inheritId ) const
private

Definition at line 4979 of file classdef.cpp.

4982{
4983 //printf("%s: ClassDefImpl::writePlainMemberDeclaration()\n",qPrint(name()));
4984 MemberList * ml = getMemberList(lt);
4985 if (ml)
4986 {
4987 ml->writePlainDeclarations(ol,inGroup,this,nullptr,nullptr,nullptr,nullptr,indentLevel,inheritedFrom,inheritId);
4988 }
4989}
void writePlainDeclarations(OutputList &ol, bool inGroup, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, int indentLevel, const ClassDef *inheritedFrom, const QCString &inheritId) const

References getMemberList(), and MemberList::writePlainDeclarations().

Referenced by writeDeclaration().

◆ writeQuickMemberLinks()

void ClassDefImpl::writeQuickMemberLinks ( OutputList & ol,
const MemberDef * md ) const
overridevirtual

Implements DefinitionMutable.

Definition at line 3063 of file classdef.cpp.

3064{
3065 bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
3066
3067 ol.writeString(" <div class=\"navtab\">\n");
3068 ol.writeString(" <table>\n");
3069
3070 for (auto &mni : m_allMemberNameInfoLinkedMap)
3071 {
3072 for (auto &mi : *mni)
3073 {
3074 const MemberDef *md=mi->memberDef();
3075 if (md->getClassDef()==this && md->isLinkable() && !md->isEnumValue())
3076 {
3077 if (md->isLinkableInProject())
3078 {
3079 if (md==currentMd) // selected item => highlight
3080 {
3081 ol.writeString(" <tr><td class=\"navtabHL\">");
3082 }
3083 else
3084 {
3085 ol.writeString(" <tr><td class=\"navtab\">");
3086 }
3087 ol.writeString("<span class=\"label\"><a ");
3088 ol.writeString("href=\"");
3089 if (createSubDirs) ol.writeString("../../");
3090 QCString url = md->getOutputFileBase();
3092 ol.writeString(url+"#"+md->anchor());
3093 ol.writeString("\">");
3094 ol.writeString(convertToHtml(md->name()));
3095 ol.writeString("</a></span>");
3096 ol.writeString("</td></tr>\n");
3097 }
3098 }
3099 }
3100 }
3101
3102 ol.writeString(" </table>\n");
3103 ol.writeString(" </div>\n");
3104}
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:3967
void createSubDirs(const Dir &d)
Definition util.cpp:3644
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4925

References addHtmlExtensionIfMissing(), Definition::anchor(), Config_getBool, convertToHtml(), createSubDirs(), MemberDef::getClassDef(), Definition::getOutputFileBase(), MemberDef::isEnumValue(), Definition::isLinkable(), Definition::isLinkableInProject(), m_allMemberNameInfoLinkedMap, Definition::name(), and OutputList::writeString().

◆ writeSimpleMemberDocumentation()

void ClassDefImpl::writeSimpleMemberDocumentation ( OutputList & ol,
MemberListType lt ) const
private

Definition at line 4972 of file classdef.cpp.

4973{
4974 //printf("%s: ClassDefImpl::writeSimpleMemberDocumentation()\n",qPrint(name()));
4975 MemberList * ml = getMemberList(lt);
4976 if (ml) ml->writeSimpleDocumentation(ol,this);
4977}
void writeSimpleDocumentation(OutputList &ol, const Definition *container) const

References getMemberList(), and MemberList::writeSimpleDocumentation().

Referenced by writeInlineDocumentation().

◆ writeSummaryLinks()

void ClassDefImpl::writeSummaryLinks ( OutputList & ol) const
overridevirtual

Implements DefinitionMutable.

Definition at line 2250 of file classdef.cpp.

2251{
2252 static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2253 ol.pushGeneratorState();
2255 bool first=TRUE;
2256 SrcLangExt lang = getLanguage();
2257
2258 if (lang!=SrcLangExt::VHDL)
2259 {
2260 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
2261 {
2262 if (lde->kind()==LayoutDocEntry::ClassNestedClasses &&
2263 m_innerClasses.declVisible()
2264 )
2265 {
2266 for (const auto &innerCd : m_innerClasses)
2267 {
2268 if (!innerCd->isAnonymous() &&
2269 !innerCd->isExtension() &&
2270 (innerCd->protection()!=Protection::Private || extractPrivate) &&
2271 innerCd->visibleInParentsDeclList()
2272 )
2273 {
2274 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection *>(lde.get());
2275 ol.writeSummaryLink(QCString(),"nested-classes",ls->title(lang),first);
2276 first=FALSE;
2277 break;
2278 }
2279 }
2280 }
2281 else if (lde->kind()==LayoutDocEntry::ClassAllMembersLink &&
2283 !Config_getBool(OPTIMIZE_OUTPUT_FOR_C)
2284 )
2285 {
2287 first=FALSE;
2288 }
2289 else if (lde->kind()==LayoutDocEntry::MemberDecl)
2290 {
2291 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
2292 if (lmd)
2293 {
2294 MemberList * ml = getMemberList(lmd->type);
2295 if (ml && ml->declVisible())
2296 {
2297 ol.writeSummaryLink(QCString(),ml->listType().toLabel(),lmd->title(lang),first);
2298 first=FALSE;
2299 }
2300 }
2301 }
2302 }
2303 }
2304 else // VDHL only
2305 {
2306 for (const auto &s : m_vhdlSummaryTitles)
2307 {
2308 ol.writeSummaryLink(QCString(),convertToId(s),s,first);
2309 first=FALSE;
2310 }
2311 }
2312 if (!first)
2313 {
2314 ol.writeString(" </div>\n");
2315 }
2316 ol.popGeneratorState();
2317}
bool declVisible() const
void writeSummaryLink(const QCString &file, const QCString &anchor, const QCString &title, bool first)
Definition outputlist.h:614
virtual QCString trListOfAllMembers()=0
QCString convertToId(const QCString &s)
Definition util.cpp:3876

References Config_getBool, convertToId(), MemberList::declVisible(), OutputList::disableAllBut(), FALSE, DefinitionMixin< ClassDefMutable >::getLanguage(), getMemberList(), getMemberListFileName(), Html, LayoutDocManager::instance(), MemberList::listType(), m_allMemberNameInfoLinkedMap, m_innerClasses, m_vhdlSummaryTitles, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), theTranslator, LayoutDocEntryMemberDecl::title(), LayoutDocEntrySection::title(), MemberListType::toLabel(), TRUE, LayoutDocEntryMemberDecl::type, OutputList::writeString(), and OutputList::writeSummaryLink().

◆ writeTagFile()

void ClassDefImpl::writeTagFile ( TextStream & tagFile) const
overridevirtual

Implements ClassDef.

Definition at line 2324 of file classdef.cpp.

2325{
2326 if (!isLinkableInProject() || isArtificial()) return;
2327 tagFile << " <compound kind=\"";
2328 if (isFortran() && (compoundTypeString() == "type"))
2329 tagFile << "struct";
2330 else
2331 tagFile << compoundTypeString();
2332 tagFile << "\"";
2333 if (isObjectiveC()) { tagFile << " objc=\"yes\""; }
2334 tagFile << ">\n";
2335 tagFile << " <name>" << convertToXML(name()) << "</name>\n";
2336 QCString fn = getOutputFileBase();
2338 tagFile << " <filename>" << convertToXML(fn) << "</filename>\n";
2339 if (!anchor().isEmpty())
2340 {
2341 tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>\n";
2342 }
2343 QCString idStr = id();
2344 if (!idStr.isEmpty())
2345 {
2346 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
2347 }
2348 for (const Argument &a : m_tempArgs)
2349 {
2350 tagFile << " <templarg>" << convertToXML(a.type);
2351 if (!a.name.isEmpty())
2352 {
2353 tagFile << " " << convertToXML(a.name);
2354 }
2355 tagFile << "</templarg>\n";
2356 }
2357 for (const auto &ibcd : m_inherits)
2358 {
2359 ClassDef *cd=ibcd.classDef;
2360 if (cd && cd->isLinkable())
2361 {
2362 tagFile << " <base";
2363 if (ibcd.prot==Protection::Protected)
2364 {
2365 tagFile << " protection=\"protected\"";
2366 }
2367 else if (ibcd.prot==Protection::Private)
2368 {
2369 tagFile << " protection=\"private\"";
2370 }
2371 if (ibcd.virt==Specifier::Virtual)
2372 {
2373 tagFile << " virtualness=\"virtual\"";
2374 }
2376 cd->displayName(),ibcd.templSpecifiers);
2377 tagFile << ">" << convertToXML(displayName) << "</base>\n";
2378 }
2379 }
2380 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
2381 {
2382 switch (lde->kind())
2383 {
2384 case LayoutDocEntry::ClassNestedClasses:
2385 {
2386 for (const auto &innerCd : m_innerClasses)
2387 {
2388 if (innerCd->isLinkableInProject() && !innerCd->isImplicitTemplateInstance() &&
2389 protectionLevelVisible(innerCd->protection()) &&
2390 !innerCd->isEmbeddedInOuterScope()
2391 )
2392 {
2393 tagFile << " <class kind=\"" << innerCd->compoundTypeString() <<
2394 "\">" << convertToXML(innerCd->name()) << "</class>\n";
2395 }
2396 }
2397 }
2398 break;
2399 case LayoutDocEntry::MemberDecl:
2400 {
2401 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
2402 if (lmd)
2403 {
2404 MemberList * ml = getMemberList(lmd->type);
2405 if (ml)
2406 {
2407 ml->writeTagFile(tagFile);
2408 }
2409 }
2410 }
2411 break;
2412 case LayoutDocEntry::MemberGroups:
2413 {
2414 for (const auto &mg : m_memberGroups)
2415 {
2416 mg->writeTagFile(tagFile);
2417 }
2418 }
2419 break;
2420 default:
2421 break;
2422 }
2423 }
2424 writeDocAnchorsToTagFile(tagFile);
2425 tagFile << " </compound>\n";
2426}
bool isObjectiveC() const override
Returns TRUE if this class is implemented in Objective-C.
bool isFortran() const override
Returns TRUE if this class is implemented in Fortran.
QCString id() const override
void writeDocAnchorsToTagFile(TextStream &fs) const override
void writeTagFile(TextStream &, bool useQualifiedName=false, bool showNamespaceMembers=true)
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3916

References addHtmlExtensionIfMissing(), anchor(), compoundTypeString(), convertToXML(), displayName(), Definition::displayName(), getMemberList(), getOutputFileBase(), DefinitionMixin< ClassDefMutable >::id(), insertTemplateSpecifierInScope(), LayoutDocManager::instance(), DefinitionMixin< ClassDefMutable >::isArtificial(), QCString::isEmpty(), isFortran(), Definition::isLinkable(), isLinkableInProject(), isObjectiveC(), m_inherits, m_innerClasses, m_memberGroups, m_tempArgs, DefinitionMixin< ClassDefMutable >::name(), protectionLevelVisible(), LayoutDocEntryMemberDecl::type, DefinitionMixin< ClassDefMutable >::writeDocAnchorsToTagFile(), and MemberList::writeTagFile().

◆ writeTemplateSpec()

void ClassDefImpl::writeTemplateSpec ( OutputList & ol,
const Definition * d,
const QCString & type,
SrcLangExt lang ) const
private

Definition at line 1503 of file classdef.cpp.

1505{
1506 ArgumentLists specs;
1507 QCString name;
1508 searchTemplateSpecs(d,specs,name,lang);
1509 if (!specs.empty()) // class has template scope specifiers
1510 {
1512 for (const ArgumentList &al : specs)
1513 {
1514 ol.docify("template<");
1515 auto it = al.begin();
1516 while (it!=al.end())
1517 {
1518 Argument a = *it;
1519 linkifyText(TextGeneratorOLImpl(ol), // out
1520 a.type, // text
1521 LinkifyTextOptions().setScope(d).setFileScope(getFileDef()).setSelf(this));
1522 if (!a.name.isEmpty())
1523 {
1524 ol.docify(" ");
1525 ol.docify(a.name);
1526 }
1527 if (a.defval.length()!=0)
1528 {
1529 ol.docify(" = ");
1530 ol.docify(a.defval);
1531 }
1532 ++it;
1533 if (it!=al.end()) ol.docify(", ");
1534 }
1535 ol.docify(">");
1536 ol.lineBreak();
1537 }
1538 if (!m_requiresClause.isEmpty())
1539 {
1540 ol.docify("requires ");
1541 linkifyText(TextGeneratorOLImpl(ol), // out
1542 m_requiresClause, // text
1543 LinkifyTextOptions().setScope(d).setFileScope(getFileDef()).setSelf(this));
1544 ol.lineBreak();
1545 }
1546 ol.docify(type.lower()+" "+name);
1548 }
1549}
void endCompoundTemplateParams()
Definition outputlist.h:503
void startCompoundTemplateParams()
Definition outputlist.h:501
QCString lower() const
Definition qcstring.h:249
static void searchTemplateSpecs(const Definition *d, ArgumentLists &result, QCString &name, SrcLangExt lang)
QCString type
Definition arguments.h:42
QCString name
Definition arguments.h:44
QCString defval
Definition arguments.h:46
void linkifyText(const TextGeneratorIntf &out, const QCString &text, const LinkifyTextOptions &options)
Definition util.cpp:893

References Argument::defval, OutputList::docify(), OutputList::endCompoundTemplateParams(), getFileDef(), QCString::isEmpty(), QCString::length(), OutputList::lineBreak(), linkifyText(), QCString::lower(), m_requiresClause, Argument::name, DefinitionMixin< ClassDefMutable >::name(), searchTemplateSpecs(), OutputList::startCompoundTemplateParams(), and Argument::type.

Referenced by writeDetailedDocumentationBody().

Member Data Documentation

◆ m_allMemberNameInfoLinkedMap

◆ m_arrowOperator

const MemberDef* ClassDefImpl::m_arrowOperator = nullptr
private

Does this class overloaded the -> operator?

Definition at line 539 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), internalInsertMember(), and isSmartPointer().

◆ m_categoryOf

ClassDef* ClassDefImpl::m_categoryOf = nullptr
private

If this class is a Objective-C category, then this points to the class which is extended.

Definition at line 502 of file classdef.cpp.

Referenced by categoryOf(), ClassDefImpl(), deepCopy(), and setCategoryOf().

◆ m_className

QCString ClassDefImpl::m_className
private

local class name which could be a typedef'ed alias name.

Definition at line 497 of file classdef.cpp.

Referenced by className(), deepCopy(), setClassName(), and setProtection().

◆ m_collabFileName

QCString ClassDefImpl::m_collabFileName
private

file name used for the collaboration diagram

Definition at line 421 of file classdef.cpp.

Referenced by ClassDefImpl(), collaborationGraphFileName(), and deepCopy().

◆ m_compType

ClassDef::CompoundType ClassDefImpl::m_compType
private

Holds the kind of "class" this is.

Definition at line 467 of file classdef.cpp.

Referenced by ClassDefImpl(), compoundType(), compoundTypeString(), deepCopy(), generatedFromFiles(), setCompoundType(), and title().

◆ m_constraintClassList

ConstraintClassList ClassDefImpl::m_constraintClassList
private

Definition at line 484 of file classdef.cpp.

Referenced by addTypeConstraint(), deepCopy(), and templateTypeConstraints().

◆ m_examples

ExampleList ClassDefImpl::m_examples
private

Examples that use this class

Definition at line 464 of file classdef.cpp.

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

◆ m_fileDef

FileDef* ClassDefImpl::m_fileDef = nullptr
private

Namespace this class is part of (this is the inner most namespace in case of nested namespaces)

File this class is defined in

Definition at line 446 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), getFileDef(), moveTo(), and setFileDef().

◆ m_fileName

QCString ClassDefImpl::m_fileName
private

file name that forms the base for the output file containing the class documentation. For compatibility with Qt (e.g. links via tag files) this name cannot be derived from the class name directly.

Definition at line 415 of file classdef.cpp.

Referenced by anchor(), ClassDefImpl(), getInstanceOutputFileBase(), and getOutputFileBase().

◆ m_files

FileList ClassDefImpl::m_files
private

Files that were used for generating the class documentation.

Definition at line 461 of file classdef.cpp.

Referenced by deepCopy(), generatedFromFiles(), insertUsedFile(), showUsedFiles(), and usedFiles().

◆ m_hasCollaborationGraph

bool ClassDefImpl::m_hasCollaborationGraph = false
private

◆ m_implicitTemplateInstance

◆ m_incInfo

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

Include information about the header file should be included in the documentation. 0 by default, set by setIncludeFile().

Definition at line 429 of file classdef.cpp.

Referenced by deepCopy(), includeInfo(), setIncludeFile(), writeIncludeFiles(), and writeIncludeFilesForSlice().

◆ m_inheritedBy

BaseClassList ClassDefImpl::m_inheritedBy
private

List of sub-classes that directly derive from this class

Definition at line 438 of file classdef.cpp.

Referenced by countInheritedByNodes(), deepCopy(), insertSubClass(), isVisibleInHierarchy(), subClasses(), updateSubClasses(), and writeInheritanceGraph().

◆ m_inheritFileName

QCString ClassDefImpl::m_inheritFileName
private

file name used for the inheritance graph

Definition at line 424 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), and inheritanceGraphFileName().

◆ m_inherits

BaseClassList ClassDefImpl::m_inherits
private

◆ m_innerClasses

ClassLinkedRefMap ClassDefImpl::m_innerClasses
private

◆ m_isAbstract

bool ClassDefImpl::m_isAbstract = false
private

Is this an abstract class?

Definition at line 510 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), internalInsertMember(), and isAbstract().

◆ m_isJavaEnum

bool ClassDefImpl::m_isJavaEnum = false
private

Does this class represent a Java style enum?

Definition at line 544 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), and isJavaEnum().

◆ m_isLocal

bool ClassDefImpl::m_isLocal = false
private

TRUE if the class is defined in a source file rather than a header file.

Definition at line 519 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), isLinkableInProject(), and isLocal().

◆ m_isSimple

bool ClassDefImpl::m_isSimple = false
private

◆ m_isStatic

bool ClassDefImpl::m_isStatic = false
private

Is the class part of an unnamed namespace?

Definition at line 513 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), isLinkableInProject(), isVisibleInHierarchy(), and setIsStatic().

◆ m_isTemplArg

bool ClassDefImpl::m_isTemplArg = false
private

Definition at line 521 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), isTemplateArgument(), and makeTemplateArgument().

◆ m_memberGroups

◆ m_memberListFileName

QCString ClassDefImpl::m_memberListFileName
private

file name used for the list of all members

Definition at line 418 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), and getMemberListFileName().

◆ m_memberLists

◆ m_membersMerged

bool ClassDefImpl::m_membersMerged = false
private

TRUE if classes members are merged with those of the base classes.

Definition at line 516 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), and mergeMembers().

◆ m_metaData

QCString ClassDefImpl::m_metaData
private

Definition at line 548 of file classdef.cpp.

Referenced by deepCopy(), setMetaData(), and writeIncludeFilesForSlice().

◆ m_moduleDef

ModuleDef* ClassDefImpl::m_moduleDef = nullptr
private

Module this class is defined in

Definition at line 449 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), getModuleDef(), moveTo(), and setModuleDef().

◆ m_primaryConstructorParams

ArgumentList ClassDefImpl::m_primaryConstructorParams
private

Definition at line 560 of file classdef.cpp.

Referenced by setPrimaryConstructorParams(), and title().

◆ m_prot

Protection ClassDefImpl::m_prot
private

The protection level in which this class was found. Typically Public, but for nested classes this can also be Protected or Private.

Definition at line 473 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), isLinkableInProject(), isVisibleInHierarchy(), protection(), and setProtection().

◆ m_qualifiers

StringVector ClassDefImpl::m_qualifiers
private

Definition at line 553 of file classdef.cpp.

Referenced by addClassAttributes(), addQualifiers(), deepCopy(), and getQualifiers().

◆ m_requiresClause

QCString ClassDefImpl::m_requiresClause
private

C++20 requires clause.

Definition at line 551 of file classdef.cpp.

Referenced by deepCopy(), requiresClause(), setRequiresClause(), and writeTemplateSpec().

◆ m_spec

◆ m_subGrouping

bool ClassDefImpl::m_subGrouping = false
private

Does this class group its user-grouped members as a sub-section of the normal (public/protected/..) groups?

Definition at line 527 of file classdef.cpp.

Referenced by addGroupedInheritedMembers(), addMembersToMemberGroup(), ClassDefImpl(), countMembersIncludingGrouped(), deepCopy(), setSubGrouping(), subGrouping(), and writeMemberGroups().

◆ m_tagLessRef

const ClassDef* ClassDefImpl::m_tagLessRef = nullptr
private

Definition at line 541 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), setTagLessReference(), and tagLessReference().

◆ m_tempArgs

◆ m_templateInstances

TemplateInstanceList ClassDefImpl::m_templateInstances
private

Template instances that exists of this class, the key in the dictionary is the template argument list.

Definition at line 489 of file classdef.cpp.

Referenced by deepCopy(), getTemplateInstances(), insertExplicitTemplateInstance(), insertTemplateInstance(), and insertUsedFile().

◆ m_templateMaster

const ClassDef* ClassDefImpl::m_templateMaster = nullptr
private

◆ m_templBaseClassNames

TemplateNameMap ClassDefImpl::m_templBaseClassNames
private

Definition at line 491 of file classdef.cpp.

Referenced by deepCopy(), getTemplateBaseClassNames(), and setTemplateBaseClassNames().

◆ m_typeConstraints

ArgumentList ClassDefImpl::m_typeConstraints
private

Type constraints for template parameters

Definition at line 458 of file classdef.cpp.

Referenced by deepCopy(), setTypeConstraints(), typeConstraints(), and writeDetailedDocumentationBody().

◆ m_typeInheritanceGraph

CLASS_GRAPH_t ClassDefImpl::m_typeInheritanceGraph = CLASS_GRAPH_t::NO
private

◆ m_usedByImplClassList

UsesClassList ClassDefImpl::m_usedByImplClassList
private

Definition at line 482 of file classdef.cpp.

Referenced by addUsedByClass(), deepCopy(), and usedByImplementationClasses().

◆ m_usedOnly

bool ClassDefImpl::m_usedOnly = false
private

Reason of existence is a "use" relation.

Definition at line 530 of file classdef.cpp.

Referenced by ClassDefImpl(), deepCopy(), isUsedOnly(), and setUsedOnly().

◆ m_usesImplClassList

UsesClassList ClassDefImpl::m_usesImplClassList
private

Definition at line 481 of file classdef.cpp.

Referenced by addUsedClass(), deepCopy(), and usedImplementationClasses().

◆ m_vhdlSummaryTitles

StringSet ClassDefImpl::m_vhdlSummaryTitles
private

List of titles to use for the summary.

Definition at line 533 of file classdef.cpp.

Referenced by deepCopy(), internalInsertMember(), and writeSummaryLinks().


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