[Uml-devel] [Bug 141279] Crash on openning xmi file produced by previous version of Umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Wed Feb 7 20:54:54 UTC 2007


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=141279         




------- Additional Comments From okellogg users sourceforge net  2007-02-07 21:54 -------
SVN commit 631369 by okellogg:

resolveRef(): If the m_SecondaryId is not found then interpret it as
  the name of the type.
loadFromXMI(): If the stereotype ID is not found by then interpret it as
  the name of the stereotype.
These changes improve the loading of files from previous Umbrello versions.
CCBUG:141279


 M  +14 -11    umlobject.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/umbrello/umlobject.cpp #631368:631369
 @ -414,10 +414,13  @
         }
     }
     if (m_SecondaryFallback.isEmpty()) {
-        kError() << "UMLObject::resolveRef(" << m_Name
-                  << "): cannot find type with id "
-                  << m_SecondaryId << endl;
-        return false;
+        if (m_SecondaryId.isEmpty()) {
+            kError() << "UMLObject::resolveRef(" << m_Name
+                << "): both m_SecondaryId and m_SecondaryFallback are empty"
+                << endl;
+            return false;
+        }
+        m_SecondaryFallback = m_SecondaryId;
     }
 #ifdef VERBOSE_DEBUGGING
     kDebug() << "UMLObject::resolveRef(" << m_Name 
 @ -435,7 +438,6  @
         maybeSignalObjectCreated();
         return true;
     }
-    //pDoc->setIsOldFile(true);
     // Work around Object_Factory::createUMLObject()'s incapability
     // of on-the-fly scope creation:
     if (m_SecondaryId.contains("::")) {
 @ -458,8 +460,7  @
                   << "failed to create a new type for " << m_SecondaryId << endl;
         return false;
     }
-    kDebug() << "UMLObject::resolveRef: Creating new type for "
-    << m_SecondaryId << endl;
+    kDebug() << "UMLObject::resolveRef: Creating new type for " << m_SecondaryId << endl;
     // This is very C++ specific - we rely on  some '*' or
     // '&' to decide it's a ref type. Plus, we don't recognize
     // typedefs of ref types.
 @ -594,12 +595,14  @
     if (!stereo.isEmpty()) {
         Uml::IDType stereoID = STR2ID(stereo);
         m_pStereotype = umldoc->findStereotypeById(stereoID);
-        if (m_pStereotype)
+        if (m_pStereotype) {
             m_pStereotype->incrRefCount();
-        else
-            kError() << "UMLObject::loadFromXMI(" << m_Name << "): "
+        } else {
+            kDebug() << "UMLObject::loadFromXMI(" << m_Name << "): "
                 << "UMLStereotype " << ID2STR(stereoID)
-                << " not found" << endl;
+                << " not found, creating now." << endl;
+            setStereotype(stereo);
+        }
     }
 
     if( element.hasAttribute("abstract") ) {     // for bkwd compat.




More information about the umbrello-devel mailing list