以编程方式指定派生属性的实现

Alj*_*yer 1 eclipse-emf eclipse-emf-ecore emf ecore

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

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

编辑>

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

Vin*_*ega 5

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

(请注意,我从未经历过这种机制。我知道它存在,但是我从未使用过。)

编辑>

似乎该问题与派生属性的动态代码执行无关,而与代码注入有关(我误解了“是否有办法采用String并将此String指定为实现派生特征的实现?”) 。

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

下面是方法EAttributederived属性。本EAttribute应具有以下属性设置为true{derived volatile}(你也可以添加transient)。如果您只想要一个吸气剂而没有一个setter EAttribute,也可以将属性设置changeablefalse

一旦EAttribute“配置”正确,您就必须添加一个新EAnnotation的源并将http://www.eclipse.org/emf/2002/GenModelkey设置为getvalue并将条目设置为并将其设置为将要注入的代码(请参见下图)。

在此处输入图片说明

而且voilà,您的代码将使用value在getter中注入的值生成。

您可以添加在同一进程EOperation使用body代替get