%\begin{tomcode3} \begin{codesource2}[label=code:v0flattening,caption=Implémentation de la transformation d'aplatissement de hiérarchie de classes en Java] public static classflattening.VirtualRoot v0_processClass(classflattening.VirtualRoot root) { org.eclipse.emf.common.util.EList newChildren = new org.eclipse.emf.common.util.BasicEList(); for(classflattening.Class cl : root.getChildren()) { if(cl.getSubclass().isEmpty()) { newChildren.add(flattening(cl)); } } classflattening.VirtualRoot result = (classflattening.VirtualRoot) classflattening.ClassflatteningFactory.eINSTANCE.create( (EClass)classflattening.ClassflatteningPackage.eINSTANCE.getEClassifier("VirtualRoot")); result.eSet(result.eClass().getEStructuralFeature("children"),(Object)newChildren); return result; } public static classflattening.Class flattening(classflattening.Class toFlatten) { classflattening.Class parent = toFlatten.getSuperclass(); if(parent==null) { return toFlatten; } else { classflattening.Class flattenedParent = flattening(parent); org.eclipse.emf.common.util.EList head = toFlatten.getAttributes(); head.addAll(flattenedParent.getAttributes()); classflattening.Class result = (classflattening.Class)classflattening.ClassflatteningFactory.eINSTANCE. create((EClass)classflattening.ClassflatteningPackage.eINSTANCE.getEClassifier("Class")); result.eSet(result.eClass().getEStructuralFeature("name"),(Object)flattenedParent.getName()+toFlatten.getName()); result.eSet(result.eClass().getEStructuralFeature("attributes"),(Object)head); result.eSet(result.eClass().getEStructuralFeature("superclass"),(Object)flattenedParent.getSuperclass()); result.eSet(result.eClass().getEStructuralFeature("subclass"), (Object)(new org.eclipse.emf.common.util.BasicEList()) ); result.eSet(result.eClass().getEStructuralFeature("root"),(Object)virtR); return result; } } \end{codesource2} %\end{tomcode3}