将代码注入生成的xText类

将代码注入生成的xText类,xtext,Xtext,xText中名为“Component”的规则通常会在src gen文件夹中生成一个类“Component”。 我希望向这些类添加额外的方法,而不会在每次对DSL进行微小更改时重写它们。将我自己的代码注入这些类的正确方法是什么?有没有办法让所有类扩展我自己的根类而不是默认的EOObject 提前感谢。您基本上有两个选择: 您可以使用IXtext2EcorePostProcessor修改Xtext从语法推断出的EMF模型。实际的代码生成是由EMF完成的,因此您必须通过该瓶颈修改代码。详细情况见附录

xText中名为“Component”的规则通常会在src gen文件夹中生成一个类“Component”。 我希望向这些类添加额外的方法,而不会在每次对DSL进行微小更改时重写它们。将我自己的代码注入这些类的正确方法是什么?有没有办法让所有类扩展我自己的根类而不是默认的EOObject


提前感谢。

您基本上有两个选择:

  • 您可以使用
    IXtext2EcorePostProcessor
    修改Xtext从语法推断出的EMF模型。实际的代码生成是由EMF完成的,因此您必须通过该瓶颈修改代码。详细情况见附录。此方法仅适用于小的修改

  • 您可以使用“代沟模式”(也称为“实现间隙模式”),它允许您编写从生成的模型类派生的类。在这里,您可以添加任何您想要的内容。详细情况见附录。这种方法更适合通过继承进行大规模修改


您当然可以混合使用这两种方法…

看起来需要一些时间才能实现,但乍一看,这正是我想要的。非常感谢:-)我试图使用第二种方法,但很快就注意到他使用的是xtend2生成器类,而xtext有自己的带有硬编码输出的生成器类。此方法是否适用于xtext生成器?如果没有,如何使用xtend2生成器保留GeneratorFragments?