Doxygen
Loading...
Searching...
No Matches
classdef.cpp File Reference
#include "classdef.h"
#include <cstdio>
#include <algorithm>
#include "arguments.h"
#include "classlist.h"
#include "config.h"
#include "debug.h"
#include "defargs.h"
#include "definitionimpl.h"
#include "diagram.h"
#include "docparser.h"
#include "dot.h"
#include "dotclassgraph.h"
#include "dotrunner.h"
#include "doxygen.h"
#include "entry.h"
#include "example.h"
#include "filedef.h"
#include "fileinfo.h"
#include "groupdef.h"
#include "htmlhelp.h"
#include "language.h"
#include "layout.h"
#include "membergroup.h"
#include "memberlist.h"
#include "membername.h"
#include "message.h"
#include "moduledef.h"
#include "namespacedef.h"
#include "outputlist.h"
#include "searchindex.h"
#include "symbolresolver.h"
#include "trace.h"
#include "types.h"
#include "util.h"
#include "vhdldocgen.h"
Include dependency graph for classdef.cpp:

Go to the source code of this file.

Classes

class  ClassDefImpl
 Implementation of the ClassDef interface. More...
class  ClassDefAliasImpl

Functions

static DString makeQualifiedNameWithTemplateParameters (const ClassDef *cd, const ArgumentLists *actualParams, uint32_t *actualParamIndex)
static DString makeDisplayName (const ClassDef *cd, bool includeScope)
static DString getCompoundTypeString (SrcLangExt lang, ClassDef::CompoundType compType, bool isJavaEnum)
std::unique_ptr< ClassDef > createClassDef (const DString &fileName, int startLine, size_t startColumn, const DString &name, ClassDef::CompoundType ct, const DString &ref, const DString &fName, bool isSymbol, bool isJavaEnum)
 Factory method to create a new ClassDef object.
std::unique_ptr< ClassDef > createClassDefAlias (const Definition *newScope, const ClassDef *cd)
static void writeInheritanceSpecifier (OutputList &ol, const BaseClassDef &bcd)
static void searchTemplateSpecs (const Definition *d, ArgumentLists &result, DString &name, SrcLangExt lang)
static bool hasNonReferenceSuperClassRec (const ClassDef *cd, int level)
static bool isStandardFunc (const MemberDef *md)
ClassDef * toClassDef (Definition *d)
ClassDef * toClassDef (DefinitionMutable *md)
const ClassDef * toClassDef (const Definition *d)
ClassDefMutable * toClassDefMutable (Definition *d)
ClassDef * getClass (const DString &n)
bool classHasVisibleRoot (const BaseClassList &bcl)
bool classHasVisibleChildren (const ClassDef *cd)
bool classVisibleInIndex (const ClassDef *cd)
int minClassDistance (const ClassDef *cd, const ClassDef *bcd, int level)
Protection classInheritedProtectionLevel (const ClassDef *cd, const ClassDef *bcd, Protection prot, int level)

Function Documentation

◆ classHasVisibleChildren()

bool classHasVisibleChildren ( const ClassDef * cd)

Definition at line 5611 of file classdef.cpp.

5612{
5613 BaseClassList bcl;
5614
5615 if (cd->getLanguage()==SrcLangExt::VHDL) // reverse baseClass/subClass relation
5616 {
5617 if (cd->baseClasses().empty()) return false;
5618 bcl=cd->baseClasses();
5619 }
5620 else
5621 {
5622 if (cd->subClasses().empty()) return false;
5623 bcl=cd->subClasses();
5624 }
5625
5626 for (const auto &bcd : bcl)
5627 {
5628 if (bcd.classDef->isVisibleInHierarchy())
5629 {
5630 return true;
5631 }
5632 }
5633 return false;
5634}
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
std::vector< BaseClassDef > BaseClassList
Definition classdef.h:77

References ClassDef::baseClasses(), Definition::getLanguage(), and ClassDef::subClasses().

Referenced by writeClassTreeForList(), and writeClassTreeToOutput().

◆ classHasVisibleRoot()

bool classHasVisibleRoot ( const BaseClassList & bcl)

Definition at line 5600 of file classdef.cpp.

5601{
5602 for (const auto &bcd : bcl)
5603 {
5604 const ClassDef *cd=bcd.classDef;
5605 if (cd->isVisibleInHierarchy()) return true;
5606 if (classHasVisibleRoot(cd->baseClasses())) return true;
5607 }
5608 return false;
5609}
A abstract class representing of a compound symbol.
Definition classdef.h:100
virtual bool isVisibleInHierarchy() const =0
the class is visible in a class diagram, or class hierarchy
bool classHasVisibleRoot(const BaseClassList &bcl)

References ClassDef::baseClasses(), classHasVisibleRoot(), and ClassDef::isVisibleInHierarchy().

Referenced by DotGfxHierarchyTable::addClassList(), DotGfxHierarchyTable::addHierarchy(), classHasVisibleRoot(), countClassesInTreeList(), writeClassTreeForList(), and writeClassTreeToOutput().

◆ classInheritedProtectionLevel()

Protection classInheritedProtectionLevel ( const ClassDef * cd,
const ClassDef * bcd,
Protection prot,
int level )

Definition at line 5670 of file classdef.cpp.

5671{
5672 if (bcd->categoryOf()) // use class that is being extended in case of
5673 // an Objective-C category
5674 {
5675 bcd=bcd->categoryOf();
5676 }
5677 if (cd==bcd)
5678 {
5679 goto exit;
5680 }
5681 if (level==256)
5682 {
5683 err("Internal inconsistency: found class {} seem to have a recursive "
5684 "inheritance relation! Please send a bug report to doxygen@gmail.com\n",cd->name());
5685 }
5686 else if (prot!=Protection::Private)
5687 {
5688 for (const auto &bcdi : cd->baseClasses())
5689 {
5690 Protection baseProt = classInheritedProtectionLevel(bcdi.classDef,bcd,bcdi.prot,level+1);
5691 if (baseProt==Protection::Private) prot=Protection::Private;
5692 else if (baseProt==Protection::Protected) prot=Protection::Protected;
5693 }
5694 }
5695exit:
5696 //printf("classInheritedProtectionLevel(%s,%s)=%d\n",qPrint(cd->name()),qPrint(bcd->name()),prot);
5697 return prot;
5698}
virtual ClassDef * categoryOf() const =0
Returns the class of which this is a category (Objective-C only).
virtual const DString & name() const =0
Protection classInheritedProtectionLevel(const ClassDef *cd, const ClassDef *bcd, Protection prot, int level)
#define err(fmt,...)
Definition message.h:127
Protection
Definition types.h:32

References ClassDef::baseClasses(), ClassDef::categoryOf(), classInheritedProtectionLevel(), err, and Definition::name().

Referenced by classInheritedProtectionLevel().

◆ classVisibleInIndex()

bool classVisibleInIndex ( const ClassDef * cd)

Definition at line 5636 of file classdef.cpp.

5637{
5638 bool allExternals = Config_getBool(ALLEXTERNALS);
5639 return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
5640}
virtual bool isLinkable() const =0
virtual bool isLinkableInProject() const =0
#define Config_getBool(name)
Definition config.h:33

References Config_getBool, Definition::isLinkable(), and Definition::isLinkableInProject().

Referenced by writeClassTree().

◆ createClassDef()

std::unique_ptr< ClassDef > createClassDef ( const DString & fileName,
int startLine,
size_t startColumn,
const DString & name,
ClassDef::CompoundType ct,
const DString & ref,
const DString & fName,
bool isSymbol,
bool isJavaEnum )

Factory method to create a new ClassDef object.

Definition at line 583 of file classdef.cpp.

588{
589 return std::make_unique<ClassDefImpl>(fileName,startLine,startColumn,name,ct,ref,fName,isSymbol,isJavaEnum);
590}

Referenced by addClassToContext(), createTagLessInstance(), findClassRelation(), findUsedClassesForClass(), findUsingDeclarations(), and ClassDefMutable::setPrimaryConstructorParams().

◆ createClassDefAlias()

std::unique_ptr< ClassDef > createClassDefAlias ( const Definition * newScope,
const ClassDef * cd )

Definition at line 816 of file classdef.cpp.

817{
818 auto acd = std::make_unique<ClassDefAliasImpl>(newScope,cd);
819 //printf("cd name=%s localName=%s qualifiedName=%s qualifiedNameWith=%s displayName()=%s\n",
820 // qPrint(acd->name()),qPrint(acd->localName()),qPrint(acd->qualifiedName()),
821 // qPrint(acd->qualifiedNameWithTemplateParameters()),qPrint(acd->displayName()));
822 return acd;
823}

Referenced by ClassDefAliasImpl::deepCopy(), findUsingDeclImports(), resolveClassNestingRelations(), and ClassDefMutable::setPrimaryConstructorParams().

◆ getClass()

◆ getCompoundTypeString()

DString getCompoundTypeString ( SrcLangExt lang,
ClassDef::CompoundType compType,
bool isJavaEnum )
static

Definition at line 162 of file classdef.cpp.

163{
164 if (lang==SrcLangExt::Fortran)
165 {
166 switch (compType)
167 {
168 case ClassDef::Class: return "module";
169 case ClassDef::Struct: return "type";
170 case ClassDef::Union: return "union";
171 case ClassDef::Interface: return "interface";
172 case ClassDef::Protocol: return "protocol";
173 case ClassDef::Category: return "category";
174 case ClassDef::Exception: return "exception";
175 default: return "unknown";
176 }
177 }
178 else
179 {
180 switch (compType)
181 {
182 case ClassDef::Class: return isJavaEnum ? "enum" : "class";
183 case ClassDef::Struct: return "struct";
184 case ClassDef::Union: return "union";
185 case ClassDef::Interface: return lang==SrcLangExt::ObjC ? "class" : "interface";
186 case ClassDef::Protocol: return "protocol";
187 case ClassDef::Category: return "category";
188 case ClassDef::Exception: return "exception";
189 case ClassDef::Service: return "service";
190 case ClassDef::Singleton: return "singleton";
191 default: return "unknown";
192 }
193 }
194}
@ Singleton
Definition classdef.h:113
@ Interface
Definition classdef.h:108
@ Exception
Definition classdef.h:111

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

Referenced by ClassDefImpl::ClassDefImpl(), ClassDefImpl::compoundTypeString(), and ClassDefImpl::deepCopy().

◆ hasNonReferenceSuperClassRec()

bool hasNonReferenceSuperClassRec ( const ClassDef * cd,
int level )
static

Definition at line 3554 of file classdef.cpp.

3555{
3556 bool found=!cd->isReference() && cd->isLinkableInProject() && !cd->isHidden();
3557 if (found)
3558 {
3559 return true; // we're done if this class is not a reference
3560 }
3561 for (const auto &ibcd : cd->subClasses())
3562 {
3563 const ClassDef *bcd=ibcd.classDef;
3564 if (level>256)
3565 {
3566 err("Possible recursive class relation while inside {} and looking for base class {}\n",cd->name(),bcd->name());
3567 return false;
3568 }
3569 // recurse into the super class branch
3570 found = found || hasNonReferenceSuperClassRec(bcd,level+1);
3571 if (!found)
3572 {
3573 // look for template instances that might have non-reference super classes
3574 for (const auto &cil : bcd->getTemplateInstances())
3575 {
3576 // recurse into the template instance branch
3577 found = hasNonReferenceSuperClassRec(cil.classDef,level+1);
3578 if (found) break;
3579 }
3580 }
3581 else
3582 {
3583 break;
3584 }
3585 }
3586 return found;
3587}
virtual const TemplateInstanceList & getTemplateInstances() const =0
Returns a sorted dictionary with all template instances found for this template class.
virtual bool isHidden() const =0
virtual bool isReference() const =0
static bool hasNonReferenceSuperClassRec(const ClassDef *cd, int level)

References err, ClassDef::getTemplateInstances(), hasNonReferenceSuperClassRec(), Definition::isHidden(), Definition::isLinkableInProject(), Definition::isReference(), Definition::name(), and ClassDef::subClasses().

Referenced by ClassDefImpl::hasNonReferenceSuperClass(), and hasNonReferenceSuperClassRec().

◆ isStandardFunc()

bool isStandardFunc ( const MemberDef * md)
static

Definition at line 3791 of file classdef.cpp.

3792{
3793 return md->name()=="operator=" || // assignment operator
3794 md->isConstructor() || // constructor
3795 md->isDestructor(); // destructor
3796}
virtual bool isDestructor() const =0
virtual bool isConstructor() const =0

References MemberDef::isConstructor(), MemberDef::isDestructor(), and Definition::name().

Referenced by ClassDefImpl::mergeMembersFromBaseClasses().

◆ makeDisplayName()

DString makeDisplayName ( const ClassDef * cd,
bool includeScope )
static

Definition at line 111 of file classdef.cpp.

112{
113 //bool optimizeOutputForJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
114 SrcLangExt lang = cd->getLanguage();
115 //bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
116 DString n;
117 if (lang==SrcLangExt::VHDL)
118 {
120 }
121 else
122 {
123 if (cd->taglessParent())
124 {
125 size_t idx=cd->name().rfind("::");
126 if (includeScope || idx==DString::npos)
127 {
128 n=cd->name();
129 }
130 else
131 {
132 n=cd->name().mid(idx+2);
133 }
134 }
135 else if (includeScope)
136 {
138 }
139 else
140 {
141 n=cd->className();
142 }
143 }
144 if (cd->isAnonymous())
145 {
147 }
149 if (sep!="::")
150 {
151 n=substitute(n,"::",sep);
152 }
153 if (cd->compoundType()==ClassDef::Protocol && n.endsWith("-p"))
154 {
155 n="<"+n.left(n.length()-2)+">";
156 }
157 return n;
158}
virtual const ClassDef * taglessParent() const =0
virtual DString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
virtual DString qualifiedNameWithTemplateParameters(const ArgumentLists *actualParams=nullptr, uint32_t *actualParamIndex=nullptr) const =0
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e. class/struct/union/...
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
size_t rfind(char c, size_t pos=npos) const
Definition dstring.h:244
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:318
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:178
DString left(size_t len) const
Definition dstring.h:306
bool endsWith(const char *s) const
Definition dstring.h:617
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151
virtual bool isAnonymous() const =0
static DString getClassName(const ClassDef *)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
Definition dstring.cpp:485
SrcLangExt
Definition types.h:207
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Definition util.cpp:4638
DString removeAnonymousScopes(const DString &str)
Definition util.cpp:98

References ClassDef::className(), ClassDef::compoundType(), DString::endsWith(), VhdlDocGen::getClassName(), Definition::getLanguage(), getLanguageSpecificSeparator(), Definition::isAnonymous(), DString::left(), DString::length(), DString::mid(), Definition::name(), DString::npos, ClassDef::Protocol, ClassDef::qualifiedNameWithTemplateParameters(), removeAnonymousScopes(), DString::rfind(), substitute(), and ClassDef::taglessParent().

Referenced by ClassDefAliasImpl::displayName(), and ClassDefImpl::displayName().

◆ makeQualifiedNameWithTemplateParameters()

DString makeQualifiedNameWithTemplateParameters ( const ClassDef * cd,
const ArgumentLists * actualParams,
uint32_t * actualParamIndex )
static

Definition at line 60 of file classdef.cpp.

62{
63 //bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
64 bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
65 //printf("qualifiedNameWithTemplateParameters() localName=%s\n",qPrint(cd->localName()));
66 DString scName;
67 const Definition *d=cd->getOuterScope();
68 if (d)
69 {
71 {
72 const ClassDef *ocd=toClassDef(d);
73 scName = ocd->qualifiedNameWithTemplateParameters(actualParams,actualParamIndex);
74 }
75 else if (!hideScopeNames)
76 {
77 scName = d->qualifiedName();
78 }
79 }
80
81 SrcLangExt lang = cd->getLanguage();
82 DString scopeSeparator = getLanguageSpecificSeparator(lang);
83 if (!scName.empty()) scName+=scopeSeparator;
84
85 bool isSpecialization = cd->localName().find('<')!=DString::npos;
86 DString clName = cd->className();
87 scName+=clName;
88 if (lang!=SrcLangExt::CSharp && !cd->templateArguments().empty())
89 {
90 if (actualParams && *actualParamIndex<actualParams->size())
91 {
92 const ArgumentList &al = actualParams->at(*actualParamIndex);
93 if (!isSpecialization)
94 {
95 scName+=tempArgListToString(al,lang);
96 }
97 (*actualParamIndex)++;
98 }
99 else
100 {
101 if (!isSpecialization)
102 {
103 scName+=tempArgListToString(cd->templateArguments(),lang);
104 }
105 }
106 }
107 //printf("qualifiedNameWithTemplateParameters: scope=%s qualifiedName=%s\n",qPrint(name()),qPrint(scName));
108 return scName;
109}
This class represents an function or template argument list.
Definition arguments.h:66
bool empty() const
Definition arguments.h:100
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.
size_t find(char c, size_t pos=0) const
Definition dstring.h:239
The common base class of all entity definitions found in the sources.
Definition definition.h:77
virtual DefType definitionType() const =0
virtual const DString & localName() const =0
virtual DString qualifiedName() const =0
virtual Definition * getOuterScope() const =0
ClassDef * toClassDef(Definition *d)
DString tempArgListToString(const ArgumentList &al, SrcLangExt lang, bool includeDefault)
Definition util.cpp:911

References ClassDef::className(), Config_getBool, Definition::definitionType(), ArgumentList::empty(), DString::empty(), DString::find(), Definition::getLanguage(), getLanguageSpecificSeparator(), Definition::getOuterScope(), Definition::localName(), DString::npos, Definition::qualifiedName(), ClassDef::qualifiedNameWithTemplateParameters(), tempArgListToString(), ClassDef::templateArguments(), toClassDef(), and Definition::TypeClass.

Referenced by ClassDefAliasImpl::qualifiedNameWithTemplateParameters(), and ClassDefImpl::qualifiedNameWithTemplateParameters().

◆ minClassDistance()

int minClassDistance ( const ClassDef * cd,
const ClassDef * bcd,
int level )

Definition at line 5646 of file classdef.cpp.

5647{
5648 const int maxInheritanceDepth = 100000;
5649 if (bcd->categoryOf()) // use class that is being extended in case of
5650 // an Objective-C category
5651 {
5652 bcd=bcd->categoryOf();
5653 }
5654 if (cd==bcd) return level;
5655 if (level==256)
5656 {
5657 warn_uncond("class {} seem to have a recursive inheritance relation!\n",cd->name());
5658 return -1;
5659 }
5660 int m=maxInheritanceDepth;
5661 for (const auto &bcdi : cd->baseClasses())
5662 {
5663 int mc=minClassDistance(bcdi.classDef,bcd,level+1);
5664 if (mc<m) m=mc;
5665 if (m<0) break;
5666 }
5667 return m;
5668}
int minClassDistance(const ClassDef *cd, const ClassDef *bcd, int level)
#define warn_uncond(fmt,...)
Definition message.h:122

References ClassDef::baseClasses(), ClassDef::categoryOf(), minClassDistance(), Definition::name(), and warn_uncond.

Referenced by ClassDefImpl::getMemberByName(), and minClassDistance().

◆ searchTemplateSpecs()

void searchTemplateSpecs ( const Definition * d,
ArgumentLists & result,
DString & name,
SrcLangExt lang )
static

Definition at line 1516 of file classdef.cpp.

1520{
1522 {
1523 if (d->getOuterScope())
1524 {
1525 searchTemplateSpecs(d->getOuterScope(),result,name,lang);
1526 }
1527 const ClassDef *cd=toClassDef(d);
1528 if (!name.empty()) name+="::";
1529 DString clName = d->localName();
1530 if (clName.endsWith("-p"))
1531 {
1532 clName = clName.left(clName.length()-2);
1533 }
1534 name+=clName;
1535 bool isSpecialization = d->localName().find('<')!=DString::npos;
1536 if (!cd->templateArguments().empty())
1537 {
1538 result.push_back(cd->templateArguments());
1539 if (!isSpecialization)
1540 {
1542 }
1543 }
1544 }
1545 else
1546 {
1547 name+=d->qualifiedName();
1548 }
1549}
static void searchTemplateSpecs(const Definition *d, ArgumentLists &result, DString &name, SrcLangExt lang)
const char * name(int level)
Definition latexgen.h:368

References Definition::definitionType(), ArgumentList::empty(), DString::endsWith(), DString::find(), Definition::getOuterScope(), DString::left(), DString::length(), Definition::localName(), DString::npos, Definition::qualifiedName(), searchTemplateSpecs(), tempArgListToString(), ClassDef::templateArguments(), toClassDef(), and Definition::TypeClass.

Referenced by searchTemplateSpecs(), and ClassDefImpl::writeTemplateSpec().

◆ toClassDef() [1/3]

const ClassDef * toClassDef ( const Definition * d)

Definition at line 5565 of file classdef.cpp.

5566{
5567 if (d && (typeid(*d)==typeid(ClassDefImpl) || typeid(*d)==typeid(ClassDefAliasImpl)))
5568 {
5569 return static_cast<const ClassDef*>(d);
5570 }
5571 else
5572 {
5573 return nullptr;
5574 }
5575}
Implementation of the ClassDef interface.
Definition classdef.cpp:201

◆ toClassDef() [2/3]

◆ toClassDef() [3/3]

ClassDef * toClassDef ( DefinitionMutable * md)

Definition at line 5552 of file classdef.cpp.

5553{
5554 Definition *d = toDefinition(md);
5555 if (d && typeid(*d)==typeid(ClassDefImpl))
5556 {
5557 return static_cast<ClassDef*>(d);
5558 }
5559 else
5560 {
5561 return nullptr;
5562 }
5563}
Definition * toDefinition(DefinitionMutable *dm)

References toDefinition().

◆ toClassDefMutable()

ClassDefMutable * toClassDefMutable ( Definition * d)

Definition at line 5577 of file classdef.cpp.

5578{
5579 if (d && typeid(*d)==typeid(ClassDefImpl))
5580 {
5581 return static_cast<ClassDefMutable*>(d);
5582 }
5583 else
5584 {
5585 return nullptr;
5586 }
5587}

Referenced by addClassAndNestedClasses(), addClassToContext(), addClassToGroups(), ModuleDefImpl::addClassToModule(), ModuleManager::addClassToModule(), addMembersToMemberGroup(), ClassDefImpl::addMembersToTemplateInstance(), addMemberToGroups(), ClassDefImpl::addTypeConstraint(), applyToAllDefinitions(), buildCompleteMemberLists(), computeMemberReferences(), computeTemplateClassRelations(), VhdlDocGen::computeVhdlComponentRelations(), ClassDefImpl::countInheritedDecMembers(), countMembers(), createTagLessInstance(), createTemplateInstanceMembers(), ClassDefImpl::deepCopy(), distributeClassGroupRelations(), distributeMemberGroupDocumentation(), findClassRelation(), findSectionsInDocumentation(), findTemplateInstanceRelation(), findUsedClassesForClass(), findUsingDeclarations(), findUsingDeclImports(), generateClassDocs(), generateClassOrGlobalLink(), generateNamespaceClassDocs(), MemberDefImpl::getClassDefMutable(), getClassMutable(), ClassDefImpl::hideDerivedVariablesInPython(), insertMemberAlias(), ClassDefImpl::insertTemplateInstance(), ClassDefImpl::insertUsedFile(), ClassDefImpl::internalInsertMember(), mergeCategories(), ClassDefImpl::mergeCategory(), ClassDefImpl::mergeMembers(), ClassDefImpl::mergeMembersFromBaseClasses(), SymbolResolver::resolveClassMutable(), resolveClassNestingRelations(), setAnonymousEnumType(), ClassDefImpl::setGroupDefForAllMembers(), ClassDefMutable::setPrimaryConstructorParams(), sortMemberLists(), ClassDefImpl::writeInheritedMemberDeclarations(), and writeTagFile().

◆ writeInheritanceSpecifier()

void writeInheritanceSpecifier ( OutputList & ol,
const BaseClassDef & bcd )
static

Definition at line 1455 of file classdef.cpp.

1456{
1457 if (bcd.prot!=Protection::Public || bcd.virt!=Specifier::Normal)
1458 {
1459 ol.startTypewriter();
1460 ol.docify(" [");
1461 StringVector sl;
1462 if (bcd.prot==Protection::Protected) sl.emplace_back("protected");
1463 else if (bcd.prot==Protection::Private) sl.emplace_back("private");
1464 if (bcd.virt==Specifier::Virtual) sl.emplace_back("virtual");
1465 bool first=true;
1466 for (const auto &s : sl)
1467 {
1468 if (!first) ol.docify(", ");
1469 ol.docify(s);
1470 first=false;
1471 }
1472 ol.docify("]");
1473 ol.endTypewriter();
1474 }
1475}
void docify(const DString &s)
Definition outputlist.h:433
void startTypewriter()
Definition outputlist.h:445
void endTypewriter()
Definition outputlist.h:447
std::vector< std::string > StringVector
Definition containers.h:33
Specifier virt
Virtualness of the inheritance relation: Normal, or Virtual.
Definition classdef.h:71
Protection prot
Protection level of the inheritance relation: Public, Protected, or Private.
Definition classdef.h:66

References OutputList::docify(), OutputList::endTypewriter(), BaseClassDef::prot, OutputList::startTypewriter(), and BaseClassDef::virt.

Referenced by ClassDefImpl::writeInheritanceGraph().