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 JAVAWRITER_H 11 #define JAVAWRITER_H 12 13 #include "simplecodegenerator.h" 14 #include "umloperationlist.h" 15 #include "umlattributelist.h" 16 #include "umlassociationlist.h" 17 18 class UMLOperation; 19 20 /** 21 * Class JavaWriter is a code generator for UMLClassifier objects. 22 * Create an instance of this class, and feed it a UMLClassifier when 23 * calling writeClass and it will generate a java source file for 24 * that concept. 25 * This is the "old" code generator that does not support code editing 26 * in the Modeller but uses significantly less file space because the 27 * source code is not replicated in the XMI file. 28 */ 29 class JavaWriter : public SimpleCodeGenerator 30 { 31 public: 32 JavaWriter(); 33 virtual ~JavaWriter(); 34 35 virtual void writeClass(UMLClassifier *c); 36 37 virtual Uml::ProgrammingLanguage::Enum language() const; 38 39 QStringList defaultDatatypes() const; 40 41 private: 42 void writeClassDecl(UMLClassifier *c, QTextStream &java); 43 44 void writeConstructor(UMLClassifier *c, QTextStream &java); 45 46 static bool compareJavaMethod(UMLOperation *op1, UMLOperation *op2); 47 48 static bool javaMethodInList(UMLOperation *umlOp, UMLOperationList &opl); 49 50 void getSuperImplementedOperations(UMLClassifier *c, UMLOperationList &yetImplementedOpList, UMLOperationList &toBeImplementedOpList, bool noClassInPath = true); 51 52 void getInterfacesOperationsToBeImplemented(UMLClassifier *c, UMLOperationList &opl); 53 54 void writeOperations(UMLClassifier *c, QTextStream &j); 55 56 void writeOperations(UMLOperationList &list, QTextStream &j); 57 58 void writeAttributeDecls(UMLAttributeList &atpub, UMLAttributeList &atprot, 59 UMLAttributeList &atpriv, QTextStream &java); 60 61 void writeAssociationDecls(UMLAssociationList associations, Uml::ID::Type id, QTextStream &java); 62 63 void writeAssociationRoleDecl(QString fieldClassName, QString roleName, QString multi, 64 QString doc, Uml::Visibility::Enum visib, QTextStream &java); 65 66 void writeAttributeMethods(UMLAttributeList &atpub, Uml::Visibility::Enum visibility, QTextStream &java); 67 68 void writeAssociationMethods(UMLAssociationList associations, UMLClassifier *thisClass, 69 QTextStream &java); 70 71 void writeAssociationRoleMethod(QString fieldClassName, QString roleName, QString multi, 72 QString description, Uml::Visibility::Enum visib, Uml::Changeability::Enum change, 73 QTextStream &java); 74 75 void writeSingleAttributeAccessorMethods(QString fieldClassName, QString fieldVarName, 76 QString fieldName, QString description, 77 Uml::Visibility::Enum visibility, Uml::Changeability::Enum change, 78 bool isFinal, QTextStream &java); 79 80 void writeVectorAttributeAccessorMethods(QString fieldClassName, QString fieldVarName, 81 QString fieldName, QString description, 82 Uml::Visibility::Enum visibility, Uml::Changeability::Enum change, 83 QTextStream &java); 84 85 void writeComment(const QString &text, const QString &indent, QTextStream &java, bool javaDocStyle=false); 86 87 void writeDocumentation(QString header, QString body, QString end, QString indent, QTextStream &java); 88 89 QString getUMLObjectName(UMLObject *obj); 90 91 QString fixTypeName(const QString& string); 92 93 QString fixInitialStringDeclValue(const QString& val, const QString& type); 94 95 void writeBlankLine(QTextStream& java); 96 97 QString m_startline; ///< a \n, used at the end of each line 98 bool m_isInterface; ///< whether or not this concept is an interface 99 100 }; 101 102 #endif // JAVAWRITER_H 103