2013-09-16 4 views
0

Как я могу получить, «какой тип ссылок будет ссылаться на конкретный объект класса» в EMF (Eclipse Modeling Framework)? Иногда объект будет ссылаться на 3 или 4 ссылочные типы. Я хочу получить количество ссылок для данного конкретного объекта. или Как получить Sub-классы для родительского объекта в EMFТип ссылки в EMF

ответ

0

Там нет прямого пути, чтобы получить список подклассов для конкретного EClass. Вам нужно будет сделать работу самостоятельно. В основном проходят все классы всех зарегистрированных пакетов и проверяют дерево наследования:

/** 
* Returns a list of all <em>known</em> sub-classes for the specified class. 
* 
* @param cls the super-class 
* @return list of all sub-classes - possibly <code>null</code> 
*/ 
public static Collection<EClass> getSubClasses(EClass cls) { 
    if (SUB_CLASSES.containsKey(cls)) return SUB_CLASSES.get(cls); 

    Collection<EClass> l = null; 
    final Registry registry = EPackage.Registry.INSTANCE; 
    for (final Object v : registry.values()) { 
     if (!(v instanceof EPackage)) { 
    continue; 
     } 
     final EPackage ep = (EPackage) v; 

     for (final EClassifier c : ep.getEClassifiers()) { 
    if (!(c instanceof EClass)) { 
     continue; 
    } 
    final EClass cl = (EClass) c; 

    if (cl.getESuperTypes().contains(cls)) { 
     if (l == null) { 
      l = new ArrayList<EClass>(); 
     } 
     l.add(cl); 
    } 
     } 
    } 
    SUB_CLASSES.put(cls, l); 

    return l; 
} 

static final Map<EClass, Collection<EClass>> SUB_CLASSES = new HashMap<EClass, Collection<EClass>>(); 
Смежные вопросы