[Uml-devel] KDE/kdesdk/umbrello/umbrello
Oliver Kellogg
okellogg at users.sourceforge.net
Wed May 2 19:20:26 UTC 2007
SVN commit 660451 by okellogg:
sync with branches/KDE/3.5
M +17 -11 model_utils.cpp
M +19 -33 operation.cpp
M +0 -32 umlobject.cpp
--- trunk/KDE/kdesdk/umbrello/umbrello/model_utils.cpp #660450:660451
@@ -499,18 +499,24 @@
m = m.simplified();
if (m.isEmpty())
return PS_Empty;
- /**
- * The search pattern includes everything until the opening parenthesis
- * because UML also permits non programming-language oriented designs
- * using narrative names, for example "check water temperature".
- */
- QRegExp pat( "^([^\\(]+)" );
- int pos = pat.search(m);
- if (pos == -1)
- return PS_Illegal_MethodName;
- desc.m_name = pat.cap(1);
+ if (m.contains(QRegExp("operator *()"))) {
+ // C++ special case: two sets of parentheses
+ desc.m_name = "operator()";
+ m.remove(QRegExp("operator *()"));
+ } else {
+ /**
+ * The search pattern includes everything up to the opening parenthesis
+ * because UML also permits non programming-language oriented designs
+ * using narrative names, for example "check water temperature".
+ */
+ QRegExp beginningUpToOpenParenth( "^([^\\(]+)" );
+ int pos = beginningUpToOpenParenth.search(m);
+ if (pos == -1)
+ return PS_Illegal_MethodName;
+ desc.m_name = beginningUpToOpenParenth.cap(1);
+ }
desc.m_pReturnType = NULL;
- pat = QRegExp("\\) *:(.*)$");
+ QRegExp pat = QRegExp("\\) *:(.*)$");
pos = pat.search(m);
if (pos != -1) { // return type is optional
QString retType = pat.cap(1);
--- trunk/KDE/kdesdk/umbrello/umbrello/operation.cpp #660450:660451
@@ -131,24 +131,28 @@
s = m_Vis.toString(true) + ' ';
s += getName();
- if (!s.contains("("))
- s.append("(");
+ Uml::Programming_Language pl = UMLApp::app()->getActiveLanguage();
+ bool parameterlessOpNeedsParentheses = (pl != Uml::pl_Pascal && pl != Uml::pl_Ada);
- if(sig == Uml::st_NoSig || sig == Uml::st_NoSigNoVis) {
- if (!s.contains(")"))
- s.append(")");
+ if (sig == Uml::st_NoSig || sig == Uml::st_NoSigNoVis) {
+ if (parameterlessOpNeedsParentheses)
+ s.append("()");
return s;
}
- UMLAttribute * obj=0;
- int last = m_List.count(), i = 0;
- for(obj=m_List.first();obj != 0;obj=m_List.next()) {
- i++;
- s.append(obj -> toString(Uml::st_SigNoVis));
- if(i < last)
- s.append(", ");
- }
- if (!s.contains(")"))
+ int last = m_List.count();
+ if (last) {
+ s.append("(");
+ int i = 0;
+ for (UMLAttribute *param = m_List.first(); param; param = m_List.next()) {
+ i++;
+ s.append(param->toString(Uml::st_SigNoVis));
+ if (i < last)
+ s.append(", ");
+ }
s.append(")");
+ } else if (parameterlessOpNeedsParentheses) {
+ s.append("()");
+ }
UMLClassifier *ownParent = static_cast<UMLClassifier*>(parent());
QString returnType;
UMLClassifier *retType = UMLClassifierListItem::getType();
@@ -324,19 +328,7 @@
}
bool UMLOperation::load( QDomElement & element ) {
- QString type = element.attribute( "type", "" );
- if (!type.isEmpty()) {
- if (type.contains( QRegExp("\\D") )) {
- m_SecondaryId = type; // defer type resolution
- } else {
- UMLDoc *pDoc = UMLApp::app()->getDocument();
- m_pSecondary = pDoc->findObjectById( STR2ID(type) );
- if (m_pSecondary == NULL) {
- kError() << "UMLOperation::load: Cannot find UML object"
- << " for return type " << type << endl;
- }
- }
- }
+ m_SecondaryId = element.attribute( "type", "" );
QString isQuery = element.attribute( "isQuery", "" );
if (!isQuery.isEmpty()) {
// We need this extra test for isEmpty() because load() might have been
@@ -403,7 +395,6 @@
if (m_SecondaryId.isEmpty()) {
kError() << "UMLOperation::load(" << m_Name << "): "
<< "cannot find return type." << endl;
- return false;
}
}
// Use deferred xmi.id resolution.
@@ -420,11 +411,6 @@
pAtt->setParmKind(Uml::pd_InOut);
else
pAtt->setParmKind(Uml::pd_In);
- Uml::IDType id = pAtt->getID();
- if (ID2STR(id).contains( QRegExp("\\D") )) {
- (void) UniqueID::gen();
- // This counts up UMLDoc::m_HighestIDForForeignFile.
- }
m_List.append( pAtt );
}
}
--- trunk/KDE/kdesdk/umbrello/umbrello/umlobject.cpp #660450:660451
@@ -645,38 +645,6 @@
m_bStatic = (ownerScope == "classifier");
}
- /**** Handle XMI_FLAT_PACKAGES and old files *************************/
- QString pkg = element.attribute( "packageid", "-1" );
- // Some interim versions used "packageid" so test for it.
- Uml::IDType pkgId = Uml::id_None;
- if (pkg != "-1") {
- pkgId = STR2ID(pkg);
- } else {
- pkg = element.attribute( "package", "" );
- if (! pkg.isEmpty()) {
- if (pkg.contains(QRegExp("\\D")))
- // Old versions saved the package name instead of the xmi.id.
- setPackage( pkg );
- else
- pkgId = STR2ID(pkg);
- }
- }
- if (pkgId != Uml::id_None) {
- UMLObject *pkgObj = umldoc->findObjectById( pkgId );
- if (pkgObj != NULL) {
- m_pUMLPackage = dynamic_cast<UMLPackage *>(pkgObj);
- if (m_pUMLPackage == NULL) // soft error
- kError() << "UMLObject::loadFromXMI(" << m_Name
- << "): object of packageid "
- << ID2STR(pkgId) << " is not a package" << endl;
- } else { // soft error
- kError() << "UMLObject::loadFromXMI(" << m_Name
- << "): cannot resolve packageid "
- << ID2STR(pkgId) << endl;
- }
- }
- /**** End of XMI_FLAT_PACKAGES and old files handling ****************/
-
// If the node has child nodes, check whether attributes can be
// extracted from them.
if (element.hasChildNodes()) {
More information about the umbrello-devel
mailing list