1 /*
2     SPDX-License-Identifier: GPL-2.0-or-later
3 
4     SPDX-FileCopyrightText: 2002 Oliver Kellogg <okellogg@users.sourceforge.net>
5     SPDX-FileCopyrightText: 2003-2021 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
6 */
7 
8 #ifndef ADAWRITER_H
9 #define ADAWRITER_H
10 
11 #include "simplecodegenerator.h"
12 #include "umlclassifierlist.h"
13 
14 #include <QMap>
15 
16 class UMLAssociation;
17 class UMLOperation;
18 class QTextStream;
19 class QFile;
20 
21 /**
22  * Class AdaWriter is a code generator for UMLClassifier objects.
23  * Based on javawriter.h by Luis De la Parra Blum.
24  * Create an instance of this class, and feed it a UMLClassifier when
25  * calling writeClass and it will generate an Ada package spec for
26  * that concept.
27  */
28 class AdaWriter : public SimpleCodeGenerator
29 {
30     Q_OBJECT
31 public:
32 
33     AdaWriter();
34     virtual ~AdaWriter();
35 
36     virtual void writeClass(UMLClassifier *c);
37 
38     virtual Uml::ProgrammingLanguage::Enum language() const;
39 
40     QStringList defaultDatatypes() const;
41 
42     virtual bool isReservedKeyword(const QString & rPossiblyReservedKeyword);
43 
44     virtual QStringList reservedKeywords() const;
45 
46 private:
47 
48     void declareClass(UMLClassifier *c, QTextStream &ada);
49 
50     void writeOperation(UMLOperation *op, QTextStream &ada, bool is_comment = false);
51 
52     void computeAssocTypeAndRole(UMLClassifier *c,
53                                  UMLAssociation *a,
54                                  QString& typeName, QString& roleName);
55 
56     static bool isOOClass(UMLClassifier *c);
57 
58     QString className(UMLClassifier *c, bool inOwnScope = true);
59 
60     static QString packageName(UMLPackage *p);
61 
62     void finalizeRun();
63 
64     static const QString defaultPackageSuffix;
65 
66     typedef QMap<QString, QFile*> PackageFileMap;
67 
68     /**
69      * Map package name to QFile.
70      * Required for closing opened files in finalizeRun().
71      */
72     PackageFileMap m_pkgsGenerated;
73 
74     /**
75      * List of classifiers generated.
76      * Required for ensuring order of code generation which
77      * satisfies order of dependencies among classifiers.
78      */
79     UMLClassifierList m_classesGenerated;
80 };
81 
82 #endif // ADAWRITER_H
83