Чтобы иметь контекст, в настоящее время я работаю над преобразованием модели ecore to java. Практически, я читаю некоторый файл ecore и генерирую строку, которая является допустимым исходным кодом интерфейса Java.ECore отражение и перекрестные ссылки
В качестве примера можно привести рабочий процесс создания кода.
projectA.ecore:
определяет EClass 'A'
package projectA : projectA = 'http://www.example.org/projectA'
{
class A;
}
projectB.ecore:
определяет EClass 'B', которые наследуют от 'A', используя перекрестная ссылка на a.ecore, чтобы получить к нему доступ.
import projectA : '../../projectA/model/projectA.ecore#/';
package projectB : projectB = 'http://www.example.org/projectB'
{
class B extends projectA::A;
}
С тех Ecore я сначала создать интерфейс для projectA.ecore:
package projecta;
interface ProjectA<A> {
// ...
}
А теперь я хочу сделать то же самое для projectB.ecore и получает следующий интерфейс:
package projectb;
import projecta.ProjectA;
interface ProjectB<A,B> extends ProjectA<A> {
// ...
}
Для этого мне нужно обнаружить, что A и EClass доступны с использованием перекрестной ссылки, и сделать некоторый анализ в projectA.ecore, чтобы создать допустимое расширение интерфейса, пакеты импортируют ...
Я огляделся в API отражения окружающей среды, не найдя чистого и очевидного способа сделать это. Это возможно? Это да, как?
EDIT: Технические детали
Я загружающий Ecore, используя этот вид кода:
final ResourceSetImpl resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new XMIResourceFactoryImpl());
final Resource resource = resourceSet.getResource(uri, true);
final EPackage ePackage = (EPackage) resource.getContents().get(0);
final String fileContent = new GenerateAlgebra().process(ePackage);
GenerateAlgebra класс, посвященный .ecore к трансформации String. Технически он разработан с использованием Xtend (https://github.com/manuelleduc/ecore-oa/blob/master/fr.inria.diverse.ecorealgebragenerator/src/fr/inria/diverse/objectalgebragenerator/popup/actions/GenerateAlgebra.xtend).
Вы хотите реализовать свой собственный специфический генератор кода, а не использовать имеющийся генератор ЭДС?Можно загружать объекты ecore xmi в java Objects, а разрешение прокси на связанные с перекрестками EClasses другого EPackage устанавливает связь между ними. Можете ли вы быть более конкретными о том, как вы создаете? –
Я еще не понял вашу проблему. Нужно ли загружать оба Epackages с их соединением? Чтобы вы могли идентифицировать супертип A? –
В основном мне нужно узнать файл .ecore, в котором определен класс EClass. –