[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