0

大家好,我对 acceleo 很陌生

在我的项目中,我有一个调用不同加速模板的 java 驱动程序类。一些模板具有没有任何 EObject 类型的参数。我正在为模板调用生成的 java 模块的 initialize() 和 doGenerate() 函数。面临的问题是:

  1. initialize() 期望第一个参数是 Ecore 对象,其余参数是 List。然而,正如我提到的,一些模板没有任何 EObject 参数。如何从 Java 应用程序调用此类模板?

  2. 为了解决上述问题,我调整了我的驱动程序和模板以将虚拟 EObject 作为第一个参数。然后它成功调用模板,但不会生成任何输出。如果我从另一个驱动程序模板调用它们,模板会生成输出。但是我不想用 MTL 编写我的驱动程序,因为它需要对数据模型进行复杂的分析。

请建议我如何在我的案件中取得进展。

谢谢&问候
Dhanunjaya M.

4

1 回答 1

1

默认情况下,我们通过我们生成的 Java 类与“主”模板的模块和 Acceleo“外观”类一起公开的 API 总是假设有一个 EObject 作为要调用的模板的第一个参数。这样做是为了方便大多数用例的使用(我们希望这个用例占总数的 90%)。

对于其他用例,您将不得不使用这些外观背后的 API。也就是说,当您根本没有 EObject 时,您可以创建另一个不将 EObject 作为参数的“初始化”方法。然后,您还需要重写“generate(Monitor)”方法,使其不使用 AcceleoService.doGenerate... 或 AcceleoService 的任何其他方法:这就是我所说的“外观”类。

您需要调用一个模仿 AcceleoService.doGenerate 所做的方法,而不依赖于 EObject 来查找需要调用的模板。如果您手头没有 Acceleo 的 SDK 或源代码,您可以通过 github 查看代码:AcceleoService#doGenerate

于 2012-04-11T08:23:51.513 回答