2

我想derived在 ecore 模型中使用属性和引用,但到目前为止,我还没有找到任何关于如何为计算派生属性/引用值的方法设置代码的文档。

据我了解,基本工作流程是将属性/引用标记为derived,生成模型代码,然后手动添加实现。但是,我使用通过 Ecore API 动态生成的模型。有没有办法获取一个字符串并将这个字符串指定为计算派生特征的实现,而无需手动编辑生成的文件?

编辑>

澄清一下:我正在寻找一种直接更改生成的 Java 文件的方法,方法是为派生的 EStructuralFeatures 的 getter 指定方法体(作为字符串)。

4

1 回答 1

6

EMF 提供了一种处理EOperationderived EAttribute使用“调用委托”的专用实现的方法。此功能允许您以字符串格式将一些实现直接放入ecore元模型中(只要 EMF 可以“处理”所使用的语言,即存在调用委托)。

据我所知,OCL 得到很好的支持:https ://wiki.eclipse.org/OCL/OCLinEcore#Invocation_Delegate

调用委托的注册可以通过插件注册或手动执行(用于独立使用),并且该机制与 EMF 反射层(动态 EMF)一起使用:https ://wiki.eclipse.org/EMF/New_and_Noteworthy/Helios #Registering_an_Invocation_Delegate

(请注意,我从未体验过这种机制。我知道它存在,但我从未玩过它。)

编辑>

似乎这个问题与派生属性的动态代码执行无关,而是与代码注入有关(我误解了“有没有办法获取一个字符串并将这个字符串指定为派生特征计算的实现?”) .

EMF 提供了一种将放置在ecore元模型上的代码直接注入到生成的代码中的方法。

这是EAttributederived财产的方式。EAttribute应该将以下属性设置为:(true{derived volatile}也可以添加transient)。如果您只想要一个 getter 而没有 setter EAttribute,您也可以将属性设置changeablefalse.

一旦你EAttribute的“配置好”,你必须添加一个新EAnnotation的源设置为http://www.eclipse.org/emf/2002/GenModel和一个key设置为getvalue设置为你将被注入的代码的条目(见下图)。

在此处输入图像描述

,您的代码将使用value您的 getter 中注入的值生成。

您可以添加相同的过程来EOperation使用body而不是get.

于 2016-06-16T09:15:36.540 回答