Alj*_*yer 1 eclipse-emf eclipse-emf-ecore emf ecore
我想derived在ecore模型中使用属性和引用,但是到目前为止,我还没有找到任何有关如何为计算派生属性/引用的值的方法设置代码的文档。
据我了解,基本的工作流程是将一个属性/引用标记为derived,生成模型代码,然后手动添加实现。但是,我使用通过Ecore API动态生成的模型。有没有办法采用String并将此String指定为用于计算派生功能的实现,而无需手动编辑生成的文件?
编辑>
澄清一下:我正在寻找一种方法,通过为派生的EStructuralFeatures的getter指定方法主体(作为字符串)来直接更改生成的Java文件。
EMF提供了一种处理专用实现EOperation并derived 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
(请注意,我从未经历过这种机制。我知道它存在,但是我从未使用过。)
编辑>
似乎该问题与派生属性的动态代码执行无关,而与代码注入有关(我误解了“是否有办法采用String并将此String指定为实现派生特征的实现?”) 。
EMF提供了一种将放置在ecore元模型上的代码直接注入到生成的代码中的方法。
下面是方法EAttribute与derived属性。本EAttribute应具有以下属性设置为true:{derived volatile}(你也可以添加transient)。如果您只想要一个吸气剂而没有一个setter EAttribute,也可以将属性设置changeable为false。
一旦EAttribute“配置”正确,您就必须添加一个新EAnnotation的源并将http://www.eclipse.org/emf/2002/GenModel其key设置为get,value并将条目设置为并将其设置为将要注入的代码(请参见下图)。
而且voilà,您的代码将使用value在getter中注入的值生成。
您可以添加在同一进程EOperation使用body代替get。
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |