Как программно запустить генератор кода Xpand из класса Java?

Я пытаюсь добиться разработки на основе модели, определяя DSL и выполняя M2M, а также M2T (генерация кода). Для генерации кода я решил работать с XPand и определениями шаблонов. Не могли бы вы предоставить пример кода или ссылку на документацию, в которой объясняется, как вызвать расширение шаблона из кода Java?

P.S. Мне очень сложно запускать такие вещи в автономном режиме вне Eclipse, поэтому я начал с написания простых утилит Java.


person Pavlos    schedule 27.03.2013    source источник


Ответы (1)


Вот код, кому интересно:

    Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
    Map<String, Object> factoryMap = reg.getExtensionToFactoryMap();
    factoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());

    ResourceSet resourceSet = new ResourceSetImpl();
    EPackage PSM_Pkg = MyDSLPackage.eINSTANCE;
    resourceSet.getPackageRegistry().put(PSM_Pkg.getNsURI(), PSM_Pkg);

    Resource resource = resourceSet.getResource(Constants.PSM_URI, true);
    EList<EObject> inObjects = resource.getContents();

    // Xpand
    URI outURI = URI.createURI("file:///C:/Users/...");
    Output out = new OutputImpl();
    Outlet outlet = new Outlet(outURI.toFileString());
    out.addOutlet(outlet);
    XpandExecutionContextImpl executionContext = new XpandExecutionContextImpl(out, null);

    // Configure the metamodels
    EmfMetaModel emfMetaModel = new EmfMetaModel();
    emfMetaModel.setMetaModelPackage(MyDSLlPackage.class.getName());
    executionContext.registerMetaModel(emfMetaModel);
    XpandFacade xpandFacade = XpandFacade.create(executionContext);
    Object[] params = null;
    System.out.println(inObjects.get(0));
    xpandFacade.evaluate("template::Template::main", inObjects.get(0), params);
    System.out.println("Code generated.");
person Pavlos    schedule 28.03.2013
comment
Какие пакеты вы импортировали? - person csadan; 14.06.2017