[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