summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/javacodeoperation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/javacodeoperation.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/javacodeoperation.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/javacodeoperation.cpp b/umbrello/umbrello/codegenerators/javacodeoperation.cpp
new file mode 100644
index 00000000..84ce0331
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/javacodeoperation.cpp
@@ -0,0 +1,132 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * copyright (C) 2004-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+/* This code generated by:
+ * Author : thomas
+ * Date : Mon Jun 30 2003
+ */
+
+#include "javacodeoperation.h"
+
+#include "javaclassifiercodedocument.h"
+#include "javacodedocumentation.h"
+#include "javacodegenerator.h"
+#include "../uml.h"
+
+// Constructors/Destructors
+//
+
+JavaCodeOperation::JavaCodeOperation
+ ( JavaClassifierCodeDocument * doc, UMLOperation *parent, const QString & body, const QString & comment )
+ : CodeOperation (doc, parent, body, comment)
+{
+ // lets not go with the default comment and instead use
+ // full-blown java documentation object instead
+ setComment(new JavaCodeDocumentation(doc));
+
+ // these things never change..
+ setOverallIndentationLevel(1);
+
+ updateMethodDeclaration();
+ updateContent();
+}
+
+JavaCodeOperation::~JavaCodeOperation ( ) { }
+
+// Other methods
+//
+
+// we basically want to update the doc and start text of this method
+void JavaCodeOperation::updateMethodDeclaration()
+{
+
+ CodeDocument * doc = getParentDocument();
+ JavaClassifierCodeDocument * javadoc = dynamic_cast<JavaClassifierCodeDocument*>(doc);
+ UMLOperation * o = getParentOperation();
+ bool isInterface = javadoc->getParentClassifier()->isInterface();
+ QString endLine = getNewLineEndingChars();
+
+ // now, the starting text.
+ QString strVis = javadoc->scopeToJavaDecl(o->getVisibility());
+ // no return type for constructors
+ QString fixedReturn = JavaCodeGenerator::fixTypeName(o->getTypeName());
+ QString returnType = o->isConstructorOperation() ? QString("") : (fixedReturn + QString(" "));
+ QString methodName = o->getName();
+ QString paramStr = QString("");
+
+ // assemble parameters
+ UMLAttributeList list = getParentOperation()->getParmList();
+ int nrofParam = list.count();
+ int paramNum = 0;
+ for(UMLAttribute* parm = list.first(); parm; parm=list.next())
+ {
+ QString rType = parm->getTypeName();
+ QString paramName = parm->getName();
+ paramStr += rType + ' ' + paramName;
+ paramNum++;
+
+ if (paramNum != nrofParam )
+ paramStr += ", ";
+ }
+ QString maybeStatic;
+ if (o->getStatic())
+ maybeStatic = "static ";
+ QString startText = strVis + ' ' + maybeStatic + returnType + methodName + " (" + paramStr + ')';
+
+ // IF the parent is an interface, our operations look different
+ // e.g. they have no body
+ if(isInterface) {
+ startText += ';';
+ setEndMethodText("");
+ } else {
+ startText += " {";
+ setEndMethodText("}");
+ }
+
+ setStartMethodText(startText);
+
+ // Lastly, for text content generation, we fix the comment on the
+ // operation, IF the codeop is autogenerated & currently empty
+ QString comment = o->getDoc();
+ if(comment.isEmpty() && getContentType() == CodeBlock::AutoGenerated)
+ {
+ UMLAttributeList parameters = o->getParmList();
+ for(UMLAttributeListIt iterator(parameters); iterator.current(); ++iterator) {
+ comment += endLine + "@param " + iterator.current()->getName() + ' ';
+ comment += iterator.current()->getDoc();
+ }
+ // add a returns statement too
+ if(!returnType.isEmpty())
+ comment += endLine + "@return " + returnType + ' ';
+ getComment()->setText(comment);
+ }
+
+
+ // In Java, for interfaces..we DON'T write out non-public
+ // method declarations.
+ if(isInterface)
+ {
+ UMLOperation * o = getParentOperation();
+ if(o->getVisibility() != Uml::Visibility::Public)
+ setWriteOutText(false);
+ }
+
+}
+
+int JavaCodeOperation::lastEditableLine() {
+ ClassifierCodeDocument * doc = dynamic_cast<ClassifierCodeDocument*>(getParentDocument());
+ if(doc->parentIsInterface())
+ return -1; // very last line is NOT editable as its a one-line declaration w/ no body in
+ // an interface.
+ return 0;
+}
+
+#include "javacodeoperation.moc"