umbrello  2.35.1
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
cppwriter.h
Go to the documentation of this file.
1 /*
2  SPDX-License-Identifier: GPL-2.0-or-later
3 
4  SPDX-FileCopyrightText: 2003 Brian Thomas
5  <brian.thomas@gsfc.nasa.gov>
6  SPDX-FileCopyrightText: 2004-2021 Umbrello UML Modeller Authors
7  <umbrello-devel@kde.org>
8 */
9 
10 #ifndef CPPWRITER_H
11 #define CPPWRITER_H
12 
13 #include "simplecodegenerator.h"
15 #include "umloperationlist.h"
16 #include "umlattributelist.h"
17 #include "umlassociationlist.h"
18 
19 class QFile;
20 
32 {
33 public:
34 
35  CppWriter();
36  virtual ~CppWriter();
37 
38  virtual void writeClass(UMLClassifier *c);
39 
41 
42  QStringList defaultDatatypes() const;
43 
44  virtual QStringList reservedKeywords() const;
45 
46 private:
47  void writeIncludes(UMLClassifier *c, QTextStream &cpp);
48  void writeClassDecl(UMLClassifier *c, QTextStream &cpp);
49  void writeConstructorDecls(QTextStream &h);
50  void writeConstructorMethods(UMLClassifier * c, QTextStream &cpp);
51 
52 // /**
53 // * Write all field declarations, for both attributes and associations for the
54 // * given permitted scope.
55 // */
56 // void writeFieldDecl(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream);
57 
58 // /**
59 // * Write all method declarations, for attributes and associations
60 // * for the given permitted scope.
61 // */
62 // void writeAccessorMethodDecl(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream);
63 
64  void writeOperations(UMLClassifier *c, bool isHeaderMethod, Uml::Visibility::Enum permitScope, QTextStream &cpp);
65  void writeOperations(UMLClassifier *c, UMLOperationList &oplist, bool isHeaderMethod, QTextStream &cpp);
66 
67 // /**
68 // * Write all attributes for a given class.
69 // * @param c the class for which we are generating code
70 // * @param j the stream associated with the output file
71 // */
72 // void writeAttributes(UMLClassifier *c, QTextStream &j);
73 
74  void writeAttributeDecls(UMLClassifier *c, Uml::Visibility::Enum visibility, bool writeStatic, QTextStream &stream);
75 
76  void writeHeaderFieldDecl(UMLClassifier *c, Uml::Visibility::Enum permitVisibility, QTextStream &stream);
77 
78  void writeHeaderAttributeAccessorMethods(UMLClassifier *c, Uml::Visibility::Enum visibility, bool writeStatic, QTextStream &stream);
79 
80  void writeHeaderAttributeAccessorMethodDecls(UMLClassifier *c, Uml::Visibility::Enum permitVisibility, QTextStream &stream);
81  void writeHeaderAccessorMethodDecl(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream);
82 
83  void writeAssociationDecls(UMLAssociationList associations, Uml::Visibility::Enum permit, Uml::ID::Type id, QTextStream &stream);
84 
85  void writeAssociationRoleDecl(QString fieldClassName, QString roleName, QString multi,
86  QString doc, QTextStream &stream);
87 
88  void writeAttributeMethods(UMLAttributeList attribs, Uml::Visibility::Enum visib, bool isHeaderMethod,
89  bool isStatic,
90  bool writeMethodBody, QTextStream &stream);
91 
93  bool isHeaderMethod,
94  bool writeMethodBody, bool writePointerVar, Uml::ID::Type id, QTextStream &stream);
95 
96  void writeAssociationRoleMethod(const QString &fieldClassName, bool isHeaderMethod, bool writeMethodBody,
97  const QString &roleName, const QString &multi,
98  const QString &description, Uml::Changeability::Enum change,
99  QTextStream &stream);
100 
102  const QString &fieldClassName, const QString &Name,
103  const QString &fieldName, const QString &description,
105  bool isHeaderMethod,
106  bool isStatic, bool writeMethodBody, QTextStream &cpp);
107 
109  const QString &fieldClassName, const QString &fieldVarName,
110  const QString &fieldName, const QString &description,
112  bool isHeaderMethod,
113  bool writeMethodBody,
114  QTextStream &stream);
115 
116  void writeComment(const QString &text, const QString &indent, QTextStream &cpp);
117  void writeDocumentation(QString header, QString body, QString end, QTextStream &cpp);
118 
119  void writeHeaderFile(UMLClassifier *c, QFile &file);
120  void writeSourceFile(UMLClassifier *c, QFile &file);
121 
122  void printTextAsSeparateLinesWithIndent (const QString &text, const QString &indent,
123  QTextStream &stream);
124 
125  void printAssociationIncludeDecl(UMLAssociationList list, Uml::ID::Type this_id, QTextStream &stream);
126 
127  void writeInitAttributeMethod(UMLClassifier * c, QTextStream &stream);
128  void writeInitAttributeDecl(UMLClassifier * c, QTextStream &stream);
129  void writeDataTypes(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream);
130 
131  QString umlObjectName(UMLObject *obj);
132 
133  QString fixTypeName(const QString &string);
134  QString fixInitialStringDeclValue(const QString &value, const QString &type);
135 
137  QString getAttributeMethodBaseName(const QString &fieldName);
138 
139  void writeBlankLine(QTextStream &stream);
140 
142 
147 
152 
153  QStringList ObjectFieldVariables;
154  QStringList VectorFieldVariables;
156 };
157 
158 
159 #endif // CPPWRITER_H
CppWriter::OBJECT_METHOD_INIT
QString OBJECT_METHOD_INIT
Definition: cppwriter.h:146
CPPCodeGenerationPolicy::getDocToolTag
QString getDocToolTag()
Definition: cppcodegenerationpolicy.cpp:252
umlattributelist.h
datatype.h
template.h
CppWriter::CppWriter
CppWriter()
Definition: cppwriter.cpp:41
UMLAttributeListIt
QListIterator< UMLAttribute * > UMLAttributeListIt
Definition: umlattributelist.h:14
Codegen_Utils::cppDatatypes
QStringList cppDatatypes()
Definition: codegen_utils.cpp:18
UMLOperation::isDestructorOperation
bool isDestructorOperation() const
Definition: operation.cpp:391
CppWriter::reservedKeywords
virtual QStringList reservedKeywords() const
Definition: cppwriter.cpp:1434
Uml::Visibility::Implementation
@ Implementation
Definition: basictypes.h:49
Uml::ProgrammingLanguage::Enum
Enum
Definition: basictypes.h:291
UMLClassifier::isInterface
bool isInterface() const
Definition: classifier.cpp:116
CppWriter::writeSingleAttributeAccessorMethods
void writeSingleAttributeAccessorMethods(const QString &fieldClassName, const QString &Name, const QString &fieldName, const QString &description, Uml::Changeability::Enum change, bool isHeaderMethod, bool isStatic, bool writeMethodBody, QTextStream &cpp)
Definition: cppwriter.cpp:934
UMLAttributeList
Definition: umlattributelist.h:20
UMLObject::name
QString name() const
Definition: umlobject.cpp:207
CppWriter::writeAttributeDecls
void writeAttributeDecls(UMLClassifier *c, Uml::Visibility::Enum visibility, bool writeStatic, QTextStream &stream)
Definition: cppwriter.cpp:521
umloperationlist.h
CPPCodeGenerationPolicy::getVectorClassName
QString getVectorClassName()
Definition: cppcodegenerationpolicy.cpp:201
CodeGenerator::getHeadingFile
virtual QString getHeadingFile(const QString &file)
Definition: codegenerator.cpp:406
UMLObject::package
QString package(const QString &separator=QString(), bool includeRoot=false) const
Definition: umlobject.cpp:582
UMLOperation::getParmList
UMLAttributeList getParmList() const
Definition: operation.cpp:177
UMLTemplate::getTypeName
virtual QString getTypeName() const
Definition: template.cpp:77
CodeGenerator::cleanName
static QString cleanName(const QString &name)
Definition: codegenerator.cpp:548
Uml::Changeability::Changeable
@ Changeable
Definition: basictypes.h:203
UMLDatatype
Non-graphical information for a Datatype.
Definition: datatype.h:20
CppWriter::ObjectFieldVariables
QStringList ObjectFieldVariables
Definition: cppwriter.h:153
operation.h
UMLAttribute::getInitialValue
QString getInitialValue() const
Definition: attribute.cpp:100
UMLClassifierListItem::getTypeName
virtual QString getTypeName() const
Definition: classifierlistitem.cpp:108
Uml::RoleType::A
@ A
Definition: basictypes.h:237
CppWriter
Definition: cppwriter.h:31
UMLApp::commonPolicy
CodeGenerationPolicy * commonPolicy() const
Definition: uml.cpp:2459
UMLOperation::getConst
bool getConst() const
Definition: operation.cpp:430
UMLEnumLiteral
Sets up attribute information.
Definition: enumliteral.h:20
association.h
SimpleCodeGenerator::fileName_
QString fileName_
Definition: simplecodegenerator.h:48
UMLObject::isStatic
bool isStatic() const
Definition: umlobject.cpp:362
CppWriter::INLINE_ASSOCIATION_METHODS
bool INLINE_ASSOCIATION_METHODS
Definition: cppwriter.h:151
UMLClassifierList
QList< UMLClassifier * > UMLClassifierList
Definition: umlclassifierlist.h:12
CppWriter::language
virtual Uml::ProgrammingLanguage::Enum language() const
Definition: cppwriter.cpp:76
Uml::ID::Type
std::string Type
Definition: basictypes.h:371
CppWriter::writeClass
virtual void writeClass(UMLClassifier *c)
Definition: cppwriter.cpp:93
model_utils.h
CppWriter::writeInitAttributeMethod
void writeInitAttributeMethod(UMLClassifier *c, QTextStream &stream)
Definition: cppwriter.cpp:1054
CodeGenPolicyExt
Definition: codegenpolicyext.h:22
UMLObject
The base class for UML objects.
Definition: umlobject.h:69
CPPCodeGenerationPolicy
Definition: cppcodegenerationpolicy.h:18
SimpleCodeGenerator::indent
QString indent()
Definition: simplecodegenerator.cpp:72
UMLObject::isAbstract
bool isAbstract() const
Definition: umlobject.cpp:344
SimpleCodeGenerator::m_indentLevel
int m_indentLevel
Definition: simplecodegenerator.h:73
CppWriter::umlObjectName
QString umlObjectName(UMLObject *obj)
Definition: cppwriter.cpp:1369
CPPCodeGenerationPolicy::getStringClassName
QString getStringClassName()
Definition: cppcodegenerationpolicy.cpp:191
UMLEnumLiteral::value
QString value() const
Definition: enumliteral.cpp:53
CppWriter::writeDocumentation
void writeDocumentation(QString header, QString body, QString end, QTextStream &cpp)
Definition: cppwriter.cpp:656
CodeGenerator::forceDoc
bool forceDoc() const
Definition: codegenerator.cpp:764
CppWriter::policyExt
CPPCodeGenerationPolicy * policyExt()
Definition: cppwriter.cpp:84
UMLObject::ot_EnumLiteral
@ ot_EnumLiteral
Definition: umlobject.h:90
CodeGenerator::formatSourceCode
static QString formatSourceCode(const QString &code, const QString &indentation)
Definition: codegenerator.cpp:742
Uml::Changeability::Enum
Enum
Definition: basictypes.h:202
CPPCodeGenerationPolicy::getAccessorsAreInline
bool getAccessorsAreInline()
Definition: cppcodegenerationpolicy.cpp:77
UMLObject::asUMLDatatype
UMLDatatype * asUMLDatatype()
Definition: umlobject.cpp:1425
CppWriter::printTextAsSeparateLinesWithIndent
void printTextAsSeparateLinesWithIndent(const QString &text, const QString &indent, QTextStream &stream)
Definition: cppwriter.cpp:1386
umlclassifierlistitemlist.h
CppWriter::VECTOR_METHOD_INIT
QString VECTOR_METHOD_INIT
Definition: cppwriter.h:145
CPPCodeGenerationPolicy::getStringClassNameInclude
QString getStringClassNameInclude()
Definition: cppcodegenerationpolicy.cpp:196
Uml::Visibility::Public
@ Public
Definition: basictypes.h:46
CppWriter::printAssociationIncludeDecl
void printAssociationIncludeDecl(UMLAssociationList list, Uml::ID::Type this_id, QTextStream &stream)
Definition: cppwriter.cpp:1322
Uml::Changeability::Frozen
@ Frozen
Definition: basictypes.h:204
Codegen_Utils::capitalizeFirstLetter
QString capitalizeFirstLetter(const QString &string)
Definition: codegen_utils.cpp:425
SimpleCodeGenerator::hasAbstractOps
bool hasAbstractOps(UMLClassifier *c)
Definition: simplecodegenerator.cpp:266
classifierlistitem.h
UMLObject::visibility
Uml::Visibility::Enum visibility() const
Definition: umlobject.cpp:462
CppWriter::writeConstructorDecls
void writeConstructorDecls(QTextStream &h)
Definition: cppwriter.cpp:1020
it
and that you know you can do these things To protect your we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the or if you modify it For if you distribute copies of such a whether gratis or for a you must give the recipients all the rights that you have You must make sure that receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two distribute and or modify the software for each author s protection and we want to make certain that everyone understands that there is no warranty for this free software If the software is modified by someone else and passed we want its recipients to know that what they have is not the so that any problems introduced by others will not reflect on the original authors reputations any free program is threatened constantly by software patents We wish to avoid the danger that redistributors of a free program will individually obtain patent in effect making the program proprietary To prevent we have made it clear that any patent must be licensed for everyone s free use or not licensed at all The precise terms and conditions for distribution and modification follow TERMS AND CONDITIONS FOR DISTRIBUTION AND MODIFICATION This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License The refers to any such program or and a work based on the Program means either the Program or any derivative work under copyright a work containing the Program or a portion of it
Definition: GPL-2.0-only.txt:64
CppWriter::writeAssociationDecls
void writeAssociationDecls(UMLAssociationList associations, Uml::Visibility::Enum permit, Uml::ID::Type id, QTextStream &stream)
Definition: cppwriter.cpp:678
UMLOperation::getOverride
bool getOverride() const
Definition: operation.cpp:446
SimpleCodeGenerator::className_
QString className_
Definition: simplecodegenerator.h:47
a
QString a
Definition: petalnode.cpp:13
SimpleCodeGenerator::m_endl
QString m_endl
Definition: simplecodegenerator.h:74
CppWriter::fixTypeName
QString fixTypeName(const QString &string)
Definition: cppwriter.cpp:1165
CppWriter::writeBlankLine
void writeBlankLine(QTextStream &stream)
Definition: cppwriter.cpp:1377
Uml::Visibility::toString
QString toString(Enum item, bool mnemonic)
Definition: basictypes.cpp:93
CppWriter::writeHeaderAttributeAccessorMethodDecls
void writeHeaderAttributeAccessorMethodDecls(UMLClassifier *c, Uml::Visibility::Enum permitVisibility, QTextStream &stream)
CppWriter::fixInitialStringDeclValue
QString fixInitialStringDeclValue(const QString &value, const QString &type)
Definition: cppwriter.cpp:1351
CppWriter::getAttributeVariableName
QString getAttributeVariableName(UMLAttribute *at)
Definition: cppwriter.cpp:1401
Uml::AssociationType::Association
@ Association
Definition: basictypes.h:96
CodeGenerator::formatDoc
static QString formatDoc(const QString &text, const QString &linePrefix=QLatin1String(" *"), int lineWidth=80)
Definition: codegenerator.cpp:711
CPPCodeGenerationPolicy::getVectorClassNameInclude
QString getVectorClassNameInclude()
Definition: cppcodegenerationpolicy.cpp:206
CppWriter::getAttributeMethodBaseName
QString getAttributeMethodBaseName(const QString &fieldName)
Definition: cppwriter.cpp:1413
codegenerationpolicy.h
SimpleCodeGenerator
Definition: simplecodegenerator.h:29
CppWriter::m_stringIncludeRequired
bool m_stringIncludeRequired
Definition: cppwriter.h:155
CppWriter::VectorFieldVariables
QStringList VectorFieldVariables
Definition: cppwriter.h:154
Uml::RoleType::B
@ B
Definition: basictypes.h:238
CPPCodeGenerationPolicy::getClassMemberPrefix
QString getClassMemberPrefix()
Definition: cppcodegenerationpolicy.cpp:241
Uml::ProgrammingLanguage::Cpp
@ Cpp
Definition: basictypes.h:294
c
type show c for details The hypothetical commands show w and show c should show the appropriate parts of the General Public License Of the commands you use may be called something other than show w and show c
Definition: GPL-2.0-only.txt:301
UMLObject::doc
QString doc() const
Definition: umlobject.cpp:431
CppWriter::defaultDatatypes
QStringList defaultDatatypes() const
Definition: cppwriter.cpp:1425
UMLApp::app
static UMLApp * app()
Definition: uml.cpp:349
visibility
Definition: visibility.py:1
CppWriter::writeAssociationMethods
void writeAssociationMethods(UMLAssociationList associations, Uml::Visibility::Enum permitVisib, bool isHeaderMethod, bool writeMethodBody, bool writePointerVar, Uml::ID::Type id, QTextStream &stream)
Definition: cppwriter.cpp:775
CppWriter::writeAttributeMethods
void writeAttributeMethods(UMLAttributeList attribs, Uml::Visibility::Enum visib, bool isHeaderMethod, bool isStatic, bool writeMethodBody, QTextStream &stream)
Definition: cppwriter.cpp:598
UMLAttribute
Sets up attribute information.
Definition: attribute.h:22
UMLObject::isUMLDatatype
bool isUMLDatatype() const
Definition: umlobject.h:204
cppcodegenerationpolicy.h
UMLDatatype::originType
UMLClassifier * originType() const
Definition: datatype.cpp:42
logWarn0
#define logWarn0(s)
Definition: uml.h:538
Uml::Visibility::Enum
Enum
Definition: basictypes.h:45
CppWriter::writeComment
void writeComment(const QString &text, const QString &indent, QTextStream &cpp)
Definition: cppwriter.cpp:634
UMLClassifierListItemList
Definition: umlclassifierlistitemlist.h:21
CppWriter::writeAssociationRoleMethod
void writeAssociationRoleMethod(const QString &fieldClassName, bool isHeaderMethod, bool writeMethodBody, const QString &roleName, const QString &multi, const QString &description, Uml::Changeability::Enum change, QTextStream &stream)
Definition: cppwriter.cpp:828
CodeGenerator::codeGenerated
void codeGenerated(UMLClassifier *concept, bool generated)
Definition: moc_codegenerator.cpp:166
CppWriter::writeOperations
void writeOperations(UMLClassifier *c, bool isHeaderMethod, Uml::Visibility::Enum permitScope, QTextStream &cpp)
Definition: cppwriter.cpp:1183
classifier.h
UMLOperation::isConstructorOperation
bool isConstructorOperation() const
Definition: operation.cpp:369
UMLOperation
Definition: operation.h:19
UMLObject::ot_Enum
@ ot_Enum
Definition: umlobject.h:84
CppWriter::writeSourceFile
void writeSourceFile(UMLClassifier *c, QFile &file)
Definition: cppwriter.cpp:216
UMLApp::policyExt
CodeGenPolicyExt * policyExt() const
Definition: uml.cpp:2475
uml.h
enumliteral.h
Codegen_Utils::reservedCppKeywords
const QStringList reservedCppKeywords()
Definition: codegen_utils.cpp:46
UMLTemplateListIt
QListIterator< UMLTemplate * > UMLTemplateListIt
Definition: umltemplatelist.h:16
UMLClassifier
Information for a non-graphical Concept/Class.
Definition: classifier.h:34
debug_utils.h
umlassociationlist.h
UMLAssociation
Sets up association information.
Definition: association.h:28
CppWriter::writeInitAttributeDecl
void writeInitAttributeDecl(UMLClassifier *c, QTextStream &stream)
Definition: cppwriter.cpp:1044
CppWriter::writeConstructorMethods
void writeConstructorMethods(UMLClassifier *c, QTextStream &cpp)
Definition: cppwriter.cpp:1110
CppWriter::writeAssociationRoleDecl
void writeAssociationRoleDecl(QString fieldClassName, QString roleName, QString multi, QString doc, QTextStream &stream)
Definition: cppwriter.cpp:722
CppWriter::writeHeaderAttributeAccessorMethods
void writeHeaderAttributeAccessorMethods(UMLClassifier *c, Uml::Visibility::Enum visibility, bool writeStatic, QTextStream &stream)
Definition: cppwriter.cpp:581
CppWriter::writeClassDecl
void writeClassDecl(UMLClassifier *c, QTextStream &cpp)
Definition: cppwriter.cpp:368
UMLTemplateList
QList< UMLTemplate * > UMLTemplateList
Definition: umltemplatelist.h:13
CppWriter::writeHeaderFile
void writeHeaderFile(UMLClassifier *c, QFile &file)
Definition: cppwriter.cpp:144
CppWriter::writeHeaderFieldDecl
void writeHeaderFieldDecl(UMLClassifier *c, Uml::Visibility::Enum permitVisibility, QTextStream &stream)
Definition: cppwriter.cpp:200
UMLTemplate
Sets up template information.
Definition: template.h:21
simplecodegenerator.h
uIgnoreZeroPointer
#define uIgnoreZeroPointer(a)
Definition: debug_utils.h:142
CppWriter::~CppWriter
virtual ~CppWriter()
Definition: cppwriter.cpp:68
CppWriter::writeHeaderAccessorMethodDecl
void writeHeaderAccessorMethodDecl(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream)
Definition: cppwriter.cpp:177
UMLDatatype::isReference
bool isReference() const
Definition: datatype.cpp:60
Uml::Visibility::Private
@ Private
Definition: basictypes.h:47
CppWriter::writeVectorAttributeAccessorMethods
void writeVectorAttributeAccessorMethods(const QString &fieldClassName, const QString &fieldVarName, const QString &fieldName, const QString &description, Uml::Changeability::Enum change, bool isHeaderMethod, bool writeMethodBody, QTextStream &stream)
Definition: cppwriter.cpp:852
cppwriter.h
CppWriter::writeDataTypes
void writeDataTypes(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream)
Definition: cppwriter.cpp:1147
CodeGenerator::forceSections
bool forceSections() const
Definition: codegenerator.cpp:774
Uml::Visibility::Protected
@ Protected
Definition: basictypes.h:48
CodeGenerationPolicy::getAutoGenerateConstructors
bool getAutoGenerateConstructors()
Definition: codegenerationpolicy.cpp:361
UMLOperationList
QList< UMLOperation * > UMLOperationList
Definition: umloperationlist.h:12
umltemplatelist.h
UMLClassifierListItem
A base class for classifier list items (e.g. attributes)
Definition: classifierlistitem.h:24
CppWriter::VECTOR_METHOD_APPEND
QString VECTOR_METHOD_APPEND
Definition: cppwriter.h:143
UMLAssociationList
QList< UMLAssociation * > UMLAssociationList
Definition: umlassociationlist.h:12
SimpleCodeGenerator::findFileName
QString findFileName(UMLPackage *concept, const QString &ext)
Definition: simplecodegenerator.cpp:87
CppWriter::writeIncludes
void writeIncludes(UMLClassifier *c, QTextStream &cpp)
Definition: cppwriter.cpp:342
codegen_utils.h
umldoc.h
CodeGenerator::openFile
bool openFile(QFile &file, const QString &name)
Definition: codegenerator.cpp:522
Uml::ShowStereoType::Name
@ Name
stereotype name only
Definition: basictypes.h:150
UMLOperation::getSourceCode
QString getSourceCode() const
Definition: operation.cpp:523
description
static const char description[]
Definition: main.cpp:32
CppWriter::VECTOR_METHOD_REMOVE
QString VECTOR_METHOD_REMOVE
Definition: cppwriter.h:144