【问题标题】:How to implement the generation gap pattern for xText?如何实现 xText 的代沟模式?
【发布时间】:2013-05-09 21:25:08
【问题描述】:

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

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

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

总之:

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

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

【问题讨论】:

    标签: xtext xtend


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我什至不知道从哪里开始。我是 xtext 和 xtend 的新手,直到现在一切都是开箱即用的。如果我切换到 xtend-Generator,如何向它添加片段,例如 `fragment = validation.JavaValidatorFragment {composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" }`?
    • 您的意思是工作流 (MWE) 片段!好吧,你为什么需要它?这仅控制工作流生成器阶段。您的软件是作为一组这样的片段实现的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2021-05-08
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多