如何生成私人/受保护的方法&使用EMF的变量?

时间:2018-02-06 10:34:29

标签: java eclipse emf

我希望使用基于UML模型的genmodel生成Java代码。

我正在研究Eclipse Oxygen,来自Papyrus的UML模型(使用Ecore配置文件),以便使用GenModel向导生成Ecore,最终生成模型Java代码(标准Eclipse插件)。

我已将生成的源与手写源分开,因此应避免使用@Generated NOT +手动修改解决方案:)

我是否更改了属性的UML可见性参数,生成的模型代码中没有任何变化(一切都是公开的)。

我没有在我读过的文档中找到有关这种可能性的信息(EMF帮助,Vogella博客,opCoach博客,Google ......)

我的问题是这些:

  • 是否可以通过GenModel处理来考虑UML对象的可见性?
  • 是否可以设置UML Ecore配置文件以强制生成代码的可见性? (到目前为止,我已经尝试过没有成功)

2 个答案:

答案 0 :(得分:2)

据我所知,不可能设置getter / setter的访问修饰符。我认为这里的主要问题是所有接口方法都必须是公共的,因此您无法在生成的接口中获得任何其他可见性。而且您通常不希望直接向我们提供实施课程。

您可以尝试从界面中删除getter / setter。显然,有suppressedGetVisibilitysuppressedSetVisibility genmodel注释来抑制界面中的getter和setter生成(suppressedIsSetVisibilitysuppressedUnSetVisibility也存在)。它们只会出现在实现类中。

另一种选择可能是更改元模型并组合模型元素,以便它们实现两种不同的接口:一个描述公共API的公共接口和一个内部API的内部接口。然后只将公共接口公开给用户。

这些选项肯定与定义UML中的每个可见性不同,但可能适用于您的用例。

答案 1 :(得分:1)

感谢@Kapep,解决方案是查看应用于相应属性的 EReference (或 EAttribute ,如果需要)构造型的visibility属性UML模型。在那里进行的更改不会影响实现的生成,但会更改生成的界面中显示的内容:

  • 未指定(默认):setter&存在getter方法
  • :setter&没有getter方法
  • ReadOnly :只有getter present

然后你可以自由使用人工代码来扩展生成的代码,以便使用/显示你想要的getter和setter的方式!