@@ -301,6 +301,13 @@ class TraceConstructorGeneratorJava {
301301 ' ' '
302302 }
303303
304+ private def boolean shouldHaveAddNewObjectToStateMethod (EClassifier c ){
305+ if (c instanceof EClass ) {
306+ shouldHaveAddNewObjectToStateMethod(c)
307+ } else
308+ false
309+ }
310+
304311 private def boolean shouldHaveAddNewObjectToStateMethod (EClass c ){
305312 val subTypes = findAllDirectSubTypes(c)
306313
@@ -364,7 +371,7 @@ if (!added && !exeToTraced.containsKey(o_cast)) {
364371 «IF p instanceof EReference»
365372
366373
367- «IF traceability.allMutableClasses.contains (p.EType)»
374+ «IF shouldHaveAddNewObjectToStateMethod (p.EType)»
368375 for(«getJavaFQN(p.EType)» aValue : o_cast.«EcoreCraftingUtil.stringGetter(p)») {
369376 addNewObjectToState((«getJavaFQN(p.EType)»)aValue, newState);
370377 }
@@ -390,7 +397,7 @@ if (!added && !exeToTraced.containsKey(o_cast)) {
390397 «IF p instanceof EReference»
391398 «val realMutableType = p.EType»
392399 if (o_cast.«EcoreCraftingUtil.stringGetter(p)» != null) {
393- «IF traceability.allMutableClasses.contains (realMutableType)»
400+ «IF shouldHaveAddNewObjectToStateMethod (realMutableType)»
394401 addNewObjectToState((«getJavaFQN(realMutableType)»)o_cast.«EcoreCraftingUtil.stringGetter(p)», newState);
395402 firstValue_«p.name».«stringSetter(valueProperty,stringGetterTracedValue("o_cast", p))»;
396403 «ELSE»
@@ -458,7 +465,7 @@ private def String generateAddStateUsingListenerMethods() {
458465 if (modelChange instanceof org.gemoc.xdsmlframework.api.engine_addon.modelchangelistener.NewObjectModelChange) {
459466 stateChanged = true;
460467 ««« Loop over all classes that may be constructed and that have mutable fields
461- «FOR c : partialOrderSort(findTopSuperClasses(newConcreteClassesNotEmpty))»
468+ «FOR c : partialOrderSort(findTopSuperClasses(newConcreteClassesNotEmpty)).filter[c|shouldHaveAddNewObjectToStateMethod(c)] »
462469 if (o instanceof «getJavaFQN(c)») {
463470 «getJavaFQN(c)» o_cast = («getJavaFQN(c)») o;
464471 addNewObjectToState(o_cast, newState);
@@ -565,7 +572,7 @@ private def String generateAddStateUsingListenerMethods() {
565572 previousValue = valueSequence.get(valueSequence.size() - 1);
566573 }
567574 ««« If instances of new class, we have to make sure that there are traced versions
568- «IF traceability.allMutableClasses.contains (p.EType)»
575+ «IF shouldHaveAddNewObjectToStateMethod (p.EType)»
569576 for(«getJavaFQN(p.EType)» aValue : o_cast.«EcoreCraftingUtil.stringGetter(p)») {
570577 addNewObjectToState((«getJavaFQN(p.EType)»)aValue, newState);
571578 }««« end for loop on values
0 commit comments