如何从Java调用Xtend代码?

时间:2014-10-17 08:03:32

标签: java code-generation xtend

我有一个代码生成器,它采用语法树并将其转换为源文件(文本)。

基本上,它遍历树的所有节点,将节点映射到文本,并将生成的文本追加到StringBuilder

现在我希望节点使用Xtend来实现文本映射器,如下所示:

public class NodeXMapper
{
    private XtendRunner xtendRunner = ...;

    public String map(final NodeX aNode)
    {
        return xtendRunner.runScript("def String map(NodeX aNode) {
            ''' «aNode.fieldX» - «aNode.fieldY» '''
        }", aNode);
    }
}

xtendRunner.runScript(String aScript, final Object... aParams)是一个方法,它将参数aParams传递给Xtend脚本aScript并返回结果。

我该如何实施该方法?

更新1: Here我发现这段代码似乎在Java中运行Xtend代码:

// setup
XtendFacade f = XtendFacade.create("my::path::MyExtensionFile");

// use
f.call("sayHello",new Object[]{"World"});

但是我在Eclipse的 Type hiearchy 视图中找不到XtendFacade类。

1 个答案:

答案 0 :(得分:2)

您找到的解释器是针对旧的Xtend1语言,而不是您正在寻找的语言。

您要引用的新Xtend已编译,因此没有解释器。

但是,您可以使用Xbase构建解释的表达式语言。 See the documentation and Github有关如何执行此操作的示例。然后,您可以从Java运行表达式语言的解释器。