[Uml-devel] [Bug 126262] Crashes while loading file (Advanced Code Generators enabled)
Oliver Kellogg
okellogg at users.sourceforge.net
Mon Mar 26 09:29:28 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=126262
------- Additional Comments From okellogg users sourceforge net 2007-03-26 11:29 -------
SVN commit 646557 by okellogg:
CodeClassField::finishInitialization(): New method for finishing off
initializations of the object.
This is necessary as a separate method because we cannot call virtual
methods that are reimplemented in a language specific class during our
own construction (the own object is not finished being constructed and
therefore the C++ dispatch mechanism does not yet work as expected.)
CCBUG:126262
M +8 -3 codeclassfield.cpp
M +11 -1 codeclassfield.h
M +1 -0 codegenerators/codegenfactory.cpp
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/codeclassfield.cpp #646556:646557
@ -37,7 +37,7 @
{
setParentUMLObject(role);
- initFields( );
+ initFields(true);
}
@ -46,7 +46,7 @
{
setParentUMLObject(attrib);
- initFields( );
+ initFields(true);
}
@ -591,7 +591,7 @
return false;
}
-void CodeClassField::initFields ( ) {
+void CodeClassField::initFields(bool inConstructor) {
m_writeOutMethods = false;
m_listClassName = QString ("");
@ -600,6 +600,11 @
m_methodVector.setAutoDelete(false);
// m_methodMap = new QMap<CodeAccessorMethod::AccessorType, CodeAccessorMethod *>;
+ if (!inConstructor)
+ finishInitialization();
+}
+
+void CodeClassField::finishInitialization() {
initAccessorMethods();
updateContent();
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/codeclassfield.h #646556:646557
@ -53,6 +53,16 @
CodeClassField ( ClassifierCodeDocument * parentDoc , UMLAttribute * attrib );
CodeClassField ( ClassifierCodeDocument * parentDoc , UMLRole * role);
+ /**
+ * Finish off initializations of the object.
+ * This is necessary as a separate method because we cannot call
+ * virtual methods that are reimplemented in a language specific class
+ * during our own construction (the own object is not finished being
+ * constructed and therefore the C++ dispatch mechanism does not yet
+ * work as expected.)
+ */
+ void finishInitialization();
+
// CodeClassField ( ClassifierCodeDocument * doc , UMLRole role);
/**
@ -213,7 +223,7 @
virtual void setAttributesFromNode ( QDomElement & element);
/** init class fields */
- void initFields ( );
+ void initFields(bool inConstructor = false);
// initialize the accessor methods for this field
void initAccessorMethods();
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/codegenerators/codegenfactory.cpp #646556:646557
@ -242,6 +242,7 @
default:
break;
}
+ retval->finishInitialization();
return retval;
}
More information about the umbrello-devel
mailing list