\begin{codesource}[label=code:v2flattening,caption=Version 2 : Implémentation de la transformation d'aplatissement de hiérarchie de classes en Tom+Java.] public static VirtualRoot v2_processClass(VirtualRoot root) { EList children = root.getChildren(); EList newChildren = `cfClassEList(); %match(children) { cfClassEList(_*,cl@cfClass(_,_,_,cfClassEList(),_),_*) -> { newChildren = `cfClassEList(flattening(cl),newChildren*); } } return `cfVirtualRoot(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(), virtR); } } ... public static void main(String[] args) { ... VirtualRoot translator.virtR = v2_processClass(source_root); ... } \end{codesource}