2

目前我正在修改一个使用 xText 解析自定义 DSL 的项目。我想为生成的类添加功能,但不幸的是我未能实现代沟模式。我以这篇文章为基础:

http://heikobehrens.net/2009/04/23/generation-gap-pattern/

我的问题是我们使用了很多片段来定制 org.eclipse.xtext.generator.Generator。看来我不能为 org.eclipse.xpand2.Generator 重用这些片段。

所以总而言之:

  • 如何实现 xtext 生成器的代沟模式
  • 或者我如何将片段与 xpand2-Generator 一起使用
  • 或者是否有第三种解决方案允许我使用片段并实现代沟模式?

研究完这件事后,我彻底糊涂了。

4

1 回答 1

2

本文中描述的代沟模式几乎适用于任何通用代码生成框架。Xtext 也不例外。

除此之外,Xtext 提供了另一个很好的解决方案来填补代沟。这是 Xbase。但是 Xbase 迫使您与 java 紧密集成,所以这并不总是一种选择。

考虑以下步骤,将代沟模式添加到现有的 Xtext 项目中:

  • 找到带有间隙的生成文件(使用您要手动编写的代码片段)。让它成为例如 MyClass。
  • 改变发电机,使
    • 生成的文件被重命名为 AbstractMyClass。
    • abstract 关键字被添加到 AbstractMyClass 类定义中。
    • 差距被转移到一个单一的方法。
    • 为间隙生成一个抽象方法。
    • 从生成的代码中调用抽象方法。
  • 手动添加“MyClass extends AbstractMyClass”并实现抽象间隙方法

如果您对某些 Xtend2 代码有具体问题,请在此处或 Xtend 论坛中发布问题。

于 2013-04-17T16:31:05.830 回答