\begin{codesource}[label=code:v3flattening,caption=Version 3 : Implémentation de la transformation d'aplatissement de hiérarchie de classes en Tom+Java avec stratégies.] %strategy FlatteningStrat(translator:UMLClassesFlattening) extends Identity() { visit cfVirtualRoot { cfVirtualRoot(cfClassEList(_*,cl@cfClass(n,_,_,cfClassEList(),_),_*)) -> { EList newChildren = translator.virtR.getChildren(); translator.virtR = `cfVirtualRoot(cfClassEList(flattening(cl),newChildren*)); } } } public static Class flattening(Class toFlatten) { Class parent = toFlatten.getSuperclass(); if(parent==null) { return toFlatten; } else { Class flattenedParent = flattening(parent); EList head = toFlatten.getAttributes(); head.addAll(flattenedParent.getAttributes()); return `cfClass(flattenedParent.getName()+toFlatten.getName(), head, flattenedParent.getSuperclass(), cfClassEList(), null); } } ... public static void main(String[] args) { ... VirtualRoot translator.virtR = `cfVirtualRoot(cfClassEList()); Strategy transformer = `BottomUp(FlatteningStrat(translator)); transformer.visit(source_root, new EcoreContainmentIntrospector()); ... } \end{codesource}