Xtext - 生成对象 - 生成更多数据

时间:2012-10-24 13:31:44

标签: eclipse-emf xtext generated-code xtend

我的xtext文件类似于这里的xtext描述: (www.ebpml.org/blog2/index.php/2010/11/05/mde-xtext-and-json)

JSONDataSource: root = Object ;
Object: '{' firstObject=TerminalObject (',' objects+=TerminalObject)* '}';
Array: '['firstItem=ObjectValue (',' items+=ObjectValue)* ']';
EmptyObject: isEmpty?= '{}' ;
EmptyArray: isEmpty?= '[]' ;
ObjectValue: value=STRING | Object | Array | EmptyObject | EmptyArray ;
TerminalObject: element=STRING ':' (content = ObjectValue) ;

因此,在生成代码后,我拥有了在java中生成的所有对象。 现在我希望在那些生成的java文件中有更多的方法。

最好的方法是什么?
谢谢:))

1 个答案:

答案 0 :(得分:0)

好吧,没有简单的方法可以自定义这些类。你基本上可以做两件事:

  1. 创建自己的EMF(Ecore)模型,并以重用Ecore模型的方式创建语法。这样,您就可以定义新操作,并手动创建它们的实现。
  2. 您还可以为填充内容的Ecore模型生成器设置后处理器。有关详细信息,请参阅http://christiandietrich.wordpress.com/2011/07/22/customizing-xtext-metamodel-inference-using-xtend2/ - 但要有所不同,因为模型推断无法直接输出自定义代码;有一些基于EMF genmodel-annotation的方法来创建生成代码的主体(有关详细信息,请参阅http://jevopisdeveloperblog.blogspot.hu/2011/03/implement-tostring-with-xtexts.html的最后部分)。
  3. 总而言之,自定义生成的EMF模型非常困难,我不建议这样做。虽然似乎没有必要引入新的辅助类,但从技术上来说,这样做要容易得多。