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

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 800 of file classdef.cpp.

805 : DefinitionMixin(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),nullptr,nullptr,isSymbol)
806{
807 AUTO_TRACE("name={}",name());
808 setReference(lref);
809 m_compType = ct;
811 QCString compTypeString = getCompoundTypeString(getLanguage(),ct,isJavaEnum);
812 if (!fName.isEmpty())
813 {
815 }
816 else
817 {
818 m_fileName=compTypeString+name();
819 }
820 m_prot=Protection::Public;
821 //nspace=nullptr;
822 m_fileDef=nullptr;
823 m_moduleDef=nullptr;
824 m_subGrouping=Config_getBool(SUBGROUPING);
825 m_templateMaster =nullptr;
830 m_categoryOf = nullptr;
832 m_isSimple = Config_getBool(INLINE_SIMPLE_STRUCTS);
833 m_arrowOperator = nullptr;
834 m_tagLessRef = nullptr;
835 m_spec=TypeSpecifier();
836 //QCString ns;
837 //extractNamespaceName(name,className,ns);
838 //printf("m_name=%s m_className=%s ns=%s\n",qPrint(m_name),qPrint(m_className),qPrint(ns));
839
840 // we cannot use getLanguage at this point, as setLanguage has not been called.
841 SrcLangExt lang = getLanguageFromFileName(defFileName);
842 if ((lang==SrcLangExt::Cpp || lang==SrcLangExt::ObjC) && guessSection(defFileName).isSource())
843 {
845 }
846 else
847 {
849 }
850 m_hasCollaborationGraph = Config_getBool(COLLABORATION_GRAPH);
852 m_memberListFileName = convertNameToFile(compTypeString+name()+"-members");
855 if (lref.isEmpty())
856 {
858 }
859 AUTO_TRACE_EXIT("m_fileName='{}'",m_fileName);
860}
QCString m_collabFileName
Definition classdef.cpp:419
QCString m_fileName
Definition classdef.cpp:413
const MemberDef * m_arrowOperator
Does this class overloaded the -> operator?
Definition classdef.cpp:537
TypeSpecifier m_spec
Definition classdef.cpp:544
ClassDef * m_categoryOf
Definition classdef.cpp:500
const ClassDef * m_tagLessRef
Definition classdef.cpp:539
Protection m_prot
Definition classdef.cpp:471
QCString m_inheritFileName
Definition classdef.cpp:422
const ClassDef * m_templateMaster
Definition classdef.cpp:492
bool m_membersMerged
Definition classdef.cpp:514
bool m_isJavaEnum
Does this class represent a Java style enum?
Definition classdef.cpp:542
ModuleDef * m_moduleDef
Definition classdef.cpp:447
bool isJavaEnum() const override
bool m_isSimple
Is this a simple (non-nested) C structure?
Definition classdef.cpp:534
CLASS_GRAPH_t m_typeInheritanceGraph
Definition classdef.cpp:554
bool m_isAbstract
Definition classdef.cpp:508
FileDef * m_fileDef
Definition classdef.cpp:444
ClassDef::CompoundType m_compType
Definition classdef.cpp:465
bool m_hasCollaborationGraph
Definition classdef.cpp:553
bool m_isTemplArg
Definition classdef.cpp:519
bool m_usedOnly
Reason of existence is a "use" relation.
Definition classdef.cpp:528
QCString m_memberListFileName
Definition classdef.cpp:416
bool m_subGrouping
Definition classdef.cpp:525
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:46
#define AUTO_TRACE_EXIT(...)
Definition docnode.cpp:48
#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:569
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5147
QCString stripExtension(const QCString &fName)
Definition util.cpp:4885
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:3446
EntryType guessSection(const QCString &name)
Definition util.cpp:340

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 2726 of file classdef.cpp.

2727{
2728 StringVector sl;
2729 if (isFinal()) sl.emplace_back("final");
2730 if (isSealed()) sl.emplace_back("sealed");
2731 if (isAbstract()) sl.emplace_back("abstract");
2732 if (isExported()) sl.emplace_back("export");
2733 if (getLanguage()==SrcLangExt::IDL && isPublished()) sl.emplace_back("published");
2734
2735 for (const auto &sx : m_qualifiers)
2736 {
2737 bool alreadyAdded = std::find(sl.begin(), sl.end(), sx) != sl.end();
2738 if (!alreadyAdded)
2739 {
2740 sl.push_back(sx);
2741 }
2742 }
2743
2744 ol.pushGeneratorState();
2746 if (!sl.empty())
2747 {
2748 ol.startLabels();
2749 size_t i=0;
2750 for (const auto &s : sl)
2751 {
2752 i++;
2753 ol.writeLabel(s,i==sl.size());
2754 }
2755 ol.endLabels();
2756 }
2757 ol.popGeneratorState();
2758}
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:551
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 3410 of file classdef.cpp.

3411{
3412 return m_examples.inSort(Example(anchor,nameStr,file));
3413}
ExampleList m_examples
Definition classdef.cpp:462
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 4928 of file classdef.cpp.

4930{
4931 //printf("** %s::addGroupedInheritedMembers() inheritId=%s\n",qPrint(name()),qPrint(inheritId));
4932 for (const auto &mg : m_memberGroups)
4933 {
4934 if (!mg->allMembersInSameSection() || !m_subGrouping) // group is in its own section
4935 {
4936 mg->addGroupedInheritedMembers(ol,this,lt,inheritedFrom,inheritId);
4937 }
4938 }
4939}
MemberGroupList m_memberGroups
Definition classdef.cpp:505

References m_memberGroups, and m_subGrouping.

◆ addInnerCompound()

void ClassDefImpl::addInnerCompound ( Definition * d)
overridevirtual

Implements DefinitionMutable.

Definition at line 4324 of file classdef.cpp.

4325{
4326 //printf("**** %s::addInnerCompound(%s)\n",qPrint(name()),qPrint(d->name()));
4327 if (d->definitionType()==Definition::TypeClass) // only classes can be
4328 // nested in classes.
4329 {
4330 m_innerClasses.add(d->localName(),toClassDef(d));
4331 }
4332}
ClassLinkedRefMap m_innerClasses
Definition classdef.cpp:476
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 4532 of file classdef.cpp.

4533{
4534 SrcLangExt lang = getLanguage();
4535 if (!isLinkableInProject()) return;
4536 //printf("ClassDef(%s)::addListReferences()\n",qPrint(name()));
4537 {
4538 const RefItemVector &xrefItems = xrefListItems();
4539 addRefItem(xrefItems,
4540 qualifiedName(),
4543 displayName(),
4544 QCString(),
4545 this
4546 );
4547 }
4548 for (const auto &mg : m_memberGroups)
4549 {
4550 mg->addListReferences(this);
4551 }
4552 for (auto &ml : m_memberLists)
4553 {
4554 if (ml->listType().isDetailed())
4555 {
4556 ml->addListReferences(this);
4557 }
4558 }
4559}
bool isLinkableInProject() const override
MemberLists m_memberLists
Definition classdef.cpp:502
QCString getOutputFileBase() const override
QCString displayName(bool includeScope=TRUE) const override
Definition classdef.cpp:989
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
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
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:4766

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 1014 of file classdef.cpp.

1015{
1016 for (auto &ml : m_memberLists)
1017 {
1018 if (!ml->listType().isDetailed())
1019 {
1021 }
1022 }
1023
1024 // add members inside sections to their groups
1025 for (const auto &mg : m_memberGroups)
1026 {
1027 if (mg->allMembersInSameSection() && m_subGrouping)
1028 {
1029 //printf("addToDeclarationSection(%s)\n",qPrint(mg->header()));
1030 mg->addToDeclarationSection();
1031 }
1032 }
1033}
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 4444 of file classdef.cpp.

4445{
4446 AUTO_TRACE("this={} cd={} templSpec={}",name(),cd->name(),templSpec);
4447 //printf("%s::addMembersToTemplateInstance(%s,%s)\n",qPrint(name()),qPrint(cd->name()),templSpec);
4448 for (const auto &mni : cd->memberNameInfoLinkedMap())
4449 {
4450 for (const auto &mi : *mni)
4451 {
4452 const MemberDef *md = mi->memberDef();
4453 if (m_allMemberNameInfoLinkedMap.find(md->name())==nullptr) // only insert the member if not hidden by one with the same name (#11541)
4454 {
4456 }
4457 }
4458 }
4459 // also instantatie members for nested classes
4460 for (const auto &innerCd : cd->getClasses())
4461 {
4462 ClassDefMutable *ncd = toClassDefMutable(m_innerClasses.find(innerCd->localName()));
4463 if (ncd)
4464 {
4465 ncd->addMembersToTemplateInstance(innerCd,cd->templateArguments(),templSpec);
4466 }
4467 }
4468}
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:450
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 4603 of file classdef.cpp.

4604{
4605 AUTO_TRACE("{} md={} lt={} isBrief={}",name(),md->name(),lt,isBrief);
4606 bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
4607 bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
4608 const auto &ml = m_memberLists.get(lt,MemberListContainer::Class);
4609 ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs));
4610 ml->push_back(md);
4611
4612 // for members in the declaration lists we set the section, needed for member grouping
4613 if (!ml->listType().isDetailed())
4614 {
4615 MemberDefMutable *mdm = toMemberDefMutable(md);
4616 if (mdm)
4617 {
4618 mdm->setSectionList(this,ml.get());
4619 }
4620 }
4621}
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 4418 of file classdef.cpp.

4421{
4422 AUTO_TRACE("this={} md={}",name(),md->name());
4423 auto actualArguments_p = stringToArgumentList(getLanguage(),templSpec);
4424 auto imd = md->createTemplateInstanceMember(templateArguments,actualArguments_p);
4425 auto mmd = toMemberDefMutable(imd.get());
4426 mmd->setMemberClass(this);
4427 mmd->setTemplateMaster(md);
4428 mmd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
4429 mmd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
4430 mmd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
4431 mmd->setMemberSpecifiers(md->getMemberSpecifiers());
4432 mmd->setMemberGroupId(md->getMemberGroupId());
4433 mmd->setArtificial(true);
4434 insertMember(imd.get());
4435 //printf("Adding member=%s %s%s to class %s templSpec %s\n",
4436 // imd->typeString(),qPrint(imd->name()),imd->argsString(),
4437 // qPrint(imd->getClassDef()->name()),templSpec);
4438 // insert imd in the list of all members
4439 //printf("Adding member=%s class=%s\n",qPrint(imd->name()),qPrint(name()));
4440 MemberName *mn = Doxygen::memberNameLinkedMap->add(imd->name());
4441 mn->push_back(std::move(imd));
4442}
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:111
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 5303 of file classdef.cpp.

5304{
5305 for (const auto &sx : qualifiers)
5306 {
5307 bool alreadyAdded = std::find(m_qualifiers.begin(), m_qualifiers.end(), sx) != m_qualifiers.end();
5308 if (!alreadyAdded)
5309 {
5310 m_qualifiers.push_back(sx);
5311 }
5312 }
5313}

References m_qualifiers.

◆ addTypeConstraint()

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

Definition at line 3421 of file classdef.cpp.

3422{
3423 //printf("addTypeConstraint(%s,%s)\n",qPrint(type),qPrint(typeConstraint));
3424 bool hideUndocRelation = Config_getBool(HIDE_UNDOC_RELATIONS);
3425 if (typeConstraint.isEmpty() || type.isEmpty()) return;
3426 SymbolResolver resolver(getFileDef());
3427 ClassDefMutable *cd = resolver.resolveClassMutable(this,typeConstraint);
3428 if (cd==nullptr && !hideUndocRelation)
3429 {
3430 cd = toClassDefMutable(
3431 Doxygen::hiddenClassLinkedMap->add(typeConstraint,
3432 std::unique_ptr<ClassDef>(
3433 new ClassDefImpl(
3435 getDefColumn(),
3436 typeConstraint,
3437 ClassDef::Class))));
3438 if (cd)
3439 {
3440 cd->setUsedOnly(TRUE);
3441 cd->setLanguage(getLanguage());
3442 //printf("Adding undocumented constraint '%s' to class %s on type %s\n",
3443 // qPrint(typeConstraint),qPrint(name()),qPrint(type));
3444 }
3445 }
3446 if (cd)
3447 {
3448 auto it = std::find_if(m_constraintClassList.begin(),
3450 [&cd](const auto &ccd) { return ccd.classDef==cd; });
3451
3452 if (it==m_constraintClassList.end())
3453 {
3454 m_constraintClassList.emplace_back(cd);
3455 it = m_constraintClassList.end()-1;
3456 }
3457 (*it).addAccessor(type);
3458 //printf("Adding constraint '%s' to class %s on type %s\n",
3459 // qPrint(typeConstraint),qPrint(name()),qPrint(type));
3460 }
3461}
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:800
ConstraintClassList m_constraintClassList
Definition classdef.cpp:482
virtual void setUsedOnly(bool b)=0
QCString getDefFileName() const override
virtual void setLanguage(SrcLangExt lang)=0
static ClassLinkedMap * hiddenClassLinkedMap
Definition doxygen.h:97

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 3464 of file classdef.cpp.

3465{
3466 for (const Argument &a : m_tempArgs)
3467 {
3468 if (!a.typeConstraint.isEmpty())
3469 {
3470 QCString typeConstraint;
3471 int i=0,p=0;
3472 while ((i=a.typeConstraint.find('&',p))!=-1) // typeConstraint="A &I" for C<T extends A & I>
3473 {
3474 typeConstraint = a.typeConstraint.mid(p,i-p).stripWhiteSpace();
3475 addTypeConstraint(typeConstraint,a.type);
3476 p=i+1;
3477 }
3478 typeConstraint = a.typeConstraint.right(a.typeConstraint.length()-p).stripWhiteSpace();
3479 addTypeConstraint(typeConstraint,a.type);
3480 }
3481 }
3482}
void addTypeConstraint(const QCString &typeConstraint, const QCString &type)
ArgumentList m_tempArgs
Definition classdef.cpp:453
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 4211 of file classdef.cpp.

4213{
4214 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
4215 bool umlLook = Config_getBool(UML_LOOK);
4216 if (prot==Protection::Private && !extractPrivate) return;
4217 //printf("%s::addUsedByClass(%s,%s)\n",qPrint(name()),qPrint(cd->name()),accessName);
4218 //
4219 auto it = std::find_if(m_usedByImplClassList.begin(),
4221 [&cd](const auto &ucd) { return ucd.classDef==cd; });
4222 if (it==m_usedByImplClassList.end())
4223 {
4224 m_usedByImplClassList.emplace_back(cd);
4225 //printf("Adding used by class %s to class %s\n",
4226 // qPrint(cd->name()),qPrint(name()));
4227 it = m_usedByImplClassList.end()-1;
4228 }
4229 QCString acc = accessName;
4230 if (umlLook)
4231 {
4232 switch(prot)
4233 {
4234 case Protection::Public: acc.prepend("+"); break;
4235 case Protection::Private: acc.prepend("-"); break;
4236 case Protection::Protected: acc.prepend("#"); break;
4237 case Protection::Package: acc.prepend("~"); break;
4238 }
4239 }
4240 (*it).addAccessor(acc);
4241}
UsesClassList m_usedByImplClassList
Definition classdef.cpp:480
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 4179 of file classdef.cpp.

4181{
4182 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
4183 bool umlLook = Config_getBool(UML_LOOK);
4184 if (prot==Protection::Private && !extractPrivate) return;
4185 //printf("%s::addUsedClass(%s,%s)\n",qPrint(name()),qPrint(cd->name()),accessName);
4186
4187 auto it = std::find_if(m_usesImplClassList.begin(),
4188 m_usesImplClassList.end(),
4189 [&cd](const auto &ucd) { return ucd.classDef==cd; });
4190 if (it==m_usesImplClassList.end())
4191 {
4192 m_usesImplClassList.emplace_back(cd);
4193 //printf("Adding used class %s to class %s via accessor %s\n",
4194 // qPrint(cd->name()),qPrint(name()),accessName);
4195 it = m_usesImplClassList.end()-1;
4196 }
4197 QCString acc = accessName;
4198 if (umlLook)
4199 {
4200 switch(prot)
4201 {
4202 case Protection::Public: acc.prepend("+"); break;
4203 case Protection::Private: acc.prepend("-"); break;
4204 case Protection::Protected: acc.prepend("#"); break;
4205 case Protection::Package: acc.prepend("~"); break;
4206 }
4207 }
4208 (*it).addAccessor(acc);
4209}
UsesClassList m_usesImplClassList
Definition classdef.cpp:479

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 5227 of file classdef.cpp.

5228{
5229 QCString anc;
5231 {
5233 {
5234 // point to the template of which this class is an instance
5235 anc = m_templateMaster->getOutputFileBase();
5236 }
5237 else
5238 {
5239 anc = m_fileName;
5240 }
5241 }
5242 return anc;
5243}
bool m_implicitTemplateInstance
Definition classdef.cpp:556
bool isEmbeddedInOuterScope() const override
static bool generatingXmlOutput
Definition doxygen.h:136

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 4982 of file classdef.cpp.

4983{
4984 return m_inherits;
4985}
BaseClassList m_inherits
Definition classdef.cpp:432

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 5132 of file classdef.cpp.

5133{
5134 return m_categoryOf;
5135}

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 4516 of file classdef.cpp.

4517{
4518 QCString name = m_className.isEmpty() ? localName() : m_className;
4519 auto lang = getLanguage();
4520 if (lang==SrcLangExt::CSharp)
4521 {
4523 }
4524 return name;
4525}
QCString m_className
Definition classdef.cpp:495
const QCString & localName() const override
QCString tempArgListToString(const ArgumentList &al, SrcLangExt lang, bool includeDefault)
Definition util.cpp:1244
QCString demangleCSharpGenericName(const QCString &name, const QCString &templArgs)
Definition util.cpp:6873

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 5406 of file classdef.cpp.

5407{
5408 switch (compoundType())
5409 {
5410 case Class: return CodeSymbolType::Class; break;
5411 case Struct: return CodeSymbolType::Struct; break;
5412 case Union: return CodeSymbolType::Union; break;
5413 case Interface: return CodeSymbolType::Interface; break;
5414 case Protocol: return CodeSymbolType::Protocol; break;
5415 case Category: return CodeSymbolType::Category; break;
5416 case Exception: return CodeSymbolType::Exception; break;
5417 case Service: return CodeSymbolType::Service; break;
5418 case Singleton: return CodeSymbolType::Singleton; break;
5419 }
5420 return CodeSymbolType::Class;
5421}
@ 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 5386 of file classdef.cpp.

5387{
5388 return m_collabFileName;
5389}

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 4977 of file classdef.cpp.

4978{
4979 return m_compType;
4980}

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 1347 of file classdef.cpp.

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

References m_memberGroups, and m_memberLists.

◆ containsOverload()

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

Implements ClassDef.

Definition at line 5320 of file classdef.cpp.

5321{
5322 AUTO_TRACE("name={}",md->name());
5323 const auto &mni = m_allMemberNameInfoLinkedMap.find(md->name());
5324 if (mni)
5325 {
5326 for (const auto &mi : *mni)
5327 {
5328 const MemberDef *classMd = mi->memberDef();
5329 const ArgumentList &classAl = classMd->argumentList();
5330 const ArgumentList &al = md->argumentList();
5331 bool found = matchArguments2(
5332 classMd->getOuterScope(),classMd->getFileDef(),classMd->typeString(),&classAl,
5333 md->getOuterScope(),md->getFileDef(),md->typeString(),&al,
5334 true,getLanguage()
5335 );
5336 if (found)
5337 {
5338 AUTO_TRACE_EXIT("true");
5339 return true;
5340 }
5341 }
5342 }
5343 AUTO_TRACE_EXIT("false");
5344 return false;
5345}
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:1966

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 4777 of file classdef.cpp.

4778{
4779 int totalCount=0;
4780 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4781 {
4782 if (lde->kind()==LayoutDocEntry::MemberDecl)
4783 {
4784 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4785 if (lmd && lmd->type!=MemberListType::Friends()) // friendship is not inherited
4786 {
4787 ClassDefSet visited;
4788 totalCount+=countInheritedDecMembers(lmd->type,this,TRUE,FALSE,visited);
4789 }
4790 }
4791 }
4792 //printf("countAdditionalInheritedMembers()=%d\n",totalCount);
4793 return totalCount;
4794}
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 1830 of file classdef.cpp.

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

References countInheritedByNodes(), and countInheritsNodes().

Referenced by writeInheritanceGraph().

◆ countInheritedByNodes()

int ClassDefImpl::countInheritedByNodes ( ) const
private

Definition at line 1808 of file classdef.cpp.

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

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 4720 of file classdef.cpp.

4723{
4724 int inhCount = 0;
4725 int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE);
4726 bool process = count>0;
4727 //printf("%s: countInheritedDecMembers: lt=%s process=%d count=%d invert=%d\n",
4728 // qPrint(name()),lt.to_string(),process,count,invert);
4729 if ((process^invert) || showAlways)
4730 {
4731 for (const auto &ibcd : m_inherits)
4732 {
4733 ClassDefMutable *icd = toClassDefMutable(ibcd.classDef);
4734 MemberListType lt1 = MemberListType::Invalid();
4735 MemberListType lt2 = MemberListType::Invalid();
4736 if (icd && icd->isLinkable())
4737 {
4738 convertProtectionLevel(lt,ibcd.prot,&lt1,&lt2);
4739 //printf("%s: convert %s->(%s,%s) prot=%d\n",
4740 // qPrint(icd->name()),lt.to_string(),lt1.to_string(),lt2.to_string(),ibcd.prot);
4741 if (visitedClasses.find(icd)==visitedClasses.end())
4742 {
4743 visitedClasses.insert(icd); // guard for multiple virtual inheritance
4744 if (!lt1.isInvalid())
4745 {
4746 inhCount+=icd->countMemberDeclarations(lt1,inheritedFrom,lt2,FALSE,TRUE,visitedClasses);
4747 }
4748 }
4749 }
4750 }
4751 }
4752 //printf("%s: count=%d\n",qPrint(name()),inhCount);
4753 return inhCount;
4754}
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:6179

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 1819 of file classdef.cpp.

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

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 4642 of file classdef.cpp.

4644{
4645 //printf("%s: countMemberDeclarations for %s and %s\n",qPrint(name()),lt.to_string(),lt2.to_string());
4646 int count=0;
4647 MemberList * ml = getMemberList(lt);
4648 MemberList * ml2 = getMemberList(lt2);
4649 if (getLanguage()!=SrcLangExt::VHDL) // use specific declarations function
4650 {
4651 if (ml)
4652 {
4653 count+=ml->numDecMembers(inheritedFrom);
4654 //printf("-> ml=%d\n",ml->numDecMembers());
4655 }
4656 if (ml2)
4657 {
4658 count+=ml2->numDecMembers(inheritedFrom);
4659 //printf("-> ml2=%d\n",ml2->numDecMembers());
4660 }
4661 // also include grouped members that have their own section in the class (see bug 722759)
4662 if (inheritedFrom)
4663 {
4664 for (const auto &mg : m_memberGroups)
4665 {
4666 count+=mg->countGroupedInheritedMembers(lt);
4667 if (!lt2.isInvalid()) count+=mg->countGroupedInheritedMembers(lt2);
4668 }
4669 }
4670 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
4671 if (!inlineInheritedMembers) // show inherited members as separate lists
4672 {
4673 count+=countInheritedDecMembers(lt,inheritedFrom,invert,showAlways,visitedClasses);
4674 }
4675 }
4676 //printf("-> %d\n",count);
4677 return count;
4678}
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 4706 of file classdef.cpp.

4707{
4708 for (auto &ml : m_memberLists)
4709 {
4710 ml->countDecMembers();
4711 ml->countDocMembers();
4712 }
4713 for (const auto &mg : m_memberGroups)
4714 {
4715 mg->countDecMembers();
4716 mg->countDocMembers();
4717 }
4718}

References m_memberGroups, and m_memberLists.

◆ countMembersIncludingGrouped()

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

Implements ClassDef.

Definition at line 4813 of file classdef.cpp.

4815{
4816 int count=0;
4817 MemberList *ml = getMemberList(lt);
4818 if (ml)
4819 {
4820 count=ml->countInheritableMembers(inheritedFrom);
4821 }
4822 //printf("%s:countMembersIncludingGrouped: count=%d\n",qPrint(name()),count);
4823 for (const auto &mg : m_memberGroups)
4824 {
4825 bool hasOwnSection = !mg->allMembersInSameSection() ||
4826 !m_subGrouping; // group is in its own section
4827 if ((additional && hasOwnSection) || (!additional && !hasOwnSection))
4828 {
4829 count+=mg->countGroupedInheritedMembers(lt);
4830 }
4831 }
4832 //printf("%s:countMembersIncludingGrouped(lt=%s,%s)=%d\n",
4833 // qPrint(name()),qPrint(lt.to_string()),ml?qPrint(ml->listType().to_string()):"<none>",count);
4834 return count;
4835}
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 862 of file classdef.cpp.

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

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 989 of file classdef.cpp.

990{
991 return makeDisplayName(this,includeScope);
992}
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 1363 of file classdef.cpp.

1364{
1365 for (const auto &mg : m_memberGroups)
1366 {
1367 mg->distributeMemberGroupDocumentation();
1368 }
1369}

References m_memberGroups.

◆ endMemberDeclarations()

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

Definition at line 2225 of file classdef.cpp.

2226{
2227 //printf("%s: ClassDefImpl::endMemberDeclarations()\n",qPrint(name()));
2228 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
2229 if (!inlineInheritedMembers && countAdditionalInheritedMembers()>0)
2230 {
2231 ol.startMemberHeader("inherited");
2233 ol.endMemberHeader();
2235 }
2236 ol.endMemberSections();
2237}
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 2209 of file classdef.cpp.

2210{
2211 //printf("%s: ClassDefImpl::endMemberDocumentation()\n",qPrint(name()));
2212 if (Config_getBool(SEPARATE_MEMBER_PAGES))
2213 {
2216 }
2217}
static bool suppressDocWarnings
Definition doxygen.h:132
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 4334 of file classdef.cpp.

4335{
4336 return m_innerClasses.find(name);
4337}

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

◆ findSectionsInDocumentation()

void ClassDefImpl::findSectionsInDocumentation ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 1371 of file classdef.cpp.

1372{
1376 for (const auto &mg : m_memberGroups)
1377 {
1378 mg->findSectionsInDocumentation(this);
1379 }
1380 for (auto &ml : m_memberLists)
1381 {
1382 if (!ml->listType().isDetailed())
1383 {
1384 ml->findSectionsInDocumentation(this);
1385 }
1386 }
1387}
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 1698 of file classdef.cpp.

1699{
1700 QCString result;
1701 SrcLangExt lang = getLanguage();
1702 size_t numFiles = m_files.size();
1703 if (lang==SrcLangExt::Fortran)
1704 {
1706 getLanguage()==SrcLangExt::ObjC && m_compType==Interface ? Class : m_compType,
1707 numFiles==1);
1708 }
1709 else if (isJavaEnum())
1710 {
1711 result = theTranslator->trEnumGeneratedFromFiles(numFiles==1);
1712 }
1713 else if (m_compType==Service)
1714 {
1715 result = theTranslator->trServiceGeneratedFromFiles(numFiles==1);
1716 }
1717 else if (m_compType==Singleton)
1718 {
1719 result = theTranslator->trSingletonGeneratedFromFiles(numFiles==1);
1720 }
1721 else
1722 {
1724 getLanguage()==SrcLangExt::ObjC && m_compType==Interface ? Class : m_compType,
1725 numFiles==1);
1726 }
1727 return result;
1728}
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 4972 of file classdef.cpp.

4973{
4974 return m_innerClasses;
4975}

References m_innerClasses.

◆ getExamples()

const ExampleList & ClassDefImpl::getExamples ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5366 of file classdef.cpp.

5367{
5368 return m_examples;
5369}

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 5027 of file classdef.cpp.

5028{
5029 return m_fileDef;
5030}

References m_fileDef.

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

◆ getInstanceOutputFileBase()

QCString ClassDefImpl::getInstanceOutputFileBase ( ) const
overridevirtual

Implements ClassDef.

Definition at line 4287 of file classdef.cpp.

4288{
4289 return m_fileName;
4290}

References m_fileName.

◆ getMemberByName()

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

Returns the member with the given name.

Implements ClassDef.

Definition at line 4561 of file classdef.cpp.

4562{
4563 const MemberDef *xmd = nullptr;
4564 const MemberNameInfo *mni = m_allMemberNameInfoLinkedMap.find(name);
4565 if (mni)
4566 {
4567 const int maxInheritanceDepth = 100000;
4568 int mdist=maxInheritanceDepth;
4569 for (auto &mi : *mni)
4570 {
4571 const ClassDef *mcd=mi->memberDef()->getClassDef();
4572 int m=minClassDistance(this,mcd);
4573 //printf("found member in %s linkable=%d m=%d\n",
4574 // qPrint(mcd->name()),mcd->isLinkable(),m);
4575 if (m<mdist)
4576 {
4577 mdist=m;
4578 xmd=mi->memberDef();
4579 }
4580 }
4581 }
4582 //printf("getMemberByName(%s)=%p\n",qPrint(name),xmd);
4583 return xmd;
4584}
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 5142 of file classdef.cpp.

5143{
5144 return m_memberGroups;
5145}

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 4591 of file classdef.cpp.

4592{
4593 for (auto &ml : m_memberLists)
4594 {
4595 if (ml->listType()==lt)
4596 {
4597 return ml.get();
4598 }
4599 }
4600 return nullptr;
4601}

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 984 of file classdef.cpp.

985{
987}

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 5137 of file classdef.cpp.

5138{
5139 return m_memberLists;
5140}

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 5032 of file classdef.cpp.

5033{
5034 return m_moduleDef;
5035}

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 4249 of file classdef.cpp.

4250{
4251 bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
4252 bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
4254 {
4255 Definition *scope=nullptr;
4256 if (inlineGroupedClasses && !partOfGroups().empty())
4257 {
4258 // point to the group that embeds this class
4259 return partOfGroups().front()->getOutputFileBase();
4260 }
4261 else if (inlineSimpleClasses && m_isSimple && !partOfGroups().empty())
4262 {
4263 // point to simple struct inside a group
4264 return partOfGroups().front()->getOutputFileBase();
4265 }
4266 else if (inlineSimpleClasses && m_isSimple && (scope=getOuterScope()))
4267 {
4268 if (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) // simple struct embedded in file
4269 {
4270 return getFileDef()->getOutputFileBase();
4271 }
4272 else if (scope->isLinkableInProject()) // simple struct embedded in other container (namespace/group/class)
4273 {
4274 return getOuterScope()->getOutputFileBase();
4275 }
4276 }
4277 }
4278 AUTO_TRACE("name='{}' m_templateMaster={} m_implicitTemplateInstance={}",name(),(void*)m_templateMaster,m_implicitTemplateInstance);
4280 {
4281 // point to the template of which this class is an instance
4282 return m_templateMaster->getOutputFileBase();
4283 }
4284 return m_fileName;
4285}
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:121

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 5315 of file classdef.cpp.

5316{
5317 return m_qualifiers;
5318}

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 4470 of file classdef.cpp.

4471{
4473 {
4474 return m_templateMaster->getReference();
4475 }
4476 else
4477 {
4479 }
4480}
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 4292 of file classdef.cpp.

4293{
4295 {
4296 return m_templateMaster->getSourceFileBase();
4297 }
4298 else
4299 {
4301 }
4302}
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 4413 of file classdef.cpp.

4414{
4415 return m_templBaseClassNames;
4416}

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 5037 of file classdef.cpp.

5038{
5039 return m_templateInstances;
5040}

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

4495{
4496 ArgumentLists result;
4497 Definition *d=getOuterScope();
4498 while (d && d->definitionType()==Definition::TypeClass)
4499 {
4500 result.insert(result.begin(),toClassDef(d)->templateArguments());
4501 d = d->getOuterScope();
4502 }
4503 if (!templateArguments().empty())
4504 {
4505 result.push_back(templateArguments());
4506 }
4507 return result;
4508}
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 4756 of file classdef.cpp.

4758{
4759 SrcLangExt lang = getLanguage();
4760 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4761 {
4762 if (lde->kind()==LayoutDocEntry::MemberDecl)
4763 {
4764 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4765 if (lmd && lmd->type==type)
4766 {
4767 title = lmd->title(lang);
4768 subtitle = lmd->subtitle(lang);
4769 return;
4770 }
4771 }
4772 }
4773 title="";
4774 subtitle="";
4775}
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 5428 of file classdef.cpp.

5429{
5431}

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

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

References DefinitionMixin< ClassDefMutable >::briefDescription(), Config_getBool, DefinitionMixin< ClassDefMutable >::documentation(), DefinitionMixin< ClassDefMutable >::getBodyDef(), DefinitionMixin< ClassDefMutable >::getStartBodyLine(), 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 3666 of file classdef.cpp.

3667{
3669}
bool hasDocumentation() const override

References DefinitionMixin< Base >::hasDocumentation().

Referenced by isLinkableInProject(), and isVisibleInHierarchy().

◆ hasExamples()

bool ClassDefImpl::hasExamples ( ) const
overridevirtual

Implements ClassDef.

Definition at line 3416 of file classdef.cpp.

3417{
3418 return !m_examples.empty();
3419}

References m_examples.

Referenced by writeDetailedDocumentationBody(), and writeDocumentationContents().

◆ hasInheritanceGraph()

CLASS_GRAPH_t ClassDefImpl::hasInheritanceGraph ( ) const
overridevirtual

Implements ClassDefMutable.

Definition at line 5401 of file classdef.cpp.

5402{
5404}

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 3533 of file classdef.cpp.

3534{
3535 return hasNonReferenceSuperClassRec(this,0);
3536}
static bool hasNonReferenceSuperClassRec(const ClassDef *cd, int level)

References hasNonReferenceSuperClassRec().

Referenced by isVisibleInHierarchy().

◆ hideDerivedVariablesInPython()

void ClassDefImpl::hideDerivedVariablesInPython ( ClassDefMutable * cls)
private

Definition at line 3974 of file classdef.cpp.

3975{
3976 //printf("hideDerivedVariableInPython()\n");
3977 if (bClass)
3978 {
3979 const MemberNameInfoLinkedMap &srcMnd = bClass->memberNameInfoLinkedMap();
3980 MemberNameInfoLinkedMap &dstMnd = m_allMemberNameInfoLinkedMap;
3981
3982 // recurse up the inheritance hierarchy
3983 for (const auto &bcd : bClass->baseClasses())
3984 {
3986 }
3987
3988 for (auto &srcMni : srcMnd) // for each member in a base class
3989 {
3990 //printf(" candidate(%s)\n",qPrint(srcMni->memberName()));
3991 MemberNameInfo *dstMni=dstMnd.find(srcMni->memberName());
3992 if (dstMni) // that is also in this class
3993 {
3995 //printf("%s member in %s and %s\n",qPrint(name()),qPrint(bClass->name()),qPrint(name()));
3996 for (it=dstMni->begin();it!=dstMni->end();)
3997 {
3998 MemberDefMutable *dstMd = toMemberDefMutable((*it)->memberDef());
3999 if (dstMd && dstMd->isVariable() && !dstMd->name().startsWith("__"))
4000 {
4001 //printf(" hiding member %s\n",qPrint(dstMd->name()));
4002 // hide a member variable if it is already defined in a base class, unless
4003 // it is a __private variable
4004 removeMemberFromLists(dstMd);
4005 it = dstMni->erase(it);
4006 }
4007 else
4008 {
4009 ++it;
4010 }
4011 }
4012 if (dstMni->empty()) // if the list has become empty, remove the entry from the dictionary
4013 {
4014 dstMnd.del(srcMni->memberName());
4015 }
4016 }
4017 }
4018 }
4019}
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 5062 of file classdef.cpp.

5063{
5064 return m_incInfo.get();
5065}

References m_incInfo.

◆ inheritanceGraphFileName()

QCString ClassDefImpl::inheritanceGraphFileName ( ) const
overridevirtual

returns the file name to use for the inheritance graph

Implements ClassDef.

Definition at line 5391 of file classdef.cpp.

5392{
5393 return m_inheritFileName;
5394}

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 995 of file classdef.cpp.

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

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 4402 of file classdef.cpp.

4403{
4404 AUTO_TRACE("this={} cd={} templSpec={}",name(),templateClass->name(),templSpec);
4405 m_templateInstances.emplace_back(templSpec,templateClass);
4406}

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

◆ insertMember()

void ClassDefImpl::insertMember ( MemberDef * md)
overridevirtual

Implements ClassDefMutable.

Definition at line 1341 of file classdef.cpp.

1342{
1344}
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 1004 of file classdef.cpp.

1006{
1007 //printf("*** insert sub class %s into %s\n",qPrint(cd->name()),qPrint(name()));
1008 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
1009 if (!extractPrivate && cd->protection()==Protection::Private) return;
1010 m_inheritedBy.emplace_back(cd,QCString(),p,s,t);
1011 m_isSimple = FALSE;
1012}
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 4339 of file classdef.cpp.

4341{
4342 freshInstance = FALSE;
4343 auto it = std::find_if(m_templateInstances.begin(),
4344 m_templateInstances.end(),
4345 [&templSpec](const auto &ti) { return templSpec==ti.templSpec; });
4346 ClassDefMutable *templateClass=nullptr;
4347 if (it!=m_templateInstances.end())
4348 {
4349 templateClass = toClassDefMutable((*it).classDef);
4350 }
4351 if (templateClass==nullptr)
4352 {
4353 QCString tcname = removeRedundantWhiteSpace(name()+templSpec);
4354 AUTO_TRACE("New template instance class name='{}' templSpec='{}' inside '{}' hidden={}",
4355 name(),templSpec,name(),isHidden());
4356
4357 ClassDef *foundCd = Doxygen::classLinkedMap->find(tcname);
4358 if (foundCd)
4359 {
4360 return foundCd;
4361 }
4362 templateClass =
4364 Doxygen::classLinkedMap->add(tcname,
4365 std::unique_ptr<ClassDef>(
4366 new ClassDefImpl(fileName,startLine,startColumn,tcname,ClassDef::Class))));
4367 if (templateClass)
4368 {
4369 templateClass->setTemplateMaster(this);
4370 ArgumentList tal = *stringToArgumentList(getLanguage(),templSpec);
4371 templateClass->setTemplateArguments(tal);
4372 templateClass->setOuterScope(getOuterScope());
4373 templateClass->setHidden(isHidden());
4374 templateClass->setArtificial(isArtificial());
4375 templateClass->setImplicitTemplateInstance(true);
4376 m_templateInstances.emplace_back(templSpec,templateClass);
4377
4378 // also add nested classes
4379 for (const auto &innerCd : m_innerClasses)
4380 {
4381 QCString innerName = tcname+"::"+innerCd->localName();
4382 ClassDefMutable *innerClass =
4384 Doxygen::classLinkedMap->add(innerName,
4385 std::unique_ptr<ClassDef>(
4386 new ClassDefImpl(fileName,startLine,startColumn,innerName,ClassDef::Class))));
4387 if (innerClass)
4388 {
4389 templateClass->addInnerCompound(innerClass);
4390 innerClass->setOuterScope(templateClass);
4391 innerClass->setHidden(isHidden());
4392 innerClass->setArtificial(TRUE);
4393 innerClass->setImplicitTemplateInstance(true);
4394 }
4395 }
4396 freshInstance=TRUE;
4397 }
4398 }
4399 return templateClass;
4400}
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 1391 of file classdef.cpp.

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

References m_files, m_templateInstances, and toClassDefMutable().

◆ internalInsertMember()

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

isReference()

Definition at line 1036 of file classdef.cpp.

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

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 5087 of file classdef.cpp.

5088{
5089 return m_isAbstract || m_spec.isAbstract();
5090}

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 4586 of file classdef.cpp.

4587{
4588 return md->getClassDef() && isBaseClass(md->getClassDef(),TRUE,QCString());
4589}
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 3676 of file classdef.cpp.

3677{
3678 int distance=0;
3679 //printf("isBaseClass(cd=%s) looking for %s templSpec=%s\n",qPrint(name()),qPrint(bcd->name()),qPrint(templSpec));
3680 for (const auto &bclass : baseClasses())
3681 {
3682 const ClassDef *ccd = bclass.classDef;
3683 if (!followInstances && ccd->templateMaster())
3684 {
3685 ccd=ccd->templateMaster();
3686 }
3687 if (ccd==bcd && (templSpec.isEmpty() || templSpec==bclass.templSpecifiers))
3688 {
3689 distance=1;
3690 break; // no shorter path possible
3691 }
3692 else
3693 {
3694 int d = ccd->isBaseClass(bcd,followInstances,templSpec);
3695 if (d>256)
3696 {
3697 err("Possible recursive class relation while inside {} and looking for base class {}\n",name(),bcd->name());
3698 return 0;
3699 }
3700 else if (d>0) // path found
3701 {
3702 if (distance==0 || d+1<distance) // update if no path found yet or shorter path found
3703 {
3704 distance=d+1;
3705 }
3706 }
3707 }
3708 }
3709 return distance;
3710}
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 5127 of file classdef.cpp.

5128{
5129 return getLanguage()==SrcLangExt::CSharp;
5130}

References DefinitionMixin< ClassDefMutable >::getLanguage().

◆ isEmbeddedInOuterScope()

bool ClassDefImpl::isEmbeddedInOuterScope ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5245 of file classdef.cpp.

5246{
5247 bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
5248 bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
5249
5250 Definition *container = getOuterScope();
5251
5252 bool containerLinkable =
5253 container &&
5254 (
5255 (container==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || // global class in documented file
5256 container->isLinkableInProject() // class in documented scope
5257 );
5258
5259 // inline because of INLINE_GROUPED_CLASSES=YES ?
5260 bool b1 = (inlineGroupedClasses && !partOfGroups().empty()); // a grouped class
5261 // inline because of INLINE_SIMPLE_STRUCTS=YES ?
5262 bool b2 = (inlineSimpleClasses && m_isSimple && // a simple class
5263 (containerLinkable || // in a documented container
5264 !partOfGroups().empty() // or part of a group
5265 )
5266 );
5267 //printf("%s::isEmbeddedInOuterScope(): inlineGroupedClasses=%d "
5268 // "inlineSimpleClasses=%d partOfGroups()=%p m_isSimple=%d "
5269 // "getOuterScope()=%s b1=%d b2=%d\n",
5270 // qPrint(name()),inlineGroupedClasses,inlineSimpleClasses,
5271 // partOfGroups().pointer(),m_isSimple,getOuterScope()?qPrint(getOuterScope()->name()):"<none>",b1,b2);
5272 return b1 || b2; // either reason will do
5273}

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 5347 of file classdef.cpp.

5348{
5349 QCString n = name();
5350 int si = n.find('(');
5351 int ei = n.find(')');
5352 bool b = ei>si && n.mid(si+1,ei-si-1).stripWhiteSpace().isEmpty();
5353 return b;
5354}

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 5092 of file classdef.cpp.

5093{
5094 return m_spec.isFinal();
5095}

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 5122 of file classdef.cpp.

5123{
5124 return getLanguage()==SrcLangExt::Fortran;
5125}

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 5107 of file classdef.cpp.

5108{
5109 return m_spec.isForwardDecl();
5110}

References m_spec.

◆ isImplicitTemplateInstance()

bool ClassDefImpl::isImplicitTemplateInstance ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5047 of file classdef.cpp.

5048{
5050}

References m_implicitTemplateInstance.

◆ isInterface()

bool ClassDefImpl::isInterface ( ) const
overridevirtual

Returns TRUE if this class represents an interface.

Implements ClassDef.

Definition at line 5112 of file classdef.cpp.

5113{
5114 return m_spec.isInterface();
5115}

References m_spec.

◆ isJavaEnum()

bool ClassDefImpl::isJavaEnum ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5293 of file classdef.cpp.

5294{
5295 return m_isJavaEnum;
5296}

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 3628 of file classdef.cpp.

3629{
3631 {
3632 return m_templateMaster->isLinkable();
3633 }
3634 else
3635 {
3636 return isReference() || isLinkableInProject();
3637 }
3638}
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 3596 of file classdef.cpp.

3597{
3598 bool extractLocal = Config_getBool(EXTRACT_LOCAL_CLASSES);
3599 bool extractStatic = Config_getBool(EXTRACT_STATIC);
3600 bool hideUndoc = Config_getBool(HIDE_UNDOC_CLASSES);
3602 {
3603 return m_templateMaster->isLinkableInProject();
3604 }
3605 else
3606 {
3607 //printf("%s::isLinkableInProject() conditions: artificial=%d hidden=%d anonymous=%d protection=%d local=%d docs=%d static=%d ref=%d\n",
3608 // qPrint(name()),
3609 // !isArtificial(),
3610 // !isHidden(),
3611 // !isAnonymous(),
3612 // m_prot,
3613 // !m_isLocal || extractLocal,
3614 // hasDocumentation() || m_tempArgs.hasTemplateDocumentation() || !hideUndoc,
3615 // !m_isStatic || extractStatic,
3616 // !isReference());
3617 return
3618 !isArtificial() && !isHidden() && /* not hidden */
3619 !isAnonymous() && /* not anonymous */
3620 protectionLevelVisible(m_prot) && /* private/internal */
3621 (!m_isLocal || extractLocal) && /* local */
3622 (hasDocumentation() || m_tempArgs.hasTemplateDocumentation() || !hideUndoc) && /* documented */
3623 (!m_isStatic || extractStatic) && /* static */
3624 !isReference(); /* not an external reference */
3625 }
3626}
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(), 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 4967 of file classdef.cpp.

4968{
4969 return m_isLocal;
4970}

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 5117 of file classdef.cpp.

5118{
5119 return getLanguage()==SrcLangExt::ObjC;
5120}

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 5102 of file classdef.cpp.

5103{
5104 return m_spec.isPublished();
5105}

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 4482 of file classdef.cpp.

4483{
4485 {
4486 return m_templateMaster->isReference();
4487 }
4488 else
4489 {
4491 }
4492}
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 5097 of file classdef.cpp.

5098{
5099 return m_spec.isSealed();
5100}

References m_spec.

Referenced by addClassAttributes().

◆ isSimple()

bool ClassDefImpl::isSimple ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5207 of file classdef.cpp.

5208{
5209 return m_isSimple;
5210}

References m_isSimple.

Referenced by internalInsertMember(), and writeInlineDocumentation().

◆ isSliceLocal()

bool ClassDefImpl::isSliceLocal ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5376 of file classdef.cpp.

5377{
5378 return m_spec.isLocal();
5379}

References m_spec.

Referenced by title(), and writeDeclarationLink().

◆ isSmartPointer()

const MemberDef * ClassDefImpl::isSmartPointer ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5212 of file classdef.cpp.

5213{
5214 return m_arrowOperator;
5215}

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 3714 of file classdef.cpp.

3715{
3716 bool found=FALSE;
3717 if (level>256)
3718 {
3719 err("Possible recursive class relation while inside {} and looking for derived class {}\n",name(),cd->name());
3720 return FALSE;
3721 }
3722 for (const auto &iscd : subClasses())
3723 {
3724 ClassDef *ccd=iscd.classDef;
3725 found = (ccd==cd) || ccd->isSubClass(cd,level+1);
3726 if (found) break;
3727 }
3728 return found;
3729}
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 5057 of file classdef.cpp.

5058{
5059 return !m_tempArgs.empty();
5060}

References m_tempArgs.

◆ isTemplateArgument()

bool ClassDefImpl::isTemplateArgument ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5082 of file classdef.cpp.

5083{
5084 return m_isTemplArg;
5085}

References m_isTemplArg.

◆ isUsedOnly()

bool ClassDefImpl::isUsedOnly ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5202 of file classdef.cpp.

5203{
5204 return m_usedOnly;
5205}

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 3642 of file classdef.cpp.

3643{
3644 bool allExternals = Config_getBool(ALLEXTERNALS);
3645 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
3646 bool extractStatic = Config_getBool(EXTRACT_STATIC);
3647
3648 return // show all classes or a subclass is visible
3649 ((allExternals && !isArtificial()) || hasNonReferenceSuperClass()) &&
3650 // and not an anonymous compound
3651 !isAnonymous() &&
3652 // and not privately inherited
3654 // documented or shown anyway or documentation is external
3655 (hasDocumentation() ||
3656 !hideUndocClasses ||
3657 (m_templateMaster && m_templateMaster->hasDocumentation()) ||
3658 isReference()
3659 ) &&
3660 // if this is an implicit template instance then it most be part of the inheritance hierarchy
3661 (!m_implicitTemplateInstance || !m_inherits.empty() || !m_inheritedBy.empty()) &&
3662 // is not part of an unnamed namespace or shown anyway
3663 (!m_isStatic || extractStatic);
3664}
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 5187 of file classdef.cpp.

5188{
5189 m_isTemplArg = b;
5190}

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 5002 of file classdef.cpp.

5003{
5005}

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 4067 of file classdef.cpp.

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

4027{
4028 if (m_membersMerged) return;
4029 if (getLanguage()==SrcLangExt::Python)
4030 {
4031 for (const auto &bcd : baseClasses())
4032 {
4033 ClassDefMutable *bClass=toClassDefMutable(bcd.classDef);
4035 }
4036 }
4037
4038 //printf("> %s::mergeMembers()\n",qPrint(name()));
4039
4041
4042 // first merge the members of the base class recursively
4043 for (const auto &bcd : baseClasses())
4044 {
4045 ClassDefMutable *bClass=toClassDefMutable(bcd.classDef);
4046 if (bClass)
4047 {
4048 // merge the members in the base class of this inheritance branch first
4049 bClass->mergeMembers();
4050 }
4051 }
4052
4053 // first merge the member that are not inherited via a virtual base class
4054 // (as this can end up reimplemented via multiple paths, see #10717 for examples)
4056 // then process the member that are inherited via a virtual base class to add the
4057 // ones that are not reimplemented via any path
4059
4060 //printf("< %s::mergeMembers()\n",qPrint(name()));
4061}
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 3740 of file classdef.cpp.

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

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 970 of file classdef.cpp.

971{
972 //printf("%s::moveTo(%s)\n",qPrint(name()),qPrint(scope->name()));
973 setOuterScope(scope);
975 {
976 m_fileDef = toFileDef(scope);
977 }
978 else if (scope->definitionType()==Definition::TypeModule)
979 {
980 m_moduleDef = toModuleDef(scope);
981 }
982}
void setOuterScope(Definition *def) override
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1956
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 5423 of file classdef.cpp.

5424{
5426}

References m_hasCollaborationGraph.

◆ overrideInheritanceGraph()

void ClassDefImpl::overrideInheritanceGraph ( CLASS_GRAPH_t e)
overridevirtual

Implements ClassDefMutable.

Definition at line 5396 of file classdef.cpp.

5397{
5399}

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 5017 of file classdef.cpp.

5018{
5019 return m_prot;
5020}

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 4510 of file classdef.cpp.

4512{
4513 return makeQualifiedNameWithTemplateParameters(this,actualParams,actualParamIndex);
4514}
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 5217 of file classdef.cpp.

5218{
5219 md->setMemberType(t);
5220 for (auto &ml : m_memberLists)
5221 {
5222 ml->remove(md);
5223 }
5224 insertMember(md);
5225}
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 5285 of file classdef.cpp.

5286{
5287 for (auto &ml : m_memberLists)
5288 {
5289 ml->remove(md);
5290 }
5291}

References m_memberLists.

Referenced by hideDerivedVariablesInPython().

◆ requiresClause()

QCString ClassDefImpl::requiresClause ( ) const
overridevirtual

Implements ClassDef.

Definition at line 3538 of file classdef.cpp.

3539{
3540 return m_requiresClause;
3541}

References m_requiresClause.

◆ setAnonymousEnumType()

void ClassDefImpl::setAnonymousEnumType ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4680 of file classdef.cpp.

4681{
4682 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4683 {
4684 if (lde->kind()==LayoutDocEntry::MemberDecl)
4685 {
4686 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4687 if (lmd)
4688 {
4689 MemberList * ml = getMemberList(lmd->type);
4690 if (ml)
4691 {
4693 }
4694 }
4695 }
4696 else if (lde->kind()==LayoutDocEntry::MemberGroups)
4697 {
4698 for (const auto &mg : m_memberGroups)
4699 {
4700 mg->setAnonymousEnumType();
4701 }
4702 }
4703 }
4704}
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 5192 of file classdef.cpp.

5193{
5194 m_categoryOf = cd;
5195}

References m_categoryOf.

◆ setClassName()

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

Implements ClassDefMutable.

Definition at line 4527 of file classdef.cpp.

4528{
4529 m_className = name;
4530}

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

◆ setClassSpecifier()

void ClassDefImpl::setClassSpecifier ( TypeSpecifier spec)
overridevirtual

Implements ClassDefMutable.

Definition at line 5298 of file classdef.cpp.

5299{
5300 m_spec = spec;
5301}

References m_spec.

◆ setCompoundType()

void ClassDefImpl::setCompoundType ( CompoundType t)
overridevirtual

Implements ClassDefMutable.

Definition at line 5176 of file classdef.cpp.

5177{
5178 m_compType = t;
5179}

References m_compType.

◆ setFileDef()

void ClassDefImpl::setFileDef ( FileDef * fd)
overridevirtual

Implements ClassDefMutable.

Definition at line 5147 of file classdef.cpp.

5148{
5149 m_fileDef = fd;
5150}

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 4304 of file classdef.cpp.

4305{
4306 gd->addClass(this);
4307 //printf("ClassDefImpl::setGroupDefForAllMembers(%s)\n",qPrint(gd->name()));
4308 for (auto &mni : m_allMemberNameInfoLinkedMap)
4309 {
4310 for (auto &mi : *mni)
4311 {
4312 MemberDefMutable *md = toMemberDefMutable(mi->memberDef());
4313 if (md)
4314 {
4315 md->setGroupDef(gd,pri,fileName,startLine,hasDocs);
4316 gd->insertMember(md,TRUE);
4317 ClassDefMutable *innerClass = toClassDefMutable(md->getClassDefOfAnonymousType());
4318 if (innerClass) innerClass->setGroupDefForAllMembers(gd,pri,fileName,startLine,hasDocs);
4319 }
4320 }
4321 }
4322}
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 5052 of file classdef.cpp.

5053{
5055}

References m_implicitTemplateInstance.

◆ setIncludeFile()

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

Implements ClassDefMutable.

Definition at line 1425 of file classdef.cpp.

1427{
1428 //printf("ClassDefImpl::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
1429 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
1430 if ((!includeName.isEmpty() && m_incInfo->includeName.isEmpty()) ||
1431 (fd!=nullptr && m_incInfo->fileDef==nullptr)
1432 )
1433 {
1434 //printf("Setting file info\n");
1435 m_incInfo->fileDef = fd;
1436 m_incInfo->includeName = includeName;
1438 }
1439 if (force && !includeName.isEmpty())
1440 {
1441 m_incInfo->includeName = includeName;
1443 }
1444}
@ 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 5171 of file classdef.cpp.

5172{
5173 m_isStatic=b;
5174}

References m_isStatic.

◆ setMetaData()

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

Implements ClassDefMutable.

Definition at line 5381 of file classdef.cpp.

5382{
5383 m_metaData = md;
5384}

References m_metaData.

◆ setModuleDef()

void ClassDefImpl::setModuleDef ( ModuleDef * mod)
overridevirtual

Implements ClassDefMutable.

Definition at line 5152 of file classdef.cpp.

5153{
5154 m_moduleDef = mod;
5155}

References m_moduleDef.

◆ setProtection()

void ClassDefImpl::setProtection ( Protection p)
overridevirtual

Implements ClassDefMutable.

Definition at line 5162 of file classdef.cpp.

5163{
5164 m_prot=p;
5165 if (getLanguage()==SrcLangExt::VHDL && VhdlDocGen::convert(p)==VhdlDocGen::ARCHITECTURECLASS)
5166 {
5167 m_className = name();
5168 }
5169}
@ 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 3543 of file classdef.cpp.

3544{
3545 m_requiresClause = req;
3546}

References m_requiresClause.

◆ setSubGrouping()

void ClassDefImpl::setSubGrouping ( bool enabled)
overridevirtual

Implements ClassDefMutable.

Definition at line 5157 of file classdef.cpp.

5158{
5159 m_subGrouping = enabled;
5160}

References m_subGrouping.

◆ setTagLessReference()

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

Implements ClassDefMutable.

Definition at line 5280 of file classdef.cpp.

5281{
5282 m_tagLessRef = cd;
5283}

References m_tagLessRef.

◆ setTemplateArguments()

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

Implements ClassDefMutable.

Definition at line 3490 of file classdef.cpp.

3491{
3492 m_tempArgs = al;
3493}

References m_tempArgs.

◆ setTemplateBaseClassNames()

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

Implements ClassDefMutable.

Definition at line 4408 of file classdef.cpp.

4409{
4410 m_templBaseClassNames = templateNames;
4411}

References m_templBaseClassNames.

◆ setTemplateMaster()

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

Implements ClassDefMutable.

Definition at line 5181 of file classdef.cpp.

5182{
5183 assert(tm!=this);
5185}

References m_templateMaster.

◆ setTypeConstraints()

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

Implements ClassDefMutable.

Definition at line 3485 of file classdef.cpp.

3486{
3487 m_typeConstraints = al;
3488}

References m_typeConstraints.

◆ setUsedOnly()

void ClassDefImpl::setUsedOnly ( bool b)
overridevirtual

Implements ClassDefMutable.

Definition at line 5197 of file classdef.cpp.

5198{
5199 m_usedOnly = b;
5200}

References m_usedOnly.

◆ showUsedFiles()

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

Definition at line 1730 of file classdef.cpp.

1731{
1732 ol.pushGeneratorState();
1734
1735
1736 ol.writeRuler();
1737 ol.pushGeneratorState();
1739 ol.startParagraph();
1741 ol.endParagraph();
1742 ol.popGeneratorState();
1746
1747 bool first=TRUE;
1748 for (const auto &fd : m_files)
1749 {
1750 if (first)
1751 {
1752 first=FALSE;
1753 ol.startItemList();
1754 }
1755
1756 ol.startItemListItem();
1757 QCString path=fd->getPath();
1758 if (Config_getBool(FULL_PATH_NAMES))
1759 {
1760 ol.docify(stripFromPath(path));
1761 }
1762
1763 QCString fname = fd->name();
1764 if (!fd->getVersion().isEmpty()) // append version if available
1765 {
1766 fname += " (" + fd->getVersion() + ")";
1767 }
1768
1769 // for HTML
1770 ol.pushGeneratorState();
1772 if (fd->generateSourceFile())
1773 {
1774 ol.writeObjectLink(QCString(),fd->getSourceFileBase(),QCString(),fname);
1775 }
1776 else if (fd->isLinkable())
1777 {
1778 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fname);
1779 }
1780 else
1781 {
1782 ol.startBold();
1783 ol.docify(fname);
1784 ol.endBold();
1785 }
1786 ol.popGeneratorState();
1787
1788 // for other output formats
1789 ol.pushGeneratorState();
1791 if (fd->isLinkable())
1792 {
1793 ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fname);
1794 }
1795 else
1796 {
1797 ol.docify(fname);
1798 }
1799 ol.popGeneratorState();
1800
1801 ol.endItemListItem();
1802 }
1803 if (!first) ol.endItemList();
1804
1805 ol.popGeneratorState();
1806}
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:300

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 5007 of file classdef.cpp.

5008{
5009 std::stable_sort(m_allMemberNameInfoLinkedMap.begin(),
5011 [](const auto &m1,const auto &m2)
5012 {
5013 return qstricmp_sort(m1->memberName(),m2->memberName())<0;
5014 });
5015}

References m_allMemberNameInfoLinkedMap.

◆ sortMemberLists()

void ClassDefImpl::sortMemberLists ( )
overridevirtual

Implements ClassDefMutable.

Definition at line 4623 of file classdef.cpp.

4624{
4625 for (auto &ml : m_memberLists)
4626 {
4627 if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
4628 }
4629 if (Config_getBool(SORT_BRIEF_DOCS))
4630 {
4631 std::stable_sort(m_innerClasses.begin(),
4632 m_innerClasses.end(),
4633 [](const auto &c1,const auto &c2)
4634 {
4635 return Config_getBool(SORT_BY_SCOPE_NAME) ?
4636 qstricmp_sort(c1->name(), c2->name() )<0 :
4637 qstricmp_sort(c1->className(), c2->className())<0 ;
4638 });
4639 }
4640}

References Config_getBool, FALSE, m_innerClasses, and m_memberLists.

◆ startMemberDeclarations()

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

Definition at line 2219 of file classdef.cpp.

2220{
2221 //printf("%s: ClassDefImpl::startMemberDeclarations()\n",qPrint(name()));
2223}
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 2199 of file classdef.cpp.

2200{
2201 //printf("%s: ClassDefImpl::startMemberDocumentation()\n",qPrint(name()));
2202 if (Config_getBool(SEPARATE_MEMBER_PAGES))
2203 {
2206 }
2207}

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 4992 of file classdef.cpp.

4993{
4994 return m_inheritedBy;
4995}

References m_inheritedBy.

Referenced by isSubClass().

◆ subGrouping()

bool ClassDefImpl::subGrouping ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5371 of file classdef.cpp.

5372{
5373 return m_subGrouping;
5374}

References m_subGrouping.

◆ tagLessReference()

const ClassDef * ClassDefImpl::tagLessReference ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5275 of file classdef.cpp.

5276{
5277 return m_tagLessRef;
5278}

References m_tagLessRef.

◆ templateArguments()

const ArgumentList & ClassDefImpl::templateArguments ( ) const
overridevirtual

Returns the template arguments of this class.

Implements ClassDef.

Definition at line 5022 of file classdef.cpp.

5023{
5024 return m_tempArgs;
5025}

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 5042 of file classdef.cpp.

5043{
5044 return m_templateMaster;
5045}

References m_templateMaster.

◆ templateTypeConstraints()

const ConstraintClassList & ClassDefImpl::templateTypeConstraints ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5077 of file classdef.cpp.

5078{
5079 return m_constraintClassList;
5080}

References m_constraintClassList.

◆ title()

QCString ClassDefImpl::title ( ) const
overridevirtual

Implements ClassDef.

Definition at line 2906 of file classdef.cpp.

2907{
2908 QCString pageTitle;
2909 SrcLangExt lang = getLanguage();
2910
2911 auto getReferenceTitle = [this](std::function<QCString()> translateFunc) -> QCString
2912 {
2913 return Config_getBool(HIDE_COMPOUND_REFERENCE) ? displayName() : translateFunc();
2914 };
2915
2916 if (lang==SrcLangExt::Fortran)
2917 {
2918 pageTitle = getReferenceTitle([this](){
2920 });
2921 }
2922 else if (lang==SrcLangExt::Slice)
2923 {
2924 pageTitle = getReferenceTitle([this](){
2926 });
2927 }
2928 else if (lang==SrcLangExt::VHDL)
2929 {
2930 pageTitle = getReferenceTitle([this](){
2932 });
2933 }
2934 else if (isJavaEnum())
2935 {
2936 pageTitle = getReferenceTitle([this](){
2938 });
2939 }
2940 else if (m_compType==Service)
2941 {
2942 pageTitle = getReferenceTitle([this](){
2944 });
2945 }
2946 else if (m_compType==Singleton)
2947 {
2948 pageTitle = getReferenceTitle([this](){
2950 });
2951 }
2952 else
2953 {
2954 pageTitle = getReferenceTitle([this](){
2956 m_compType == Interface && getLanguage()==SrcLangExt::ObjC ? Class : m_compType,
2957 !m_tempArgs.empty());
2958 });
2959 }
2960 return pageTitle;
2961}
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 *)

References ClassDef::Class, Config_getBool, displayName(), VhdlDocGen::getClassTitle(), DefinitionMixin< ClassDefMutable >::getLanguage(), ClassDef::Interface, isJavaEnum(), isSliceLocal(), m_compType, 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 5361 of file classdef.cpp.

5362{
5363 return m_typeConstraints;
5364}

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 4987 of file classdef.cpp.

4988{
4989 m_inherits = bcd;
4990}

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 4997 of file classdef.cpp.

4998{
4999 m_inheritedBy = bcd;
5000}

References m_inheritedBy.

◆ usedByImplementationClasses()

const UsesClassList & ClassDefImpl::usedByImplementationClasses ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5072 of file classdef.cpp.

5073{
5074 return m_usedByImplClassList;
5075}

References m_usedByImplClassList.

◆ usedFiles()

const FileList & ClassDefImpl::usedFiles ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5356 of file classdef.cpp.

5357{
5358 return m_files;
5359}

References m_files.

◆ usedImplementationClasses()

const UsesClassList & ClassDefImpl::usedImplementationClasses ( ) const
overridevirtual

Implements ClassDef.

Definition at line 5067 of file classdef.cpp.

5068{
5069 return m_usesImplClassList;
5070}

References m_usesImplClassList.

◆ visibleInParentsDeclList()

bool ClassDefImpl::visibleInParentsDeclList ( ) const
overridevirtual

show this class in the declaration section of its parent?

Implements ClassDef.

Definition at line 2596 of file classdef.cpp.

2597{
2598 bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
2599 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
2600 bool extractLocalClasses = Config_getBool(EXTRACT_LOCAL_CLASSES);
2601 bool linkable = isLinkable();
2602 return (!isAnonymous() && !isExtension() &&
2603 (protection()!=Protection::Private || extractPrivate) &&
2604 (linkable || (!hideUndocClasses && (!isLocal() || extractLocalClasses)))
2605 );
2606}
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 4796 of file classdef.cpp.

4797{
4798 //printf("**** writeAdditionalInheritedMembers()\n");
4799 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
4800 {
4801 if (lde->kind()==LayoutDocEntry::MemberDecl)
4802 {
4803 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
4804 if (lmd && lmd->type!=MemberListType::Friends())
4805 {
4806 ClassDefSet visited;
4808 }
4809 }
4810 }
4811}
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 2239 of file classdef.cpp.

2240{
2241 ol.pushGeneratorState();
2243 ol.writeString("\n");
2244 ol.startGroupHeader();
2246 ol.endGroupHeader();
2248 ol.popGeneratorState();
2249}
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 1555 of file classdef.cpp.

1556{
1557 if (hasBriefDescription())
1558 {
1559 ol.startParagraph();
1560 ol.pushGeneratorState();
1562 ol.writeString(" - ");
1563 ol.popGeneratorState();
1565 briefLine(),
1566 this,
1567 nullptr,
1569 DocOptions()
1570 .setIndexWords(true)
1571 .setSingleLine(true));
1572 ol.pushGeneratorState();
1574 ol.writeString(" \n");
1576 ol.popGeneratorState();
1577
1578 if (hasDetailedDescription() || exampleFlag)
1579 {
1580 writeMoreLink(ol,anchor());
1581 }
1582
1583 ol.endParagraph();
1584 }
1585 ol.writeSynopsis();
1586}
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 1970 of file classdef.cpp.

1971{
1972 if (Config_getBool(HAVE_DOT) && m_hasCollaborationGraph /*&& Config_getBool(COLLABORATION_GRAPH)*/)
1973 {
1974 DotClassGraph usageImplGraph(this,GraphType::Collaboration);
1975 if (usageImplGraph.isTooBig())
1976 {
1977 warn_uncond("Collaboration graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
1978 name(), usageImplGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
1979 }
1980 else if (!usageImplGraph.isTrivial())
1981 {
1982 ol.pushGeneratorState();
1984 ol.startDotGraph();
1986 ol.endDotGraph(usageImplGraph);
1987 ol.popGeneratorState();
1988 }
1989 }
1990}
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 3551 of file classdef.cpp.

3553{
3554 //printf("ClassName='%s' inGroup=%d\n",qPrint(name()),inGroup);
3555
3557 QCString cn = displayName(FALSE);
3558 if (!cn.isEmpty())
3559 {
3560 ol.docify(" ");
3561 if (md && isLinkable())
3562 {
3563 ol.writeObjectLink(QCString(),QCString(),md->anchor(),cn);
3564 }
3565 else
3566 {
3567 ol.startBold();
3568 ol.docify(cn);
3569 ol.endBold();
3570 }
3571 }
3572 ol.docify(" {");
3574 ol.endMemberDeclaration(md ? md->anchor() : QCString(),inheritId);
3575
3576 // write user defined member groups
3577 for (const auto &mg : m_memberGroups)
3578 {
3579 mg->writePlainDeclarations(ol,inGroup,this,nullptr,nullptr,nullptr,nullptr,indentLevel,inheritedFrom,inheritId);
3580 }
3581
3582 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
3583 {
3584 if (lde->kind()==LayoutDocEntry::MemberDecl)
3585 {
3586 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
3587 if (lmd)
3588 {
3589 writePlainMemberDeclaration(ol,lmd->type,inGroup,indentLevel,inheritedFrom,inheritId);
3590 }
3591 }
3592 }
3593}
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 2608 of file classdef.cpp.

2609{
2610 //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
2611 //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
2612 bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE);
2613 SrcLangExt lang = getLanguage();
2615 {
2616 if (!found) // first class
2617 {
2618 if (sliceOpt)
2619 {
2620 if (compoundType()==Interface)
2621 {
2622 ol.startMemberHeader("interfaces");
2623 }
2624 else if (compoundType()==Struct)
2625 {
2626 ol.startMemberHeader("structs");
2627 }
2628 else if (compoundType()==Exception)
2629 {
2630 ol.startMemberHeader("exceptions");
2631 }
2632 else // compoundType==Class
2633 {
2634 ol.startMemberHeader("nested-classes");
2635 }
2636 }
2637 else // non-Slice optimization: single header for class/struct/..
2638 {
2639 ol.startMemberHeader("nested-classes");
2640 }
2641 if (!header.isEmpty())
2642 {
2643 ol.parseText(header);
2644 }
2645 else if (lang==SrcLangExt::VHDL)
2646 {
2648 }
2649 else
2650 {
2651 ol.parseText(lang==SrcLangExt::Fortran ?
2654 }
2655 ol.endMemberHeader();
2656 ol.startMemberList();
2657 found=TRUE;
2658 }
2660 QCString ctype = compoundTypeString();
2661 QCString cname = displayName(!localNames);
2662 QCString anc = anchor();
2663 if (anc.isEmpty()) anc = cname; else anc.prepend(cname+"_");
2665
2666 if (lang!=SrcLangExt::VHDL) // for VHDL we swap the name and the type
2667 {
2668 if (isSliceLocal())
2669 {
2670 ol.writeString("local ");
2671 }
2672 ol.writeString(ctype);
2673 ol.writeString(" ");
2674 ol.insertMemberAlign();
2675 }
2676 if (isLinkable())
2677 {
2680 anchor(),
2681 cname
2682 );
2683 }
2684 else
2685 {
2686 ol.startBold();
2687 ol.docify(cname);
2688 ol.endBold();
2689 }
2690 if (lang==SrcLangExt::VHDL) // now write the type
2691 {
2692 ol.writeString(" ");
2693 ol.insertMemberAlign();
2695 }
2697
2698 // add the brief description if available
2699 if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
2700 {
2701 auto parser { createDocParser() };
2702 auto ast { validatingParseDoc(*parser.get(),
2703 briefFile(),
2704 briefLine(),
2705 this,
2706 nullptr,
2708 DocOptions()
2709 .setSingleLine(true))
2710 };
2711 if (!ast->isEmpty())
2712 {
2714 ol.writeDoc(ast.get(),this,nullptr);
2715 if (isLinkableInProject())
2716 {
2717 writeMoreLink(ol,anchor());
2718 }
2720 }
2721 }
2722 ol.endMemberDeclaration(anchor(),QCString());
2723 }
2724}
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 1662 of file classdef.cpp.

1664{
1665 if (hasDetailedDescription() || exampleFlag)
1666 {
1667 ol.pushGeneratorState();
1669 ol.writeRuler();
1670 ol.popGeneratorState();
1671
1672 ol.pushGeneratorState();
1674 ol.writeAnchor(QCString(),anchor.isEmpty() ? QCString("details") : anchor);
1675 ol.popGeneratorState();
1676
1677 if (!anchor.isEmpty())
1678 {
1679 ol.pushGeneratorState();
1683 ol.popGeneratorState();
1684 }
1685
1686 ol.startGroupHeader("details");
1687 ol.parseText(title);
1688 ol.endGroupHeader();
1689
1691 }
1692 else
1693 {
1694 //writeTemplateSpec(ol,this,pageType);
1695 }
1696}
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 1588 of file classdef.cpp.

1589{
1590 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
1591
1592 ol.startTextBlock();
1593
1594 if (getLanguage()==SrcLangExt::Cpp)
1595 {
1597 }
1598
1599 // repeat brief description
1600 if (!briefDescription().isEmpty() && repeatBrief)
1601 {
1603 briefLine(),
1604 this,
1605 nullptr,
1607 DocOptions());
1608 }
1609 if (!briefDescription().isEmpty() && repeatBrief &&
1610 !documentation().isEmpty())
1611 {
1612 ol.pushGeneratorState();
1614 ol.writeString("\n\n");
1615 ol.popGeneratorState();
1616 }
1617 // write documentation
1618 if (!documentation().isEmpty())
1619 {
1620 ol.generateDoc(docFile(),
1621 docLine(),
1622 this,
1623 nullptr,
1624 documentation(),
1625 DocOptions()
1626 .setIndexWords(true));
1627 }
1628 // write type constraints
1630
1631 ol.generateDoc(
1632 docFile(),docLine(),
1633 this,
1634 nullptr, // memberDef
1636 DocOptions()
1637 .setIndexWords(true));
1638
1639 // write examples
1640 if (hasExamples())
1641 {
1642 ol.startExamples();
1643 ol.startDescForItem();
1645 ol.endDescForItem();
1646 ol.endExamples();
1647 }
1648 writeSourceDef(ol);
1649 ol.endTextBlock();
1650}
void writeTemplateSpec(OutputList &ol, const Definition *d, const QCString &type, SrcLangExt lang) const
bool hasExamples() const override
void writeSourceDef(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:5395
QCString inlineTemplateArgListToDoc(const ArgumentList &al)
Definition util.cpp:1172
void writeExamples(OutputList &ol, const ExampleList &list)
Definition util.cpp:1125

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(), Html, inlineTemplateArgListToDoc(), m_examples, m_tempArgs, m_typeConstraints, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startDescForItem(), OutputList::startExamples(), OutputList::startTextBlock(), writeExamples(), 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 2964 of file classdef.cpp.

2965{
2966 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
2967 //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
2968 //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
2969 bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE);
2970 QCString pageTitle = title();
2971
2973 if (sliceOpt)
2974 {
2975 if (compoundType()==Interface)
2976 {
2978 }
2979 else if (compoundType()==Struct)
2980 {
2982 }
2983 else if (compoundType()==Exception)
2984 {
2986 }
2987 else
2988 {
2990 }
2991 }
2992 else
2993 {
2995 }
2996
2997 AUTO_TRACE("name='{}' getOutputFileBase='{}'",name(),getOutputFileBase());
2998 bool hasAllMembersLink=false;
2999 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
3000 {
3001 if (lde->kind()==LayoutDocEntry::ClassAllMembersLink)
3002 {
3003 hasAllMembersLink = true;
3004 break;
3005 }
3006 }
3007 QCString memListFile;
3008 if (hasAllMembersLink && !m_allMemberNameInfoLinkedMap.empty() && !Config_getBool(OPTIMIZE_OUTPUT_FOR_C))
3009 {
3010 memListFile = getMemberListFileName();
3011 }
3012 startFile(ol,getOutputFileBase(),false,name(),pageTitle,hli,!generateTreeView,QCString(),0,memListFile);
3013 if (!generateTreeView)
3014 {
3016 {
3018 }
3019 ol.endQuickIndices();
3020 }
3021
3022 startTitle(ol,getOutputFileBase(),this);
3023 ol.parseText(pageTitle);
3025 addGroupListToTitle(ol,this);
3027 writeDocumentationContents(ol,pageTitle);
3028
3029 endFileWithNavPath(ol,this);
3030
3031 if (Config_getBool(SEPARATE_MEMBER_PAGES))
3032 {
3033 writeMemberPages(ol);
3034 }
3035}
void addClassAttributes(OutputList &ol) const
void writeMemberPages(OutputList &ol) const override
QCString getMemberListFileName() const override
Definition classdef.cpp:984
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:384
void endTitle(OutputList &ol, const QCString &fileName, const QCString &name)
Definition index.cpp:394
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:401
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
Definition index.cpp:448
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:4853

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 2760 of file classdef.cpp.

2761{
2762 ol.startContents();
2763
2764 QCString pageType = " ";
2765 pageType += compoundTypeString();
2766
2767 bool exampleFlag=hasExamples();
2768
2769 //---------------------------------------- start flexible part -------------------------------
2770
2771 SrcLangExt lang = getLanguage();
2772
2773 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
2774 {
2775 switch (lde->kind())
2776 {
2777 case LayoutDocEntry::BriefDesc:
2778 writeBriefDescription(ol,exampleFlag);
2779 break;
2780 case LayoutDocEntry::ClassIncludes:
2781 if (lang==SrcLangExt::Slice)
2782 {
2784 }
2785 else
2786 {
2788 }
2789 break;
2790 case LayoutDocEntry::ClassInheritanceGraph:
2792 break;
2793 case LayoutDocEntry::ClassCollaborationGraph:
2795 break;
2796 case LayoutDocEntry::ClassAllMembersLink:
2797 //writeAllMembersLink(ol); // this is now part of the summary links
2798 break;
2799 case LayoutDocEntry::MemberDeclStart:
2801 break;
2802 case LayoutDocEntry::MemberGroups:
2804 break;
2805 case LayoutDocEntry::MemberDecl:
2806 {
2807 ClassDefSet visitedClasses;
2808 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
2809 if (lmd)
2810 {
2811 writeMemberDeclarations(ol,visitedClasses,lmd->type,lmd->title(lang),lmd->subtitle(lang));
2812 }
2813 }
2814 break;
2815 case LayoutDocEntry::ClassNestedClasses:
2816 {
2817 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
2818 if (ls)
2819 {
2820 writeNestedClasses(ol,ls->title(lang));
2821 }
2822 }
2823 break;
2824 case LayoutDocEntry::MemberDeclEnd:
2826 break;
2827 case LayoutDocEntry::DetailedDesc:
2828 {
2829 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
2830 if (ls)
2831 {
2832 writeDetailedDescription(ol,pageType,exampleFlag,ls->title(lang));
2833 }
2834 }
2835 break;
2836 case LayoutDocEntry::MemberDefStart:
2838 break;
2839 case LayoutDocEntry::ClassInlineClasses:
2841 break;
2842 case LayoutDocEntry::MemberDef:
2843 {
2844 const LayoutDocEntryMemberDef *lmd = dynamic_cast<const LayoutDocEntryMemberDef*>(lde.get());
2845 if (lmd)
2846 {
2847 writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
2848 }
2849 }
2850 break;
2851 case LayoutDocEntry::MemberDefEnd:
2853 break;
2854 case LayoutDocEntry::ClassUsedFiles:
2855 showUsedFiles(ol);
2856 break;
2857 case LayoutDocEntry::AuthorSection:
2859 break;
2860 case LayoutDocEntry::NamespaceNestedNamespaces:
2861 case LayoutDocEntry::NamespaceNestedConstantGroups:
2862 case LayoutDocEntry::NamespaceClasses:
2863 case LayoutDocEntry::NamespaceConcepts:
2864 case LayoutDocEntry::NamespaceInterfaces:
2865 case LayoutDocEntry::NamespaceStructs:
2866 case LayoutDocEntry::NamespaceExceptions:
2867 case LayoutDocEntry::NamespaceInlineClasses:
2868 case LayoutDocEntry::ConceptDefinition:
2869 case LayoutDocEntry::FileClasses:
2870 case LayoutDocEntry::FileConcepts:
2871 case LayoutDocEntry::FileInterfaces:
2872 case LayoutDocEntry::FileStructs:
2873 case LayoutDocEntry::FileExceptions:
2874 case LayoutDocEntry::FileNamespaces:
2875 case LayoutDocEntry::FileConstantGroups:
2876 case LayoutDocEntry::FileIncludes:
2877 case LayoutDocEntry::FileIncludeGraph:
2878 case LayoutDocEntry::FileIncludedByGraph:
2879 case LayoutDocEntry::FileSourceLink:
2880 case LayoutDocEntry::FileInlineClasses:
2881 case LayoutDocEntry::GroupClasses:
2882 case LayoutDocEntry::GroupConcepts:
2883 case LayoutDocEntry::GroupModules:
2884 case LayoutDocEntry::GroupInlineClasses:
2885 case LayoutDocEntry::GroupNamespaces:
2886 case LayoutDocEntry::GroupDirs:
2887 case LayoutDocEntry::GroupNestedGroups:
2888 case LayoutDocEntry::GroupFiles:
2889 case LayoutDocEntry::GroupGraph:
2890 case LayoutDocEntry::GroupPageDocs:
2891 case LayoutDocEntry::ModuleExports:
2892 case LayoutDocEntry::ModuleClasses:
2893 case LayoutDocEntry::ModuleConcepts:
2894 case LayoutDocEntry::ModuleUsedFiles:
2895 case LayoutDocEntry::DirSubDirs:
2896 case LayoutDocEntry::DirFiles:
2897 case LayoutDocEntry::DirGraph:
2898 err("Internal inconsistency: member '{}' should not be part of LayoutDocManager::Class entry list\n",lde->entryToString());
2899 break;
2900 }
2901 }
2902
2903 ol.endContents();
2904}
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 3102 of file classdef.cpp.

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

References m_innerClasses, msg, and protectionLevelVisible().

◆ writeIncludeFiles()

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

Definition at line 2134 of file classdef.cpp.

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

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 1993 of file classdef.cpp.

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

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 1835 of file classdef.cpp.

1836{
1837 bool haveDot = Config_getBool(HAVE_DOT);
1838 auto classGraph = m_typeInheritanceGraph;
1839
1840 if (classGraph == CLASS_GRAPH_t::NO) return;
1841 // count direct inheritance relations
1842 int count=countInheritanceNodes();
1843
1844 bool renderDiagram = FALSE;
1845 if (haveDot && (classGraph==CLASS_GRAPH_t::YES || classGraph==CLASS_GRAPH_t::GRAPH))
1846 // write class diagram using dot
1847 {
1848 DotClassGraph inheritanceGraph(this,GraphType::Inheritance);
1849 if (inheritanceGraph.isTooBig())
1850 {
1851 warn_uncond("Inheritance graph for '{}' not generated, too many nodes ({}), threshold is {}. Consider increasing DOT_GRAPH_MAX_NODES.\n",
1852 name(), inheritanceGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
1853 }
1854 else if (!inheritanceGraph.isTrivial())
1855 {
1856 ol.pushGeneratorState();
1858 ol.startDotGraph();
1860 ol.endDotGraph(inheritanceGraph);
1861 ol.popGeneratorState();
1862 renderDiagram = TRUE;
1863 }
1864 }
1865 else if ((classGraph==CLASS_GRAPH_t::YES || classGraph==CLASS_GRAPH_t::GRAPH || classGraph==CLASS_GRAPH_t::BUILTIN) && count>0)
1866 // write class diagram using built-in generator
1867 {
1868 ClassDiagram diagram(this); // create a diagram of this class.
1869 ol.startClassDiagram();
1874 renderDiagram = TRUE;
1875 }
1876
1877 if (renderDiagram) // if we already show the inheritance relations graphically,
1878 // then hide the text version
1879 {
1881 }
1882
1883 count = countInheritsNodes();
1884 if (count>0)
1885 {
1886 auto replaceFunc = [this,&ol](size_t entryIndex)
1887 {
1888 for (size_t index=0; index<m_inherits.size() ; index++)
1889 {
1890 const BaseClassDef &bcd=m_inherits[index];
1891 const ClassDef *cd=bcd.classDef;
1892
1893 if (cd->isVisibleInHierarchy()) // filter on the class we want to show
1894 {
1895 if (index==entryIndex) // found the requested index
1896 {
1897 // use the class name but with the template arguments as given
1898 // in the inheritance relation
1900 cd->displayName(),bcd.templSpecifiers);
1901
1902 if (cd->isLinkable())
1903 {
1905 cd->getOutputFileBase(),
1906 cd->anchor(),
1907 displayName);
1908 }
1909 else
1910 {
1911 ol.docify(displayName);
1912 }
1913 return;
1914 }
1915 }
1916 }
1917 };
1918
1919 ol.startParagraph();
1920 writeMarkerList(ol,
1922 static_cast<size_t>(count),
1923 replaceFunc);
1924 ol.endParagraph();
1925 }
1926
1927 // write subclasses
1928 count = countInheritedByNodes();
1929 if (count>0)
1930 {
1931 auto replaceFunc = [this,&ol](size_t entryIndex)
1932 {
1933 for (size_t index=0; index<m_inheritedBy.size() ; index++)
1934 {
1935 const BaseClassDef &bcd=m_inheritedBy[index];
1936 const ClassDef *cd=bcd.classDef;
1937 if (cd->isVisibleInHierarchy()) // filter on the class we want to show
1938 {
1939 if (index==entryIndex) // found the requested index
1940 {
1941 if (cd->isLinkable())
1942 {
1945 }
1946 else
1947 {
1948 ol.docify(cd->displayName());
1949 }
1950 return;
1951 }
1952 }
1953 }
1954 };
1955
1956 ol.startParagraph();
1957 writeMarkerList(ol,
1959 static_cast<size_t>(count),
1960 replaceFunc);
1961 ol.endParagraph();
1962 }
1963
1964 if (renderDiagram)
1965 {
1966 ol.enableAll();
1967 }
1968}
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:3688
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1101

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 4838 of file classdef.cpp.

4841{
4842 int count = countMembersIncludingGrouped(lt,inheritedFrom,FALSE);
4843 bool process = count>0;
4844 //printf("%s: writeInheritedMemberDec: lt=%s process=%d invert=%d always=%d\n",
4845 // qPrint(name()),qPrint(lt.to_string()),process,invert,showAlways);
4846 if ((process^invert) || showAlways)
4847 {
4848 for (const auto &ibcd : m_inherits)
4849 {
4850 ClassDefMutable *icd=toClassDefMutable(ibcd.classDef);
4851 if (icd && icd->isLinkable())
4852 {
4853 MemberListType lt1 = MemberListType::Invalid();
4854 MemberListType lt3 = MemberListType::Invalid();
4855 convertProtectionLevel(lt,ibcd.prot,&lt1,&lt3);
4856 if (lt2.isInvalid() && !lt3.isInvalid())
4857 {
4858 lt2=lt3;
4859 }
4860 //printf("%s:convert %s->(%s,%s) prot=%d\n",qPrint(icd->name()),qPrint(lt.to_string()),
4861 // qPrint(lt1.to_string()),qPrint(lt2.to_string()),ibcd.prot);
4862 if (visitedClasses.find(icd)==visitedClasses.end())
4863 {
4864 visitedClasses.insert(icd); // guard for multiple virtual inheritance
4865 if (!lt1.isInvalid())
4866 {
4867 //printf("--> writeMemberDeclarations for type %s\n",qPrint(lt1.to_string()));
4868 icd->writeMemberDeclarations(ol,visitedClasses,lt1,
4869 title,QCString(),FALSE,inheritedFrom,lt2,FALSE,TRUE);
4870 }
4871 }
4872 else
4873 {
4874 //printf("%s: class already visited!\n",qPrint(icd->name()));
4875 }
4876 }
4877 }
4878 }
4879}
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 2194 of file classdef.cpp.

2195{
2196 m_innerClasses.writeDocumentation(ol,this);
2197}

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 2431 of file classdef.cpp.

2432{
2433 bool isSimple = m_isSimple;
2434
2435 ol.addIndexItem(name(),QCString());
2436 //printf("ClassDefImpl::writeInlineDocumentation(%s)\n",qPrint(name()));
2437
2438 // part 1: anchor and title
2439 QCString s = compoundTypeString()+" "+name();
2440
2441 // part 1a
2442 ol.pushGeneratorState();
2444 { // only HTML only
2445 ol.writeAnchor(QCString(),anchor());
2446 ol.startMemberDoc(QCString(),QCString(),anchor(),name(),1,1,FALSE);
2448 ol.parseText(s);
2449 ol.endMemberDocName();
2450 ol.endMemberDoc(FALSE);
2451 ol.writeString("</div>");
2452 ol.startIndent();
2453 }
2454 ol.popGeneratorState();
2455
2456 // part 1b
2457 ol.pushGeneratorState();
2460 { // for LaTeX/RTF only
2462 }
2463 ol.popGeneratorState();
2464
2465 // part 1c
2466 ol.pushGeneratorState();
2468 {
2469 // for LaTeX/RTF/Man
2470 ol.startGroupHeader("",1);
2471 ol.parseText(s);
2472 ol.endGroupHeader(1);
2473 }
2474 ol.popGeneratorState();
2475
2476 SrcLangExt lang=getLanguage();
2477
2478 // part 2: the header and detailed description
2479 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
2480 {
2481 switch (lde->kind())
2482 {
2483 case LayoutDocEntry::BriefDesc:
2484 {
2485 // since we already shown the brief description in the
2486 // declaration part of the container, so we use this to
2487 // show the details on top.
2489 }
2490 break;
2491 case LayoutDocEntry::ClassInheritanceGraph:
2493 break;
2494 case LayoutDocEntry::ClassCollaborationGraph:
2496 break;
2497 case LayoutDocEntry::MemberDeclStart:
2499 break;
2500 case LayoutDocEntry::MemberDecl:
2501 {
2502 const LayoutDocEntryMemberDecl *lmd = dynamic_cast<const LayoutDocEntryMemberDecl*>(lde.get());
2503 if (lmd)
2504 {
2505 ClassDefSet visitedClasses;
2506 if (!isSimple) writeMemberDeclarations(ol,visitedClasses,lmd->type,lmd->title(lang),lmd->subtitle(lang),TRUE);
2507 }
2508 }
2509 break;
2510 case LayoutDocEntry::MemberGroups:
2512 break;
2513 case LayoutDocEntry::MemberDeclEnd:
2515 break;
2516 case LayoutDocEntry::MemberDefStart:
2518 break;
2519 case LayoutDocEntry::MemberDef:
2520 {
2521 const LayoutDocEntryMemberDef *lmd = dynamic_cast<const LayoutDocEntryMemberDef*>(lde.get());
2522 if (lmd)
2523 {
2524 if (isSimple)
2525 {
2527 }
2528 else
2529 {
2530 writeMemberDocumentation(ol,lmd->type,lmd->title(lang),TRUE);
2531 }
2532 }
2533 }
2534 break;
2535 case LayoutDocEntry::MemberDefEnd:
2537 break;
2538 default:
2539 break;
2540 }
2541 }
2542
2543 // part 3: close the block
2544 ol.pushGeneratorState();
2546 { // HTML only
2547 ol.endIndent();
2548 }
2549 ol.popGeneratorState();
2550}
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 4881 of file classdef.cpp.

4885{
4886 //printf("%s: ClassDefImpl::writeMemberDeclarations lt=%s lt2=%s\n",qPrint(name()),qPrint(lt.to_string()),qPrint(lt2.to_string()));
4887 MemberList * ml = getMemberList(lt);
4888 MemberList * ml2 = getMemberList(lt2);
4889 if (getLanguage()==SrcLangExt::VHDL) // use specific declarations function
4890 {
4891 static const ClassDef *cdef;
4892 if (cdef!=this)
4893 { // only one inline link
4895 cdef=this;
4896 }
4897 if (ml)
4898 {
4899 VhdlDocGen::writeVhdlDeclarations(ml,ol,nullptr,this,nullptr,nullptr,nullptr);
4900 }
4901 }
4902 else
4903 {
4904 //printf("%s::writeMemberDeclarations(%s) ml=%p ml2=%p\n",qPrint(name()),qPrint(title),(void*)ml,(void*)ml2);
4905 QCString tt = title, st = subTitle;
4906 if (ml)
4907 {
4908 //printf(" writeDeclarations ml type=%s count=%d\n",qPrint(lt.to_string()),ml->numDecMembers(inheritedFrom));
4909 ml->writeDeclarations(ol,this,nullptr,nullptr,nullptr,nullptr,tt,st,FALSE,showInline,inheritedFrom,lt,true);
4910 tt.clear();
4911 st.clear();
4912 }
4913 if (ml2)
4914 {
4915 //printf(" writeDeclarations ml2 type=%s count=%d\n",qPrint(lt2.to_string()),ml2->numDecMembers(inheritedFrom));
4916 ml2->writeDeclarations(ol,this,nullptr,nullptr,nullptr,nullptr,tt,st,FALSE,showInline,inheritedFrom,lt,ml==nullptr);
4917 }
4918 bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
4919 if (!inlineInheritedMembers) // show inherited members as separate lists
4920 {
4921 writeInheritedMemberDeclarations(ol,visitedClasses,lt,lt2,title,
4922 inheritedFrom ? inheritedFrom : this,
4923 invert,showAlways);
4924 }
4925 }
4926}
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 4941 of file classdef.cpp.

4942{
4943 //printf("%s: ClassDefImpl::writeMemberDocumentation()\n",qPrint(name()));
4944 MemberList * ml = getMemberList(lt);
4945 if (ml) ml->writeDocumentation(ol,displayName(),this,title,ml->listType().toLabel(),FALSE,showInline);
4946}
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 2171 of file classdef.cpp.

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

References m_memberGroups, and m_subGrouping.

Referenced by writeDocumentationContents(), and writeInlineDocumentation().

◆ writeMemberList()

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

Implements ClassDef.

Definition at line 3123 of file classdef.cpp.

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

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 3037 of file classdef.cpp.

3038{
3039 ///////////////////////////////////////////////////////////////////////////
3040 //// Member definitions on separate pages
3041 ///////////////////////////////////////////////////////////////////////////
3042
3043 ol.pushGeneratorState();
3045
3046 for (const auto &ml : m_memberLists)
3047 {
3048 if (ml->numDocMembers()>ml->numDocEnumValues() && ml->listType().isDetailed())
3049 {
3050 ml->writeDocumentationPage(ol,displayName(),this);
3051 }
3052 }
3053
3054 ol.popGeneratorState();
3055}

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 2552 of file classdef.cpp.

2553{
2554 // TODO: clean up this mess by moving it to
2555 // the output generators...
2556 bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
2557 bool rtfHyperlinks = Config_getBool(RTF_HYPERLINKS);
2558 bool usePDFLatex = Config_getBool(USE_PDFLATEX);
2559
2560 // HTML only
2561 ol.pushGeneratorState();
2563 ol.docify(" ");
2565 anchor.isEmpty() ? QCString("details") : anchor);
2567 ol.endTextLink();
2568 ol.popGeneratorState();
2569
2570 if (!anchor.isEmpty())
2571 {
2572 ol.pushGeneratorState();
2573 // LaTeX + RTF
2577 if (!(usePDFLatex && pdfHyperlinks))
2578 {
2580 }
2581 if (!rtfHyperlinks)
2582 {
2584 }
2585 ol.docify(" ");
2588 ol.endTextLink();
2589 // RTF only
2591 ol.writeString("\\par");
2592 ol.popGeneratorState();
2593 }
2594}
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 2188 of file classdef.cpp.

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

References m_innerClasses, title(), and TRUE.

Referenced by writeDocumentationContents().

◆ writePageNavigation()

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

Implements DefinitionMutable.

Definition at line 2321 of file classdef.cpp.

2322{
2323 ol.writePageOutline();
2324}
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 4955 of file classdef.cpp.

4958{
4959 //printf("%s: ClassDefImpl::writePlainMemberDeclaration()\n",qPrint(name()));
4960 MemberList * ml = getMemberList(lt);
4961 if (ml)
4962 {
4963 ml->writePlainDeclarations(ol,inGroup,this,nullptr,nullptr,nullptr,nullptr,indentLevel,inheritedFrom,inheritId);
4964 }
4965}
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 3057 of file classdef.cpp.

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

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 4948 of file classdef.cpp.

4949{
4950 //printf("%s: ClassDefImpl::writeSimpleMemberDocumentation()\n",qPrint(name()));
4951 MemberList * ml = getMemberList(lt);
4952 if (ml) ml->writeSimpleDocumentation(ol,this);
4953}
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 2252 of file classdef.cpp.

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

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 2326 of file classdef.cpp.

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

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 1499 of file classdef.cpp.

1501{
1502 ArgumentLists specs;
1503 QCString name;
1504 searchTemplateSpecs(d,specs,name,lang);
1505 if (!specs.empty()) // class has template scope specifiers
1506 {
1508 for (const ArgumentList &al : specs)
1509 {
1510 ol.docify("template<");
1511 auto it = al.begin();
1512 while (it!=al.end())
1513 {
1514 Argument a = *it;
1515 linkifyText(TextGeneratorOLImpl(ol), // out
1516 d, // scope
1517 getFileDef(), // fileScope
1518 this, // self
1519 a.type, // text
1520 FALSE // autoBreak
1521 );
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 d, // scope
1543 getFileDef(), // fileScope
1544 this, // self
1545 m_requiresClause, // text
1546 FALSE // autoBreak
1547 );
1548 ol.lineBreak();
1549 }
1550 ol.docify(type.lower()+" "+name);
1552 }
1553}
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 Definition *scope, const FileDef *fileScope, const Definition *self, const QCString &text, bool autoBreak, bool external, bool keepSpaces, int indentLevel)
Definition util.cpp:895

References Argument::defval, OutputList::docify(), OutputList::endCompoundTemplateParams(), FALSE, 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 537 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 500 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 495 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 419 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 465 of file classdef.cpp.

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

◆ m_constraintClassList

ConstraintClassList ClassDefImpl::m_constraintClassList
private

Definition at line 482 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 462 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 444 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 413 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 459 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 427 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 436 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 422 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 508 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 542 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 517 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 511 of file classdef.cpp.

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

◆ m_isTemplArg

bool ClassDefImpl::m_isTemplArg = false
private

Definition at line 519 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 416 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 514 of file classdef.cpp.

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

◆ m_metaData

QCString ClassDefImpl::m_metaData
private

Definition at line 546 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 447 of file classdef.cpp.

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

◆ 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 471 of file classdef.cpp.

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

◆ m_qualifiers

StringVector ClassDefImpl::m_qualifiers
private

Definition at line 551 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 549 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 525 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 539 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 487 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 489 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 456 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 480 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 528 of file classdef.cpp.

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

◆ m_usesImplClassList

UsesClassList ClassDefImpl::m_usesImplClassList
private

Definition at line 479 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 531 of file classdef.cpp.

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


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