features.addAll(getAllFeatures((EClass)superClasses.get(i), allSuperClasses));
EClass superClass = (EClass)superClasses.get(i); if (!allSuperClasses.contains(superClass)) features.addAll(getAllFeatures(superClass, allSuperClasses));
  protected List getFeatures(EClass eClass, List superClasses)  {    List features = new ArrayList();    if (superClasses.size() > 0)    {      List allSupers = ((EClass)superClasses.get(0)).getEAllSuperTypes();      Set allSuperClasses = new HashSet();      allSuperClasses.addAll(allSupers);      for (int i = 1; i < superClasses.size(); i++)      {        features.addAll(getAllFeatures((EClass)superClasses.get(i), allSuperClasses));      }    }    features.addAll(eClass.getEAttributes());    features.addAll(eClass.getEReferences());    return features;  }