// 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 = Uml::Visibility::toString(o->visibility()); // no return type for constructors QString fixedReturn = JavaCodeGenerator::fixTypeName(o->getTypeName()); QString returnType = o->isConstructorOperation() ? QString() : (fixedReturn + QLatin1String(" ")); QString methodName = o->name(); QString paramStr; // assemble parameters UMLAttributeList list = getParentOperation()->getParmList(); int nrofParam = list.count(); int paramNum = 0; foreach (UMLAttribute* parm, list) { QString rType = parm->getTypeName(); QString paramName = parm->name(); paramStr += rType + QLatin1Char(' ') + paramName; paramNum++; if (paramNum != nrofParam) paramStr += QLatin1String(", "); }
void JavaCodeAccessorMethod::updateMethodDeclaration() { JavaCodeClassField * javafield = dynamic_cast<JavaCodeClassField*>(getParentClassField()); JavaClassifierCodeDocument * javadoc = dynamic_cast<JavaClassifierCodeDocument*>(javafield->getParentDocument()); CodeGenerationPolicy *commonpolicy = UMLApp::app()->getCommonPolicy(); // gather defs CodeGenerationPolicy::ScopePolicy scopePolicy = commonpolicy->getAttributeAccessorScope(); QString strVis = javadoc->scopeToJavaDecl(javafield->getVisibility()); QString fieldName = javafield->getFieldName(); QString fieldType = javafield->getTypeName(); QString objectType = javafield->getListObjectType(); if(objectType.isEmpty()) objectType = fieldName; QString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars(); // set scope of this accessor appropriately..if its an attribute, // we need to be more sophisticated if(javafield->parentIsAttribute()) switch (scopePolicy) { case CodeGenerationPolicy::Public: case CodeGenerationPolicy::Private: case CodeGenerationPolicy::Protected: strVis = javadoc->scopeToJavaDecl((Uml::Visibility::Value) scopePolicy); break; default: case CodeGenerationPolicy::FromParent: // do nothing..already have taken parent value break; } // some variables we will need to populate QString headerText = ""; QString methodReturnType = ""; QString methodName = ""; QString methodParams = ""; switch(getType()) { case CodeAccessorMethod::ADD: methodName = "add" + Codegen_Utils::capitalizeFirstLetter(fieldType); methodReturnType = "void"; methodParams = objectType+" value "; headerText = "Add an object of type "+objectType+" to the List "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return void"; break; case CodeAccessorMethod::GET: methodName = "get" + Codegen_Utils::capitalizeFirstLetter(fieldName); methodReturnType = fieldType; headerText = "Get the value of "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return the value of "+fieldName; break; case CodeAccessorMethod::LIST: methodName = "get" + Codegen_Utils::capitalizeFirstLetter(fieldType)+"List"; methodReturnType = "List"; headerText = "Get the list of "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return List of "+fieldName; break; case CodeAccessorMethod::REMOVE: methodName = "remove" + Codegen_Utils::capitalizeFirstLetter(fieldType); methodReturnType = "void"; methodParams = objectType+" value "; headerText = "Remove an object of type "+objectType+" from the List "+fieldName+endLine+getParentObject()->getDoc(); break; case CodeAccessorMethod::SET: methodName = "set" + Codegen_Utils::capitalizeFirstLetter(fieldName); methodReturnType = "void"; methodParams = fieldType + " value "; headerText = "Set the value of "+fieldName+endLine+getParentObject()->getDoc()+endLine; break; default: // do nothing..no idea what this is kWarning()<<"Warning: cant generate JavaCodeAccessorMethod for type: "<<getType()<<endl; break; } // set header once. if(getComment()->getText().isEmpty()) getComment()->setText(headerText); // set start/end method text setStartMethodText(strVis+' '+methodReturnType+' '+methodName+" ( "+methodParams+" ) {"); setEndMethodText("}"); }
/** * update the start and end text for this ownedhierarchicalcodeblock. */ void JavaClassDeclarationBlock::updateContent ( ) { JavaClassifierCodeDocument *parentDoc = dynamic_cast<JavaClassifierCodeDocument*>(getParentDocument()); UMLClassifier *c = parentDoc->getParentClassifier(); CodeGenerationPolicy *commonPolicy = UMLApp::app()->getCommonPolicy(); QString endLine = commonPolicy->getNewLineEndingChars(); bool isInterface = parentDoc->parentIsInterface(); // a little shortcut QString JavaClassName = parentDoc->getJavaClassName(c->getName()); // COMMENT if(isInterface) getComment()->setText("Interface "+JavaClassName+endLine+c->getDoc()); else getComment()->setText("Class "+JavaClassName+endLine+c->getDoc()); bool forceDoc = UMLApp::app()->getCommonPolicy()->getCodeVerboseDocumentComments(); if(forceDoc || !c->getDoc().isEmpty()) getComment()->setWriteOutText(true); else getComment()->setWriteOutText(false); // Now set START/ENDING Text QString startText = ""; // In Java, we need declare abstract only on classes if (c->getAbstract() && !isInterface) startText.append("abstract "); if (c->getVisibility() != Uml::Visibility::Public) { // We should probably emit a warning in here .. java doesn't like to allow // private/protected classes. The best we can do (I believe) // is to let these declarations default to "package visibility" // which is a level between traditional "private" and "protected" // scopes. To get this visibility level we just print nothing.. } else startText.append("public "); if(parentDoc->parentIsInterface()) startText.append("interface "); else startText.append("class "); startText.append(JavaClassName); // write inheritances out UMLClassifierList superclasses = c->findSuperClassConcepts(UMLClassifier::CLASS); UMLClassifierList superinterfaces = c->findSuperClassConcepts(UMLClassifier::INTERFACE); int nrof_superclasses = superclasses.count(); int nrof_superinterfaces = superinterfaces.count(); // write out inheritance int i = 0; if(nrof_superclasses >0) startText.append(" extends "); for (UMLClassifier * concept= superclasses.first(); concept; concept = superclasses.next()) { startText.append(parentDoc->cleanName(concept->getName())); if(i != (nrof_superclasses-1)) startText.append(", "); i++; } // write out what we 'implement' i = 0; if(nrof_superinterfaces >0) { // In Java interfaces "extend" other interfaces. Classes "implement" interfaces if(isInterface) startText.append(" extends "); else startText.append(" implements "); } for (UMLClassifier * concept= superinterfaces.first(); concept; concept = superinterfaces.next()) { startText.append(parentDoc->cleanName(concept->getName())); if(i != (nrof_superinterfaces-1)) startText.append(", "); i++; } // Set the header and end text for the hier.codeblock setStartText(startText+" {"); // setEndText("}"); // not needed }