[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