首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Java类以编程方式运行Xpand代码生成器?

如何从Java类以编程方式运行Xpand代码生成器?
EN

Stack Overflow用户
提问于 2013-03-28 01:40:00
回答 1查看 930关注 0票数 0

我试图通过定义一个领域特定语言和执行M2M以及M2T (代码生成)来实现模型驱动的开发。对于代码生成,我选择使用XPand和模板定义。您能否提供示例代码或文档链接,解释如何从Java代码调用模板扩展?

另外,我发现在Eclipse之外的独立模式下运行这些东西非常困难,所以我从编写简单的Java实用程序开始。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-29 06:15:49

以下是任何感兴趣的人的代码:

代码语言:javascript
复制
    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.");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15665674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档